From c638ff825e771d35b6eb0e755663a11788f06cab Mon Sep 17 00:00:00 2001 From: Vitalii Kulyk Date: Tue, 7 Jan 2025 11:14:12 +0200 Subject: [PATCH] Add loading state to InlineList bulkActions --- .../foreign-inline-list/custom/InlineList.vue | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/adminforth/plugins/foreign-inline-list/custom/InlineList.vue b/adminforth/plugins/foreign-inline-list/custom/InlineList.vue index c523fe91c..5fbf455c2 100644 --- a/adminforth/plugins/foreign-inline-list/custom/InlineList.vue +++ b/adminforth/plugins/foreign-inline-list/custom/InlineList.vue @@ -45,9 +45,27 @@ }" > + class="w-5 h-5 text-gray-500 transition duration-75 dark:text-gray-400 group-hover:text-gray-900 dark:group-hover:text-white"> + +
+ + Loading... +
{{ `${action.label} (${checkboxes.length})` }} @@ -179,8 +197,20 @@ watch([filters], async () => { await getList(); }, {deep: true}); +const bulkActionLoadingStates = ref({}); async function startBulkAction(actionId) { + const action = listResource.value.options.bulkActions.find(a => a.id === actionId); + if (action.confirm) { + const confirmed = await adminforth.confirm({ + message: action.confirm, + }); + if (!confirmed) { + return; + } + } + bulkActionLoadingStates.value[actionId] = true; + const data = await callAdminForthApi({ path: `/plugin/${props.meta.pluginInstanceId}/start_bulk_action`, method: 'POST', @@ -190,9 +220,18 @@ async function startBulkAction(actionId) { recordIds: checkboxes.value } }); + bulkActionLoadingStates.value[actionId] = false; + if (data?.ok) { checkboxes.value = []; await getList(); + + if (data.successMessage) { + adminforth.alert({ + message: data.successMessage, + variant: 'success' + }); + } } if (data?.error) { showErrorTost(data.error);