Lagacy support for FILTER_HAS_CUSTOM_FIELDS_ANY and FILTER_HAS_CUSTOM_FIELDS_ALL

This commit is contained in:
shamoon 2024-09-02 20:19:14 -07:00
parent 047754ea63
commit 67831a6216
2 changed files with 107 additions and 3 deletions

View File

@ -2,13 +2,17 @@ import { convertToParamMap } from '@angular/router'
import { FilterRule } from '../data/filter-rule'
import {
FILTER_CORRESPONDENT,
FILTER_CUSTOM_FIELDS_LOOKUP,
FILTER_HAS_ANY_TAG,
FILTER_HAS_CUSTOM_FIELDS_ALL,
FILTER_HAS_CUSTOM_FIELDS_ANY,
FILTER_HAS_TAGS_ALL,
} from '../data/filter-rule-type'
import { paramsToViewState } from './query-params'
import { paramsToViewState, transformLegacyFilterRules } from './query-params'
import { paramsFromViewState } from './query-params'
import { queryParamsFromFilterRules } from './query-params'
import { filterRulesFromQueryParams } from './query-params'
import { CustomFieldQueryLogicalOperator } from '../components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component'
const tags__id__all = '9'
const filterRules: FilterRule[] = [
@ -193,4 +197,58 @@ describe('QueryParams Utils', () => {
},
])
})
it('should transform legacy filter rules', () => {
let filterRules: FilterRule[] = [
{
rule_type: FILTER_HAS_CUSTOM_FIELDS_ANY,
value: '1',
},
{
rule_type: FILTER_HAS_CUSTOM_FIELDS_ANY,
value: '2',
},
]
let transformedFilterRules = transformLegacyFilterRules(filterRules)
expect(transformedFilterRules).toEqual([
{
rule_type: FILTER_CUSTOM_FIELDS_LOOKUP,
value: JSON.stringify([
CustomFieldQueryLogicalOperator.Or,
[
[1, 'exists', true],
[2, 'exists', true],
],
]),
},
])
filterRules = [
{
rule_type: FILTER_HAS_CUSTOM_FIELDS_ALL,
value: '3',
},
{
rule_type: FILTER_HAS_CUSTOM_FIELDS_ALL,
value: '4',
},
]
transformedFilterRules = transformLegacyFilterRules(filterRules)
expect(transformedFilterRules).toEqual([
{
rule_type: FILTER_CUSTOM_FIELDS_LOOKUP,
value: JSON.stringify([
CustomFieldQueryLogicalOperator.And,
[
[3, 'exists', true],
[4, 'exists', true],
],
]),
},
])
})
})

View File

@ -1,7 +1,14 @@
import { ParamMap, Params } from '@angular/router'
import { FilterRule } from '../data/filter-rule'
import { FilterRuleType, FILTER_RULE_TYPES } from '../data/filter-rule-type'
import {
FilterRuleType,
FILTER_RULE_TYPES,
FILTER_HAS_CUSTOM_FIELDS_ANY,
FILTER_CUSTOM_FIELDS_LOOKUP,
FILTER_HAS_CUSTOM_FIELDS_ALL,
} from '../data/filter-rule-type'
import { ListViewState } from '../services/document-list-view.service'
import { CustomFieldQueryLogicalOperator } from '../components/common/custom-fields-query-dropdown/custom-fields-query-dropdown.component'
const SORT_FIELD_PARAMETER = 'sort'
const SORT_REVERSE_PARAMETER = 'reverse'
@ -40,6 +47,43 @@ export function paramsToViewState(queryParams: ParamMap): ListViewState {
}
}
export function transformLegacyFilterRules(
filterRules: FilterRule[]
): FilterRule[] {
const LEGACY_CUSTOM_FIELD_FILTER_RULE_TYPES = [
FILTER_HAS_CUSTOM_FIELDS_ANY,
FILTER_HAS_CUSTOM_FIELDS_ALL,
]
if (
filterRules.filter((rule) =>
LEGACY_CUSTOM_FIELD_FILTER_RULE_TYPES.includes(rule.rule_type)
).length
) {
const anyRules = filterRules.filter(
(rule) => rule.rule_type === FILTER_HAS_CUSTOM_FIELDS_ANY
)
const allRules = filterRules.filter(
(rule) => rule.rule_type === FILTER_HAS_CUSTOM_FIELDS_ALL
)
const customFieldQueryLogicalOperator = allRules.length
? CustomFieldQueryLogicalOperator.And
: CustomFieldQueryLogicalOperator.Or
const valueRules = allRules.length ? allRules : anyRules
const customFieldQueryExpression = [
customFieldQueryLogicalOperator,
[...valueRules.map((rule) => [parseInt(rule.value), 'exists', true])],
]
filterRules.push({
rule_type: FILTER_CUSTOM_FIELDS_LOOKUP,
value: JSON.stringify(customFieldQueryExpression),
})
}
// TODO: can we support FILTER_DOES_NOT_HAVE_CUSTOM_FIELDS or FILTER_HAS_ANY_CUSTOM_FIELDS?
return filterRules.filter(
(rule) => !LEGACY_CUSTOM_FIELD_FILTER_RULE_TYPES.includes(rule.rule_type)
)
}
export function filterRulesFromQueryParams(
queryParams: ParamMap
): FilterRule[] {
@ -77,7 +121,9 @@ export function filterRulesFromQueryParams(
})
)
})
filterRulesFromQueryParams = transformLegacyFilterRules(
filterRulesFromQueryParams
)
return filterRulesFromQueryParams
}