Browse Source

Add getTraitsByCategory

pull/5642/head
Artur Arseniev 3 years ago
parent
commit
4162a2d0b2
  1. 5
      src/abstract/ModuleCategory.ts
  2. 45
      src/trait_manager/index.ts
  3. 3
      src/trait_manager/types.ts

5
src/abstract/ModuleCategory.ts

@ -26,6 +26,11 @@ export interface CategoryProperties {
attributes?: Record<string, any>;
}
export interface ItemsByCategory<T> {
category?: Category;
items: T[];
}
export default class Category extends Model<CategoryProperties> {
view?: CategoryView;

45
src/trait_manager/index.ts

@ -10,6 +10,7 @@ import {
TraitManagerConfigModule,
TraitModuleStateProps,
TraitViewTypes,
TraitsByCategory,
TraitsEvents,
} from './types';
import TraitButtonView from './view/TraitButtonView';
@ -19,6 +20,8 @@ import TraitNumberView from './view/TraitNumberView';
import TraitSelectView from './view/TraitSelectView';
import TraitView from './view/TraitView';
import TraitsView from './view/TraitsView';
import Category from '../abstract/ModuleCategory';
import Trait from './model/Trait';
export default class TraitManager extends Module<TraitManagerConfigModule> {
__ctn?: HTMLElement;
@ -75,9 +78,43 @@ export default class TraitManager extends Module<TraitManagerConfigModule> {
/**
* Get traits from the currently selected component.
* @return {Array<Trait>}
*/
getCurrent() {
return this.state.get('traits') || [];
getTraits() {
return this.getCurrent();
}
/**
* Get traits by category from the currently selected component.
*/
getTraitsByCategory(): TraitsByCategory[] {
const traits = this.getTraits();
const categorySet = new Set<Category>();
const categoryMap = new Map<Category, Trait[]>();
const emptyItem: TraitsByCategory = { items: [] };
traits.forEach(trait => {
const { category } = trait;
if (category) {
categorySet.add(category);
let categoryItems = categoryMap.get(category);
if (categoryItems) {
categoryItems.push(trait);
} else {
categoryMap.set(category, [trait]);
}
} else {
emptyItem.items.push(trait);
}
});
const categoryWithItems = Array.from(categorySet).map(category => ({
category,
items: categoryMap.get(category) || [],
}));
return [...categoryWithItems, emptyItem];
}
/**
@ -127,6 +164,10 @@ export default class TraitManager extends Module<TraitManagerConfigModule> {
return [...categories];
}
getCurrent() {
return this.state.get('traits') || [];
}
render() {
let { view } = this;
const { em } = this;

3
src/trait_manager/types.ts

@ -1,3 +1,4 @@
import { ItemsByCategory } from '../abstract/ModuleCategory';
import Component from '../dom_components/model/Component';
import EditorModel from '../editor/model/Editor';
import { TraitManagerConfig } from './config/config';
@ -25,6 +26,8 @@ export interface TraitModuleStateProps {
traits: Trait[];
}
export interface TraitsByCategory extends ItemsByCategory<Trait> {}
export interface TraitManagerConfigModule extends TraitManagerConfig {
pStylePrefix?: string;
em: EditorModel;

Loading…
Cancel
Save