From fe5fdf723b163a2fb12b562016c2d5557d26a1d0 Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Thu, 17 Apr 2025 22:27:53 +0200 Subject: [PATCH] refactor: refs #8217 clean up code and improve readability in various components and tests --- src/components/CrudModel.vue | 1 - src/components/FormModel.vue | 58 +++++++++++++------- src/components/__tests__/CrudModel.spec.js | 3 +- src/components/__tests__/FormModel.spec.js | 8 ++- src/components/common/VnLocation.vue | 4 +- src/filters/__tests__/getDifferences.spec.js | 41 ++++++++++++++ src/filters/getDifferences.js | 25 ++++----- 7 files changed, 102 insertions(+), 38 deletions(-) create mode 100644 src/filters/__tests__/getDifferences.spec.js diff --git a/src/components/CrudModel.vue b/src/components/CrudModel.vue index ae7bea029..96b550205 100644 --- a/src/components/CrudModel.vue +++ b/src/components/CrudModel.vue @@ -98,7 +98,6 @@ defineExpose({ reset, hasChanges, saveChanges, - getChanges, formData, originalData, diff --git a/src/components/FormModel.vue b/src/components/FormModel.vue index f32b3da4c..b8f783a84 100644 --- a/src/components/FormModel.vue +++ b/src/components/FormModel.vue @@ -113,7 +113,7 @@ const isLoading = ref(false); // Si elegimos observar los cambios del form significa que inicialmente las actions estaran deshabilitadas const isResetting = ref(false); const hasChanges = ref(!$props.observeFormChanges); -const originalData = computed(() => state.get(modelValue) ?? {}); +const originalData = computed(() => state.get(modelValue)); const formData = ref(); const defaultButtons = computed(() => ({ save: { @@ -223,30 +223,49 @@ async function fetch() { } } +async function handleResponse(response, showCreatedNotification = false) { + if (showCreatedNotification) { + notify('globals.dataCreated', 'positive'); + } + updateAndEmit('onDataSaved', { + val: formData.value, + res: response?.data, + old: originalData.value, + }); + if ($props.reload) await arrayData.fetch({}); + hasChanges.value = false; +} + +async function create() { + formData.value = trimData(formData.value); + const url = $props.urlCreate; + const response = await Promise.resolve( + $props.saveFn ? $props.saveFn(formData.value) : axios.post(url, formData.value), + ); + await handleResponse(response, true); +} + +async function update() { + formData.value = trimData(formData.value); + const body = $props.mapper(originalData.value, formData.value); + const url = $props.urlUpdate || $props.url || arrayData.store.url; + const response = await Promise.resolve( + $props.saveFn ? $props.saveFn(body) : axios.patch(url, body), + ); + await handleResponse(response); +} + async function save() { if ($props.observeFormChanges && !hasChanges.value) return notify('globals.noChanges', 'negative'); isLoading.value = true; try { - formData.value = trimData(formData.value); - const body = $props.mapper(originalData.value, formData.value); - const method = $props.urlCreate ? 'post' : 'patch'; - const url = - $props.urlCreate || $props.urlUpdate || $props.url || arrayData.store.url; - const response = await Promise.resolve( - $props.saveFn ? $props.saveFn(body) : axios[method](url, body), - ); - - if ($props.urlCreate) notify('globals.dataCreated', 'positive'); - - updateAndEmit('onDataSaved', { - val: formData.value, - res: response?.data, - old: originalData.value, - }); - if ($props.reload) await arrayData.fetch({}); - hasChanges.value = false; + if ($props.urlCreate != null) { + await create(); + } else { + await update(); + } } finally { isLoading.value = false; } @@ -326,7 +345,6 @@ defineExpose({