Merge pull request 'fix: remove unused props and simplify component structure in multiple descriptor proxies' (!1742) from hotFix_descriptor_getData into master
gitea/salix-front/pipeline/head This commit looks good Details

Reviewed-on: #1742
Reviewed-by: Javier Segarra <jsegarra@verdnatura.es>
This commit is contained in:
Alex Moreno 2025-04-24 10:47:11 +00:00
commit 8ee1d96bda
7 changed files with 35 additions and 51 deletions

View File

@ -1,5 +1,5 @@
<script setup>
import { ref, onMounted, onUnmounted, watch, computed } from 'vue';
import { ref, onMounted, onUnmounted, computed } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute, useRouter } from 'vue-router';
import axios from 'axios';

View File

@ -1,8 +1,6 @@
<script setup>
import { onBeforeMount, watch, computed, ref } from 'vue';
import { watch, ref, onMounted } from 'vue';
import { useArrayData } from 'composables/useArrayData';
import { useState } from 'src/composables/useState';
import { useRoute } from 'vue-router';
import VnDescriptor from './VnDescriptor.vue';
const $props = defineProps({
@ -20,39 +18,50 @@ const $props = defineProps({
},
});
const state = useState();
const route = useRoute();
let arrayData;
let store;
let entity;
const entity = ref();
const isLoading = ref(false);
const isSameDataKey = computed(() => $props.dataKey === route.meta.moduleName);
defineExpose({ getData });
const containerRef = ref(null);
onBeforeMount(async () => {
arrayData = useArrayData($props.dataKey, {
onMounted(async () => {
let isPopup;
let el = containerRef.value.$el;
while (el) {
if (el.classList?.contains('q-menu')) {
isPopup = true;
break;
}
el = el.parentElement;
}
arrayData = useArrayData($props.dataKey + (isPopup ? 'Proxy' : ''), {
url: $props.url,
userFilter: $props.filter,
skip: 0,
oneRecord: true,
});
store = arrayData.store;
entity = computed(() => {
const data = store.data ?? {};
if (data) emit('onFetch', data);
return data;
});
// It enables to load data only once if the module is the same as the dataKey
if (!isSameDataKey.value || !route.params.id) await getData();
watch(
() => [$props.url, $props.filter],
async () => {
if (!isSameDataKey.value) await getData();
await getData();
},
{ immediate: true },
);
watch(
() => arrayData.store.data,
(newValue) => {
entity.value = newValue;
},
);
});
defineExpose({ getData });
const emit = defineEmits(['onFetch']);
async function getData() {
store.url = $props.url;
store.filter = $props.filter ?? {};
@ -60,18 +69,15 @@ async function getData() {
try {
await arrayData.fetch({ append: false, updateRouter: false });
const { data } = store;
state.set($props.dataKey, data);
emit('onFetch', data);
} finally {
isLoading.value = false;
}
}
const emit = defineEmits(['onFetch']);
</script>
<template>
<VnDescriptor v-model="entity" v-bind="$attrs" :module="dataKey">
<VnDescriptor v-model="entity" v-bind="$attrs" :module="dataKey" ref="containerRef">
<template v-for="(_, slotName) in $slots" #[slotName]="slotData" :key="slotName">
<slot :name="slotName" v-bind="slotData ?? {}" :key="slotName" />
</template>

View File

@ -4,11 +4,6 @@ import AccountSummary from './AccountSummary.vue';
</script>
<template>
<QPopupProxy style="max-width: 10px">
<AccountDescriptor
v-if="$attrs.id"
v-bind="$attrs"
:summary="AccountSummary"
:proxy-render="true"
/>
<AccountDescriptor v-if="$attrs.id" v-bind="$attrs" :summary="AccountSummary" />
</QPopupProxy>
</template>

View File

@ -1,5 +1,5 @@
<script setup>
import { ref, computed, onMounted } from 'vue';
import { computed } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import { toDateHourMinSec, toPercentage } from 'src/filters';
@ -9,7 +9,6 @@ import DepartmentDescriptorProxy from 'src/pages/Worker/Department/Card/Departme
import EntityDescriptor from 'components/ui/EntityDescriptor.vue';
import VnLv from 'src/components/ui/VnLv.vue';
import VnUserLink from 'src/components/ui/VnUserLink.vue';
import { getUrl } from 'src/composables/getUrl';
import ZoneDescriptorProxy from 'src/pages/Zone/Card/ZoneDescriptorProxy.vue';
import filter from './ClaimFilter.js';
@ -23,7 +22,6 @@ const $props = defineProps({
const route = useRoute();
const { t } = useI18n();
const salixUrl = ref();
const entityId = computed(() => {
return $props.id || route.params.id;
});
@ -37,10 +35,6 @@ const STATE_COLOR = {
function stateColor(code) {
return STATE_COLOR[code];
}
onMounted(async () => {
salixUrl.value = await getUrl('');
});
</script>
<template>
@ -133,7 +127,7 @@ onMounted(async () => {
size="md"
icon="assignment"
color="primary"
:href="salixUrl + 'ticket/' + entity.ticketFk + '/sale-tracking'"
:to="{ name: 'TicketSaleTracking', params: { id: entity.ticketFk } }"
>
<QTooltip>{{ t('claim.saleTracking') }}</QTooltip>
</QBtn>
@ -141,7 +135,7 @@ onMounted(async () => {
size="md"
icon="visibility"
color="primary"
:href="salixUrl + 'ticket/' + entity.ticketFk + '/tracking/index'"
:to="{ name: 'TicketTracking', params: { id: entity.ticketFk } }"
>
<QTooltip>{{ t('claim.ticketTracking') }}</QTooltip>
</QBtn>

View File

@ -4,11 +4,6 @@ import ClaimSummary from './ClaimSummary.vue';
</script>
<template>
<QPopupProxy style="max-width: 10px">
<ClaimDescriptor
v-if="$attrs.id"
v-bind="$attrs.id"
:summary="ClaimSummary"
:proxy-render="true"
/>
<ClaimDescriptor v-if="$attrs.id" v-bind="$attrs" :summary="ClaimSummary" />
</QPopupProxy>
</template>

View File

@ -30,7 +30,6 @@ const $props = defineProps({
:dated="dated"
:sale-fk="saleFk"
:warehouse-fk="warehouseFk"
:proxy-render="true"
/>
</QPopupProxy>
</template>

View File

@ -4,11 +4,6 @@ import ParkingSummary from './ParkingSummary.vue';
</script>
<template>
<QPopupProxy style="max-width: 10px">
<ParkingDescriptor
v-if="$attrs.id"
v-bind="$attrs.id"
:summary="ParkingSummary"
:proxy-render="true"
/>
<ParkingDescriptor v-if="$attrs.id" v-bind="$attrs" :summary="ParkingSummary" />
</QPopupProxy>
</template>