mirror of https://github.com/artf/grapesjs.git
nocodeframeworkdrag-and-dropsite-buildersite-generatortemplate-builderui-builderweb-builderweb-builder-frameworkwebsite-builderno-codepage-builder
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.3 KiB
39 lines
1.3 KiB
import { isArray, isString } from 'underscore';
|
|
import { AddOptions, Collection } from '../common';
|
|
import { normalizeKey } from '../utils/mixins';
|
|
import EditorModel from '../editor/model/Editor';
|
|
import Category, { CategoryProperties } from './ModuleCategory';
|
|
|
|
type CategoryCollectionParams = ConstructorParameters<typeof Collection<Category>>;
|
|
|
|
interface CategoryOptions {
|
|
events?: { update?: string };
|
|
em?: EditorModel;
|
|
}
|
|
|
|
export default class Categories extends Collection<Category> {
|
|
constructor(models?: CategoryCollectionParams[0], opts: CategoryOptions = {}) {
|
|
super(models, opts);
|
|
const { events, em } = opts;
|
|
const evUpdate = events?.update;
|
|
if (em) {
|
|
evUpdate &&
|
|
this.on('change', (category, options) =>
|
|
em.trigger(evUpdate, { category, changes: category.changedAttributes(), options })
|
|
);
|
|
}
|
|
}
|
|
|
|
/** @ts-ignore */
|
|
add(model: (CategoryProperties | Category)[] | CategoryProperties | Category, opts?: AddOptions) {
|
|
const models = isArray(model) ? model : [model];
|
|
models.forEach(md => md && (md.id = normalizeKey(`${md.id}`)));
|
|
return super.add(model, opts);
|
|
}
|
|
|
|
get(id: string | Category) {
|
|
return super.get(isString(id) ? normalizeKey(id) : id);
|
|
}
|
|
}
|
|
|
|
Categories.prototype.model = Category;
|
|
|