Async load of extensions info

21cdfa1dfadff01c78e9424a65cff91d49f29694

Cohee <18619528+Cohee1207@users.noreply.github.com>

1 files changed, +27 -23Showing whitespace changes
public/scripts/extensions.js+27 -23
@@ -605,35 +605,41 @@ function getModuleInformation() {
605605async function showExtensionsDetails() {
606606 let popupPromise;
607607 try {
608- showLoader();
608+ const htmlDefault = $('<h3>Built-in Extensions:</h3>');
609609 letconst htmlDefaulthtmlExternal = $('<h3>Built-inInstalled Extensions:</h3>').addClass('opacity50p');
610- let htmlExternal = '<h3>Installed Extensions:</h3>';
610+ const htmlLoading = $(`<h3 class="flex-container alignItemsCenter justifyCenter marginTop10 marginBot5">
611-
611+ <i class="fa-solid fa-spinner fa-spin"></i>
612- const extensions = Object.entries(manifests).sort((a, b) => a[1].loading_order - b[1].loading_order);
612+ <span>Loading third-party extensions... Please wait...</span>
613+ </h3>`);
614+
615+ /** @type {Promise<any>[]} */
613616 const promises = [];
617+ const extensions = Object.entries(manifests).sort((a, b) => a[1].loading_order - b[1].loading_order);
614618
615619 for (const extension of extensions) {
616620 promises.push(getExtensionData(extension));
617621 }
618622
619- const settledPromises = await Promise.allSettled(promises);
623+ promises.forEach(promise => {
624+ promise.then(value => {
625+ const { isExternal, extensionHtml } = value;
626+ const container = isExternal ? htmlExternal : htmlDefault;
627+ container.append(extensionHtml);
628+ });
629+ });
620630
621631 settledPromisesPromise.forEachallSettled(promisepromises).then(() => {
622- if (promise.status === 'fulfilled') {
632+ htmlLoading.remove();
623- const { isExternal, extensionHtml } = promise.value;
633+ htmlExternal.removeClass('opacity50p');
624- if (isExternal) {
625- htmlExternal += extensionHtml;
626- } else {
627- htmlDefault += extensionHtml;
628- }
629- }
630634 });
631635
632636 const html = `$('<div></div>')
633- ${getModuleInformation()}
637+ .addClass('extensions_info')
634- ${htmlDefault}
638+ .append(getModuleInformation())
635- ${htmlExternal}
639+ .append(htmlDefault)
636- `;
640+ .append(htmlLoading)
641+ .append(htmlExternal);
642+
637643 /** @type {import('./popup.js').CustomPopupButton} */
638644 const updateAllButton = {
639645 text: 'Update all',
@@ -651,13 +657,11 @@ async function showExtensionsDetails() {
651657 await oldPopup.complete(POPUP_RESULT.CANCELLED);
652658 }
653659
654660 const popup = new Popup(`<div class="extensions_info">${html}</div>`, POPUP_TYPE.TEXT, '', { okButton: 'Close', wide: true, large: true, customButtons: [updateAllButton], allowVerticalScrolling: true });
655661 popupPromise = popup.show();
656662 } catch (error) {
657663 toastr.error('Error loading extensions. See browser console for details.');
658664 console.error(error);
659- } finally {
660- hideLoader();
661665 }
662666 if (popupPromise) {
663667 await popupPromise;