From cb6d047696c4ef5ea18086d4b8261f7971390e02 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sat, 20 Jan 2024 17:41:13 +0400 Subject: [PATCH] Add getCategoryLabel to Traits --- src/abstract/ModuleCategory.ts | 4 ++++ src/common/index.ts | 2 ++ src/trait_manager/model/Trait.ts | 25 ++++++++++++++++++++++--- src/trait_manager/view/TraitsView.ts | 4 +--- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/abstract/ModuleCategory.ts b/src/abstract/ModuleCategory.ts index c8209e0eb..ff391619b 100644 --- a/src/abstract/ModuleCategory.ts +++ b/src/abstract/ModuleCategory.ts @@ -41,4 +41,8 @@ export default class Category extends Model { getId() { return this.get('id')!; } + + getLabel() { + return this.get('label')!; + } } diff --git a/src/common/index.ts b/src/common/index.ts index cece6f8ed..63ccacb2a 100644 --- a/src/common/index.ts +++ b/src/common/index.ts @@ -11,6 +11,8 @@ export type AddOptions = Backbone.AddOptions & { temporary?: boolean }; export type DisableOptions = { fromMove?: boolean }; +export type LocaleOptions = { locale?: boolean }; + export type RemoveOptions = Backbone.Silenceable; export type EventHandler = Backbone.EventHandler; diff --git a/src/trait_manager/model/Trait.ts b/src/trait_manager/model/Trait.ts index 2c8ddb688..4c8fba336 100644 --- a/src/trait_manager/model/Trait.ts +++ b/src/trait_manager/model/Trait.ts @@ -1,11 +1,11 @@ import { isString, isUndefined } from 'underscore'; -import { Model, SetOptions } from '../../common'; +import { LocaleOptions, Model, SetOptions } from '../../common'; import Component from '../../dom_components/model/Component'; import Editor from '../../editor'; import EditorModel from '../../editor/model/Editor'; import TraitView from '../view/TraitView'; import { isDef } from '../../utils/mixins'; -import { CategoryProperties } from '../../abstract/ModuleCategory'; +import Category, { CategoryProperties } from '../../abstract/ModuleCategory'; import Traits from './Traits'; /** @private */ @@ -128,6 +128,11 @@ export default class Trait extends Model { return this.collection as unknown as Traits; } + get category(): Category | undefined { + const cat = this.get('category'); + return cat instanceof Category ? cat : undefined; + } + setTarget(target: Component) { if (target) { const { name, changeProp, value: initValue, getValue } = this.attributes; @@ -265,7 +270,7 @@ export default class Trait extends Model { * @param {Boolean} [opts.locale=true] Use the locale string from i18n module * @returns {String} Option label */ - getOptionLabel(id: string | TraitOption, opts: { locale?: boolean } = {}): string { + getOptionLabel(id: string | TraitOption, opts: LocaleOptions = {}): string { const { locale = true } = opts; const option = (isString(id) ? this.getOption(id) : id)!; const optId = this.getOptionId(option); @@ -274,6 +279,20 @@ export default class Trait extends Model { return (locale && this.em?.t(`traitManager.traits.options.${propName}.${optId}`)) || label; } + /** + * Get category label. + * @param {Object} [opts={}] Options. + * @param {Boolean} [opts.locale=true] Use the locale string from i18n module. + * @returns {String} + */ + getCategoryLabel(opts: LocaleOptions = {}): string { + const { em, category } = this; + const { locale = true } = opts; + const catId = category?.getId(); + const catLabel = category?.getLabel(); + return (locale && em?.t(`traitManager.categories.${catId}`)) || catLabel || ''; + } + props() { return this.attributes; } diff --git a/src/trait_manager/view/TraitsView.ts b/src/trait_manager/view/TraitsView.ts index 99cce4452..e961f71ef 100644 --- a/src/trait_manager/view/TraitsView.ts +++ b/src/trait_manager/view/TraitsView.ts @@ -1,13 +1,11 @@ -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 Trait from '../model/Trait'; +import Traits from '../model/Traits'; import { TraitManagerConfigModule } from '../types'; import TraitView from './TraitView'; -import Traits from '../model/Traits'; interface TraitsViewProps { el?: HTMLElement;