0
0
Fork 0

fix: show data and fixed search button when excluding a location

This commit is contained in:
Jon Elias 2024-11-25 09:21:20 +01:00
parent 69498cccf9
commit a1aa9337c8
3 changed files with 48 additions and 70 deletions

View File

@ -4,7 +4,7 @@ import { useI18n } from 'vue-i18n';
const emit = defineEmits(['onSubmit']);
defineProps({
const $props = defineProps({
title: {
type: String,
default: '',
@ -25,16 +25,21 @@ defineProps({
type: String,
default: '',
},
submitOnEnter: {
type: Boolean,
default: true,
},
});
const { t } = useI18n();
const closeButton = ref(null);
const isLoading = ref(false);
const onSubmit = () => {
emit('onSubmit');
closeForm();
if ($props.submitOnEnter) {
emit('onSubmit');
closeForm();
}
};
const closeForm = () => {
@ -52,12 +57,12 @@ const closeForm = () => {
<span ref="closeButton" class="close-icon" v-close-popup>
<QIcon name="close" size="sm" />
</span>
<h1 class="title">{{ title }}</h1>
<p>{{ subtitle }}</p>
<h1 class="title">{{ $props.title }}</h1>
<p>{{ $props.subtitle }}</p>
<slot name="form-inputs" />
<div class="q-mt-lg row justify-end">
<QBtn
v-if="defaultCancelButton"
v-if="$props.defaultCancelButton"
:label="t('globals.cancel')"
color="primary"
flat
@ -67,8 +72,8 @@ const closeForm = () => {
v-close-popup
/>
<QBtn
v-if="defaultSubmitButton"
:label="customSubmitButtonLabel || t('globals.save')"
v-if="$props.defaultSubmitButton"
:label="$props.customSubmitButtonLabel || t('globals.save')"
type="submit"
color="primary"
:disabled="isLoading"

View File

@ -57,34 +57,23 @@ const excludeType = computed({
const arrayData = useArrayData('ZoneEvents');
const exclusionGeoCreate = async () => {
try {
const params = {
zoneFk: parseInt(route.params.id),
date: dated.value,
geoIds: tickedNodes.value,
};
await axios.post('Zones/exclusionGeo', params);
await refetchEvents();
} catch (err) {
console.error('Error creating exclusion geo: ', err);
}
const params = {
zoneFk: parseInt(route.params.id),
date: dated.value,
geoIds: tickedNodes.value,
};
await axios.post('Zones/exclusionGeo', params);
await refetchEvents();
};
const exclusionCreate = async () => {
try {
if (isNew.value)
await axios.post(`Zones/${route.params.id}/exclusions`, [
{ dated: dated.value },
]);
else
await axios.post(`Zones/${route.params.id}/exclusions`, {
dated: dated.value,
});
await refetchEvents();
} catch (err) {
console.error('Error creating exclusion: ', err);
}
if (isNew.value)
await axios.post(`Zones/${route.params.id}/exclusions`, [{ dated: dated.value }]);
else
await axios.post(`Zones/${route.params.id}/exclusions`, {
dated: dated.value,
});
await refetchEvents();
};
const onSubmit = async () => {
@ -93,13 +82,9 @@ const onSubmit = async () => {
};
const deleteEvent = async () => {
try {
if (!props.event) return;
await axios.delete(`Zones/${route.params.id}/exclusions`);
await refetchEvents();
} catch (err) {
console.error('Error deleting event: ', err);
}
if (!props.event) return;
await axios.delete(`Zones/${route.params.id}/exclusions`);
await refetchEvents();
};
const closeForm = () => emit('closeForm');
@ -129,6 +114,7 @@ onMounted(() => {
@on-submit="onSubmit()"
:default-cancel-button="false"
:default-submit-button="false"
:submit-on-enter="false"
>
<template #form-inputs>
<VnRow class="row q-gutter-md q-mb-lg">
@ -136,6 +122,7 @@ onMounted(() => {
:label="t('eventsInclusionForm.day')"
v-model="dated"
:model-value="props.date"
:required="true"
/>
</VnRow>
<div class="column q-gutter-y-sm q-mb-md">
@ -196,6 +183,7 @@ onMounted(() => {
:label="isNew ? t('globals.add') : t('globals.save')"
type="submit"
color="primary"
@click="onSubmit()"
/>
</template>
</FormPopup>

View File

@ -38,6 +38,7 @@ const datakey = 'ZoneLocations';
const url = computed(() => `Zones/${route.params.id}/getLeaves`);
const arrayData = useArrayData(datakey, {
url: url.value,
limit: null,
});
const store = arrayData.store;
@ -90,21 +91,16 @@ const onNodeExpanded = async (nodeKeysArray) => {
previousExpandedNodes.value = nodeKeysSet;
};
const formatNodeSelected = (node) => {
if (node.selected === 1) node.selected = true;
else if (node.selected === 0) node.selected = false;
if (node.sons > 0 && !node.childs) node.childs = [{}];
};
const fetchNodeLeaves = async (nodeKey) => {
if (!treeRef.value) return;
const node = treeRef.value?.getNodeByKey(nodeKey);
if (node.selected === 1) node.selected = true;
else if (node.selected === 0) node.selected = false;
if (typeof node.selected === 'number') node.selected = !!node.selected;
if (node.sons > 0 && !node.childs) {
node.childs = [{}];
const index = expanded.value.indexOf(node.id);
expanded.value.splice(index, 1);
}
if (!node || node.sons === 0) return;
state.set('Tree', node);
};
function getNodeIds(node) {
@ -128,18 +124,9 @@ watch(
nodes.value[0].childs = [...val];
const fetchedNodeKeys = val.flatMap(getNodeIds);
state.set('Tree', [...fetchedNodeKeys]);
if (!store.userParams?.search) {
val.forEach((n) => {
formatNodeSelected(n);
});
store.data = null;
expanded.value = [null];
} else {
for (let n of state.get('Tree')) {
await fetchNodeLeaves(n);
}
expanded.value = [null, ...fetchedNodeKeys];
expanded.value = [null, ...fetchedNodeKeys];
for (let n of state.get('Tree')) {
await fetchNodeLeaves(n);
}
previousExpandedNodes.value = new Set(expanded.value);
},
@ -147,13 +134,11 @@ watch(
);
const reFetch = async () => {
const { data } = await arrayData.fetch({ append: false });
nodes.value = data;
expanded.value = [null];
await arrayData.fetch({});
};
onMounted(async () => {
if (store.userParams?.search) await arrayData.fetch({});
await reFetch();
});
onUnmounted(() => {
@ -167,13 +152,13 @@ onUnmounted(() => {
v-if="showSearchBar"
v-model="store.userParams.search"
:placeholder="$t('globals.search')"
@update:model-value="reFetch()"
@keyup.enter="reFetch"
>
<template #prepend>
<QBtn color="primary" icon="search" dense flat @click="reFetch()" />
</template>
</VnInput>
<VnSearchbar :data-key="datakey" :url="url" :redirect="false" />
<VnSearchbar v-if="!showSearchBar" :data-key="datakey" :url="url" :redirect="false" />
<QTree
ref="treeRef"
:nodes="nodes"