0
0
Fork 0

fix(zone): zoneLocation and the others searchbar

This commit is contained in:
Alex Moreno 2024-08-09 08:45:48 +02:00
parent 1512801f02
commit 3ee7692bbc
10 changed files with 48 additions and 80 deletions

View File

@ -363,7 +363,7 @@ defineExpose({
@update:selected="emit('update:selected', $event)" @update:selected="emit('update:selected', $event)"
> >
<template #top-left v-if="!$props.withoutHeader"> <template #top-left v-if="!$props.withoutHeader">
<slot name="top-left"></slot> <slot name="top-left"> </slot>
</template> </template>
<template #top-right v-if="!$props.withoutHeader"> <template #top-right v-if="!$props.withoutHeader">
<VnVisibleColumn <VnVisibleColumn

View File

@ -81,24 +81,27 @@ onMounted(() => {
emit('init', { params: userParams.value }); emit('init', { params: userParams.value });
}); });
function setUserParams(watchedParams) { function setUserParams(watchedParams, quien) {
if (!watchedParams) return; if (!watchedParams) return;
if (typeof watchedParams == 'string') watchedParams = JSON.parse(watchedParams); if (typeof watchedParams == 'string') watchedParams = JSON.parse(watchedParams);
if (typeof watchedParams?.filter == 'string')
watchedParams.filter = JSON.parse(watchedParams.filter);
watchedParams = { ...watchedParams, ...watchedParams.filter?.where }; watchedParams = { ...watchedParams, ...watchedParams.filter?.where };
delete watchedParams.filter; delete watchedParams.filter;
userParams.value = { ...userParams.value, ...watchedParams }; userParams.value = { ...userParams.value, ...sanitizer(watchedParams) };
emit('setUserParams', userParams.value); emit('setUserParams', userParams.value);
} }
watch( watch(
() => route.query[$props.searchUrl], () => route.query[$props.searchUrl],
(val) => setUserParams(val) (val, oldValue) => (val || oldValue) && setUserParams(val)
); );
watch( watch(
() => arrayData.store.userParams, () => arrayData.store.userParams,
(val) => setUserParams(val) (val, oldValue) => (val || oldValue) && setUserParams(val)
); );
watch( watch(

View File

@ -61,15 +61,11 @@ const props = defineProps({
}, },
customRouteRedirectName: { customRouteRedirectName: {
type: String, type: String,
default: null, default: '',
}, },
makeFetch: { whereFilter: {
type: Boolean, type: Function,
default: true, default: undefined,
},
isQueryFilter: {
type: Boolean,
default: false,
}, },
}); });
@ -109,18 +105,18 @@ async function search() {
); );
arrayData.reset(['skip', 'page']); arrayData.reset(['skip', 'page']);
if (!props.makeFetch) return;
const filter = { const filter = {
params: { params: {
...Object.fromEntries(staticParams), ...Object.fromEntries(staticParams),
search: searchText.value,
}, },
}; };
if (props.isQueryFilter) {
if (props.whereFilter) {
filter.filter = { filter.filter = {
where: { where: props.whereFilter(searchText.value),
name: searchText.value == '' ? undefined : searchText.value,
},
}; };
delete filter.params.search;
} }
await arrayData.applyFilter(filter); await arrayData.applyFilter(filter);
} }

View File

@ -1,11 +1,20 @@
<script setup> <script setup>
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { useRoute } from 'vue-router';
import { computed } from 'vue';
import VnCard from 'components/common/VnCard.vue'; import VnCard from 'components/common/VnCard.vue';
import ZoneDescriptor from './ZoneDescriptor.vue'; import ZoneDescriptor from './ZoneDescriptor.vue';
import ZoneFilterPanel from '../ZoneFilterPanel.vue'; import ZoneFilterPanel from '../ZoneFilterPanel.vue';
const { t } = useI18n(); const { t } = useI18n();
const route = useRoute();
const routeName = computed(() => route.name);
function notIsLocations(ifIsFalse, ifIsTrue) {
if (routeName.value != 'ZoneLocations') return ifIsFalse;
return ifIsTrue;
}
</script> </script>
<template> <template>
@ -14,18 +23,14 @@ const { t } = useI18n();
base-url="Zones" base-url="Zones"
:descriptor="ZoneDescriptor" :descriptor="ZoneDescriptor"
:filter-panel="ZoneFilterPanel" :filter-panel="ZoneFilterPanel"
search-data-key="ZoneList" :search-data-key="notIsLocations('ZoneList', 'ZoneLocations')"
search-url="Zones"
:searchbar-label="t('list.searchZone')"
:searchbar-info="t('list.searchInfo')"
:searchbar-props="{ :searchbar-props="{
url: 'Zones', url: 'Zones',
label: t('list.searchZone'), label: notIsLocations(t('list.searchZone'), t('list.searchLocation')),
info: t('list.searchInfo'), info: t('list.searchInfo'),
whereFilter: notIsLocations((text) => {
return { name: { like: `%${text}%` } };
}),
}" }"
> />
<template #searchbar>
<ZoneSearchbar />
</template>
</VnCard>
</template> </template>

