Source

guides/visual-graph/visual-graph.js

/**
 * @name visual-graph
 * @memberof module:Interactive Guide
 *
 * @description
 * The `visual-graph` guide demonstrates how to use the Visual Graph features in GraphDB.
 *
 * The guide consists of the following steps:
 * 1. Click on the "Visual graph" main menu.<br>
 * <img src="resources/guides/visual-graph/visual-graph-click-explore-menu.png" style="height:200px; border: solid; border-width:1px"/>
 * <img src="resources/guides/visual-graph/visual-graph-click-main-menu.png" style="height:200px; border: solid; border-width:1px"/>
 * 2. Use the RDF resources search input to enter an IRI.<br>
 * <img src="resources/guides/visual-graph/visual-graph-search-rdf-resources-input.png" style="height:200px; border: solid; border-width:1px"/>
 * 3. Choose a resource from the autocomplete list.<br>
 * <img src="resources/guides/visual-graph/visual-graph-search-rdf-resources-input-autocomplete-item.png" style="height:200px; border: solid; border-width:1px"/>
 * 4. Inspect and interact with the visual graph (expand nodes, view properties, focus links).<br>
 * <img src="resources/guides/visual-graph/visual-graph-intro.png" style="height:200px; border: solid; border-width:1px"/>
 *
 * This guide can be configured using the common options defined in [Options](#.Options).
 *
 * @property {string} [options.easyGraphInputText] - The text to enter into the Easy graph input.
 * @property {string} [options.iri] - The IRI used to target nodes in the visual graph.
 * @property {string} [options.iriLabel] - The label of the IRI link shown in the visualization.
 * @property {string} [options.fromIri] - Source IRI for link-focused steps.
 * @property {string} [options.toIri] - Target IRI for link-focused steps.
 * @property {string} [options.focusProperties] - Array describing focus properties displayed in properties steps.
 *
 * @example
 * ```JSON
 * {
 *   "guideBlockName": "visual-graph",
 *   "options": {
 *     "iri": "http://example.org/resource",
 *     "iriLabel": "hasRole",
 *     "easyGraphInputText": "http://example.org/resource",
 *     "focusProperties": ["ontl:roleStartDate"]
 *   }
 * }
 * ```
 */

const step = {
  guideBlockName: 'visual-graph',
  getSteps: function(options, services) {
    const GuideUtils = services.GuideUtils;
    const RoutingUtil = services.RoutingUtil;
    options.mainAction = 'visual-graph';
    return [
      {
        guideBlockName: 'click-main-menu',
        options: {
          menu: 'visual-graph',
          showIntro: true,
          ...options
        }
      }, {
        guideBlockName: 'visual-graph-search-rdf-resources-input',
        options: {...options}
      }, {
        guideBlockName: 'visual-graph-search-rdf-resources-input-autocomplete-item',
        options: {...options}
      }, {
        guideBlockName: 'visual-graph-intro',
        options: {
          onPreviousClick: () => {
            RoutingUtil.navigate('/graphs-visualizations');
            const searchInputSelector = GuideUtils.getGuideElementSelector('graphVisualisationSearchInputNotConfigured', ' input');
            return GuideUtils.waitFor(searchInputSelector, 3)
              .then(() => {
                GuideUtils.validateTextInput(searchInputSelector, options.easyGraphInputText);
              });
          },
          initPreviousStep: () => {
            const url = '/graphs-visualizations?uri=' + options.iri;
            if (url !== decodeURIComponent(RoutingUtil.getCurrentRoute())) {
              const URL = '/graphs-visualizations?uri=' + options.iri;
              RoutingUtil.navigate(URL);
              return GuideUtils.waitFor(`.node-wrapper[id^="${options.iri}"] circle`, 3);
            }
            return Promise.resolve();
          },
          canBePaused: false,
          forceReload: true,
          ...options
        }
      }
    ];
  }
};

export function register(registry) {
  registry.add('guide.step', step);
}