Lagacy support for FILTER_HAS_CUSTOM_FIELDS_ANY and FILTER_HAS_CUSTOM_FIELDS_ALL
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user