mirror of https://github.com/keeweb/keeweb.git
69 lines
1.7 KiB
JavaScript
69 lines
1.7 KiB
JavaScript
import { Model } from 'framework/model';
|
|
import { MenuItemCollection } from 'collections/menu/menu-item-collection';
|
|
import { MenuItemModel } from './menu-item-model';
|
|
|
|
function convertItem(item) {
|
|
return item instanceof MenuItemModel ? item : new MenuItemModel(item);
|
|
}
|
|
|
|
class MenuSectionModel extends Model {
|
|
constructor(items = []) {
|
|
super({ items: new MenuItemCollection(items.map(convertItem)) });
|
|
}
|
|
|
|
addItem(item) {
|
|
this.items.push(convertItem(item));
|
|
this.emit('change-items');
|
|
}
|
|
|
|
removeAllItems() {
|
|
this.items.length = 0;
|
|
if (this.defaultItems) {
|
|
this.items.push(...this.defaultItems.map((item) => new MenuItemModel(item)));
|
|
}
|
|
this.emit('change-items');
|
|
}
|
|
|
|
removeByFile(file) {
|
|
const items = this.items;
|
|
items.find((item) => {
|
|
if (item.file === file || item.file === file) {
|
|
items.remove(item);
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
this.emit('change-items');
|
|
}
|
|
|
|
replaceByFile(file, newItem) {
|
|
const items = this.items;
|
|
items.find((item, ix) => {
|
|
if (item.file === file || item.file === file) {
|
|
items[ix] = newItem;
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
this.emit('change-items');
|
|
}
|
|
|
|
setItems(items) {
|
|
this.items.length = 0;
|
|
this.items.push(...items.map(convertItem));
|
|
this.emit('change-items');
|
|
}
|
|
}
|
|
|
|
MenuSectionModel.defineModelProperties({
|
|
defaultItems: null,
|
|
items: null,
|
|
scrollable: false,
|
|
grow: false,
|
|
drag: false,
|
|
visible: undefined,
|
|
active: false
|
|
});
|
|
|
|
export { MenuSectionModel };
|