Files
FHC-Core/public/js/composables/Renderers.js
T

50 lines
1.3 KiB
JavaScript

import ApiRenderers from '../api/factory/renderers.js';
/**
* @return object { renderers: Object }
*/
export function useRenderers() {
/* Result Vars */
const renderers = Vue.ref(null);
/* Helper Vars */
const $api = Vue.inject('$api');
const $fhcAlert = Vue.inject('$fhcAlert');
/* Main Logic */
$api
.call(ApiRenderers.loadRenderers())
.then(res => {
const head = document.head;
for (const rendertype of Object.keys(res.data)) {
const renderersForType = {};
for (const name of Object.keys(res.data[rendertype])) {
const rendererUrl = res.data[rendertype][name];
if (rendererUrl.substr(-4) == ".css") {
// add to head
if (!head.querySelector(`link[href="${rendererUrl}"]`)) {
var link = document.createElement("link");
link.type = "text/css";
link.rel = "stylesheet";
link.href = rendererUrl;
head.appendChild(link);
}
} else {
renderersForType[name] = Vue.markRaw(
Vue.defineAsyncComponent(() => import(rendererUrl))
);
}
}
if (Object.keys(renderersForType).length) {
if (renderers.value === null)
renderers.value = {};
renderers.value[rendertype] = renderersForType;
}
}
})
.catch($fhcAlert.handleSystemErrors);
return {
renderers
};
}