Lagacy support for FILTER_HAS_CUSTOM_FIELDS_ANY and FILTER_HAS_CUSTOM_FIELDS_ALL
This commit is contained in:
parent
047754ea63
commit
67831a6216
@ -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],
|
||||
],
|
||||
]),
|
||||
},
|
||||
])
|
||||
})
|
||||
})
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user