filterGroup.ts
TLDR
This file contains code for creating and manipulating filter groups. A filter group is a collection of filter clauses or other filter groups, which can be combined using logical operators 'and' or 'or'.
Methods
createFilterGroup
This method creates a filter group based on the provided object. The method takes an optional parameter o
of type FilterGroup
. If o
is provided, the method creates a new filter group based on its values. If o
is not provided or null, the method creates an empty filter group. The method recursively creates filter groups or filter clauses for each filter or group in the o
object.
isAFilterGroupInstance
This is a helper function that checks if an object is an instance of FilterGroup
. It returns true
if the object has properties 'operation' and 'filters', indicating that it is a filter group.
END
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {FilterClause, createFilterClause} from './filterClause'
type FilterGroupOperation = 'and' | 'or'
// A FilterGroup has 2 forms: (A or B or C) OR (A and B and C)
type FilterGroup = {
operation: FilterGroupOperation
filters: Array<FilterClause | FilterGroup>
}
function isAFilterGroupInstance(object: (FilterClause | FilterGroup)): object is FilterGroup {
return 'operation' in object && 'filters' in object
}
function createFilterGroup(o?: FilterGroup): FilterGroup {
let filters: Array<FilterClause | FilterGroup> = []
if (o?.filters) {
filters = o.filters.map((p: (FilterClause | FilterGroup)) => {
if (isAFilterGroupInstance(p)) {
return createFilterGroup(p)
}
return createFilterClause(p)
})
}
return {
operation: o?.operation || 'and',
filters,
}
}
export {FilterGroup, FilterGroupOperation, createFilterGroup, isAFilterGroupInstance}