UNPKG

sparnatural

Version:

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

119 lines (105 loc) 3.6 kB
import { deprecate } from "util"; import ISparnaturalSpecification from "../../../../../spec-providers/ISparnaturalSpecification"; import OptionalArrow from "../../../../buttons/OptionalArrow"; import HTMLComponent from "../../../../HtmlComponent"; import CriteriaGroup from "../CriteriaGroup"; import NotExistsComponent from "./optioncomponents/NotExistsComponent"; import OptionalComponent from "./optioncomponents/OptionalComponent"; /** * Name corresponds to the CSS class set on the CriteriaGroup and the linkWhereBottom * See TriggerOption.switchState() */ export enum OptionTypes { OPTIONAL = "optionalEnabled", NOTEXISTS = "notExistsEnabled", SERVICE = "serviceEnabled", NONE = "noOption", } /** * Contains the components for Optional and not exists arrow. * Components can be triggered when: * 1. None of the parents rows (list elements) has it already chosen **/ export class OptionsGroup extends HTMLComponent { ParentCriteriaGroup: CriteriaGroup; OptionalComponent: OptionalComponent; NotExistsComponent: NotExistsComponent; specProvider: ISparnaturalSpecification; optionalArrow: OptionalArrow; constructor(ParentCriteriaGroup: CriteriaGroup, specProvider: ISparnaturalSpecification) { super("OptionsGroup", ParentCriteriaGroup, null); this.specProvider = specProvider; this.ParentCriteriaGroup = ParentCriteriaGroup as CriteriaGroup; this.OptionalComponent = new OptionalComponent(this); this.NotExistsComponent = new NotExistsComponent(this); } render() { super.render(); return this; } // called by ParentCriteriaGroup onObjectPropertyGroupSelected(optionState: OptionTypes) { this.#checkIfoptionalArrowisRenderable(optionState); } // validates if the Options Arrow can be rendered or not #checkIfoptionalArrowisRenderable(optionState: OptionTypes) { if ( this.#checkIfOptionsPossible() && !this.optionalArrow && optionState == OptionTypes.NONE ) { //Options like NOTEXISTS are possible and none of the parent has it already activated this.#addOptionsPossible(); } } #renderOptionalComponents() { // MUST BE WRAPPED INTO LIST DIV if( this.specProvider.getProperty( this.ParentCriteriaGroup.ObjectPropertyGroup.objectPropVal.type ).isEnablingOptional() ) { this.OptionalComponent.render(); } if( this.specProvider.getProperty( this.ParentCriteriaGroup.ObjectPropertyGroup.objectPropVal.type ).isEnablingNegation() ) { this.NotExistsComponent.render(); } this.html[0].dispatchEvent( new CustomEvent("redrawBackgroundAndLinks", { bubbles: true }) ); } #addOptionsPossible() { this.#renderOptionsGroupoptionalArrow(); } #checkIfOptionsPossible(): boolean { return ( this.specProvider.getProperty( this.ParentCriteriaGroup.ObjectPropertyGroup.objectPropVal.type ).isEnablingOptional() || this.specProvider.getProperty( this.ParentCriteriaGroup.ObjectPropertyGroup.objectPropVal.type ).isEnablingNegation() ); } #removeOptionalComponents() { this.OptionalComponent.html.remove(); this.NotExistsComponent.html.remove(); this.html[0].dispatchEvent( new CustomEvent("redrawBackgroundAndLinks", { bubbles: true }) ); } #renderOptionsGroupoptionalArrow() { this.optionalArrow = new OptionalArrow(this, (selected: boolean) => { selected ? this.#renderOptionalComponents() : this.#removeOptionalComponents(); }).render(); } }