perf: refs #8197 fix and imrpove filters #1234

Merged
alexm merged 6 commits from 8197-fix_filters into dev 2025-01-21 10:48:32 +00:00
6 changed files with 50 additions and 41 deletions

View File

@ -52,7 +52,8 @@ const sectionValue = computed(() => $props.section ?? $props.dataKey);
const isMainSection = computed(() => { const isMainSection = computed(() => {
const isSame = sectionValue.value == route.name; const isSame = sectionValue.value == route.name;
if (!isSame && arrayData) { if (!isSame && arrayData) {
arrayData.reset(['userParams', 'userFilter']); arrayData.reset(['userParams', 'filter']);
Review

No debe borrar los userFilers

No debe borrar los userFilers
arrayData.setCurrentFilter();
} }
return isSame; return isSame;
}); });

View File

@ -232,12 +232,15 @@ async function fetchFilter(val) {
} else defaultWhere = { [key]: getVal(val) }; } else defaultWhere = { [key]: getVal(val) };
const where = { ...(val ? defaultWhere : {}), ...$props.where }; const where = { ...(val ? defaultWhere : {}), ...$props.where };
$props.exprBuilder && Object.assign(where, $props.exprBuilder(key, val)); $props.exprBuilder && Object.assign(where, $props.exprBuilder(key, val));
const fetchOptions = { where, include, limit }; const filterOptions = { where, include, limit };
if (fields) fetchOptions.fields = fields; if (fields) filterOptions.fields = fields;
if (sortBy) fetchOptions.order = sortBy; if (sortBy) filterOptions.order = sortBy;
arrayData.resetPagination(); arrayData.resetPagination();
const { data } = await arrayData.applyFilter({ filter: fetchOptions }); const { data } = await arrayData.applyFilter(
{ filter: filterOptions },
{ updateRouter: false }
Review

Si no, entraba siempre como updateRouter

Si no, entraba siempre como updateRouter
);
setOptions(data); setOptions(data);
return data; return data;
} }

View File