View File

@ -44,34 +44,15 @@ onUnmounted(() => (stateStore.rightDrawer = false));
</script> </script>
<template> <template>
<template v-if="stateStore.isHeaderMounted()"> <Teleport to="#right-panel" v-if="useStateStore().isHeaderMounted()">
<Teleport to="#actions-append"> <ZoneEventsPanel
<div class="row q-gutter-x-sm"> :first-day="firstDay"
<QBtn :last-day="lastDay"
flat :events="events"
@click="stateStore.toggleRightDrawer()" v-model:formModeName="formModeName"
round @open-zone-form="openForm"
dense />
icon="menu" </Teleport>
>
<QTooltip bottom anchor="bottom right">
{{ t('globals.collapseMenu') }}
</QTooltip>
</QBtn>
</div>
</Teleport>
</template>
<QDrawer v-model="stateStore.rightDrawer" side="right" :width="256" show-if-above>
<QScrollArea class="fit text-grey-8">
<ZoneEventsPanel
:first-day="firstDay"
:last-day="lastDay"
:events="events"
v-model:formModeName="formModeName"
@open-zone-form="openForm"
/>
</QScrollArea>
</QDrawer>
<QPage class="q-pa-md flex justify-center"> <QPage class="q-pa-md flex justify-center">
<ZoneCalendarGrid <ZoneCalendarGrid
v-model:events="events" v-model:events="events"

View File

@ -1,10 +1,7 @@
<script setup> <script setup>
import { onMounted, ref, computed, watch, onUnmounted } from 'vue'; import { onMounted, ref, computed, watch, onUnmounted } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import VnInput from 'src/components/common/VnInput.vue';
import { useState } from 'src/composables/useState'; import { useState } from 'src/composables/useState';
import axios from 'axios'; import axios from 'axios';
import { useArrayData } from 'composables/useArrayData'; import { useArrayData } from 'composables/useArrayData';
@ -30,7 +27,6 @@ const props = defineProps({
const emit = defineEmits(['update:tickedNodes']); const emit = defineEmits(['update:tickedNodes']);
const { t } = useI18n();
const route = useRoute(); const route = useRoute();
const state = useState(); const state = useState();
@ -186,16 +182,6 @@ onUnmounted(() => {
</script> </script>
<template> <template>
<VnInput
v-if="showSearchBar"
v-model="store.userParams.search"
:placeholder="t('globals.search')"
@keydown.enter.prevent="reFetch()"
>
<template #prepend>
<QIcon class="cursor-pointer" name="search" />
</template>
</VnInput>
<QTree <QTree
ref="treeRef" ref="treeRef"
:nodes="nodes" :nodes="nodes"

View File

@ -132,7 +132,11 @@ const handleClone = (id) => {
data-key="Zones" data-key="Zones"
:label="t('Search zone')" :label="t('Search zone')"
:info="t('You can search zones by id or name')" :info="t('You can search zones by id or name')"
:is-query-filter="true" :where-filter="
(text) => {
return { name: { like: `%${text}%` } };
}
"
/> />
<VnTable <VnTable
ref="tableRef" ref="tableRef"

View File

@ -18,6 +18,7 @@ list:
create: Create zone create: Create zone
openSummary: Details openSummary: Details
searchZone: Search zones searchZone: Search zones
searchLocation: Search locations
searchInfo: Search zone by id or name searchInfo: Search zone by id or name
confirmCloneTitle: All it's properties will be copied confirmCloneTitle: All it's properties will be copied
confirmCloneSubtitle: Do you want to clone this zone? confirmCloneSubtitle: Do you want to clone this zone?

View File

@ -18,6 +18,7 @@ list:
create: Crear zona create: Crear zona
openSummary: Detalles openSummary: Detalles
searchZone: Buscar zonas searchZone: Buscar zonas
searchLocation: Buscar localizaciones
searchInfo: Buscar zonas por identificador o nombre searchInfo: Buscar zonas por identificador o nombre
confirmCloneTitle: Todas sus propiedades serán copiadas confirmCloneTitle: Todas sus propiedades serán copiadas
confirmCloneSubtitle: ¿Seguro que quieres clonar esta zona? confirmCloneSubtitle: ¿Seguro que quieres clonar esta zona?

View File

@ -68,15 +68,6 @@ export default {
}, },
component: () => import('src/pages/Zone/ZoneCreate.vue'), component: () => import('src/pages/Zone/ZoneCreate.vue'),
}, },
// {
// path: 'counter',
// name: 'ZoneCounter',
// meta: {
// title: 'zoneCounter',
// icon: 'add_circle',
// },
// component: () => import('src/pages/Zone/ZoneCounter.vue'),
// },
{ {
name: 'ZoneUpcomingDeliveries', name: 'ZoneUpcomingDeliveries',
path: 'upcoming-deliveries', path: 'upcoming-deliveries',