[WEB-4885] feat: new filters architecture and UI components (#7802)

* feat: add rich filters types

* feat: add rich filters constants

* feat: add rich filters utils

* feat: add rich filters store in shared state package

* feat: add rich filters UI components

* fix: make setLoading optional in loadOptions function for improved flexibility

* chore: minor improvements to rich filters

* fix: formatting
This commit is contained in:
Prateek Shourya 2025-09-16 21:15:08 +05:30 committed by GitHub
parent 00e070b509
commit d521eab22f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
83 changed files with 4345 additions and 117 deletions

View file

@ -0,0 +1 @@
export * from "./rich-filter.helper";

View file

@ -0,0 +1,47 @@
// plane imports
import {
LOGICAL_OPERATOR,
TBuildFilterExpressionParams,
TExternalFilter,
TFilterProperty,
TFilterValue,
} from "@plane/types";
import { getOperatorForPayload } from "@plane/utils";
// local imports
import { FilterInstance } from "../store/rich-filters/filter";
/**
* Builds a temporary filter expression from conditions.
* @param params.conditions - The conditions for building the filter expression.
* @param params.adapter - The adapter for building the filter expression.
* @returns The temporary filter expression.
*/
export const buildTempFilterExpressionFromConditions = <
P extends TFilterProperty,
V extends TFilterValue,
E extends TExternalFilter,
>(
params: TBuildFilterExpressionParams<P, V, E>
): E | undefined => {
const { conditions, adapter } = params;
let tempExpression: E | undefined = undefined;
const tempFilterInstance = new FilterInstance<P, E>({
adapter,
onExpressionChange: (expression) => {
tempExpression = expression;
},
});
for (const condition of conditions) {
const { operator, isNegation } = getOperatorForPayload(condition.operator);
tempFilterInstance.addCondition(
LOGICAL_OPERATOR.AND,
{
property: condition.property,
operator,
value: condition.value,
},
isNegation
);
}
return tempExpression;
};