import { FilterSet } from "../Filter"; import { Color, TagColor } from "../Color"; import { ViewColumn } from "../View"; export const ColumnTypeCn = { text: "单行文本", multilineText: "多行文本", select: "单选", multiSelect: "多选", date: "日期", attachment: "附件", checkbox: "复选框", collaborator: "成员", formula: "公式", number: "数值", percent: "百分比", url: "链接", currency: "货币", autoNumber: "流水号", foreignKey: "外键", createdAt: "创建时间", lastModifiedTime: "最后更新时间", createdBy: "创建人", lastModifiedBy: "修改人", computation: "", multiCollaborator: "成员", rollup: "聚合", lookup: "引用", cascade: "级联", multiCascade: "级联", geolocation: "地理位置", button: "按钮", dataStatus: "数据状态", }; export enum ColumnValueType { text = "string", multilineText = "string", select = "string", multiSelect = "string[]", date = "Date", attachment = "file[]", checkbox = "boolean", collaborator = "number", formula = "string", number = "number", url = "string", currency = "number", percent = "number", autoNumber = "number", foreignKey = "Object[]", createdAt = "Date", lastModifiedTime = "Date", createdBy = "number", lastModifiedBy = "number", computation = "", multiCollaborator = "number[]", rollup = "any[]", lookup = "any[]", cascade = "string[]", multiCascade = "string[]", geolocation = "number[]", button = "null", dataStatus = "string", } export enum ColumnTypeDesc { text = "适用于简短不换行符的文字信息,例如姓名、文章标题等", multilineText = "适用于多行详细描述文本,例如文章内容等", select = "选择单个选项的字段", multiSelect = "可选单个或多个选项的字段", date = "选择日期和时间的字段", attachment = "用来展示一个或一些文件的字段", checkbox = "表示两种状态之间切换的字段", collaborator = "单选成员字段", formula = "通过公式和函数运算后的结果", number = "数值的字段", url = "URL 地址", percent = "百分比数值字段", currency = "金额数值字段", autoNumber = "创建记录时自动为数据生成唯一的编号,不支持手动写入", foreignKey = "", createdAt = "创建此记录的日期和时间", lastModifiedTime = "最后更新此记录的日期和时间", createdBy = "创建此记录的成员", lastModifiedBy = "最后修改此记录的成员", computation = "", multiCollaborator = "多选成员字段", rollup = "聚合字段", lookup = "在外键记录上查找字段", cascade = "使用级联选项的选择字段", multiCascade = "使用级联选项的选择字段", geolocation = "地理位置", button = "按钮", dataStatus = "数据状态", } export enum ColumnType { Text = "text", MultilineText = "multilineText", Checkbox = "checkbox", Date = "date", Select = "select", MultiSelect = "multiSelect", // email: '邮箱', Url = "url", Number = "number", Percent = "percent", Attachment = "attachment", ForeignKey = "foreignKey", Formula = "formula", // Computation = 'computation', Currency = "currency", CreatedAt = "createdAt", LastModifiedTime = "lastModifiedTime", CreatedBy = "createdBy", LastModifiedBy = "lastModifiedBy", Collaborator = "collaborator", MultiCollaborator = "multiCollaborator", Computation = "computation", AutoNumber = "autoNumber", Rollup = "rollup", Lookup = "lookup", Cascade = "cascade", MultiCascade = "multiCascade", GeoLocation = "geolocation", Button = "button", DataStatus = "dataStatus", } /** * @description: 允许导入的excel数据类型 */ export const AcceptableExcelColumnTypes = [ ColumnType.Text, ColumnType.MultilineText, ColumnType.Url, ColumnType.Date, ColumnType.Currency, ColumnType.Percent, ColumnType.Number, ColumnType.Select, ColumnType.MultiSelect, ColumnType.Checkbox, ColumnType.Collaborator, ColumnType.MultiCollaborator, ]; export const PrimaryKeyCandidateColumnTypes = [ ColumnType.Text, ColumnType.MultilineText, ColumnType.Date, ColumnType.Url, ColumnType.Number, ColumnType.Currency, ColumnType.Percent, ColumnType.AutoNumber, ColumnType.GeoLocation, ]; export const BasicColumnTypes = [ ColumnType.Text, ColumnType.MultilineText, ColumnType.Select, ColumnType.MultiSelect, ColumnType.Date, ColumnType.Checkbox, ColumnType.Collaborator, ColumnType.Formula, ColumnType.Attachment, ColumnType.Number, ColumnType.Url, ColumnType.Currency, ColumnType.Percent, ColumnType.Cascade, ]; export const AdvencedColumnTypes = [ ColumnType.AutoNumber, ColumnType.ForeignKey, ColumnType.CreatedAt, ColumnType.LastModifiedTime, ColumnType.CreatedBy, ColumnType.LastModifiedBy, ColumnType.Rollup, ColumnType.Lookup, ColumnType.GeoLocation, ColumnType.Button, ColumnType.DataStatus, ]; export const UserRelatedColumnTypes = [ ColumnType.Collaborator, ColumnType.MultiCollaborator, ColumnType.CreatedBy, ColumnType.LastModifiedBy, ]; export const KanbanGroupableColumnTypes = [ ColumnType.Checkbox, ColumnType.Select, ColumnType.MultiSelect, ColumnType.Collaborator, ColumnType.MultiCollaborator, ColumnType.CreatedBy, ColumnType.LastModifiedBy, ColumnType.DataStatus, ]; export const StaticColumnTypes = [ ColumnType.AutoNumber, ColumnType.CreatedBy, ColumnType.CreatedAt, ColumnType.LastModifiedBy, ColumnType.LastModifiedTime, ColumnType.Formula, ColumnType.Lookup, ColumnType.Rollup, ColumnType.Button, ColumnType.DataStatus, ]; export const textAggregationFunction = { none: "无", count: "记录总数", empty: "未填写", filled: "已填写", unique: "唯一值", percentEmpty: "未填写占比", percentFilled: "已填写占比", percentUnique: "唯一值占比", }; export const foreignKeyAggregationFunction = { none: "无", empty: "未填写", filled: "已填写", percentEmpty: "未填写占比", percentFilled: "已填写占比", }; export const checkboxAggregationFunction = { none: "无", count: "记录总数", unchecked: "未勾选", checked: "已勾选", percentUnchecked: "未勾选占比", percentChecked: "已勾选占比", }; export const dateAggregationFunction = { ...textAggregationFunction, earliestDate: "最早时间", latestDate: "最晚时间", dateRangeByDate: "时间范围(日)", dateRangeByMonth: "时间范围(月)", }; export const attachmentAggregationFunction = { none: "无", count: "记录总数", empty: "未填写", filled: "已填写", percentEmpty: "未填写占比", percentFilled: "已填写占比", totalFileSize: "文件大小总和", }; export const numberAggregationFunction = { none: "无", sum: "总和", average: "平均值", median: "中位数", min: "最小值", max: "最大值", range: "范围", standardDeviation: "标准差", count: "记录总数", empty: "未填写", filled: "已填写", unique: "唯一值", percentEmpty: "未填写占比", percentFilled: "已填写占比", percentUnique: "唯一值占比", }; export type TextAggregationFunction = keyof typeof textAggregationFunction; export type SingleSelectAggregationFunction = keyof typeof textAggregationFunction; export type CheckboxAggregationFunction = keyof typeof checkboxAggregationFunction; export type MultiSelectAggregationFunction = keyof typeof textAggregationFunction; export type DateAggregationFunction = keyof typeof dateAggregationFunction; export type AttachmentAggregationFunction = keyof typeof attachmentAggregationFunction; export type NumberAggregationFunction = keyof typeof numberAggregationFunction; export type ColumnAggregationFunction = | SingleSelectAggregationFunction | CheckboxAggregationFunction | MultiSelectAggregationFunction | DateAggregationFunction | AttachmentAggregationFunction | NumberAggregationFunction; export type OptionalExceptFor = Partial & Pick; export class TextOptions { validatorName?: "url"; } export interface MultilineTextOptions { richText: boolean; } export interface NumberOptions { format: "decimal" | "integer" | "currency" | "percent"; precision: number; defaultValue?: number; negative: boolean; backgroundColor?: string; symbol?: string; } export interface CheckboxOptions { color: Color; icon: CheckboxIcon; } export type RollupOptions = Partial & { formulaTextParsed: string; formulaText?: string; relationColumnId: string; // 外键id foreignTableRollupColumnId: string; // 引用的字段 resultType: FormulaResultType; }; export interface ForeignKeyOptions { relationship: "one" | "many"; foreignTableId: string; unreversed: boolean; viewIdForRecordSelection: string; createNewForeignTable?: boolean; nameForNewForeignTable?: string; foreignViewId?: string; foreignFilter?: FilterSet; } export class FormulaDependencies { invalidColumnIds?: string[]; referencedColumnIdsForValue!: string[]; referencedColumnIdsForModification?: string[]; dependsOnAllColumnModifications?: boolean; } export type FormulaOptions = Partial & { format: "decimal" | "integer" | "currency" | "percent" | "duration"; precision?: number; negative: boolean; symbol?: string; durationFormat: | "h:mm" | "h:mm:ss" | "h:mm:ss.s" | "h:mm:ss.ss" | "h:mm:ss.sss"; formulaTextParsed?: string; formulaText?: string; formulaError?: string; dependencies: FormulaDependencies; resultIsArray: boolean; resultType: FormulaResultType; }; export interface CollaboratorOptions { shouldNotify: boolean; } export interface SelectOption { id: string; name: string; color: TagColor; } export interface SelectOptions { optionOrder: string[]; options: { [optionId: string]: SelectOption; }; disableColors: boolean; } export class CascadeOption { id: string; name: string; parentId?: string; titleId: string; rank: number; } export interface CascadeOptions { titles: { id: string; name: string; }[]; multiple: boolean; checkStrictly: boolean; options: CascadeOption[]; } export interface ButtonOptions { label: { type: "static"; staticText: string; }; variant: { type: "static"; staticVariant: string; }; actionType: ButtonActionType; formulaText: string; } export enum ButtonActionType { openUrl = "openUrl", } export interface MultiSelectOptions extends SelectOptions {} export interface AutoNumberOptions {} export interface DateOptions { dateFormat: "Local" | "Friendly" | "US" | "European" | "ISO"; isDateTime: boolean; isDate: boolean; timeFormat: "12hour" | "24hour"; timeZone: "UTC" | "GMT"; } export interface CreatedByOptions { computationType: ColumnType.CreatedBy; // computationParams: {}; } export interface LastModifiedByOptions { computationType: ColumnType.LastModifiedBy; computationParams: { allColumns: boolean; columnIds: string[]; }; } export interface CreatedAtOptions extends DateOptions { formulaText: "CREATED_TIME()"; formulaTextParsed: "{column_modification_created_at_all}"; resultType: FormulaResultType; dependencies: { invalidColumnIds: string[]; referencedColumnIdsForValue: string[]; }; } export interface LastModifiedTimeOptions extends DateOptions { formulaText: "LAST_MODIFIED_TIME()"; formulaTextParsed: "{column_modification_updated_at_all}"; resultType: FormulaResultType; dependencies: { invalidColumnIds: string[]; referencedColumnIdsForValue: string[]; }; } export enum GeolocationInputType { mobile = "mobile", } export interface GeolocationOptions { inputType?: GeolocationInputType; } export type FormulaResultType = | ColumnType.Text | ColumnType.Date | ColumnType.Number; export type LookupOptions = { relationColumnId: string; // 外键id foreignTableRollupColumnId: string; // 引用的字段 resultType: FormulaResultType; resultIsArray: boolean; choices?: Record; choiceOrder: string[]; } & NumberOptions & CollaboratorOptions & MultiSelectOptions & SelectOptions & DateOptions & TextOptions & NumberOptions; export type ColumnTypeOptions = | CollaboratorOptions | TextOptions | MultilineTextOptions | CheckboxOptions | SelectOptions | MultiSelectOptions | DateOptions | CreatedAtOptions | LastModifiedTimeOptions | CreatedByOptions | LastModifiedByOptions | AutoNumberOptions | RollupOptions | CascadeOptions | ButtonOptions; export interface TableColumn { id: string; name: string; type: ColumnType; typeOptions: ColumnTypeOptions; } export type Column = TableColumn & ViewColumn; export enum CheckboxIcon { Check = "check", Star = "star", Heart = "heart", ThumbsUp = "thumbsUp", Flag = "flag", } export enum FormulaParamType { CellValue = "column_value", CreatedTime = "column_modification_created_at", CreatedTimeForAll = "column_modification_created_at_all", UpdatedTime = "column_modification_updated_at", UpdatedTimeForAll = "column_modification_updated_at_all", }