import { BaseShareType } from "../Base"; import { Color } from "../Color"; import { ColumnAggregationFunction } from "../Column"; import { Conjunction, Filter, FilterSet } from "../Filter"; import { RowData } from "../Record"; export class CellColorConfig { type: CellColorType; options: DuplicateOptions | DefinitionsOptions; } class DuplicateOptions { color: Color; } class DefinitionsOptions { definitions: { id: string; color: Color; conjunction: Conjunction; filterSet: FilterSet[]; }[]; } interface DateColumnsType { label: string; startColumnId: string; endColumnId: string; color: string; } export type ColorDefinition = { color: Color; filterSet: Filter[]; conjunction: Conjunction; id: string; }; export interface ColorConfig { colorDefinitions?: ColorDefinition[] | null; defaultColor?: Color | null; selectColumnId?: string | null; dateColumns?: DateColumnsType[]; type: "selectColumn" | "colorDefinitions" | "dateColumns" | null; } export interface ViewColumn { id: string; visibility: boolean; width: number; cellColorConfig?: CellColorConfig; } export enum CellColorType { HighlightRepeated = "highlightRepeated", Definitions = "definitions", } export interface GroupBy { columnId: string; ascending: boolean; id: string; } export interface ShareConfigInfo { id: string; hasPassword: boolean; options?: { allowCopy?: boolean; type?: BaseShareType; }; } export type Sort = GroupBy; export type GroupBys = GroupBy[]; export type Sorts = GroupBy[]; export interface FormMetaData { coverImageUrl?: string; description?: string; logoImageUrl?: string; fieldsByColumnId?: Record; } export interface FormColumnData { required?: boolean; description?: string; title?: string; useFilters?: boolean; filters?: { conjunction?: Conjunction; filterSet?: Filter[]; }; } export enum RowHeight { S = 32, M = 64, L = 88, XL = 120, // S = 32, // M = 54, // L = 98, // XL = 142, } export enum RowHeightCN { S = "低", M = "中", L = "高", XL = "超高", } export interface GridMetaData { rowHeight?: RowHeight; frozenColumnCount: number; summaryBarConfigsByColumnId?: Partial< Record< PropertyKey, Record<"aggregationFunction", ColumnAggregationFunction> > >; } export interface GanttMetaData { startColumnId: ViewColumn["id"]; endColumnId: ViewColumn["id"]; labelColumnId: ViewColumn["id"]; useMilestones: boolean; milestones: { [dateString: string]: string; }; } export interface GalleryMetaData { coverColumnId?: string; coverFitType?: "fit" | "crop"; showColumnName?: boolean; } export interface KanbanMetaData { coverColumnId?: string; coverFitType?: "fit" | "crop"; showColumnName?: boolean; } export interface CalendarMetaData { dateColumnRanges?: DateColumnRange[]; } export interface DateColumnRange { startColumnId: string; endColumnId?: string; label?: string; color?: string; } export type MetaData = | FormMetaData | GridMetaData | GalleryMetaData | CalendarMetaData | KanbanMetaData | GanttMetaData; export interface ViewData { id: string; columns: ViewColumn[]; rows: Pick[]; colorConfig?: ColorConfig | null; groups?: GroupBys; sorts?: Sorts; filter?: { conjunction: Conjunction; items: Filter[]; }; share?: ShareConfigInfo; } export interface ViewSchema { type: ViewType; id: string; name: string; mutabilityType: ViewMutabilityType; userId?: number | null; description?: string; metadata?: MetaData; lockDetail?: { description: string; userId: number; }; } export const ViewTypeCn = { grid: "表格视图", form: "表单视图", gallery: "画册视图", kanban: "看板视图", gantt: "甘特视图", calendar: "日历视图", }; export enum ViewType { Grid = "grid", Form = "form", Kanban = "kanban", Gallery = "gallery", Gantt = "gantt", Calendar = "calendar", } export enum ViewMutabilityType { Locked = "locked", Personal = "personal", Collaborative = "collaborative", }