From 71ae35be266de9354755d2df338e306e4f27bdc8 Mon Sep 17 00:00:00 2001 From: alexm Date: Wed, 16 Apr 2025 09:18:53 +0200 Subject: [PATCH 1/8] fix(ItemTags): wait data refactor: components use real loading --- src/components/CrudModel.vue | 10 +++++----- src/components/common/VnSelect.vue | 4 +++- src/pages/Item/Card/ItemTags.vue | 2 +- src/pages/Item/composables/cloneItem.js | 13 ++++--------- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/components/CrudModel.vue b/src/components/CrudModel.vue index 6303f48ae..4bd5935be 100644 --- a/src/components/CrudModel.vue +++ b/src/components/CrudModel.vue @@ -83,7 +83,7 @@ const isLoading = ref(false); const hasChanges = ref(false); const originalData = ref(); const vnPaginateRef = ref(); -const formData = ref([]); +const formData = ref(); const saveButtonRef = ref(null); const watchChanges = ref(); const formUrl = computed(() => $props.url); @@ -298,6 +298,10 @@ watch(formUrl, async () => { }); - diff --git a/src/components/common/VnSelect.vue b/src/components/common/VnSelect.vue index 32a8db16f..5467cb085 100644 --- a/src/components/common/VnSelect.vue +++ b/src/components/common/VnSelect.vue @@ -183,6 +183,7 @@ const arrayData = useArrayData(arrayDataKey, { searchUrl: false, mapKey: $attrs['map-key'], }); +const arrayDataIsLoading = computed(() => arrayData.isLoading); function findKeyInOptions() { if (!$props.options) return; @@ -366,7 +367,8 @@ function getCaption(opt) { virtual-scroll-slice-size="options.length" hide-bottom-space :input-debounce="useURL ? '300' : '0'" - :loading="isLoading" + :loading="isLoading || arrayDataIsLoading" + :disable="isLoading || arrayDataIsLoading" @virtual-scroll="onScroll" @keydown="handleKeyDown" :data-cy="$attrs.dataCy ?? $attrs.label + '_select'" diff --git a/src/pages/Item/Card/ItemTags.vue b/src/pages/Item/Card/ItemTags.vue index ab26b9cae..87d42e25b 100644 --- a/src/pages/Item/Card/ItemTags.vue +++ b/src/pages/Item/Card/ItemTags.vue @@ -89,7 +89,6 @@ const insertTag = (rows) => { :default-remove="false" :user-filter="{ fields: ['id', 'itemFk', 'tagFk', 'value', 'priority'], - where: { itemFk: route.params.id }, include: { relation: 'tag', scope: { @@ -97,6 +96,7 @@ const insertTag = (rows) => { }, }, }" + :filter="{ where: { itemFk: route.params.id } }" order="priority" auto-load @on-fetch="onItemTagsFetched" diff --git a/src/pages/Item/composables/cloneItem.js b/src/pages/Item/composables/cloneItem.js index 2421c0808..a1cc5a568 100644 --- a/src/pages/Item/composables/cloneItem.js +++ b/src/pages/Item/composables/cloneItem.js @@ -11,12 +11,8 @@ export function cloneItem() { const router = useRouter(); const cloneItem = async (entityId) => { const { id } = entityId; - try { - const { data } = await axios.post(`Items/${id ?? entityId}/clone`); - router.push({ name: 'ItemTags', params: { id: data.id } }); - } catch (err) { - console.error('Error cloning item'); - } + const { data } = await axios.post(`Items/${id ?? entityId}/clone`); + router.push({ name: 'ItemTags', params: { id: data.id } }); }; const openCloneDialog = async (entityId) => { @@ -26,11 +22,10 @@ export function cloneItem() { componentProps: { title: t('item.descriptor.clone.title'), message: t('item.descriptor.clone.subTitle'), + promise: () => cloneItem(entityId), }, }) - .onOk(async () => { - await cloneItem(entityId); - }); + .onOk(() => {}); }; return { openCloneDialog }; } From 650b205a042fbfb972c59e88fd6382582070fde4 Mon Sep 17 00:00:00 2001 From: alexm Date: Wed, 16 Apr 2025 09:52:30 +0200 Subject: [PATCH 2/8] fix(CrudModel, VnSelect): improve loading state handling and condition checks --- src/components/CrudModel.vue | 2 +- src/components/common/VnSelect.vue | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/components/CrudModel.vue b/src/components/CrudModel.vue index 4bd5935be..e0182a6b5 100644 --- a/src/components/CrudModel.vue +++ b/src/components/CrudModel.vue @@ -299,7 +299,7 @@ watch(formUrl, async () => {