7979 @update :filters =" onFiltersChange "
8080 @apply :favorite =" onFavoriteApply "
8181 @delete :favorite =" openDeleteFavoriteDialog "
82+ @override :favorite =" openOverrideFavoriteDialog "
8283 />
8384
8485 <GenericEntityTable
123124</template >
124125
125126<script setup lang="ts">
126- import { useRoute , useRouter } from ' vue-router' ;
127- import { computed , onMounted , ref } from ' vue' ;
128127import type {
129128 LinidFilter ,
129+ LinidFilterSetUserPreference ,
130130 LinidQBtnProps ,
131131 QTableRequestEvent ,
132- QueryFilter ,
133132 QuasarPagination ,
134- LinidFilterSetUserPreference ,
133+ QueryFilter ,
135134} from ' @linagora/linid-im-front-corelib' ;
136135import {
137136 getEntities ,
138137 getModuleHostConfiguration ,
139- LinidZoneRenderer ,
140138 LinidFilterSet ,
139+ LinidZoneRenderer ,
140+ uiEventSubject ,
141141 useLinidFilterUrl ,
142+ useLinidUserPreference ,
142143 useNotify ,
143144 usePagination ,
144145 useScopedI18n ,
145146 useUiDesign ,
146- useLinidUserPreference ,
147- uiEventSubject ,
148147} from ' @linagora/linid-im-front-corelib' ;
149- import type { ModuleGenericTablePageOptions } from ' ../types/ModuleGenericTablePageOptions' ;
150148import type { QTableColumn } from ' quasar' ;
149+ import { computed , onMounted , ref } from ' vue' ;
150+ import { useRoute , useRouter } from ' vue-router' ;
151151import ButtonsCard from ' ../components/card/ButtonsCard.vue' ;
152- import GenericEntityTable from ' ../components/table/GenericEntityTable.vue' ;
153152import LinidSmartFilter from ' ../components/smart-filter/LinidSmartFilter.vue' ;
153+ import GenericEntityTable from ' ../components/table/GenericEntityTable.vue' ;
154+ import type { ModuleGenericTablePageOptions } from ' ../types/ModuleGenericTablePageOptions' ;
154155
155156const router = useRouter ();
156157const route = useRoute ();
@@ -165,7 +166,8 @@ const options = computed(
165166);
166167
167168const { t, te } = useScopedI18n (i18nScope .value );
168- const { userPreferenceStore, deleteUserPreference } = useLinidUserPreference ();
169+ const { userPreferenceStore, deleteUserPreference, saveUserPreference } =
170+ useLinidUserPreference ();
169171const items = ref <Record <string , unknown >[]>([]);
170172const isLoading = ref <boolean >(false );
171173const { Notify } = useNotify ();
@@ -297,6 +299,51 @@ function openDeleteFavoriteDialog(favorite: LinidFilterSet): void {
297299 });
298300}
299301
302+ /**
303+ * Opens a confirmation dialog to override an existing favorite filter set with the current filters.
304+ */
305+ function openOverrideFavoriteDialog(): void {
306+ uiEventSubject .next ({
307+ key: ' form' ,
308+ data: {
309+ type: ' open' ,
310+ title: t (' FormDialog.overrideTitle' ),
311+ content: t (' FormDialog.overrideContent' ),
312+ uiNamespace: uiNamespace .value ,
313+ i18nScope: ` ${i18nScope .value }.FormDialog ` ,
314+ formFields: [
315+ {
316+ name: ' favorite' ,
317+ type: ' String' ,
318+ input: ' List' ,
319+ required: true ,
320+ inputSettings: {
321+ values: favorites .value .map ((f ) => ({
322+ label: f .label ,
323+ value: f ,
324+ })),
325+ optionLabel: ' label' ,
326+ },
327+ },
328+ ],
329+ // eslint-disable-next-line jsdoc/require-jsdoc
330+ onSubmit : (formData : { favorite: LinidFilterSet }) =>
331+ saveUserPreference (
332+ ` ${favoritesBaseConfigurationKey .value }${formData .favorite .id } ` ,
333+ JSON .stringify ({
334+ id: formData .favorite .id ,
335+ label: formData .favorite .label ,
336+ value: new LinidFilterSet (
337+ formData .favorite .id ,
338+ formData .favorite .label ,
339+ filters .value
340+ ).toString (),
341+ })
342+ ),
343+ },
344+ });
345+ }
346+
300347/**
301348 * Parses a serialized favorite filter set from a JSON string and validates its structure.
302349 *
0 commit comments