piral-vue
Version:
Plugin for integrating Vue@2 components in Piral.
51 lines • 1.84 kB
JavaScript
import { register } from './mount';
export function createExtension(rootName, selector) {
const VueExtension = {
functional: false,
props: ['name', 'empty', 'render', 'params'],
inject: ['piral'],
render(createElement) {
return createElement(rootName);
},
watch: {
params(newValue, oldValue) {
if (newValue !== oldValue) {
const newKeys = Object.keys(newValue);
const oldKeys = Object.keys(oldValue);
if (newKeys.length === oldKeys.length) {
let changed = false;
for (const key of newKeys) {
if (!oldKeys.includes(key) || newValue[key] !== oldValue[key]) {
changed = true;
break;
}
}
if (!changed) {
return;
}
}
const ev = new CustomEvent('extension-props-changed', {
detail: {
empty: this.empty,
params: newValue,
render: this.render,
name: this.name,
},
});
this.$el.dispatchEvent(ev);
}
},
},
mounted() {
this.piral.renderHtmlExtension(this.$el, {
empty: this.empty,
params: this.params,
render: this.render,
name: this.name,
});
},
};
register(selector, VueExtension);
return VueExtension;
}
//# sourceMappingURL=extension.js.map