keeweb/app/scripts/models/menu/menu-section-model.js

69 lines
1.7 KiB
JavaScript
Raw Normal View History

2019-09-18 23:37:57 +02:00
import { Model } from 'framework/model';
2019-09-15 14:16:32 +02:00
import { MenuItemCollection } from 'collections/menu/menu-item-collection';
2019-09-18 23:37:57 +02:00
import { MenuItemModel } from './menu-item-model';
2015-10-17 23:49:24 +02:00
2019-09-19 17:42:53 +02:00
function convertItem(item) {
return item instanceof MenuItemModel ? item : new MenuItemModel(item);
}
2019-09-18 23:37:57 +02:00
class MenuSectionModel extends Model {
constructor(items = []) {
2019-09-19 17:42:53 +02:00
super({ items: new MenuItemCollection(items.map(convertItem)) });
2019-09-18 23:37:57 +02:00
}
2015-10-17 23:49:24 +02:00
2019-08-18 10:17:09 +02:00
addItem(item) {
2019-09-19 17:42:53 +02:00
this.items.push(convertItem(item));
2019-09-18 23:37:57 +02:00
this.emit('change-items');
}
2015-10-17 23:49:24 +02:00
2019-08-18 10:17:09 +02:00
removeAllItems() {
2019-09-18 23:37:57 +02:00
this.items.length = 0;
if (this.defaultItems) {
2020-06-01 16:53:51 +02:00
this.items.push(...this.defaultItems.map((item) => new MenuItemModel(item)));
2019-09-18 23:37:57 +02:00
}
this.emit('change-items');
}
2015-10-17 23:49:24 +02:00
2019-08-18 10:17:09 +02:00
removeByFile(file) {
2019-09-18 23:37:57 +02:00
const items = this.items;
2020-06-01 16:53:51 +02:00
items.find((item) => {
2019-09-18 23:37:57 +02:00
if (item.file === file || item.file === file) {
2016-06-05 16:49:00 +02:00
items.remove(item);
return true;
2015-11-07 21:37:54 +01:00
}
2019-08-18 10:17:09 +02:00
return false;
2015-11-07 21:37:54 +01:00
});
2019-09-18 23:37:57 +02:00
this.emit('change-items');
}
2016-06-05 16:49:00 +02:00
2019-08-18 10:17:09 +02:00
replaceByFile(file, newItem) {
2019-09-18 23:37:57 +02:00
const items = this.items;
2016-07-17 13:30:38 +02:00
items.find((item, ix) => {
2019-09-18 23:37:57 +02:00
if (item.file === file || item.file === file) {
items[ix] = newItem;
2016-06-05 16:49:00 +02:00
return true;
}
2019-08-18 10:17:09 +02:00
return false;
2016-06-05 16:49:00 +02:00
});
2019-09-18 23:37:57 +02:00
this.emit('change-items');
}
2015-10-17 23:49:24 +02:00
2019-08-18 10:17:09 +02:00
setItems(items) {
2019-09-18 23:37:57 +02:00
this.items.length = 0;
2019-09-19 17:42:53 +02:00
this.items.push(...items.map(convertItem));
2019-09-18 23:37:57 +02:00
this.emit('change-items');
2015-10-17 23:49:24 +02:00
}
2019-09-18 23:37:57 +02:00
}
MenuSectionModel.defineModelProperties({
defaultItems: null,
items: null,
scrollable: false,
grow: false,
drag: false,
visible: undefined,
active: false
2015-10-17 23:49:24 +02:00
});
2019-09-15 14:16:32 +02:00
export { MenuSectionModel };