import Vue from "vue"; import { rawToTable } from "@/components/Collections/tables"; import _l from "@/utils/localization"; import Modal from "@/utils/modal"; const modal = new Modal(); async function ruleBasedCollectionCreatorModal(elements, elementsType, importType, options) { // importType in [datasets, collection] // elementsType in [raw, ftp, datasets] let title; if (importType === "datasets") { title = _l("Build Rules for Uploading Datasets"); } else if (elementsType === "collection_contents") { title = _l("Build Rules for Applying to Existing Collection"); } else if (elementsType === "datasets" || elementsType === "library_datasets") { title = _l("Build Rules for Creating Collection(s)"); } else { title = _l("Build Rules for Uploading Collections"); } const promise = new Promise((resolve, reject) => { options.oncancel = function () { modal.hide(); resolve(); }; options.oncreate = function (response) { modal.hide(); resolve(response); }; }); const module = await import("@/components/RuleCollectionBuilder.vue"); const ruleCollectionBuilderInstance = Vue.extend(module.default); const vm = document.createElement("div"); // Prepare modal const titleSuffix = options.historyName ? `From history: ${options.historyName}` : ""; const titleHtml = `
${title} ${titleSuffix}
`; modal.show({ title: titleHtml, body: vm, width: "85%", height: "100%", }); // Inject rule builder component new ruleCollectionBuilderInstance({ propsData: { initialElements: elements, elementsType: elementsType, importType: importType, ftpUploadSite: options.ftpUploadSite, creationFn: options.creationFn, oncancel: options.oncancel, oncreate: options.oncreate, defaultHideSourceItems: options.defaultHideSourceItems, saveRulesFn: options.saveRulesFn, initialRules: options.initialRules, }, }).$mount(vm); return promise; } export async function createCollectionViaRules(selection, defaultHideSourceItems = true) { let elements; let elementsType; let importType; const selectionType = selection.selectionType; if (!selectionType) { elements = selection.toJSON(); elementsType = "datasets"; importType = "collections"; } else if (selection.elements) { elementsType = selection.selectionType; importType = selection.dataType || "collections"; elements = selection.elements; } else { elements = rawToTable(selection.content); elementsType = selection.selectionType; importType = selection.dataType || "collections"; } try { const result = await ruleBasedCollectionCreatorModal(elements, elementsType, importType, { ftpUploadSite: selection.ftpUploadSite, defaultHideSourceItems: defaultHideSourceItems, creationFn: async (elements, collectionType, name, hideSourceItems) => { return selection.createHDCA(elements, collectionType, name, hideSourceItems); }, }); return result; } catch (error) { console.error("Error in rule-based collection creation:", error); throw error; } }