Add button to run all rebuildData workers
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / js / WoltLabSuite / Core / Acp / Ui / Maintenance / RebuildData.js
1 define(["require", "exports", "tslib", "../Worker", "../../../Language"], function (require, exports, tslib_1, Worker_1, Language) {
2 "use strict";
3 Object.defineProperty(exports, "__esModule", { value: true });
4 exports.runAllWorkers = exports.register = void 0;
5 Worker_1 = tslib_1.__importDefault(Worker_1);
6 Language = tslib_1.__importStar(Language);
7 const workers = new Map();
8 function register(button) {
9 if (!button.dataset.className) {
10 throw new Error(`Missing 'data-class-name' attribute.`);
11 }
12 workers.set(button, parseInt(button.dataset.nicevalue, 10));
13 button.addEventListener("click", function (event) {
14 event.preventDefault();
15 void runWorker(button);
16 });
17 }
18 exports.register = register;
19 async function runAllWorkers() {
20 const sorted = Array.from(workers)
21 .sort(([, a], [, b]) => {
22 return a - b;
23 })
24 .map(([el]) => el);
25 let i = 1;
26 for (const worker of sorted) {
27 await runWorker(worker, `${worker.textContent} (${i++} / ${sorted.length})`);
28 }
29 }
30 exports.runAllWorkers = runAllWorkers;
31 async function runWorker(button, dialogTitle = button.textContent) {
32 return new Promise((resolve, reject) => {
33 new Worker_1.default({
34 dialogId: "cache",
35 dialogTitle,
36 className: button.dataset.className,
37 callbackAbort() {
38 reject();
39 },
40 callbackSuccess() {
41 let span = button.nextElementSibling;
42 if (span && span.nodeName === "SPAN") {
43 span.remove();
44 }
45 span = document.createElement("span");
46 span.innerHTML = `<span class="icon icon16 fa-check green"></span> ${Language.get("wcf.acp.worker.success")}`;
47 button.parentNode.insertBefore(span, button.nextElementSibling);
48 resolve();
49 },
50 });
51 });
52 }
53 });