diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue index 52ac14d708..c1fa6f0840 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/AgreementResource.vue @@ -298,7 +298,8 @@ export default { name: "user_id", type: "component", label: $__("User"), - componentPath: "./PatronSearch.vue", + componentPath: + "@koha-vue/components/PatronSearch.vue", required: true, indexRequired: true, componentProps: { @@ -398,7 +399,8 @@ export default { name: "license_id", type: "component", label: $__("License"), - componentPath: "./InfiniteScrollSelect.vue", + componentPath: + "@koha-vue/components/InfiniteScrollSelect.vue", required: true, indexRequired: true, componentProps: { @@ -468,7 +470,7 @@ export default { hidden: agreement => !!agreement.agreement_relationships?.length, componentPath: - "./ERM/AgreementRelationshipsDisplay.vue", + "@koha-vue/components/ERM/AgreementRelationshipsDisplay.vue", componentProps: { agreement: { type: "resource", @@ -544,7 +546,8 @@ export default { type: "component", hidden: agreement => !!agreement.agreement_packages?.length, - componentPath: "./ERM/AgreementPackagesDisplay.vue", + componentPath: + "@koha-vue/components/ERM/AgreementPackagesDisplay.vue", componentProps: { agreement: { type: "resource", @@ -562,7 +565,8 @@ export default { type: "component", label: $__("Agreement users"), hidden: agreement => !!agreement.documents?.length, - componentPath: "./DocumentDisplay.vue", + componentPath: + "@koha-vue/components/DocumentDisplay.vue", componentProps: { resource: { type: "resource", @@ -596,7 +600,8 @@ export default { { name: "document", type: "component", - componentPath: "./DocumentSelect.vue", + componentPath: + "@koha-vue/components/DocumentSelect.vue", label: $__("File"), componentProps: { counter: { diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackageResource.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackageResource.vue index 60c8bfd5da..c146d1d8bc 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackageResource.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalPackageResource.vue @@ -276,7 +276,8 @@ export default { type: "component", name: $__("Titles"), hidden: erm_package => erm_package, - componentPath: "./RelationshipTableDisplay.vue", + componentPath: + "@koha-vue/components/RelationshipTableDisplay.vue", componentProps: { tableOptions: { type: "object", diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitleResource.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitleResource.vue index 4f806832c3..6bc471b982 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitleResource.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsLocalTitleResource.vue @@ -293,7 +293,8 @@ export default { showElement: { type: "component", hidden: title => title.resources.length > 0, - componentPath: "./RelationshipTableDisplay.vue", + componentPath: + "@koha-vue/components/RelationshipTableDisplay.vue", componentProps: { tableOptions: { type: "object", diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicenseResource.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicenseResource.vue index 599df4e3ca..a0e5dc478f 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicenseResource.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/LicenseResource.vue @@ -171,7 +171,8 @@ export default { name: "user_id", type: "component", label: $__("User"), - componentPath: "./PatronSearch.vue", + componentPath: + "@koha-vue/components/PatronSearch.vue", required: true, indexRequired: true, componentProps: { @@ -211,7 +212,8 @@ export default { showElement: { type: "component", hidden: license => !!license.documents?.length, - componentPath: "./DocumentDisplay.vue", + componentPath: + "@koha-vue/components/DocumentDisplay.vue", componentProps: { resource: { type: "resource", @@ -245,7 +247,8 @@ export default { { name: "document", type: "component", - componentPath: "./DocumentSelect.vue", + componentPath: + "@koha-vue/components/DocumentSelect.vue", label: $__("File"), componentProps: { counter: { diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/FormElement.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/FormElement.vue index a07cce5e52..a2ea5cefff 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/FormElement.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/FormElement.vue @@ -205,6 +205,7 @@ import ToolTip from "./ToolTip.vue"; import InputRadio from "./Elements/InputRadio.vue"; import { useBaseElement } from "../composables/base-element.js"; import { computed, defineAsyncComponent, ref } from "vue"; +import { loadComponent } from "@koha-vue/loaders/componentResolver"; export default { props: { @@ -255,7 +256,7 @@ export default { const importPath = baseElement.identifyAndImportComponent( props.attr ); - return defineAsyncComponent(() => import(`${importPath}`)); + return defineAsyncComponent(loadComponent(importPath)); }); const selectOptions = computed(() => { if (props.attr.options) { diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainResource.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainResource.vue index 61204803a0..43371ced51 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainResource.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Preservation/TrainResource.vue @@ -417,7 +417,8 @@ export default { type: "component", name: $__("Items"), hidden: train => train.items.length, - componentPath: "./Preservation/TrainItemsTable.vue", + componentPath: + "@koha-vue/components/Preservation/TrainItemsTable.vue", componentProps: { train: { type: "resource", diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ShowElement.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ShowElement.vue index 4a334b7149..57b465ed02 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ShowElement.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ShowElement.vue @@ -150,6 +150,8 @@ import AdditionalFieldsDisplay from "./AdditionalFieldsDisplay.vue"; import { useBaseElement } from "../composables/base-element.js"; import { computed, defineAsyncComponent } from "vue"; +import { loadComponent } from "@koha-vue/loaders/componentResolver"; + export default { components: { LinkWrapper, AdditionalFieldsDisplay }, setup(props) { @@ -160,7 +162,7 @@ export default { props.attr, true ); - return defineAsyncComponent(() => import(`${importPath}`)); + return defineAsyncComponent(loadComponent(importPath)); }); const attribute = computed(() => { if (props.attr.showElement) { diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/VendorResource.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/VendorResource.vue index 242acd3aaa..315d026970 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/VendorResource.vue +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/Vendors/VendorResource.vue @@ -407,7 +407,8 @@ export default { }, { type: "component", - componentPath: "./Vendors/VendorContacts.vue", + componentPath: + "@koha-vue/components/Vendors/VendorContacts.vue", indexRequired: true, componentProps: { contact: { @@ -427,7 +428,8 @@ export default { showElement: { type: "component", hidden: vendor => !!vendor.interfaces?.length, - componentPath: "./Vendors/VendorInterfaces.vue", + componentPath: + "@koha-vue/components/Vendors/VendorInterfaces.vue", componentProps: { vendor: { type: "resource", @@ -840,7 +842,8 @@ export default { type: "component", name: $__("Contracts"), hidden: vendor => vendor.contracts.length, - componentPath: "./RelationshipTableDisplay.vue", + componentPath: + "@koha-vue/components/RelationshipTableDisplay.vue", componentProps: { tableOptions: { type: "object", @@ -949,7 +952,8 @@ export default { type: "component", name: $__("Subscription details"), hidden: vendor => vendor.subscriptions_count, - componentPath: "./Vendors/VendorSubscriptions.vue", + componentPath: + "@koha-vue/components/Vendors/VendorSubscriptions.vue", componentProps: { vendor: { type: "resource", diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/composables/base-element.js b/koha-tmpl/intranet-tmpl/prog/js/vue/composables/base-element.js index 66044265df..b54eb0fdd8 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/vue/composables/base-element.js +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/composables/base-element.js @@ -8,13 +8,13 @@ export function useBaseElement(instancedElement) { */ const identifyAndImportComponent = (attr, show = false) => { if (attr.type === "date") { - attr.componentPath = "./FlatPickrWrapper.vue"; + attr.componentPath = "@koha-vue/components/FlatPickrWrapper.vue"; } if (attr.type === "vendor") { - attr.componentPath = "./FormSelectVendors.vue"; + attr.componentPath = "@koha-vue/components/FormSelectVendors.vue"; } if (attr.type === "relationshipWidget") { - attr.componentPath = "./RelationshipWidget.vue"; + attr.componentPath = "@koha-vue/components/RelationshipWidget.vue"; } const importPath = show ? attr.showElement?.componentPath diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/loaders/componentResolver.js b/koha-tmpl/intranet-tmpl/prog/js/vue/loaders/componentResolver.js new file mode 100644 index 0000000000..cecbdf735b --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/js/vue/loaders/componentResolver.js @@ -0,0 +1,13 @@ +const businessContext = require.context("@koha-vue", true, /\.vue$/); +const cypressContext = require.context("@cypress", true, /\.vue$/); + +export function loadComponent(path) { + if (path.startsWith("@koha-vue/")) { + return () => Promise.resolve(businessContext("." + path.slice(9))); + } else if (path.startsWith("@cypress/")) { + // FIXME should only be imported if we are not in production + return () => Promise.resolve(cypressContext("." + path.slice(8))); + } else { + return () => import(`${path}`); + } +} diff --git a/t/cypress/component/ShowElement_spec.ts b/t/cypress/component/ShowElement_spec.ts index 139fb20728..2cf9ca4720 100644 --- a/t/cypress/component/ShowElement_spec.ts +++ b/t/cypress/component/ShowElement_spec.ts @@ -227,7 +227,7 @@ describe("ShowElement", () => { type: "component", hidden: () => true, componentPath: - "t/cypress/component/ShowElementComponentType.vue", + "@cypress/component/ShowElementComponentType.vue", componentProps: { testString: { type: "string",