@ -113,23 +113,20 @@ onMounted(() => {
}); });
async function search() { async function search() {
const staticParams = Object.keys(store.userParams ?? {}).length
? store.userParams
: store.defaultParams;
arrayData.resetPagination(); arrayData.resetPagination();
const filter = { let filter = { params: { search: searchText.value } };
params: {
search: searchText.value,
},
filter: props.filter,
};
if (!props.searchRemoveParams || !searchText.value) { if (!props.searchRemoveParams || !searchText.value) {
filter.params = { filter = {
...staticParams, params: {
search: searchText.value, ...store.userParams,
search: searchText.value,
},
filter: store.filter,
}; };
} else {
arrayData.reset(['currentFilter', 'userParams']);
} }
if (props.whereFilter) { if (props.whereFilter) {

View File

@ -33,10 +33,11 @@ export function useArrayData(key, userOptions) {
: JSON.parse(params?.filter ?? '{}'); : JSON.parse(params?.filter ?? '{}');
delete params.filter; delete params.filter;
store.userParams = { ...store.userParams, ...params }; store.userParams = params;
store.filter = { ...filter, ...store.userFilter }; store.filter = { ...filter, ...store.userFilter };
if (filter?.order) store.order = filter.order; if (filter?.order) store.order = filter.order;
} }
setCurrentFilter();
}); });
if (key && userOptions) setOptions(); if (key && userOptions) setOptions();
@ -78,11 +79,7 @@ export function useArrayData(key, userOptions) {
cancelRequest(); cancelRequest();
canceller = new AbortController(); canceller = new AbortController();
const { params, limit } = getCurrentFilter(); const { params, limit } = setCurrentFilter();
store.currentFilter = JSON.parse(JSON.stringify(params));
delete store.currentFilter.filter.include;
store.currentFilter.filter = JSON.stringify(store.currentFilter.filter);
let exprFilter; let exprFilter;
if (store?.exprBuilder) { if (store?.exprBuilder) {
@ -107,7 +104,7 @@ export function useArrayData(key, userOptions) {
store.hasMoreData = limit && response.data.length >= limit; store.hasMoreData = limit && response.data.length >= limit;
if (!append && !isDialogOpened() && updateRouter) { if (!append && !isDialogOpened() && updateRouter) {
if (updateStateParams(response.data)?.redirect) return; if (updateStateParams(response.data)?.redirect && !store.keepData) return;
} }
store.isLoading = false; store.isLoading = false;
canceller = null; canceller = null;
@ -142,12 +139,12 @@ export function useArrayData(key, userOptions) {
} }
} }
async function applyFilter({ filter, params }) { async function applyFilter({ filter, params }, fetchOptions = {}) {
if (filter) store.userFilter = filter; if (filter) store.userFilter = filter;
store.filter = {}; store.filter = {};
if (params) store.userParams = { ...params }; if (params) store.userParams = { ...params };
const response = await fetch({}); const response = await fetch(fetchOptions);
return response; return response;
} }
@ -276,14 +273,14 @@ export function useArrayData(key, userOptions) {
} }
function getCurrentFilter() { function getCurrentFilter() {
if (!Object.keys(store.userParams).length)
store.userParams = store.defaultParams ?? {};
const filter = { const filter = {
limit: store.limit, limit: store.limit,
...store.userFilter,
}; };
let userParams = { ...store.userParams };
Object.assign(filter, store.userFilter);
let where; let where;
if (filter?.where || store.filter?.where) if (filter?.where || store.filter?.where)
where = Object.assign(filter?.where ?? {}, store.filter?.where ?? {}); where = Object.assign(filter?.where ?? {}, store.filter?.where ?? {});
@ -291,7 +288,7 @@ export function useArrayData(key, userOptions) {
filter.where = where; filter.where = where;
const params = { filter }; const params = { filter };
Object.assign(params, userParams); Object.assign(params, store.userParams);
if (params.filter) params.filter.skip = store.skip; if (params.filter) params.filter.skip = store.skip;
if (store?.order && typeof store?.order == 'string') store.order = [store.order]; if (store?.order && typeof store?.order == 'string') store.order = [store.order];
if (store.order?.length) params.filter.order = [...store.order]; if (store.order?.length) params.filter.order = [...store.order];
@ -300,6 +297,14 @@ export function useArrayData(key, userOptions) {
return { filter, params, limit: filter.limit }; return { filter, params, limit: filter.limit };
} }
function setCurrentFilter() {
const { params, limit } = getCurrentFilter();
store.currentFilter = JSON.parse(JSON.stringify(params));
delete store.currentFilter.filter.include;
store.currentFilter.filter = JSON.stringify(store.currentFilter.filter);
return { params, limit };
}
function processData(data, { map = true, append = true }) { function processData(data, { map = true, append = true }) {
if (!append) { if (!append) {
store.data = []; store.data = [];
@ -333,6 +338,7 @@ export function useArrayData(key, userOptions) {
applyFilter, applyFilter,
addFilter, addFilter,
getCurrentFilter, getCurrentFilter,
setCurrentFilter,
addFilterWhere, addFilterWhere,
addOrder, addOrder,
deleteOrder, deleteOrder,

View File

@ -29,8 +29,12 @@ export function useFilterParams(key) {
orders.value = orderObject; orders.value = orderObject;
} }
function setUserParams(watchedParams) { function setUserParams(watchedParams = {}) {
if (!watchedParams || Object.keys(watchedParams).length == 0) return; if (Object.keys(watchedParams).length == 0) {

Si le damos un valor por defecto al parámetro nos podríamos quitar 1 condición del if no?

Si le damos un valor por defecto al parámetro nos podríamos quitar 1 condición del if no?
Outdated
Review

Vooy

Vooy

Genial

Genial
params.value = {};
orders.value = {};
return;
}
if (typeof watchedParams == 'string') watchedParams = JSON.parse(watchedParams); if (typeof watchedParams == 'string') watchedParams = JSON.parse(watchedParams);
if (typeof watchedParams?.filter == 'string') if (typeof watchedParams?.filter == 'string')

View File

@ -7,6 +7,7 @@ import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
import VnInput from 'src/components/common/VnInput.vue'; import VnInput from 'src/components/common/VnInput.vue';
import VnInputDate from 'components/common/VnInputDate.vue'; import VnInputDate from 'components/common/VnInputDate.vue';
import VnSelect from 'src/components/common/VnSelect.vue'; import VnSelect from 'src/components/common/VnSelect.vue';
import VnSelectWorker from 'src/components/common/VnSelectWorker.vue';
const { t } = useI18n(); const { t } = useI18n();
const props = defineProps({ const props = defineProps({
@ -81,15 +82,12 @@ const getGroupedStates = (data) => {
</QItem> </QItem>
<QItem> <QItem>
<QItemSection> <QItemSection>
<VnSelect <VnSelectWorker
:label="t('Salesperson')" :label="t('globals.salesPerson')"
Review

Habría que reabrir la tarea de VnSelectWorker para usarlo en todas las llamadas de activeWithIneritedRole?

Habría que reabrir la tarea de VnSelectWorker para usarlo en todas las llamadas de activeWithIneritedRole?
Review

@jon
Buscando por activeWithInheritedRole salen 25 resultados, habria que pasarlos?

@jon Buscando por activeWithInheritedRole salen 25 resultados, habria que pasarlos?
Review

Yo reabriría la tarea y revisaría cada llamada de activeWithInheritedRole para que usara el mismo componente en caso de que no lo esté usando

Yo reabriría la tarea y revisaría cada llamada de activeWithInheritedRole para que usara el mismo componente en caso de que no lo esté usando
Review

Coincido,

  1. validar las diferencias entre Worker7search y el anterior
  2. Anotarlas en la tarea y reabrirla
  3. Hacerlo
Coincido, 1. validar las diferencias entre Worker7search y el anterior 2. Anotarlas en la tarea y reabrirla 3. Hacerlo
Review
Pongo en esta https://redmine.verdnatura.es/issues/8336
Review

entonces @alexm fusionamos esta tal cual, y los cambios ya vendrán en la tarea que has dicho, no?

entonces @alexm fusionamos esta tal cual, y los cambios ya vendrán en la tarea que has dicho, no?
v-model="params.salesPersonFk" v-model="params.salesPersonFk"
url="Workers/activeWithInheritedRole" :params="{
:where="{ role: 'salesPerson' }" departmentCodes: ['VT'],
option-value="id" }"
option-label="firstName"
:use-like="false"
sort-by="firstName ASC"
dense dense
outlined outlined
rounded rounded