UNPKG

sparnatural

Version:

Visual client-side SPARQL query builder and knowledge graph exploration tool

222 lines 13.8 kB
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _a, _QueryLoader_buildSparnatural, _QueryLoader_buildCriteriaGroupFromPair, _QueryLoader_triggerOptions, _QueryLoader_mapPairSubTypeToOptions, _QueryLoader_setSelectedValue, _QueryLoader_setSelectViewVariableBtn, _QueryLoader_updateOrderingOfVariables, _QueryLoader_updateNamingOfVariables, _QueryLoader_hasSelectedVar, _QueryLoader_isBind, _QueryLoader_getSelectedVarNameFromSelectItem, _QueryLoader_clickOn; import { OptionTypes } from "../components/builder-section/groupwrapper/criteriagroup/optionsgroup/OptionsGroup"; import { translateObjectValues, translateFilters, patternBindToVariableExpression, } from "./QueryAdapterFunc"; import { Order } from "../SparnaturalQueryIfc"; export default class QueryLoader { static setSparnatural(sparnatural) { this.sparnatural = sparnatural; } // Load a query in the visual query builder static loadQuery(query) { this.query = query; // set Sparnatural quiet so it does not emit the update callbacks this.sparnatural.setQuiet(true); // first reset the current query this.sparnatural.BgWrapper.resetCallback(); const clone = JSON.parse(JSON.stringify(query)); // build Sparnatural from query const varMapping = __classPrivateFieldGet(this, _a, "m", _QueryLoader_buildSparnatural).call(this, this.sparnatural, clone); // set the correct variable names __classPrivateFieldGet(this, _a, "m", _QueryLoader_updateNamingOfVariables).call(this, varMapping); // set the correct ordering of the draggables __classPrivateFieldGet(this, _a, "m", _QueryLoader_updateOrderingOfVariables).call(this); // then reset the quiet flag this.sparnatural.setQuiet(false); this.sparnatural.html[0].dispatchEvent(new CustomEvent("generateQuery")); this.sparnatural.html[0].dispatchEvent(new CustomEvent("redrawBackgroundAndLinks")); } } _a = QueryLoader, _QueryLoader_buildSparnatural = function _QueryLoader_buildSparnatural(sparnatural, query) { const varMapping = new Map(); if (!query?.where || query.where.subType !== "bgpSameSubject") { throw Error("Query.where is missing or not a bgpSameSubject"); } // catch subject and predicateObjectPairs from the query const subject = query.where.subject; const pairs = [...(query.where.predicateObjectPairs ?? [])]; if (pairs.length === 0) throw Error("No predicateObjectPairs detected"); const rootGrpWrapper = sparnatural.BgWrapper.componentsList.rootGroupWrapper; // root = first pair const first = pairs.shift(); const localMap1 = __classPrivateFieldGet(this, _a, "m", _QueryLoader_buildCriteriaGroupFromPair).call(this, rootGrpWrapper, subject, first); localMap1.forEach((v, k) => varMapping.set(k, v)); // other top-level pairs = AND siblings let parent = rootGrpWrapper; pairs.forEach((p) => { __classPrivateFieldGet(this, _a, "m", _QueryLoader_clickOn).call(this, parent.criteriaGroup.actionsGroup.actions.actionAnd.btn); const localMap = __classPrivateFieldGet(this, _a, "m", _QueryLoader_buildCriteriaGroupFromPair).call(this, parent.andSibling, subject, p); localMap.forEach((v, k) => varMapping.set(k, v)); parent = parent.andSibling; }); // unselect root subject eye if not selected in query if (!__classPrivateFieldGet(this, _a, "m", _QueryLoader_hasSelectedVar).call(this, query.variables, subject.value)) { __classPrivateFieldGet(this, _a, "m", _QueryLoader_clickOn).call(this, rootGrpWrapper.criteriaGroup.startClassGroup .inputSelector?.selectViewVariableBtn?.widgetHtml); } return varMapping; }, _QueryLoader_buildCriteriaGroupFromPair = function _QueryLoader_buildCriteriaGroupFromPair(grpWrapper, subject, pair) { const varMapping = new Map(); const obj = pair.object; // Start class (subject rdfType) const startClassVal = { type: subject.rdfType, variable: subject.value, }; if (!grpWrapper.criteriaGroup.startClassGroup.startClassVal.type) { __classPrivateFieldGet(this, _a, "m", _QueryLoader_setSelectedValue).call(this, grpWrapper.criteriaGroup.startClassGroup, subject.rdfType); } // This is for cases where the variable name has been manually changed in the query // and is not one of the selected variables in the result set grpWrapper.criteriaGroup.startClassGroup.startClassVal = startClassVal; varMapping.set(grpWrapper.criteriaGroup.startClassGroup.startClassVal.variable, subject.value); // End class (object rdfType) const endClassVal = { type: obj.variable.rdfType, variable: obj.variable.value, }; __classPrivateFieldGet(this, _a, "m", _QueryLoader_setSelectedValue).call(this, grpWrapper.criteriaGroup.endClassGroup, obj.variable.rdfType); // This is for cases where the variable name has been manually changed in the query // and is not one of the selected variables in the result set grpWrapper.criteriaGroup.endClassGroup.endClassVal = endClassVal; varMapping.set(grpWrapper.criteriaGroup.endClassGroup.endClassVal.variable, obj.variable.value); // predicate __classPrivateFieldGet(this, _a, "m", _QueryLoader_setSelectedValue).call(this, grpWrapper.criteriaGroup.objectPropertyGroup, pair.predicate.value); // ---------- VALUES / FILTERS translation to v1-style widget inputs ---------- const widgetInputs = []; // 1) filters -> labelledCriteria(criteria: Date/Number/Search/Map) if (obj.filters?.length) { widgetInputs.push(...translateFilters(obj.filters)); } // 2) values -> labelledCriteria(criteria: RdfTermCriteria) if (obj.values?.length) { widgetInputs.push(...translateObjectValues(obj.variable.value, obj)); } // render widget inputs (same logic as v1) if (widgetInputs.length > 0) { widgetInputs.forEach((input) => { const parsedVal = grpWrapper.criteriaGroup.endClassGroup.editComponents.widgetWrapper.widgetComponent.parseInput(input); if (grpWrapper.criteriaGroup.endClassWidgetGroup.widgetValues.length > 0) { __classPrivateFieldGet(this, _a, "m", _QueryLoader_clickOn).call(this, grpWrapper.criteriaGroup.endClassWidgetGroup.addWidgetValueBtn.html); } grpWrapper.criteriaGroup.endClassGroup.editComponents.widgetWrapper.widgetComponent.triggerRenderWidgetVal(parsedVal); }); } // if no values/filters and no children => Any const hasNoValuesOrFilters = (!obj.values || obj.values.length === 0) && (!obj.filters || obj.filters.length === 0); const hasNoChildren = !obj.predicateObjectPairs || obj.predicateObjectPairs.length === 0; if (hasNoValuesOrFilters && hasNoChildren) { grpWrapper.criteriaGroup.endClassGroup.editComponents.onSelectAll(); } // children recursion (WHERE) if (obj.predicateObjectPairs?.length) { __classPrivateFieldGet(this, _a, "m", _QueryLoader_clickOn).call(this, grpWrapper.criteriaGroup.endClassGroup.editComponents.actionWhere.btn); const childrenPairs = [...obj.predicateObjectPairs]; const firstChild = childrenPairs.shift(); let localMap = __classPrivateFieldGet(this, _a, "m", _QueryLoader_buildCriteriaGroupFromPair).call(this, grpWrapper.whereChild, obj.variable, firstChild); localMap.forEach((v, k) => varMapping.set(k, v)); let parent = grpWrapper.whereChild; childrenPairs.forEach((cp) => { __classPrivateFieldGet(this, _a, "m", _QueryLoader_clickOn).call(this, parent.criteriaGroup.actionsGroup.actions.actionAnd.btn); localMap = __classPrivateFieldGet(this, _a, "m", _QueryLoader_buildCriteriaGroupFromPair).call(this, parent.andSibling, obj.variable, cp); localMap.forEach((v, k) => varMapping.set(k, v)); parent = parent.andSibling; }); } // options v13 - do it only after children so that the state is properly propagated __classPrivateFieldGet(this, _a, "m", _QueryLoader_triggerOptions).call(this, grpWrapper, __classPrivateFieldGet(this, _a, "m", _QueryLoader_mapPairSubTypeToOptions).call(this, pair)); // eye button (same behaviour: only end class toggled) __classPrivateFieldGet(this, _a, "m", _QueryLoader_setSelectViewVariableBtn).call(this, startClassVal, grpWrapper.criteriaGroup.startClassGroup, endClassVal, grpWrapper.criteriaGroup.endClassGroup); return varMapping; }, _QueryLoader_triggerOptions = function _QueryLoader_triggerOptions(grpWrapper, branchLike) { if (branchLike.notExists && grpWrapper.currentOptionState != OptionTypes.NOTEXISTS) { __classPrivateFieldGet(this, _a, "m", _QueryLoader_clickOn).call(this, grpWrapper.criteriaGroup.optionsGroup.optionalArrow.widgetHtml); __classPrivateFieldGet(this, _a, "m", _QueryLoader_clickOn).call(this, grpWrapper.criteriaGroup.optionsGroup.NotExistsComponent.html); } if (branchLike.optional && grpWrapper.currentOptionState != OptionTypes.OPTIONAL) { __classPrivateFieldGet(this, _a, "m", _QueryLoader_clickOn).call(this, grpWrapper.criteriaGroup.optionsGroup.optionalArrow.widgetHtml); __classPrivateFieldGet(this, _a, "m", _QueryLoader_clickOn).call(this, grpWrapper.criteriaGroup.optionsGroup.OptionalComponent.html); } }, _QueryLoader_mapPairSubTypeToOptions = function _QueryLoader_mapPairSubTypeToOptions(pair) { switch (pair.subType) { case "optional": return { optional: true }; case "notExists": return { notExists: true }; default: return { optional: false, notExists: false }; } }, _QueryLoader_setSelectedValue = function _QueryLoader_setSelectedValue(component, value) { component.inputSelector.setSelected(value); component.inputSelector.submitSelected(); }, _QueryLoader_setSelectViewVariableBtn = function _QueryLoader_setSelectViewVariableBtn(startClassVal, startClassComponent, endClassVal, endClassComponent) { if (__classPrivateFieldGet(this, _a, "m", _QueryLoader_hasSelectedVar).call(this, this.query.variables, endClassVal.variable)) { __classPrivateFieldGet(this, _a, "m", _QueryLoader_clickOn).call(this, endClassComponent.inputSelector?.selectViewVariableBtn ?.widgetHtml); } }, _QueryLoader_updateOrderingOfVariables = function _QueryLoader_updateOrderingOfVariables() { const varMenu = this.sparnatural.variableSection.variableOrderMenu; this.query.variables.forEach((v) => { varMenu.draggables.forEach((d) => { const varName = __classPrivateFieldGet(this, _a, "m", _QueryLoader_getSelectedVarNameFromSelectItem).call(this, v); if (d.state.selectedVariable.variable === varName) { varMenu.removeDraggableByVarName(varName); const newDraggable = varMenu.addDraggableComponent(d.state.selectedVariable); if (__classPrivateFieldGet(this, _a, "m", _QueryLoader_isBind).call(this, v)) { newDraggable.loadAggregatedVariable(patternBindToVariableExpression(v)); } } }); }); const variableSortOption = this.sparnatural.variableSection.variableSortOption; const orderDef = this.query.solutionModifiers?.order?.orderDefs?.[0]; if (!orderDef) { variableSortOption.changeSortOrderCallBack(Order.NOORDER); return; } variableSortOption.changeSortOrderCallBack(orderDef.descending ? Order.DESC : Order.ASC); }, _QueryLoader_updateNamingOfVariables = function _QueryLoader_updateNamingOfVariables(varNameMapping) { const varMenu = this.sparnatural.variableSection.variableOrderMenu; this.query.variables.forEach((v) => { varMenu.draggables.forEach((d) => { const targetVarName = __classPrivateFieldGet(this, _a, "m", _QueryLoader_getSelectedVarNameFromSelectItem).call(this, v); if (varNameMapping.get(d.state.selectedVariable.variable) === targetVarName) { d.setVarName(targetVarName); } }); }); }, _QueryLoader_hasSelectedVar = function _QueryLoader_hasSelectedVar(vars, varName) { let result = false; vars.forEach((v) => { if (__classPrivateFieldGet(this, _a, "m", _QueryLoader_isBind).call(this, v)) { // keep same old behaviour: consider the aggregated INPUT variable as "selected" const aggregatedInputVar = v.expression?.expression?.[0]?.value; if (aggregatedInputVar === varName) result = true; } else { if (v.value === varName) result = true; } }); return result; }, _QueryLoader_isBind = function _QueryLoader_isBind(v) { return (v.type === "pattern" && v.subType === "bind"); }, _QueryLoader_getSelectedVarNameFromSelectItem = function _QueryLoader_getSelectedVarNameFromSelectItem(v) { if (__classPrivateFieldGet(this, _a, "m", _QueryLoader_isBind).call(this, v)) { return v.expression?.expression?.[0]?.value ?? v.variable.value; } return v.value; }, _QueryLoader_clickOn = function _QueryLoader_clickOn(el) { el[0].dispatchEvent(new Event("click")); }; //# sourceMappingURL=QueryLoader-v13.js.map