diff --git a/frontend/src/Editor/Components/Table/Filter.jsx b/frontend/src/Editor/Components/Table/Filter.jsx index 899520aa22..d6149e5d9c 100644 --- a/frontend/src/Editor/Components/Table/Filter.jsx +++ b/frontend/src/Editor/Components/Table/Filter.jsx @@ -14,10 +14,11 @@ export function Filter(props) { const [activeFilters, set] = React.useState(filters); - function filterColumnChanged(index, value, name) { + function filterColumnChanged(index, value) { + const filter = props.columns.find((column) => column.value === value); const newFilters = filters; - newFilters[index].id = value; - newFilters[index].value.where = name; + newFilters[index].id = filter.value; + newFilters[index].value.column = filter.name; mergeToFilterDetails({ filters: newFilters, }); @@ -28,8 +29,14 @@ export function Filter(props) { const newFilters = filters; newFilters[index].value = { ...newFilters[index].value, - operation: value, + condition: value, }; + + //* if condition is "is empty" or "is not empty" then clear the filter query value + if (value === 'isEmpty' || value === 'isNotEmpty') { + newFilters[index].value.value = ''; + } + mergeToFilterDetails({ filters: newFilters, }); @@ -49,7 +56,7 @@ export function Filter(props) { } function addFilter() { - mergeToFilterDetails({ filters: [...filters, { id: '', value: { operation: 'contains', value: '' } }] }); + mergeToFilterDetails({ filters: [...filters, { id: '', value: { condition: 'contains', value: '' } }] }); } function removeFilter(index) { @@ -114,20 +121,24 @@ export function Filter(props) { -
+
{props.filters.map((filter, index) => (
- {index > 0 ? 'and' : 'where'} + {index > 0 ? 'and' : 'column'}
{ const filterDiff = deepDiff(oldFilters, newFilters); const getType = (obj) => { - if (!obj?.where && !obj?.operation) { + if (!obj?.column && !obj?.condition) { return 'value'; } - if (obj?.where) { - return 'where'; + if (obj?.column) { + return 'column'; } - if (obj?.operation) { - return 'operation'; + if (obj?.condition) { + return 'condition'; } }; @@ -226,15 +237,23 @@ const findFilterDiff = (oldFilters, newFilters) => { function shouldFireEvent(diff, filter) { if (!diff || !filter) return false; + function forEmptyOperationAndNotEmptyOperation(condition) { + if (condition !== 'isEmpty' || condition !== 'isNotEmpty') { + return filter[diff.keyIndex]?.value?.column ? true : false; + } + + return filter[diff.keyIndex]?.value?.value && filter[diff.keyIndex]?.value?.column ? true : false; + } + switch (diff.type) { case 'value': - return filter[diff.keyIndex].value.where && filter[diff.keyIndex].value.operation ? true : false; + return filter[diff.keyIndex]?.value?.column && filter[diff.keyIndex]?.value?.condition ? true : false; - case 'where': - return filter[diff.keyIndex].value.value && filter[diff.keyIndex].value.operation ? true : false; + case 'column': + return filter[diff.keyIndex]?.value?.value && filter[diff.keyIndex]?.value?.condition ? true : false; - case 'operation': - return filter[diff.keyIndex].value.value && filter[diff.keyIndex].value.where ? true : false; + case 'condition': + return forEmptyOperationAndNotEmptyOperation(filter[diff.keyIndex]?.value?.condition); default: return false;