diff --git a/src/abstract/ModuleCategory.ts b/src/abstract/ModuleCategory.ts index 9bc0cc6e7..c8209e0eb 100644 --- a/src/abstract/ModuleCategory.ts +++ b/src/abstract/ModuleCategory.ts @@ -37,4 +37,8 @@ export default class Category extends Model { attributes: {}, }; } + + getId() { + return this.get('id')!; + } } diff --git a/src/domain_abstract/view/DomainViews.ts b/src/domain_abstract/view/DomainViews.ts index a5fafa73b..5e0be26ce 100644 --- a/src/domain_abstract/view/DomainViews.ts +++ b/src/domain_abstract/view/DomainViews.ts @@ -8,7 +8,7 @@ export default class DomainViews extends View { itemView?: any; // Defines the View per type - itemsView = ''; + itemsView = '' as any; itemType = 'type'; diff --git a/src/trait_manager/index.ts b/src/trait_manager/index.ts index 3dad5ec42..ccf160e54 100644 --- a/src/trait_manager/index.ts +++ b/src/trait_manager/index.ts @@ -41,7 +41,12 @@ interface ITraitView { export type CustomTrait = ITraitView & T & ThisType; -export default class TraitManager extends Module { +export interface TraitManagerConfigModule extends TraitManagerConfig { + pStylePrefix?: string; + em: EditorModel; +} + +export default class TraitManager extends Module { view?: TraitsView; types: { [id: string]: { new (o: any): TraitView } }; model: Model; @@ -69,7 +74,7 @@ export default class TraitManager extends Module(); + config: TraitManagerConfigModule; noCatClass: string; traitContClass: string; catsClass: string; catsEl?: HTMLElement; traitsEl?: HTMLElement; - itemView?: any; - itemType: any; rendered?: boolean; + itemsView: TraitManager['types']; - constructor(o: any = {}, itemsView: any) { + constructor(o: TraitsViewProps, itemsView: TraitManager['types']) { super(o); this.itemsView = itemsView; const config = o.config || {}; + this.config = config; const em = o.editor; this.em = em; @@ -62,8 +72,8 @@ export default class TraitsView extends DomainViews { * */ add(model: Trait, fragment?: DocumentFragment) { const { config, renderedCategories } = this; - var itemView = this.itemView; - const typeField = model.get(this.itemType); + let itemView = this.itemView; + const typeField = model.get(this.itemType as any); if (this.itemsView && this.itemsView[typeField]) { itemView = this.itemsView[typeField]; } @@ -75,32 +85,23 @@ export default class TraitsView extends DomainViews { const rendered = view.render().el; let category = model.get('category'); + // TODO: this part could be consolidated better with BlocksView.ts // Check for categories - if (category && this.categories && !config.ignoreCategories) { + if (category && this.categories && !(config as any).ignoreCategories) { if (isString(category)) { - category = { - id: category, - label: category, - }; + category = { id: category, label: category }; } else if (isObject(category) && !category.id) { category.id = category.label; } const catModel = this.categories.add(category); - const catId = catModel.get('id')!; + const catId = catModel.getId(); const categories = this.getCategoriesEl(); let catView = renderedCategories.get(catId); - //@ts-ignore - model.set('category', catModel, { silent: true }); + model.set('category', catModel as any, { silent: true }); if (!catView && categories) { - catView = new CategoryView( - { - model: catModel, - }, - config, - 'trait' - ).render(); + catView = new CategoryView({ model: catModel }, config, 'trait').render(); renderedCategories.set(catId, catView); categories.appendChild(catView.el); }