import { primitive, serializable } from 'serializr'; import { ScriptingGlobals, scriptingGlobal } from '../client/util/ScriptingGlobals'; import { Deserializable } from '../client/util/SerializationHelper'; import { Copy, FieldChanged, ToJavascriptString, ToScriptString, ToString } from './FieldSymbols'; import { ObjectField } from './ObjectField'; export enum ColumnType { Number, String, Boolean, Date, Image, RTF, Enumeration, Any, } export const PastelSchemaPalette = new Map([ // ["pink1", "#FFB4E8"], ['pink2', '#ff9cee'], ['pink3', '#ffccf9'], ['pink4', '#fcc2ff'], ['pink5', '#f6a6ff'], ['purple1', '#b28dff'], ['purple2', '#c5a3ff'], ['purple3', '#d5aaff'], ['purple4', '#ecd4ff'], // ["purple5", "#fb34ff"], ['purple6', '#dcd3ff'], ['purple7', '#a79aff'], ['purple8', '#b5b9ff'], ['purple9', '#97a2ff'], ['bluegreen1', '#afcbff'], ['bluegreen2', '#aff8db'], ['bluegreen3', '#c4faf8'], ['bluegreen4', '#85e3ff'], ['bluegreen5', '#ace7ff'], // ["bluegreen6", "#6eb5ff"], ['bluegreen7', '#bffcc6'], ['bluegreen8', '#dbffd6'], ['yellow1', '#f3ffe3'], ['yellow2', '#e7ffac'], ['yellow3', '#ffffd1'], ['yellow4', '#fff5ba'], // ["red1", "#ffc9de"], ['red2', '#ffabab'], ['red3', '#ffbebc'], ['red4', '#ffcbc1'], ['orange1', '#ffd5b3'], ['gray', '#f1efeb'], ]); export const RandomPastel = () => Array.from(PastelSchemaPalette.values())[Math.floor(Math.random() * PastelSchemaPalette.size)]; export const DarkPastelSchemaPalette = new Map([ ['pink2', '#c932b0'], ['purple4', '#913ad6'], ['bluegreen1', '#3978ed'], ['bluegreen7', '#2adb3e'], ['bluegreen5', '#21b0eb'], ['yellow4', '#edcc0c'], ['red2', '#eb3636'], ['orange1', '#f2740f'], ]); @scriptingGlobal @Deserializable('schemaheader') export class SchemaHeaderField extends ObjectField { @serializable(primitive()) heading: string; @serializable(primitive()) color: string; @serializable(primitive()) type: number; @serializable(primitive()) width: number; @serializable(primitive()) collapsed: boolean | undefined; @serializable(primitive()) desc: boolean | undefined; // boolean determines sort order, undefined when no sort // eslint-disable-next-line default-param-last constructor(heading: string = '', color: string = RandomPastel(), type?: ColumnType, width?: number, desc?: boolean, collapsed?: boolean) { super(); this.heading = heading; this.color = color; this.type = type ?? 0; this.width = width ?? -1; this.desc = desc; this.collapsed = collapsed; } setHeading(heading: string) { this.heading = heading; this[FieldChanged]?.(); } setColor(color: string) { this.color = color; this[FieldChanged]?.(); } setType(type: ColumnType) { this.type = type; this[FieldChanged]?.(); } setWidth(width: number) { this.width = width; this[FieldChanged]?.(); } setDesc(desc: boolean | undefined) { this.desc = desc; this[FieldChanged]?.(); } setCollapsed(collapsed: boolean | undefined) { this.collapsed = collapsed; this[FieldChanged]?.(); } [Copy]() { return new SchemaHeaderField(this.heading, this.color, this.type, this.width, this.desc, this.collapsed); } [ToJavascriptString]() { return `["${this.heading}","${this.color}",${this.type},${this.width},${this.desc},${this.collapsed}]`; } [ToScriptString]() { return `schemaHeaderField("${this.heading}","${this.color}",${this.type},${this.width},${this.desc},${this.collapsed})`; } [ToString]() { return `SchemaHeaderField`; } } // eslint-disable-next-line prefer-arrow-callback ScriptingGlobals.add(function schemaHeaderField(heading: string, color: string, type: number, width: number, desc?: boolean, collapsed?: boolean) { return new SchemaHeaderField(heading, color, type, width, desc, collapsed); });