feat(core): expose Base conditional coloring types (#7407)

This commit is contained in:
Univer
2026-08-03 18:40:38 +08:00
committed by GitHub
parent e971306ad1
commit c6b6097f4a
2 changed files with 129 additions and 39 deletions
+15 -1
View File
@@ -28,7 +28,18 @@ export {
isBaseRecordIdFieldName,
isValidBaseRecordId,
} from './record-identity';
export { BaseFieldType, BaseFilterConjunction, BaseFilterOperator, BaseHierarchyInvalidReason, BaseRecordLinkRole, BaseSortDirection, BaseViewType } from './typedef';
export {
BaseConditionalColorOperator,
BaseConditionalColorTarget,
BaseConditionalDateMode,
BaseFieldType,
BaseFilterConjunction,
BaseFilterOperator,
BaseHierarchyInvalidReason,
BaseRecordLinkRole,
BaseSortDirection,
BaseViewType,
} from './typedef';
export type {
BaseCellMatrix,
BaseCellPrimitiveValue,
@@ -46,6 +57,8 @@ export type {
FieldSnapshot,
IBaseAttachment,
IBaseCellData,
IBaseConditionalColoringConfig,
IBaseConditionalColorRule,
IBaseDateFieldConfig,
IBaseHierarchyNodeProjection,
IBaseHierarchyProjection,
@@ -54,6 +67,7 @@ export type {
IBaseResources,
IBaseSnapshot,
IBaseViewColorCondition,
IBaseViewCommonConfig,
IBaseViewport,
ICalendarEventResizeSelection,
ICalendarEventSelection,
+114 -38
View File
@@ -170,6 +170,114 @@ export type FieldConfig = Record<string, unknown>;
export type BaseDateHourCycle = 'h12' | 'h24';
/** Where a Base conditional color is painted when its condition matches. */
export const BaseConditionalColorTarget = {
/** Paint only the cell in the rule's field. */
CELL: 'cell',
/** Paint the complete record row. */
ROW: 'row',
/** Paint the rule's field column unconditionally; operator, operand, and date mode are ignored. */
COLUMN: 'column',
} as const;
export type BaseConditionalColorTarget = typeof BaseConditionalColorTarget[keyof typeof BaseConditionalColorTarget];
/**
* Operators supported by Base conditional coloring rules.
*
* Text, select, person, and similar fields support equality, containment, and
* empty checks. Number, currency, progress, and rating fields support equality,
* numeric comparison, and empty checks. Date-like fields support equality,
* before/after, and empty checks. Checkbox fields support equality only.
*/
export const BaseConditionalColorOperator = {
IS: 'is',
IS_NOT: 'isNot',
CONTAINS: 'contains',
NOT_CONTAINS: 'notContains',
IS_EMPTY: 'isEmpty',
IS_NOT_EMPTY: 'isNotEmpty',
GREATER_THAN: 'greaterThan',
LESS_THAN: 'lessThan',
BEFORE: 'before',
AFTER: 'after',
} as const;
export type BaseConditionalColorOperator = typeof BaseConditionalColorOperator[keyof typeof BaseConditionalColorOperator];
/**
* Relative or exact date windows supported by date conditional coloring rules.
*
* With `IS`, dates inside the selected window match. `IS_NOT` matches dates
* outside it, `BEFORE` matches dates before its start, and `AFTER` matches
* dates after its end. Relative windows do not use an operand; `EXACT` does.
*/
export const BaseConditionalDateMode = {
EXACT: 'exact',
TODAY: 'today',
TOMORROW: 'tomorrow',
YESTERDAY: 'yesterday',
THIS_WEEK: 'thisWeek',
LAST_WEEK: 'lastWeek',
THIS_MONTH: 'thisMonth',
LAST_MONTH: 'lastMonth',
PAST_7_DAYS: 'past7',
NEXT_7_DAYS: 'next7',
PAST_30_DAYS: 'past30',
NEXT_30_DAYS: 'next30',
} as const;
export type BaseConditionalDateMode = typeof BaseConditionalDateMode[keyof typeof BaseConditionalDateMode];
/**
* A color condition stored by a Base view.
*
* Rules are evaluated in array order. Earlier matching rules are painted last
* and therefore have higher visual priority than later matching rules.
*/
export interface IBaseViewColorCondition {
/** Stable id unique within the view. */
id: string;
/** Valid CSS color rendered for a match, for example `#fde9e9` or `rgba(255, 0, 0, 0.2)`. */
color: string;
/** Paint target. Gantt color conditions may omit it for legacy snapshots. */
target?: BaseConditionalColorTarget;
/** Field whose value is evaluated for cell/row targets, or whose column is painted for a column target. */
fieldId: FieldId;
/** Comparison performed against the field value. Ignored for a column target. */
operator: BaseConditionalColorOperator;
/**
* Comparison value in the field's normal value shape: number for numeric
* fields, boolean for checkbox fields, text/option ids for text and select
* fields, or a date-compatible value for an exact date comparison. Ignored
* by empty checks, relative date modes, and column targets.
*/
operand?: unknown;
/**
* Exact or relative date window for Date, CreatedAt, and UpdatedAt fields.
* Defaults to `EXACT` when omitted. Ignored for a column target.
*/
dateMode?: BaseConditionalDateMode;
}
/** A complete Base conditional coloring rule used by Grid and other Base views. */
export interface IBaseConditionalColorRule extends IBaseViewColorCondition {
/** Paint target for the matching rule. */
target: BaseConditionalColorTarget;
}
/** Persisted conditional coloring configuration for one Base view. */
export interface IBaseConditionalColoringConfig {
/** Rules in descending visual-priority order. */
rules: IBaseConditionalColorRule[];
}
/** Configuration shared by every Base view type. */
export interface IBaseViewCommonConfig {
/** Conditional coloring rules, or `null` when the feature is cleared. */
conditionalColoring?: IBaseConditionalColoringConfig | null;
}
/**
* Display options for Date, CreatedAt, and UpdatedAt fields.
*/
@@ -194,7 +302,7 @@ export type ViewSpecificConfig =
| ICalendarViewConfig
| IGanttViewConfig
| IGalleryViewConfig
| Record<string, unknown>;
| (IBaseViewCommonConfig & Record<string, unknown>);
export interface IBaseSnapshot {
id: BaseId;
@@ -344,7 +452,7 @@ export interface IGroupConfig {
hideEmptyGroup?: boolean;
}
export interface IGridViewConfig {
export interface IGridViewConfig extends IBaseViewCommonConfig {
frozenFieldCount?: number;
showRecordIndex?: boolean;
rowHeight?: 'short' | 'medium' | 'tall' | 'extraTall';
@@ -369,7 +477,7 @@ export interface IKanbanColumnSetting {
collapsed?: boolean;
}
export interface IKanbanViewConfig {
export interface IKanbanViewConfig extends IBaseViewCommonConfig {
groupFieldId: FieldId;
coverFieldId?: FieldId | null;
cardLayout?: KanbanCardLayoutMode;
@@ -379,7 +487,7 @@ export interface IKanbanViewConfig {
card?: ICardLayoutConfig;
}
export interface ICalendarViewConfig {
export interface ICalendarViewConfig extends IBaseViewCommonConfig {
startDateFieldId: FieldId;
endDateFieldId?: FieldId;
titleFieldId?: FieldId;
@@ -391,39 +499,7 @@ export interface ICalendarViewConfig {
fieldSettings?: Record<FieldId, { hidden?: boolean; order?: number }>;
}
export interface IBaseViewColorCondition {
id: string;
color: string;
target?: 'cell' | 'row' | 'column';
fieldId: FieldId;
operator:
| 'is'
| 'isNot'
| 'contains'
| 'notContains'
| 'isEmpty'
| 'isNotEmpty'
| 'greaterThan'
| 'lessThan'
| 'before'
| 'after';
operand?: unknown;
dateMode?:
| 'exact'
| 'today'
| 'tomorrow'
| 'yesterday'
| 'thisWeek'
| 'lastWeek'
| 'thisMonth'
| 'lastMonth'
| 'past7'
| 'next7'
| 'past30'
| 'next30';
}
export interface IGanttViewConfig {
export interface IGanttViewConfig extends IBaseViewCommonConfig {
startDateFieldId: FieldId;
endDateFieldId: FieldId;
titleFieldId?: FieldId;
@@ -451,7 +527,7 @@ export interface IGanttViewConfig {
};
}
export interface IGalleryViewConfig {
export interface IGalleryViewConfig extends IBaseViewCommonConfig {
card: ICardLayoutConfig;
coverFieldId?: FieldId | null;
cardLayout?: KanbanCardLayoutMode;