Skip to content

Commit c7eb191

Browse files
committed
chore: Update search filter fields after adding a filter
1 parent d6d8590 commit c7eb191

File tree

4 files changed

+80
-34
lines changed

4 files changed

+80
-34
lines changed

src/components/searchfilters/Main.vue

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
.col-6.col-md-2(v-show="comparator?.multiplefields")
2424
q-input(v-model="searchMax" label="Max" clearable :type="searchInputType" :disable="isFieldDisabled.search" )
2525
.col-12.col-md-1
26-
q-btn(color="primary" @click="addFilter" :disable="isFieldDisabled.addButton") Ajouter
26+
q-btn(color="primary" @click="addFilter" :disable="isFieldDisabled.addButton") Filtrer
2727
q-space
2828
.col-12.col-md-2
2929
slot(name="rightSelect")
@@ -85,13 +85,36 @@ const onFieldChange = (value: Field) => {
8585
}
8686
8787
const clearFields = (fields: string[]) => {
88-
if (fields.includes('field')) field = ref()
89-
if (fields.includes('comparator')) comparator = ref()
88+
if (fields.includes('field')) field.value = undefined
89+
if (fields.includes('comparator')) comparator.value = undefined
9090
search.value = ''
9191
searchMin.value = ''
9292
searchMax.value = ''
9393
}
9494
95+
const editFilter = (filter: Filter) => {
96+
// console.log(filter)
97+
if (filter.querySign === '@') {
98+
clearFields(['field', 'comparator'])
99+
return
100+
}
101+
if (comparator.value?.multiplefields) {
102+
clearFields(['field', 'comparator'])
103+
return
104+
}
105+
106+
field.value = fields?.find((field) => field.name === filter.field)
107+
comparator.value = comparatorTypes.value.find((comparator) => comparator.value === filter.querySign)
108+
fieldType.value = fields?.find((field) => field.name === filter.field)?.type
109+
110+
if (fieldType.value === 'date') {
111+
if (comparator.value.querySign === '<' || comparator.value.querySign === '>=') search.value = dayjs(filter.search).format('YYYY-MM-DD')
112+
if (comparator.value.querySign === '>' || comparator.value.querySign === '<=') search.value = dayjs(filter.search).format('YYYY-MM-DD')
113+
} else {
114+
search.value = filter.search
115+
}
116+
}
117+
95118
const addFilter = async () => {
96119
const searchFilter = getSearchFilter.value
97120
if (!searchFilter) return
@@ -179,12 +202,13 @@ const isFieldDisabled = computed(() => {
179202
field: false,
180203
comparator: !field.value,
181204
search: !field.value || !comparator.value,
182-
addButton: !field.value || !comparator.value || !search.value,
205+
addButton: !field.value || !comparator.value || (!search.value && !searchMin.value && !searchMax.value),
183206
}
184207
})
185208
186209
defineExpose({
187210
comparatorTypes,
188211
rightSelect,
212+
editFilter,
189213
})
190214
</script>

