1
0
forked from test/crm

fix: render quick filters is view control component

This commit is contained in:
Shariq Ansari 2024-05-17 16:56:53 +05:30
parent f5881424dc
commit 440bb05052
2 changed files with 53 additions and 2 deletions

View File

@ -178,7 +178,7 @@ function convertFilters(data, allFilters) {
let field = data.find((f) => f.fieldname === key)
if (typeof value !== 'object') {
value = ['=', value]
if (field.fieldtype === 'Check') {
if (field?.fieldtype === 'Check') {
value = ['equals', value[1] ? 'Yes' : 'No']
}
}

View File

@ -1,5 +1,5 @@
<template>
<div class="flex items-center justify-between px-5 py-4">
<div class="flex items-center justify-between gap-2 px-5 py-4">
<div class="flex items-center gap-2">
<Dropdown :options="viewsDropdownOptions">
<template #default="{ open }">
@ -22,6 +22,34 @@
</template>
</Dropdown>
</div>
<div class="flex items-center flex-1 gap-2 border-l pl-2">
<div v-for="filter in quickFilters.data" :key="filter.name">
<FormControl
v-if="filter.type == 'Check'"
:label="filter.label"
type="checkbox"
v-model="filter.value"
@change.stop="applyQuickFilter(filter, $event.target.value)"
/>
<FormControl
v-else-if="filter.type === 'Select'"
class="form-control cursor-pointer [&_select]:cursor-pointer"
type="select"
v-model="filter.value"
:options="filter.options"
:placeholder="filter.label"
@change.stop="applyQuickFilter(filter, $event.target.value)"
/>
<FormControl
v-else
:value="filter.value"
type="text"
:placeholder="filter.label"
:debounce="500"
@change.stop="applyQuickFilter(filter, $event.target.value)"
/>
</div>
</div>
<div class="flex items-center gap-2">
<div
v-if="viewUpdated && route.query.view && (!view.public || isManager())"
@ -384,6 +412,29 @@ const viewsDropdownOptions = computed(() => {
return _views
})
const quickFilters = createResource({
url: 'crm.api.doc.get_quick_filters',
params: { doctype: props.doctype },
auto: true,
})
function applyQuickFilter(filter, value) {
let filters = { ...list.value.params.filters }
let field = filter.name
if (value) {
if (['Check', 'Select'].includes(filter.type)) {
filters[field] = value
} else {
filters[field] = ['LIKE', `%${value}%`]
}
filter['value'] = value
} else {
delete filters[field]
filter['value'] = ''
}
updateFilter(filters)
}
function updateFilter(filters) {
viewUpdated.value = true
if (!defaultParams.value) {