From 3783cdeed4313fe907d48842d90841f89c8348bd Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 26 Mar 2025 12:03:46 +0100 Subject: [PATCH 01/16] fix: fixed buttons disabled when there are no changes --- src/pages/Customer/components/CustomerAddressEdit.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Customer/components/CustomerAddressEdit.vue b/src/pages/Customer/components/CustomerAddressEdit.vue index f852c160ac2..88abcaa7704 100644 --- a/src/pages/Customer/components/CustomerAddressEdit.vue +++ b/src/pages/Customer/components/CustomerAddressEdit.vue @@ -180,7 +180,7 @@ function handleLocation(data, location) { Date: Wed, 26 Mar 2025 12:32:22 +0100 Subject: [PATCH 02/16] refactor: manage every nullable option --- .../Customer/components/CustomerAddressEdit.vue | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/pages/Customer/components/CustomerAddressEdit.vue b/src/pages/Customer/components/CustomerAddressEdit.vue index 88abcaa7704..1f7b4c1e819 100644 --- a/src/pages/Customer/components/CustomerAddressEdit.vue +++ b/src/pages/Customer/components/CustomerAddressEdit.vue @@ -93,10 +93,20 @@ const updateAddressTicket = async () => { }; const updateObservations = async (payload) => { + if (isPayloadEmpty(payload)) return; await axios.post('AddressObservations/crud', payload); notes.value = []; deletes.value = []; }; + +function isPayloadEmpty(payload) { + return ['creates', 'deletes', 'updates'].every( + (prop) => + !payload[prop] || + payload[prop].length === 0 || + payload[prop].every((item) => item === undefined || item === null), + ); +} async function updateAll({ data, payload }) { await updateObservations(payload); await updateAddress(data); @@ -180,7 +190,7 @@ function handleLocation(data, location) { Date: Wed, 26 Mar 2025 13:51:03 +0100 Subject: [PATCH 03/16] refactor: clean payload --- .../components/CustomerAddressEdit.vue | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/pages/Customer/components/CustomerAddressEdit.vue b/src/pages/Customer/components/CustomerAddressEdit.vue index 1f7b4c1e819..c89e7e2e91b 100644 --- a/src/pages/Customer/components/CustomerAddressEdit.vue +++ b/src/pages/Customer/components/CustomerAddressEdit.vue @@ -93,20 +93,28 @@ const updateAddressTicket = async () => { }; const updateObservations = async (payload) => { - if (isPayloadEmpty(payload)) return; + cleanPayload(payload); await axios.post('AddressObservations/crud', payload); notes.value = []; deletes.value = []; }; -function isPayloadEmpty(payload) { - return ['creates', 'deletes', 'updates'].every( - (prop) => - !payload[prop] || - payload[prop].length === 0 || - payload[prop].every((item) => item === undefined || item === null), - ); +function cleanPayload(payload) { + ['creates', 'deletes', 'updates'].forEach((prop) => { + if (prop === 'creates' || prop === 'updates') { + payload[prop] = payload[prop].filter( + (item) => item.description !== '' && item.observationTypeFk !== '', + ); + } + if (prop === 'deletes') { + payload[prop] = payload[prop].filter( + (item) => item !== null && item !== undefined, + ); + } + return payload[prop]; + }); } + async function updateAll({ data, payload }) { await updateObservations(payload); await updateAddress(data); From e353f7916af14d781fc5eb23bead0a231bba20e9 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 26 Mar 2025 14:15:01 +0100 Subject: [PATCH 04/16] perf: clean payload --- src/pages/Customer/components/CustomerAddressEdit.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pages/Customer/components/CustomerAddressEdit.vue b/src/pages/Customer/components/CustomerAddressEdit.vue index c89e7e2e91b..31a930341f7 100644 --- a/src/pages/Customer/components/CustomerAddressEdit.vue +++ b/src/pages/Customer/components/CustomerAddressEdit.vue @@ -105,8 +105,7 @@ function cleanPayload(payload) { payload[prop] = payload[prop].filter( (item) => item.description !== '' && item.observationTypeFk !== '', ); - } - if (prop === 'deletes') { + } else { payload[prop] = payload[prop].filter( (item) => item !== null && item !== undefined, ); From 60899ef2d255f6bf9443121de25ece33fdc64316 Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 27 Mar 2025 15:03:11 +0100 Subject: [PATCH 05/16] perf: clean payload --- src/pages/Customer/components/CustomerAddressEdit.vue | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/pages/Customer/components/CustomerAddressEdit.vue b/src/pages/Customer/components/CustomerAddressEdit.vue index 31a930341f7..bc76f59859a 100644 --- a/src/pages/Customer/components/CustomerAddressEdit.vue +++ b/src/pages/Customer/components/CustomerAddressEdit.vue @@ -93,8 +93,7 @@ const updateAddressTicket = async () => { }; const updateObservations = async (payload) => { - cleanPayload(payload); - await axios.post('AddressObservations/crud', payload); + await axios.post('AddressObservations/crud', cleanPayload(payload)); notes.value = []; deletes.value = []; }; @@ -110,8 +109,8 @@ function cleanPayload(payload) { (item) => item !== null && item !== undefined, ); } - return payload[prop]; }); + return payload; } async function updateAll({ data, payload }) { From 36f142800f04b6549b599ebc6633cc1dad5a8165 Mon Sep 17 00:00:00 2001 From: alexm Date: Mon, 31 Mar 2025 09:51:36 +0200 Subject: [PATCH 06/16] refactor: simplify data fetching logic in VnCard.vue --- src/components/common/VnCard.vue | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/components/common/VnCard.vue b/src/components/common/VnCard.vue index 21cdc9df5aa..569fdfe873e 100644 --- a/src/components/common/VnCard.vue +++ b/src/components/common/VnCard.vue @@ -26,11 +26,7 @@ const route = useRoute(); const stateStore = useStateStore(); const router = useRouter(); const entityId = computed(() => props.id || route?.params?.id); -const arrayData = useArrayData(props.dataKey, { - url: props.url, - userFilter: props.filter, - oneRecord: true, -}); +let arrayData = getArrayData(); onBeforeRouteLeave(() => { stateStore.cardDescriptorChangeValue(null); @@ -61,16 +57,31 @@ onBeforeRouteUpdate(async (to, from) => { }); async function fetch(id, append = false) { - const regex = /\/(\d+)/; if (props.idInWhere) arrayData.store.filter.where = { id }; - else if (!regex.test(props.url)) arrayData.store.url = `${props.url}/${id}`; - else arrayData.store.url = props.url.replace(regex, `/${id}`); + else { + arrayData = getArrayData(); + } await arrayData.fetch({ append, updateRouter: false }); emit('onFetch', arrayData.store.data); } function hasRouteParam(params, valueToCheck = ':addressId') { return Object.values(params).includes(valueToCheck); } + +function formatUrl(id) { + const newId = id || entityId.value; + const regex = /\/(\d+)/; + if (!regex.test(props.url)) return `${props.url}/${newId}`; + return props.url.replace(regex, `/${newId}`); +} + +function getArrayData() { + return useArrayData(props.dataKey, { + url: formatUrl(), + userFilter: props.filter, + oneRecord: true, + }); +}