src/components/searchfilters/index.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
.row.q-gutter-sm.items-center.q-mt-sm
88
q-chip(
99
v-for="filter in filterArray" :key="filter.field"
10-
removable @remove="removeFilter(filter)"
10+
removable @remove="removeFilter(filter)" @click="editFilter(filter)" clickable
1111
)
1212
| {{ filter.label }}
1313
q-separator.q-mx-xs(vertical)
@@ -27,6 +27,7 @@ type MainData = {
2727
rightSelect: {
2828
options: Option[]
2929
}
30+
editFilter: (filter: Filter) => void
3031
}
3132
3233
defineOptions({
@@ -57,6 +58,10 @@ const parseSimpleFilter = (searchFilter: SearchFilter) => {
5758
}
5859
}
5960
61+
const editFilter = (filter: Filter) => {
62+
mainData.value?.editFilter(filter)
63+
}
64+
6065
const removeFilter = (filter: Filter) => {
6166
let key = `filters[${filter.querySign}${filter.field.replace('[]', '')}]`
6267
if (filter.field.endsWith('[]')) key += '[]'

src/composables/useColumnsIdentities.ts

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,14 @@ import type { components } from '#build/types/service-api'
33

44
type Identity = components['schemas']['IdentitiesDto']
55

6+
type ColumnType = {
7+
name: string
8+
type: string
9+
}
10+
611
interface ColumnConfig {
712
name: string;
13+
type: 'text' | 'number' | 'date';
814
label: string;
915
field: string | ((row: any) => any);
1016
required?: boolean;
@@ -37,7 +43,13 @@ function processFormat(value: any, format: any) {
3743
return value;
3844
}
3945

40-
export function useColumnsIdentites() {
46+
type useColumnsIdentitesReturnType = {
47+
columns: Ref<QTableProps['columns']>,
48+
visibleColumns: Ref<QTableProps['visibleColumns']>,
49+
columnsType: Ref<ColumnType[]>,
50+
}
51+
52+
export function useColumnsIdentites(): useColumnsIdentitesReturnType {
4153
const columns = ref<QTableProps['columns']>(
4254
[
4355
{
@@ -136,7 +148,39 @@ export function useColumnsIdentites() {
136148
// },
137149
// ])
138150

151+
const visibleColumns = ref<QTableProps['visibleColumns']>([
152+
// 'inetOrgPerson.uid',
153+
// 'inetOrgPerson.employeeNumber',
154+
// 'additionalFields.attributes.supannPerson.supannTypeEntiteAffectation',
155+
// 'envelope.observers.name',
156+
// 'envelope.assigned.name',
157+
// 'inetOrgPerson.cn',
158+
// 'inetOrgPerson.givenName',
159+
...config?.identitiesColumns?.entries.map((col: any) => col.name) || [],
160+
'metadata.lastUpdatedAt',
161+
'metadata.createdAt',
162+
'actions',
163+
'states',
164+
])
165+
const columnsType = ref<ColumnType[]>([
166+
// { name: 'inetOrgPerson.uid', type: 'text' },
167+
// { name: 'inetOrgPerson.employeeNumber', type: 'text' },
168+
// { name: 'additionalFields.attributes.supannPerson.supannTypeEntiteAffectation', type: 'text' },
169+
// { name: 'envelope.observers.name', type: 'text' },
170+
// { name: 'envelope.assigned.name', type: 'text' },
171+
// { name: 'inetOrgPerson.cn', type: 'text' },
172+
// { name: 'inetOrgPerson.givenName', type: 'text' },
173+
...config?.identitiesColumns?.entries.map((col: any) => ({ name: col.name, type: col.type || 'text' })) || [],
174+
{ name: 'metadata.lastUpdatedAt', type: 'date' },
175+
{ name: 'metadata.createdAt', type: 'date' },
176+
// { name: 'actions', type: 'text' },
177+
// { name: 'actions', type: 'text' },
178+
// { name: 'actions', type: 'text' },
179+
])
180+
139181
return {
140182
columns,
183+
visibleColumns,
184+
columnsType,
141185
}
142186
}

src/pages/identities/index.vue

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -97,34 +97,7 @@ if (error.value) {
9797
})
9898
}
9999
100-
const { columns } = useColumnsIdentites()
101-
const visibleColumns = ref<QTableProps['visibleColumns']>([
102-
'inetOrgPerson.uid',
103-
'inetOrgPerson.employeeNumber',
104-
'additionalFields.attributes.supannPerson.supannTypeEntiteAffectation',
105-
'envelope.observers.name',
106-
'envelope.assigned.name',
107-
'inetOrgPerson.cn',
108-
'inetOrgPerson.givenName',
109-
'metadata.lastUpdatedAt',
110-
'metadata.createdAt',
111-
'actions',
112-
'states',
113-
])
114-
const columnsType = ref([
115-
{ name: 'inetOrgPerson.uid', type: 'text' },
116-
{ name: 'inetOrgPerson.employeeNumber', type: 'text' },
117-
{ name: 'additionalFields.attributes.supannPerson.supannTypeEntiteAffectation', type: 'text' },
118-
{ name: 'envelope.observers.name', type: 'text' },
119-
{ name: 'envelope.assigned.name', type: 'text' },
120-
{ name: 'inetOrgPerson.cn', type: 'text' },
121-
{ name: 'inetOrgPerson.givenName', type: 'text' },
122-
{ name: 'metadata.lastUpdatedAt', type: 'date' },
123-
{ name: 'metadata.createdAt', type: 'date' },
124-
{ name: 'actions', type: 'text' },
125-
{ name: 'actions', type: 'text' },
126-
{ name: 'actions', type: 'text' },
127-
])
100+
const { columns, visibleColumns, columnsType } = useColumnsIdentites()
128101
129102
const selected = ref([])
130103

0 commit comments

Comments
 (0)