Skip to content

Commit c37459d

Browse files
committed
refactor: add type for the filter store and add correct types for the filter store
https://web.tracklify.com/project/2b7ZVgE5/AdminForth/1386/oAmK1XLD/filters-from-the-fil-plugin-ap
1 parent ea31fd2 commit c37459d

3 files changed

Lines changed: 44 additions & 14 deletions

File tree

adminforth/spa/src/spa_types/core.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import type { AdminForthResource, AdminForthResourceColumn } from '../types/Back.js';
2+
import type { FilterParams } from '@/types/Common';
3+
import type { Ref, ComputedRef } from 'vue';
24

35
export type resourceById = {
46
[key: string]: AdminForthResource;
@@ -61,3 +63,27 @@ export type AllowedActions = {
6163
delete: boolean,
6264
}
6365

66+
67+
export type sortType = {
68+
field: string,
69+
direction: 'ask' | 'desc'
70+
} | null;
71+
72+
export type AdminforthFilterStore = {
73+
filters: Ref<FilterParams[]>,
74+
75+
setSort: (sort: sortType) => void,
76+
getSort: () => sortType,
77+
78+
setFilter: (filters: FilterParams) => void,
79+
setFilters: (filters: FilterParams[]) => void,
80+
81+
getFilters: () => FilterParams[],
82+
83+
clearFilter: (fieldName: string) => void,
84+
clearFilters: () => void,
85+
86+
shouldFilterBeHidden: (fieldName: string) => boolean,
87+
88+
visibleFiltersCount: ComputedRef<number>,
89+
}
Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,42 @@
11
import { ref, computed, type Ref } from 'vue';
22
import { defineStore } from 'pinia';
33
import { useCoreStore } from './core';
4+
import type { FilterParams } from '@/types/Common';
5+
import type { AdminforthFilterStore, sortType } from '../spa_types/core';
46

57
export const useFiltersStore = defineStore('filters', () => {
6-
const filters: Ref<any[]> = ref([]);
7-
const sort: Ref<any> = ref({});
8+
const filters: Ref<FilterParams[]> = ref([]);
9+
const sort: Ref<sortType> = ref(null);
810
const coreStore = useCoreStore();
911

10-
const setSort = (s: any) => {
12+
const setSort = (s: sortType): void => {
1113
sort.value = s;
1214
}
13-
const getSort = () => {
15+
const getSort = (): sortType => {
1416
return sort.value;
1517
}
16-
const setFilter = (filter: any) => {
18+
const setFilter = (filter: FilterParams) => {
1719
const index = filters.value.findIndex(f => f.field === filter.field);
18-
if (filters.value[index] && filters.value[index].operator === filter.value.operator) {
20+
if (filters.value[index] && filters.value[index].operator === filter.operator) {
1921
filters.value[index] = filter;
2022
return;
2123
}
2224
filters.value.push(filter);
2325
}
24-
const setFilters = (f: any) => {
26+
const setFilters = (f: FilterParams[]) => {
2527
filters.value = f;
2628
}
27-
const getFilters = () => {
29+
const getFilters = (): FilterParams[] => {
2830
return filters.value;
2931
}
30-
const clearFilter = (fieldName: string) => {
32+
const clearFilter = (fieldName: string): void => {
3133
filters.value = filters.value.filter(f => f.field !== fieldName);
3234
}
33-
const clearFilters = () => {
35+
const clearFilters = (): void => {
3436
filters.value = [];
3537
}
3638

37-
const shouldFilterBeHidden = (fieldName: string) => {
39+
const shouldFilterBeHidden = (fieldName: string): boolean => {
3840
if (coreStore.resource?.columns) {
3941
const column = coreStore.resource.columns.find((col: any) => col.name === fieldName);
4042
if (column?.showIn?.filter !== true) {
@@ -48,7 +50,7 @@ export const useFiltersStore = defineStore('filters', () => {
4850
return filters.value.filter(f => !shouldFilterBeHidden(f.field)).length;
4951
});
5052

51-
return {
53+
const store = {
5254
setFilter,
5355
getFilters,
5456
clearFilters,
@@ -60,4 +62,6 @@ export const useFiltersStore = defineStore('filters', () => {
6062
shouldFilterBeHidden,
6163
clearFilter
6264
}
65+
66+
return store as AdminforthFilterStore;
6367
})

adminforth/spa/src/views/ListView.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ import { useRoute } from 'vue-router';
240240
import { getCustomComponent, initThreeDotsDropdown, getList, startBulkAction } from '@/utils';
241241
import ThreeDotsMenu from '@/components/ThreeDotsMenu.vue';
242242
import { Tooltip } from '@/afcl'
243-
import type { AdminForthComponentDeclaration, AdminForthComponentDeclarationFull } from '@/types/Common';
243+
import type { AdminForthComponentDeclaration, AdminForthComponentDeclarationFull, AdminForthFilterOperators } from '@/types/Common';
244244
245245
246246
import {
@@ -420,7 +420,7 @@ async function init() {
420420
const [_, field, operator] = k.split('__');
421421
return {
422422
field,
423-
operator,
423+
operator: operator as AdminForthFilterOperators,
424424
value: JSON.parse((route.query[k] as string))
425425
}
426426
});

0 commit comments

Comments
 (0)