Notes/src/public/app/widgets/buttons/button_from_note.js

60 lines
1.5 KiB
JavaScript
Raw Normal View History

2022-11-25 15:29:57 +01:00
import ButtonWidget from "./button_widget.js";
import froca from "../../services/froca.js";
import attributeService from "../../services/attributes.js";
export default class ButtonFromNoteWidget extends ButtonWidget {
constructor() {
super();
2022-11-29 16:16:57 +01:00
this.settings.buttonNoteIdProvider = null;
this.settings.defaultIconProvider = null;
2022-11-25 15:29:57 +01:00
}
2022-11-29 16:16:57 +01:00
buttonNoteIdProvider(provider) {
this.settings.buttonNoteIdProvider = provider;
return this;
}
defaultIconProvider(provider) {
this.settings.defaultIconProvider = provider;
2022-11-25 15:29:57 +01:00
return this;
}
doRender() {
super.doRender();
this.updateIcon();
}
updateIcon() {
2022-11-29 16:16:57 +01:00
const buttonNoteId = this.settings.buttonNoteIdProvider();
if (!buttonNoteId && this.settings.defaultIconProvider()) {
this.settings.icon = this.settings.defaultIconProvider();
2022-11-25 15:29:57 +01:00
this.refreshIcon();
2022-11-29 16:16:57 +01:00
} else {
froca.getNote(buttonNoteId).then(note => {
this.settings.icon = note.getIcon();
this.refreshIcon();
});
}
2022-11-25 15:29:57 +01:00
}
entitiesReloadedEvent({loadResults}) {
2022-11-29 16:16:57 +01:00
const buttonNote = froca.getNoteFromCache(this.buttonNoteIdProvider());
if (!buttonNote) {
return;
}
2022-11-25 15:29:57 +01:00
if (loadResults.getAttributes(this.componentId).find(attr =>
attr.type === 'label'
&& attr.name === 'iconClass'
2022-11-29 16:16:57 +01:00
&& attributeService.isAffecting(attr, buttonNote))) {
2022-11-25 15:29:57 +01:00
this.updateIcon();
}
}
}