/////////////////////////////////////// //OPENTICKET PANEL MODULE /////////////////////////////////////// import { ODJsonConfig_DefaultPanelEmbedSettingsType } from "../defaults/config" import { ODId, ODManager, ODValidJsonType, ODValidId, ODVersion, ODValidButtonColor, ODManagerData } from "../modules/base" import { ODDebugger } from "../modules/console" export class ODPanelManager extends ODManager { #debug: ODDebugger constructor(debug:ODDebugger){ super(debug,"option") this.#debug = debug } add(data:ODPanel, overwrite?:boolean): boolean { data.useDebug(this.#debug,"option data") return super.add(data,overwrite) } } export interface ODPanelDataJson { id:string, value:ODValidJsonType } export interface ODPanelJson { id:string, version:string, data:ODPanelDataJson[] } /**## ODPanelIds `type` * This type is an array of ids available in the `ODPanel` class. * It's used to generate typescript declarations for this class. */ export interface ODPanelIds { "openticket:name":ODPanelData, "openticket:options":ODPanelData, "openticket:dropdown":ODPanelData, "openticket:text":ODPanelData, "openticket:embed":ODPanelData, "openticket:dropdown-placeholder":ODPanelData, "openticket:enable-max-tickets-warning-text":ODPanelData, "openticket:enable-max-tickets-warning-embed":ODPanelData, "openticket:describe-options-layout":ODPanelData<"simple"|"normal"|"detailed">, "openticket:describe-options-custom-title":ODPanelData, "openticket:describe-options-in-text":ODPanelData, "openticket:describe-options-in-embed-fields":ODPanelData, "openticket:describe-options-in-embed-description":ODPanelData } export class ODPanel extends ODManager> { id:ODId constructor(id:ODValidId, data:ODPanelData[]){ super() this.id = new ODId(id) data.forEach((data) => { this.add(data) }) } toJson(version:ODVersion): ODPanelJson { const data = this.getAll().map((data) => { return { id:data.id.toString(), value:data.value } }) return { id:this.id.toString(), version:version.toString(), data } } static fromJson(json:ODPanelJson): ODPanel { return new ODPanel(json.id,json.data.map((data) => new ODPanelData(data.id,data.value))) } get(id:PanelId): ODPanelIds[PanelId] get(id:ODValidId): ODPanelData|null get(id:ODValidId): ODPanelData|null { return super.get(id) } remove(id:PanelId): ODPanelIds[PanelId] remove(id:ODValidId): ODPanelData|null remove(id:ODValidId): ODPanelData|null { return super.remove(id) } exists(id:keyof ODPanelIds): boolean exists(id:ODValidId): boolean exists(id:ODValidId): boolean { return super.exists(id) } } export class ODPanelData extends ODManagerData { #value: DataType constructor(id:ODValidId, value:DataType){ super(id) this.#value = value } set value(value:DataType){ this.#value = value this._change() } get value(): DataType { return this.#value } /**Refresh the database. Is only required to be used when updating `ODPanelData` with an object/array as value. */ refreshDatabase(){ this._change() } }