hotFix(orderCatalogFilter): fix searchByTag #961

Merged
alexm merged 8 commits from hotFix_orderCatalogFilter_values into master 2024-11-21 09:09:52 +00:00
3 changed files with 79 additions and 38 deletions
Showing only changes of commit abd79283ff - Show all commits

View File

@ -59,15 +59,6 @@ const getSelectedTagValues = async (tag) => {
<template>
<QForm @submit="applyTags(tagValues)" class="all-pointer-events">
alexm marked this conversation as resolved
Review

has definido el método pero sin argumentos, por tanto lo que le pases es irrelevante, no?

has definido el método pero sin argumentos, por tanto lo que le pases es irrelevante, no?
Review

fallo mio

fallo mio
<QCard class="q-pa-sm column q-pa-lg">
<QBtn
round
color="primary"
style="position: absolute; z-index: 1; right: 0; top: 0"
icon="search"
type="submit"
>
</QBtn>
<VnSelect
:label="t('params.tag')"
v-model="selectedTag"
@ -82,16 +73,6 @@ const getSelectedTagValues = async (tag) => {
use-input
@update:model-value="($event) => getSelectedTagValues($event)"
alexm marked this conversation as resolved
Review

@update:model-value="getSelectedTagValues" hace lo mismo no?

@update:model-value="getSelectedTagValues" hace lo mismo no?
Review

se me pasó

se me pasó
/>
<QBtn
icon="add_circle"
shortcut="+"
flat
class="filter-icon q-mb-md"
size="md"
dense
:disabled="!selectedTag || !tagValues[0].value"
@click="tagValues.unshift({})"
/>
<div
v-for="(value, index) in tagValues"
:key="value"
@ -120,7 +101,6 @@ const getSelectedTagValues = async (tag) => {
:label="t('components.itemsFilterPanel.value')"
:disable="!value"
is-outlined
:is-clearable="false"
class="col"
/>
<QBtn
@ -131,11 +111,25 @@ const getSelectedTagValues = async (tag) => {
rounded
flat
class="filter-icon col-2"
:disabled="!value.value"
@click="removeTagGroupParam(index)"
@click="tagValues.splice(index, 1)"
/>
</div>
</div>
<QBtn
icon="add_circle"
shortcut="+"
flat
class="filter-icon q-mb-md"
size="md"
dense
@click="tagValues.push({})"
/>
<QBtn
color="primary"
icon="search"
type="submit"
:label="$t('globals.search')"
/>
</QCard>
</QForm>
</template>

View File

@ -1,30 +1,57 @@
<script setup>
import { useStateStore } from 'stores/useStateStore';
import { useRoute, useRouter } from 'vue-router';
import { onMounted, onUnmounted, ref } from 'vue';
import { onBeforeMount, onMounted, onUnmounted, ref, computed, watch } from 'vue';
import axios from 'axios';
import { useI18n } from 'vue-i18n';
import VnPaginate from 'components/ui/VnPaginate.vue';
import CatalogItem from 'components/ui/CatalogItem.vue';
import OrderCatalogFilter from 'pages/Order/Card/OrderCatalogFilter.vue';
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
import getParamWhere from 'src/filters/getParamWhere';
import { useArrayData } from 'composables/useArrayData';
alexm marked this conversation as resolved Outdated

src/

src/

se pasó

se pasó
Outdated
Review

Igualmente hay un archivo jsconfig.json que sirve para los alias no veo el motivo de pq no usarlos

Igualmente hay un archivo jsconfig.json que sirve para los alias no veo el motivo de pq no usarlos

He visto lo del alias, pero nadie los usa, quiero decir, por normal general el 80% de los archivos tienen la ruta completa
Así que creía que era el estandard.
Lo tengo en cuenta para asociarle el archivo a cypress

He visto lo del alias, pero nadie los usa, quiero decir, por normal general el 80% de los archivos tienen la ruta completa Así que creía que era el estandard. Lo tengo en cuenta para asociarle el archivo a cypress
const route = useRoute();
const router = useRouter();
const stateStore = useStateStore();
const { t } = useI18n();
const arrayData = useArrayData('OrderCatalogList');
alexm marked this conversation as resolved Outdated

El parámetro aparece 4 veces, propuesta, de crear una constante, o desde el front llamar a arrayData.key

El parámetro aparece 4 veces, propuesta, de crear una constante, o desde el front llamar a arrayData.key
const store = arrayData.store;
const showFilter = ref(null);
const tags = ref([]);
let catalogParams = {
orderFk: route.params.id,
orderBy: JSON.stringify({ field: 'relevancy DESC, name', way: 'ASC', isTag: false }),
};
onBeforeMount(() => {
const whereParams = getParamWhere(route);
if (whereParams) {
const formattedWhereParams = {};
if (whereParams.and) {
whereParams.and.forEach((item) => {
Object.assign(formattedWhereParams, item);
});
} else {
Object.assign(formattedWhereParams, whereParams);
}
catalogParams = {
...catalogParams,
...formattedWhereParams,
};
} else {
showFilter.value = true;
}
});
onMounted(() => {
stateStore.rightDrawer = true;
checkOrderConfirmation();
});
onUnmounted(() => (stateStore.rightDrawer = false));
const catalogParams = {
orderFk: route.params.id,
orderBy: JSON.stringify({ field: 'relevancy DESC, name', way: 'ASC', isTag: false }),
};
onUnmounted(() => (stateStore.rightDrawer = false));
async function checkOrderConfirmation() {
const response = await axios.get(`Orders/${route.params.id}`);
@ -34,6 +61,7 @@ async function checkOrderConfirmation() {
}
function extractTags(items) {
if (!items || !items.length) return;
const resultTags = [];
(items || []).forEach((item) => {
(item.tags || []).forEach((tag) => {
@ -61,6 +89,15 @@ function extractValueTags(items) {
);
tagValue.value = resultValueTags;
}
const autoLoad = computed(() => !!catalogParams.categoryFk);
watch(
() => store.data,
(val) => {
extractTags(val);
},
{ immediate: true }
);
</script>
<template>
@ -74,11 +111,12 @@ function extractValueTags(items) {
:info="t('You can search items by name or id')"
/>
<QDrawer v-model="stateStore.rightDrawer" side="right" :width="256" show-if-above>
<QScrollArea class="fit text-grey-8">
<QScrollArea v-if="showFilter" class="fit text-grey-8">
<OrderCatalogFilter
data-key="OrderCatalogList"
:tag-value="tagValue"
:tags="tags"
:initial-catalog-params="catalogParams"
/>
</QScrollArea>
</QDrawer>
@ -89,8 +127,9 @@ function extractValueTags(items) {
url="Orders/CatalogFilter"
:limit="50"
:user-params="catalogParams"
@on-fetch="extractTags"
@on-fetch="showFilter = true"
:update-router="false"
:auto-load="autoLoad"
>
<template #body="{ rows }">
<div class="catalog-list">
@ -102,6 +141,7 @@ function extractValueTags(items) {
:key="row.id"
:item="row"
is-catalog
class="fill-icon"
/>
</div>
</template>

View File

@ -59,20 +59,20 @@ const resetCategory = (params, search) => {
params.categoryFk = null;
alexm marked this conversation as resolved Outdated

Veo que hay un par de sitios que hace params.category = null;
Propuesta: moverlo a una function resetParams, pej

Veo que hay un par de sitios que hace params.category = null; Propuesta: moverlo a una function resetParams, pej

Si wbuezas lo dejó asi

Si wbuezas lo dejó asi
params.typeFk = null;
arrayData.store.userFilter = null;
removeTagGroupParam(params, search);
removeTagGroupParam(search);
};
const selectCategory = (params, category, search) => {
if (params.categoryFk === category?.id) {
resetCategory(params, search);
params.categoryFk = null;
} else {
selectedCategoryFk.value = category?.id;
params.categoryFk = category?.id;
params.typeFk = null;
selectedTypeFk.value = null;
loadTypes(category?.id);
return;
}
selectedCategoryFk.value = category?.id;
params.categoryFk = category?.id;
params.typeFk = null;
selectedTypeFk.value = null;
loadTypes(category?.id);
search();
};
@ -155,6 +155,12 @@ const getCategoryClass = (category, params) => {
}
};
const clearFilter = (key) => {
if (key === 'categoryFk') {
resetCategory();
}
};
function addOrder(value, field, params) {
let { orderBy } = params;
orderBy = JSON.parse(orderBy);
@ -179,6 +185,7 @@ onMounted(() => {
:expr-builder="exprBuilder"
:custom-tags="['tagGroups', 'categoryFk']"
:redirect="false"
@remove="clearFilter"
v-model="currentParams"
>
<template #tags="{ tag, formatFn }">
@ -328,7 +335,7 @@ onMounted(() => {
style="display: inline-block"
:tags="tags"
@apply-tags="
($event) => applyTags($event, params, searchFn)
($event) => applyTags($event, currentParams, searchFn)
"
/>
</QPopupProxy>