From 814fc371090c5769b03a8adce60ba251398d2174 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sat, 20 Jan 2024 13:39:28 +0400 Subject: [PATCH] Create trait types --- src/trait_manager/index.ts | 69 +++++++++------------------- src/trait_manager/types.ts | 47 +++++++++++++++++++ src/trait_manager/view/TraitsView.ts | 11 +++-- 3 files changed, 74 insertions(+), 53 deletions(-) create mode 100644 src/trait_manager/types.ts diff --git a/src/trait_manager/index.ts b/src/trait_manager/index.ts index c5a5bcfbd..0f17c1f78 100644 --- a/src/trait_manager/index.ts +++ b/src/trait_manager/index.ts @@ -1,53 +1,23 @@ import { debounce } from 'underscore'; -import { Model } from '../common'; import { Module } from '../abstract'; -import defaults, { TraitManagerConfig } from './config/config'; -import TraitsView from './view/TraitsView'; -import TraitView from './view/TraitView'; -import TraitSelectView from './view/TraitSelectView'; -import TraitCheckboxView from './view/TraitCheckboxView'; -import TraitNumberView from './view/TraitNumberView'; -import TraitColorView from './view/TraitColorView'; -import TraitButtonView from './view/TraitButtonView'; -import EditorModel from '../editor/model/Editor'; +import Categories from '../abstract/ModuleCategories'; +import Category from '../abstract/ModuleCategory'; +import { Model } from '../common'; import Component from '../dom_components/model/Component'; +import EditorModel from '../editor/model/Editor'; +import defaults from './config/config'; import Trait from './model/Trait'; -import Category from '../abstract/ModuleCategory'; -import Categories from '../abstract/ModuleCategories'; - -export const evAll = 'trait'; -export const evPfx = `${evAll}:`; -export const evCustom = `${evPfx}custom`; - -const typesDef: { [id: string]: { new (o: any): TraitView } } = { - text: TraitView, - number: TraitNumberView, - select: TraitSelectView, - checkbox: TraitCheckboxView, - color: TraitColorView, - button: TraitButtonView, -}; - -interface ITraitView { - noLabel?: TraitView['noLabel']; - eventCapture?: TraitView['eventCapture']; - templateInput?: TraitView['templateInput']; - onEvent?: TraitView['onEvent']; - onUpdate?: TraitView['onUpdate']; - createInput?: TraitView['createInput']; - createLabel?: TraitView['createLabel']; -} - -export type CustomTrait = ITraitView & T & ThisType; - -export interface TraitManagerConfigModule extends TraitManagerConfig { - pStylePrefix?: string; - em: EditorModel; -} +import { CustomTrait, TraitManagerConfigModule, TraitViewTypes, TraitsEvents } from './types'; +import TraitButtonView from './view/TraitButtonView'; +import TraitCheckboxView from './view/TraitCheckboxView'; +import TraitColorView from './view/TraitColorView'; +import TraitNumberView from './view/TraitNumberView'; +import TraitSelectView from './view/TraitSelectView'; +import TraitView from './view/TraitView'; +import TraitsView from './view/TraitsView'; export default class TraitManager extends Module { view?: TraitsView; - types: { [id: string]: { new (o: any): TraitView } }; model: Model; __ctn?: any; categories: Categories; @@ -55,10 +25,14 @@ export default class TraitManager extends Module { TraitsView = TraitsView; Category = Category; Categories = Categories; - - events = { - all: evAll, - custom: evCustom, + events = TraitsEvents; + types: TraitViewTypes = { + text: TraitView, + number: TraitNumberView, + select: TraitSelectView, + checkbox: TraitCheckboxView, + color: TraitColorView, + button: TraitButtonView, }; /** @@ -76,7 +50,6 @@ export default class TraitManager extends Module { super(em, 'TraitManager', defaults as any); const model = new Model(); this.model = model; - this.types = typesDef; const ppfx = this.config.pStylePrefix; ppfx && (this.config.stylePrefix = `${ppfx}${this.config.stylePrefix}`); this.categories = new Categories(); diff --git a/src/trait_manager/types.ts b/src/trait_manager/types.ts new file mode 100644 index 000000000..ad34c41c3 --- /dev/null +++ b/src/trait_manager/types.ts @@ -0,0 +1,47 @@ +import EditorModel from '../editor/model/Editor'; +import { TraitManagerConfig } from './config/config'; +import TraitView from './view/TraitView'; + +export interface TraitViewTypes { + [id: string]: { new (o: any): TraitView }; +} + +export interface ITraitView { + noLabel?: TraitView['noLabel']; + eventCapture?: TraitView['eventCapture']; + templateInput?: TraitView['templateInput']; + onEvent?: TraitView['onEvent']; + onUpdate?: TraitView['onUpdate']; + createInput?: TraitView['createInput']; + createLabel?: TraitView['createLabel']; +} + +export type CustomTrait = ITraitView & T & ThisType; + +export interface TraitManagerConfigModule extends TraitManagerConfig { + pStylePrefix?: string; + em: EditorModel; +} + +export type TraitsEvent = `${TraitsEvents}`; + +/**{START_EVENTS}*/ +export enum TraitsEvents { + /** + * @event `trait:custom` + * @example + * editor.on('trait:custom', () => { ... }); + */ + custom = 'trait:custom', + + /** + * @event `trait` Catch-all event for all the events mentioned above. An object containing all the available data about the triggered event is passed as an argument to the callback. + * @example + * editor.on('trait', ({ event, model, ... }) => { ... }); + */ + all = 'trait', +} +/**{END_EVENTS}*/ + +// need this to avoid the TS documentation generator to break +export default TraitsEvents; diff --git a/src/trait_manager/view/TraitsView.ts b/src/trait_manager/view/TraitsView.ts index 17d7ff2fd..6e8062ff6 100644 --- a/src/trait_manager/view/TraitsView.ts +++ b/src/trait_manager/view/TraitsView.ts @@ -1,11 +1,12 @@ +import { isObject, isString } from 'underscore'; +import TraitManager from '..'; +import Categories from '../../abstract/ModuleCategories'; +import CategoryView from '../../abstract/ModuleCategoryView'; import DomainViews from '../../domain_abstract/view/DomainViews'; import EditorModel from '../../editor/model/Editor'; -import TraitView from './TraitView'; -import CategoryView from '../../abstract/ModuleCategoryView'; -import Categories from '../../abstract/ModuleCategories'; import Trait from '../model/Trait'; -import { isObject, isString } from 'underscore'; -import TraitManager, { TraitManagerConfigModule } from '..'; +import { TraitManagerConfigModule } from '../types'; +import TraitView from './TraitView'; interface TraitsViewProps { el?: HTMLElement;