From 030ea11e77271151a0cc3df32a0ee5fa734c85f8 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms Date: Thu, 16 Oct 2025 16:52:05 +0200 Subject: fix image pool, fixes #5772 --- app/controllers/stock_images.php | 1 + resources/assets/javascripts/bootstrap/vue.js | 25 +++++++++++++++------- .../vue/components/stock-images/ActionsWidget.vue | 23 ++++++++------------ 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/app/controllers/stock_images.php b/app/controllers/stock_images.php index 7310d14..55dc25e 100644 --- a/app/controllers/stock_images.php +++ b/app/controllers/stock_images.php @@ -24,6 +24,7 @@ class StockImagesController extends AuthenticatedController { $this->render_vue_app( Studip\VueApp::create('StockImages') + ->withVuexStore('stock-images', 'StockImages') ->withPlugin('StockImagesPlugin', 'stock-images') ); } diff --git a/resources/assets/javascripts/bootstrap/vue.js b/resources/assets/javascripts/bootstrap/vue.js index a1a4a90..2cd01b7 100644 --- a/resources/assets/javascripts/bootstrap/vue.js +++ b/resources/assets/javascripts/bootstrap/vue.js @@ -62,12 +62,13 @@ function parseVueAppConfig(node) { async function loadAppDependencies(config, store) { const promises = [ import(`@/vue/apps/${config.appPath}.vue`), - ...initializePlugins(config), + initializePlugins(config), ...initializeVuexStores(config, store), ...initializePiniaStores(config), ]; const [{ default: appComponent }, plugins = []] = await Promise.all(promises); + console.log('Plugins', plugins); return [appComponent, plugins]; } @@ -113,9 +114,14 @@ function initializeVuexStores(config, store) { if (!store.hasModule(index)) { store.registerModule(index, storeConfig); } - Object.entries(config.vuexStoreData[index]).forEach(([type, payload]) => - store.commit(`${index}/${type}`, payload), - ); + if ( + config.vuexStoreData[index] !== undefined + && !Array.isArray(config.vuexStoreData[index]) + ) { + Object.entries(config.vuexStoreData[index]).forEach(([type, payload]) => + store.commit(`${index}/${type}`, payload), + ); + } }), ); } @@ -139,10 +145,13 @@ function applyPiniaStoreData(piniaStore, data) { }); } -function initializePlugins(config) { - return Object.entries(config.plugins).map(([plugin, filename]) => - import(`@/vue/plugins/${filename}.js`).then((temp) => temp[plugin]), - ); +async function initializePlugins(config) { + const plugins = []; + Object.entries(config.plugins).map(async ([plugin, filename]) => { + const temp = await import(`@/vue/plugins/${filename}.js`); + plugins.push(temp[plugin]); + }); + return plugins; } function addDialogButtonRemoval(component) { diff --git a/resources/vue/components/stock-images/ActionsWidget.vue b/resources/vue/components/stock-images/ActionsWidget.vue index 4553249..17d173c 100644 --- a/resources/vue/components/stock-images/ActionsWidget.vue +++ b/resources/vue/components/stock-images/ActionsWidget.vue @@ -1,14 +1,18 @@