import NoteContextAwareWidget from "../note_context_aware_widget.js"; import attributeService from "../../services/attributes.js"; const TPL = `
`; export default class BookPropertiesWidget extends NoteContextAwareWidget { get name() { return "bookProperties"; } get toggleCommand() { return "toggleRibbonTabBookProperties"; } isEnabled() { return this.note && this.note.type === 'book'; } getTitle() { return { show: this.isEnabled(), activate: true, title: 'Book Properties', icon: 'bx bx-book' }; } doRender() { this.$widget = $(TPL); this.contentSized(); this.$viewTypeSelect = this.$widget.find('.view-type-select'); this.$viewTypeSelect.on('change', () => this.toggleViewType(this.$viewTypeSelect.val())); this.$expandChildrenButton = this.$widget.find('.expand-children-button'); this.$expandChildrenButton.on('click', async () => { if (!this.note.hasLabel('expanded')) { await attributeService.addLabel(this.noteId, 'expanded'); } this.triggerCommand('refreshNoteList', {noteId: this.noteId}); }); this.$collapseAllButton = this.$widget.find('.collapse-all-button'); this.$collapseAllButton.on('click', async () => { // owned is important - we shouldn't remove inherited expanded labels for (const expandedAttr of this.note.getOwnedLabels('expanded')) { await attributeService.removeAttributeById(this.noteId, expandedAttr.attributeId); } this.triggerCommand('refreshNoteList', {noteId: this.noteId}); }); } async refreshWithNote(note) { const viewType = this.note.getLabelValue('viewType') || 'grid'; this.$viewTypeSelect.val(viewType); this.$expandChildrenButton.toggle(viewType === 'list'); this.$collapseAllButton.toggle(viewType === 'list'); } async toggleViewType(type) { if (type !== 'list' && type !== 'grid') { throw new Error(`Invalid view type ${type}`); } await attributeService.setLabel(this.noteId, 'viewType', type); } entitiesReloadedEvent({loadResults}) { if (loadResults.getAttributes().find(attr => attr.noteId === this.noteId && attr.name === 'viewType')) { this.refresh(); } } }