forked from verdnatura/salix-front
feat: refs #6480 setArrayData
This commit is contained in:
parent
75975b631e
commit
f8da680e98
|
@ -1,26 +1,52 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
|
import { computed, onBeforeMount } from 'vue';
|
||||||
|
import { useRoute, onBeforeRouteUpdate } from 'vue-router';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { useArrayData } from 'src/composables/useArrayData';
|
||||||
import { useStateStore } from 'stores/useStateStore';
|
import { useStateStore } from 'stores/useStateStore';
|
||||||
import useCardSize from 'src/composables/useCardSize';
|
import useCardSize from 'src/composables/useCardSize';
|
||||||
import VnSubToolbar from '../ui/VnSubToolbar.vue';
|
import VnSubToolbar from '../ui/VnSubToolbar.vue';
|
||||||
import LeftMenu from 'components/LeftMenu.vue';
|
|
||||||
import VnSearchbar from 'components/ui/VnSearchbar.vue';
|
import VnSearchbar from 'components/ui/VnSearchbar.vue';
|
||||||
|
import LeftMenu from 'components/LeftMenu.vue';
|
||||||
|
|
||||||
defineProps({
|
const props = defineProps({
|
||||||
|
dataKey: { type: String, default: null },
|
||||||
|
baseUrl: { type: String, default: null },
|
||||||
|
model: { type: String, default: null },
|
||||||
|
filter: { type: Object, default: null },
|
||||||
descriptor: { type: Object, required: true },
|
descriptor: { type: Object, required: true },
|
||||||
searchbarProps: { type: Object, required: true },
|
searchbarDataKey: { type: String, required: true },
|
||||||
|
searchbarUrl: { type: String, required: true },
|
||||||
|
searchbarLabel: { type: String, required: true },
|
||||||
|
searchbarInfo: { type: String, required: true },
|
||||||
});
|
});
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const stateStore = useStateStore();
|
const stateStore = useStateStore();
|
||||||
|
const route = useRoute();
|
||||||
|
const url = computed(() => `${props.baseUrl}/${route.params.id}`);
|
||||||
|
let arrayData;
|
||||||
|
|
||||||
|
if (props.dataKey) {
|
||||||
|
arrayData = useArrayData(props.dataKey, { url, filter: props.filter });
|
||||||
|
|
||||||
|
onBeforeMount(async () => await arrayData.fetch({ append: false }));
|
||||||
|
|
||||||
|
onBeforeRouteUpdate(async (to, from) => {
|
||||||
|
if (!to.params.id !== from.params.id) {
|
||||||
|
arrayData.store.url = url;
|
||||||
|
await arrayData.fetch({ append: false });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<Teleport to="#searchbar" v-if="stateStore.isHeaderMounted()">
|
<Teleport to="#searchbar" v-if="stateStore.isHeaderMounted()">
|
||||||
<VnSearchbar
|
<VnSearchbar
|
||||||
:data-key="searchbarProps.dataKey"
|
:data-key="props.searchbarDataKey"
|
||||||
:url="searchbarProps.url"
|
:url="props.searchbarUrl"
|
||||||
:label="t(searchbarProps.label)"
|
:label="t(`${props.model}.searchbar.${props.searchbarLabel}`)"
|
||||||
:info="t(searchbarProps.info)"
|
:info="t(props.searchbarInfo)"
|
||||||
/>
|
/>
|
||||||
</Teleport>
|
</Teleport>
|
||||||
<QDrawer v-model="stateStore.leftDrawer" show-if-above :width="256">
|
<QDrawer v-model="stateStore.leftDrawer" show-if-above :width="256">
|
||||||
|
|
|
@ -1,16 +1,6 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { useI18n } from 'vue-i18n';
|
|
||||||
import { useStateStore } from 'stores/useStateStore';
|
|
||||||
import InvoiceInDescriptor from './InvoiceInDescriptor.vue';
|
|
||||||
import VnSearchbar from 'components/ui/VnSearchbar.vue';
|
|
||||||
import { useArrayData } from 'src/composables/useArrayData';
|
|
||||||
import { onMounted, watch } from 'vue';
|
|
||||||
import { useRoute } from 'vue-router';
|
|
||||||
import VnCard from 'components/common/VnCard.vue';
|
import VnCard from 'components/common/VnCard.vue';
|
||||||
|
import InvoiceInDescriptor from './InvoiceInDescriptor.vue';
|
||||||
const stateStore = useStateStore();
|
|
||||||
const { t } = useI18n();
|
|
||||||
const route = useRoute();
|
|
||||||
|
|
||||||
const filter = {
|
const filter = {
|
||||||
include: [
|
include: [
|
||||||
|
@ -19,51 +9,27 @@ const filter = {
|
||||||
scope: {
|
scope: {
|
||||||
include: {
|
include: {
|
||||||
relation: 'contacts',
|
relation: 'contacts',
|
||||||
scope: {
|
scope: { where: { email: { neq: null } } },
|
||||||
where: {
|
|
||||||
email: { neq: null },
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
{ relation: 'invoiceInDueDay' },
|
||||||
},
|
{ relation: 'company' },
|
||||||
{
|
{ relation: 'currency' },
|
||||||
relation: 'invoiceInDueDay',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
relation: 'company',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
relation: 'currency',
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
const arrayData = useArrayData('InvoiceIn', {
|
|
||||||
url: `InvoiceIns/${route.params.id}`,
|
|
||||||
filter,
|
|
||||||
});
|
|
||||||
|
|
||||||
onMounted(async () => await arrayData.fetch({ append: false }));
|
|
||||||
watch(
|
|
||||||
() => route.params.id,
|
|
||||||
async (newId) => {
|
|
||||||
if (newId) {
|
|
||||||
arrayData.store.url = `InvoiceIns/${newId}`;
|
|
||||||
await arrayData.fetch({ append: false });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<Teleport to="#searchbar" v-if="stateStore.isHeaderMounted()">
|
<VnCard
|
||||||
<VnSearchbar
|
data-key="InvoiceIn"
|
||||||
data-key="InvoiceInList"
|
base-url="InvoiceIns"
|
||||||
url="InvoiceIns/filter"
|
:filter="filter"
|
||||||
:label="t('Search invoice')"
|
:descriptor="InvoiceInDescriptor"
|
||||||
:info="t('You can search by invoice reference')"
|
searchbar-data-key="InvoiceInList"
|
||||||
|
searchbar-url="InvoiceIns/filter"
|
||||||
|
searchbar-label="Search invoice"
|
||||||
|
searchbar-info="You can search by invoice reference"
|
||||||
/>
|
/>
|
||||||
</Teleport>
|
|
||||||
<VnCard :descriptor="InvoiceInDescriptor" />
|
|
||||||
</template>
|
</template>
|
||||||
<i18n>
|
<i18n>
|
||||||
es:
|
es:
|
||||||
|
|
|
@ -1,20 +1,18 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import InvoiceOutDescriptor from './InvoiceOutDescriptor.vue';
|
import InvoiceOutDescriptor from './InvoiceOutDescriptor.vue';
|
||||||
import VnCard from 'components/common/VnCard.vue';
|
import VnCard from 'components/common/VnCard.vue';
|
||||||
|
|
||||||
const searchbar = {
|
|
||||||
dataKey: 'InvoiceOutList',
|
|
||||||
url: 'InvoiceOuts/filter',
|
|
||||||
label: 'Search invoice',
|
|
||||||
info: 'You can search by invoice reference',
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<VnCard :descriptor="InvoiceOutDescriptor" :searchbar-props="searchbar" />
|
<VnCard
|
||||||
|
:descriptor="InvoiceOutDescriptor"
|
||||||
|
searchbar-data-key="InvoiceOutList"
|
||||||
|
searchbar-url="InvoiceOuts/filter"
|
||||||
|
searchbar-label="Search invoice"
|
||||||
|
searchbar-info="You can search by invoice reference"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<i18n>
|
<i18n>
|
||||||
es:
|
es:
|
||||||
Search invoice: Buscar factura emitida
|
Search invoice: Buscar factura emitida
|
||||||
You can search by invoice reference: Puedes buscar por referencia de la factura
|
You can search by invoice reference: Puedes buscar por referencia de la factura
|
||||||
</i18n>
|
</i18n>
|
||||||
|
|
Loading…
Reference in New Issue