[WEB-4951] [WEB-4884] feat: work item filters revamp (#7810)

This commit is contained in:
Prateek Shourya 2025-09-19 18:27:36 +05:30 committed by GitHub
parent e6a7ca4c72
commit 9aef5d4aa9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
160 changed files with 5879 additions and 4881 deletions

View file

@ -6,7 +6,6 @@ import { IStateLite } from "./state";
import { IUserLite } from "./users";
import {
IIssueDisplayProperties,
IIssueFilterOptions,
TIssueExtraOptions,
TIssueGroupByOptions,
TIssueGroupingFilters,
@ -219,7 +218,6 @@ export interface IIssueListRow {
}
export interface ILayoutDisplayFiltersOptions {
filters: (keyof IIssueFilterOptions)[];
display_properties: (keyof IIssueDisplayProperties)[];
display_filters: {
group_by?: TIssueGroupByOptions[];

View file

@ -13,6 +13,7 @@ export type TNegativeOperatorConfig = { allowNegative: true; negOperatorLabel?:
* - negativeOperatorConfig: Configuration for negative operators
*/
export type TBaseFilterFieldConfig = {
isOperatorEnabled?: boolean;
operatorLabel?: string;
} & TNegativeOperatorConfig;

View file

@ -26,13 +26,16 @@ export const CORE_COMPARISON_OPERATOR = {
RANGE: "range",
} as const;
// -------- TYPE EXPORTS --------
type TCoreEqualityOperator = (typeof CORE_EQUALITY_OPERATOR)[keyof typeof CORE_EQUALITY_OPERATOR];
type TCoreCollectionOperator = (typeof CORE_COLLECTION_OPERATOR)[keyof typeof CORE_COLLECTION_OPERATOR];
type TCoreComparisonOperator = (typeof CORE_COMPARISON_OPERATOR)[keyof typeof CORE_COMPARISON_OPERATOR];
/**
* All core operators
*/
export const CORE_OPERATORS = {
...CORE_EQUALITY_OPERATOR,
...CORE_COLLECTION_OPERATOR,
...CORE_COMPARISON_OPERATOR,
} as const;
/**
* All core operators that can be used in filter conditions
*/
export type TCoreSupportedOperators = TCoreEqualityOperator | TCoreCollectionOperator | TCoreComparisonOperator;
export type TCoreSupportedOperators = (typeof CORE_OPERATORS)[keyof typeof CORE_OPERATORS];

View file

@ -18,16 +18,15 @@ export const EXTENDED_COLLECTION_OPERATOR = {} as const;
*/
export const EXTENDED_COMPARISON_OPERATOR = {} as const;
// -------- TYPE EXPORTS --------
type TExtendedEqualityOperator = (typeof EXTENDED_EQUALITY_OPERATOR)[keyof typeof EXTENDED_EQUALITY_OPERATOR];
type TExtendedCollectionOperator = (typeof EXTENDED_COLLECTION_OPERATOR)[keyof typeof EXTENDED_COLLECTION_OPERATOR];
type TExtendedComparisonOperator = (typeof EXTENDED_COMPARISON_OPERATOR)[keyof typeof EXTENDED_COMPARISON_OPERATOR];
/**
* All extended operators
*/
export const EXTENDED_OPERATORS = {
...EXTENDED_EQUALITY_OPERATOR,
...EXTENDED_COLLECTION_OPERATOR,
...EXTENDED_COMPARISON_OPERATOR,
} as const;
/**
* All extended operators that can be used in filter conditions
*/
export type TExtendedSupportedOperators =
| TExtendedEqualityOperator
| TExtendedCollectionOperator
| TExtendedComparisonOperator;
export type TExtendedSupportedOperators = (typeof EXTENDED_OPERATORS)[keyof typeof EXTENDED_OPERATORS];

View file

@ -1,4 +1,6 @@
import { TIssue } from "./issues/issue";
import { LOGICAL_OPERATOR, TSupportedOperators } from "./rich-filters";
import { CompleteOrEmpty } from "./utils";
export type TIssueLayouts = "list" | "kanban" | "calendar" | "spreadsheet" | "gantt_chart";
@ -47,7 +49,7 @@ export type TIssueOrderByOptions =
| "sub_issues_count"
| "-sub_issues_count";
export type TIssueGroupingFilters = "active" | "backlog" | null;
export type TIssueGroupingFilters = "active" | "backlog";
export type TIssueExtraOptions = "show_empty_groups" | "sub_issue";
@ -76,10 +78,47 @@ export type TIssueParams =
| "per_page"
| "issue_type"
| "layout"
| "expand";
| "expand"
| "filters";
export type TCalendarLayouts = "month" | "week";
/**
* Keys for the work item filter properties
*/
export const WORK_ITEM_FILTER_PROPERTY_KEYS = [
"state_group",
"priority",
"start_date",
"target_date",
"assignee_id",
"mention_id",
"created_by_id",
"subscriber_id",
"label_id",
"state_id",
"cycle_id",
"module_id",
"project_id",
] as const;
export type TWorkItemFilterProperty = (typeof WORK_ITEM_FILTER_PROPERTY_KEYS)[number];
export type TWorkItemFilterConditionKey = `${TWorkItemFilterProperty}__${TSupportedOperators}`;
export type TWorkItemFilterConditionData = Partial<{
[K in TWorkItemFilterConditionKey]: string;
}>;
export type TWorkItemFilterAndGroup = {
[LOGICAL_OPERATOR.AND]: TWorkItemFilterConditionData[];
};
export type TWorkItemFilterGroup = TWorkItemFilterAndGroup;
export type TWorkItemFilterExpressionData = TWorkItemFilterConditionData | TWorkItemFilterGroup;
export type TWorkItemFilterExpression = CompleteOrEmpty<TWorkItemFilterExpressionData>;
export interface IIssueFilterOptions {
assignees?: string[] | null;
mentions?: string[] | null;
@ -109,7 +148,6 @@ export interface IIssueDisplayFilterOptions {
order_by?: TIssueOrderByOptions;
show_empty_groups?: boolean;
sub_issue?: boolean;
type?: TIssueGroupingFilters;
}
export interface IIssueDisplayProperties {
assignee?: boolean;
@ -136,14 +174,20 @@ export type TIssueKanbanFilters = {
};
export interface IIssueFilters {
filters: IIssueFilterOptions | undefined;
richFilters: TWorkItemFilterExpression;
displayFilters: IIssueDisplayFilterOptions | undefined;
displayProperties: IIssueDisplayProperties | undefined;
kanbanFilters: TIssueKanbanFilters | undefined;
}
export interface IIssueFiltersResponse {
export type TSupportedFilterForUpdate = IIssueDisplayFilterOptions | IIssueDisplayProperties | TIssueKanbanFilters;
export interface ISubWorkItemFilters extends Omit<IIssueFilters, "richFilters"> {
filters: IIssueFilterOptions;
}
export interface IIssueFiltersResponse {
rich_filters: TWorkItemFilterExpression;
display_filters: IIssueDisplayFilterOptions;
display_properties: IIssueDisplayProperties;
}
@ -172,17 +216,16 @@ export interface IWorkspaceViewIssuesParams {
target_date?: string | undefined;
project?: string | undefined;
order_by?: string | undefined;
type?: "active" | "backlog" | undefined;
sub_issue?: boolean;
}
export interface IProjectViewProps {
rich_filters: TWorkItemFilterExpression;
display_filters: IIssueDisplayFilterOptions | undefined;
filters: IIssueFilterOptions;
}
export interface IWorkspaceViewProps {
filters: IIssueFilterOptions;
rich_filters: TWorkItemFilterExpression;
display_filters: IIssueDisplayFilterOptions | undefined;
display_properties: IIssueDisplayProperties;
}

View file

@ -1,5 +1,10 @@
import { TLogoProps } from "./common";
import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "./view-props";
import {
IIssueDisplayFilterOptions,
IIssueDisplayProperties,
IIssueFilterOptions,
TWorkItemFilterExpression,
} from "./view-props";
export enum EViewAccess {
PRIVATE,
@ -16,7 +21,7 @@ export interface IProjectView {
updated_by: string;
name: string;
description: string;
filters: IIssueFilterOptions;
rich_filters: TWorkItemFilterExpression;
display_filters: IIssueDisplayFilterOptions;
display_properties: IIssueDisplayProperties;
query: IIssueFilterOptions;
@ -29,6 +34,10 @@ export interface IProjectView {
owned_by: string;
}
export interface IPublishedProjectView extends Omit<IProjectView, "rich_filters"> {
filters: IIssueFilterOptions;
}
export type TPublishViewSettings = {
is_comments_enabled: boolean;
is_reactions_enabled: boolean;

View file

@ -2,7 +2,7 @@ import {
IWorkspaceViewProps,
IIssueDisplayFilterOptions,
IIssueDisplayProperties,
IIssueFilterOptions,
TWorkItemFilterExpression,
} from "./view-props";
import { EViewAccess } from "./views";
@ -16,7 +16,7 @@ export interface IWorkspaceView {
updated_by: string;
name: string;
description: string;
filters: IIssueFilterOptions;
rich_filters: TWorkItemFilterExpression;
display_filters: IIssueDisplayFilterOptions;
display_properties: IIssueDisplayProperties;
query: any;
@ -32,4 +32,6 @@ export interface IWorkspaceView {
};
}
export type TStaticViewTypes = "all-issues" | "assigned" | "created" | "subscribed";
export const STATIC_VIEW_TYPES = ["all-issues", "assigned", "created", "subscribed"];
export type TStaticViewTypes = (typeof STATIC_VIEW_TYPES)[number];