56 lines
1.3 KiB
JavaScript
56 lines
1.3 KiB
JavaScript
// saladui/core/hook.js
|
|
import { registry } from "./factory";
|
|
|
|
const SaladUIHook = {
|
|
mounted() {
|
|
this.initComponent();
|
|
this.setupServerEvents();
|
|
},
|
|
|
|
initComponent() {
|
|
const el = this.el;
|
|
const componentType = el.getAttribute("data-component");
|
|
|
|
if (!componentType) {
|
|
console.error(
|
|
"SaladUI: Component element is missing data-component attribute",
|
|
);
|
|
return;
|
|
}
|
|
|
|
// The registry.create method will handle creating the component and calling setupEvents
|
|
this.component = registry.create(componentType, el, this);
|
|
},
|
|
|
|
setupServerEvents() {
|
|
if (!this.component) return;
|
|
|
|
this.handleEvent("saladui:command", ({ command, params = {}, target }) => {
|
|
if (target && target !== this.el.id) return;
|
|
|
|
if (this.component) {
|
|
this.component.handleCommand(command, params);
|
|
}
|
|
});
|
|
},
|
|
|
|
updated() {
|
|
if (this.component) {
|
|
this.component.destroy();
|
|
this.component = null;
|
|
this.initComponent();
|
|
// this.component.parseOptions();
|
|
// this.component.setupEvents();
|
|
// this.component.updatePartsVisibility();
|
|
// this.component.updateUI();
|
|
}
|
|
},
|
|
|
|
destroyed() {
|
|
this.component?.destroy();
|
|
this.component = null;
|
|
},
|
|
};
|
|
|
|
export { SaladUIHook };
|