import attributeService from '../services/attributes.js'; import NoteContextAwareWidget from "./note_context_aware_widget.js"; const TPL = `
`; export default class EditabilitySelectWidget extends NoteContextAwareWidget { doRender() { this.$widget = $(TPL); this.$editabilityActiveDesc = this.$widget.find(".editability-active-desc"); this.$widget.on('click', '.dropdown-item', async e => { this.$widget.find('.dropdown-toggle').dropdown('toggle'); const editability = $(e.target).closest("[data-editability]").attr("data-editability"); for (const ownedAttr of this.note.getOwnedLabels()) { if (['readOnly', 'autoReadOnlyDisabled'].includes(ownedAttr.name)) { await attributeService.removeAttributeById(this.noteId, ownedAttr.attributeId); } } if (editability !== 'auto') { await attributeService.addLabel(this.noteId, editability); } }); } async refreshWithNote(note) { let editability = 'auto' if (this.note.hasLabel('readOnly')) { editability = 'readOnly'; } else if (this.note.hasLabel('autoReadOnlyDisabled')) { editability = 'autoReadOnlyDisabled'; } const labels = { "auto": "Auto", "readOnly": "Read-only", "autoReadOnlyDisabled": "Always Editable" } this.$widget.find('.dropdown-item').removeClass("selected"); this.$widget.find(`.dropdown-item[data-editability='${editability}']`).addClass("selected"); this.$editabilityActiveDesc.text(labels[editability]); } entitiesReloadedEvent({loadResults}) { if (loadResults.getAttributes().find(attr => attr.noteId === this.noteId)) { this.refresh(); } } }