chore(webui): debounce inventory bulk actions (#2533)
Closes #2513 Reviewed-on: #2533 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
parent
304af514e2
commit
2307a40833
@ -436,22 +436,22 @@
|
|||||||
<h5 class="card-header" data-loc="general_bulkActions"></h5>
|
<h5 class="card-header" data-loc="general_bulkActions"></h5>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="mb-2 d-flex flex-wrap gap-2">
|
<div class="mb-2 d-flex flex-wrap gap-2">
|
||||||
<button class="btn btn-primary" onclick="addMissingEquipment(['Suits']);" data-loc="inventory_bulkAddSuits"></button>
|
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['Suits']);" data-loc="inventory_bulkAddSuits"></button>
|
||||||
<button class="btn btn-primary" onclick="addMissingEquipment(['Melee', 'LongGuns', 'Pistols']);" data-loc="inventory_bulkAddWeapons"></button>
|
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['Melee', 'LongGuns', 'Pistols']);" data-loc="inventory_bulkAddWeapons"></button>
|
||||||
<button class="btn btn-primary" onclick="addMissingEquipment(['SpaceSuits']);" data-loc="inventory_bulkAddSpaceSuits"></button>
|
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['SpaceSuits']);" data-loc="inventory_bulkAddSpaceSuits"></button>
|
||||||
<button class="btn btn-primary" onclick="addMissingEquipment(['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkAddSpaceWeapons"></button>
|
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkAddSpaceWeapons"></button>
|
||||||
<button class="btn btn-primary" onclick="addMissingEquipment(['Sentinels']);" data-loc="inventory_bulkAddSentinels"></button>
|
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['Sentinels']);" data-loc="inventory_bulkAddSentinels"></button>
|
||||||
<button class="btn btn-primary" onclick="addMissingEquipment(['SentinelWeapons']);" data-loc="inventory_bulkAddSentinelWeapons"></button>
|
<button class="btn btn-primary" onclick="debounce(addMissingEquipment, ['SentinelWeapons']);" data-loc="inventory_bulkAddSentinelWeapons"></button>
|
||||||
<button class="btn btn-primary" onclick="addMissingEvolutionProgress();" data-loc="inventory_bulkAddEvolutionProgress"></button>
|
<button class="btn btn-primary" onclick="debounce(addMissingEvolutionProgress);" data-loc="inventory_bulkAddEvolutionProgress"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-2 d-flex flex-wrap gap-2">
|
<div class="mb-2 d-flex flex-wrap gap-2">
|
||||||
<button class="btn btn-success" onclick="maxRankAllEquipment(['Suits']);" data-loc="inventory_bulkRankUpSuits"></button>
|
<button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['Suits']);" data-loc="inventory_bulkRankUpSuits"></button>
|
||||||
<button class="btn btn-success" onclick="maxRankAllEquipment(['Melee', 'LongGuns', 'Pistols']);" data-loc="inventory_bulkRankUpWeapons"></button>
|
<button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['Melee', 'LongGuns', 'Pistols']);" data-loc="inventory_bulkRankUpWeapons"></button>
|
||||||
<button class="btn btn-success" onclick="maxRankAllEquipment(['SpaceSuits']);" data-loc="inventory_bulkRankUpSpaceSuits"></button>
|
<button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['SpaceSuits']);" data-loc="inventory_bulkRankUpSpaceSuits"></button>
|
||||||
<button class="btn btn-success" onclick="maxRankAllEquipment(['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkRankUpSpaceWeapons"></button>
|
<button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['SpaceGuns', 'SpaceMelee']);" data-loc="inventory_bulkRankUpSpaceWeapons"></button>
|
||||||
<button class="btn btn-success" onclick="maxRankAllEquipment(['Sentinels']);" data-loc="inventory_bulkRankUpSentinels"></button>
|
<button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['Sentinels']);" data-loc="inventory_bulkRankUpSentinels"></button>
|
||||||
<button class="btn btn-success" onclick="maxRankAllEquipment(['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
|
<button class="btn btn-success" onclick="debounce(maxRankAllEquipment, ['SentinelWeapons']);" data-loc="inventory_bulkRankUpSentinelWeapons"></button>
|
||||||
<button class="btn btn-success" onclick="maxRankAllEvolutions();" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
|
<button class="btn btn-success" onclick="debounce(maxRankAllEvolutions);" data-loc="inventory_bulkRankUpEvolutionProgress"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -872,15 +872,11 @@ function updateInventory() {
|
|||||||
|
|
||||||
const datalistEvolutionProgress = document.querySelectorAll("#datalist-EvolutionProgress option");
|
const datalistEvolutionProgress = document.querySelectorAll("#datalist-EvolutionProgress option");
|
||||||
const formEvolutionProgress = document.querySelector('form[onsubmit*="doAcquireEvolution()"]');
|
const formEvolutionProgress = document.querySelector('form[onsubmit*="doAcquireEvolution()"]');
|
||||||
const giveAllQEvolutionProgress = document.querySelector(
|
|
||||||
'button[onclick*="addMissingEvolutionProgress()"]'
|
|
||||||
);
|
|
||||||
|
|
||||||
if (datalistEvolutionProgress.length === 0) {
|
if (datalistEvolutionProgress.length === 0) {
|
||||||
formEvolutionProgress.classList.add("disabled");
|
formEvolutionProgress.classList.add("disabled");
|
||||||
formEvolutionProgress.querySelector("input").disabled = true;
|
formEvolutionProgress.querySelector("input").disabled = true;
|
||||||
formEvolutionProgress.querySelector("button").disabled = true;
|
formEvolutionProgress.querySelector("button").disabled = true;
|
||||||
giveAllQEvolutionProgress.disabled = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.CrewShipHarnesses?.length) {
|
if (data.CrewShipHarnesses?.length) {
|
||||||
@ -1541,14 +1537,17 @@ $(document).on("input", "input[list]", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function dispatchAddItemsRequestsBatch(requests) {
|
function dispatchAddItemsRequestsBatch(requests) {
|
||||||
revalidateAuthz().then(() => {
|
return new Promise(resolve => {
|
||||||
const req = $.post({
|
revalidateAuthz().then(() => {
|
||||||
url: "/custom/addItems?" + window.authz,
|
const req = $.post({
|
||||||
contentType: "application/json",
|
url: "/custom/addItems?" + window.authz,
|
||||||
data: JSON.stringify(requests)
|
contentType: "application/json",
|
||||||
});
|
data: JSON.stringify(requests)
|
||||||
req.done(() => {
|
});
|
||||||
updateInventory();
|
req.done(() => {
|
||||||
|
updateInventory();
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1569,7 +1568,7 @@ function addMissingEquipment(categories) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
if (requests.length != 0 && window.confirm(loc("code_addItemsConfirm").split("|COUNT|").join(requests.length))) {
|
if (requests.length != 0 && window.confirm(loc("code_addItemsConfirm").split("|COUNT|").join(requests.length))) {
|
||||||
dispatchAddItemsRequestsBatch(requests);
|
return dispatchAddItemsRequestsBatch(requests);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1585,7 +1584,7 @@ function addMissingEvolutionProgress() {
|
|||||||
requests.push({ ItemType: uniqueName, Rank: permanentEvolutionWeapons.has(uniqueName) ? 0 : 1 });
|
requests.push({ ItemType: uniqueName, Rank: permanentEvolutionWeapons.has(uniqueName) ? 0 : 1 });
|
||||||
});
|
});
|
||||||
if (requests.length != 0 && window.confirm(loc("code_addItemsConfirm").split("|COUNT|").join(requests.length))) {
|
if (requests.length != 0 && window.confirm(loc("code_addItemsConfirm").split("|COUNT|").join(requests.length))) {
|
||||||
setEvolutionProgress(requests);
|
return setEvolutionProgress(requests);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1812,14 +1811,17 @@ function maturePet(oid, revert) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function setEvolutionProgress(requests) {
|
function setEvolutionProgress(requests) {
|
||||||
revalidateAuthz().then(() => {
|
return new Promise(resolve => {
|
||||||
const req = $.post({
|
revalidateAuthz().then(() => {
|
||||||
url: "/custom/setEvolutionProgress?" + window.authz,
|
const req = $.post({
|
||||||
contentType: "application/json",
|
url: "/custom/setEvolutionProgress?" + window.authz,
|
||||||
data: JSON.stringify(requests)
|
contentType: "application/json",
|
||||||
});
|
data: JSON.stringify(requests)
|
||||||
req.done(() => {
|
});
|
||||||
updateInventory();
|
req.done(() => {
|
||||||
|
updateInventory();
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -2511,9 +2513,17 @@ function formatDatetime(fmt, date) {
|
|||||||
const calls_in_flight = new Set();
|
const calls_in_flight = new Set();
|
||||||
|
|
||||||
async function debounce(func, ...args) {
|
async function debounce(func, ...args) {
|
||||||
calls_in_flight.add(func);
|
if (!func.name) {
|
||||||
await func(...args);
|
throw new Error(`cannot debounce anonymous functions`);
|
||||||
calls_in_flight.delete(func);
|
}
|
||||||
|
const callid = JSON.stringify({ func: func.name, args });
|
||||||
|
if (!calls_in_flight.has(callid)) {
|
||||||
|
calls_in_flight.add(callid);
|
||||||
|
await func(...args);
|
||||||
|
calls_in_flight.delete(callid);
|
||||||
|
} else {
|
||||||
|
console.log("debouncing", callid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function doMaxPlexus() {
|
async function doMaxPlexus() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user