JAVASCRIPT   70

node-value.js

Guest on 31st August 2021 05:18:18 PM

  1. define([
  2.     'jquery',
  3.     'knockout',
  4.     'underscore',
  5.     'arches'
  6. ], function ($, ko, _, arches) {
  7.     var name = 'node-value-datatype-config';
  8.     ko.components.register(name, {
  9.         viewModel: function(params) {
  10.             var self = this;
  11.             this.nodes = [{
  12.                 id: null,
  13.                 name: ko.observable('')
  14.             }]
  15.             if (params.graph) {
  16.                 this.nodes = this.nodes.concat(
  17.                     _.filter(params.graph.get('nodes')(), function(node) {
  18.                         return node.datatypelookup[node.datatype()].defaultwidget_id &&
  19.                             node.datatype() !== 'node-value' &&
  20.                             node.nodeid !== params.nodeid;
  21.                     })
  22.                 );
  23.             }
  24.             this.config = params.config;
  25.             this.search = params.search;
  26.  
  27.             if (!this.search) {
  28.                 this.node = params;
  29.                 this.graph = params.graph;
  30.                 this.properties = ko.observableArray();
  31.                 var updateProperties = function() {
  32.                     var properties = [{
  33.                         name: '',
  34.                         id: null
  35.                     }];
  36.                     if (self.config.nodeid() && self.graph) {
  37.                         var node = _.find(params.graph.get('nodes')(), function(node) {
  38.                             return node.id === self.config.nodeid();
  39.                         });
  40.                         if (node) {
  41.                             $.ajax({
  42.                                 dataType: "json",
  43.                                 url: arches.urls.graph + node.graph.get('graphid') + '/get_related_nodes/' + node.id,
  44.                                 data: {
  45.                                     parent_nodeid: params.id
  46.                                 },
  47.                                 success: function (response) {
  48.                                     self.properties(
  49.                                         properties.concat(
  50.                                             _.map(response, function (prop) {
  51.                                                 return {
  52.                                                     name: node.getFriendlyOntolgyName(prop.ontology_property),
  53.                                                     id: prop.ontology_property
  54.                                                 }
  55.                                             })
  56.                                         )
  57.                                     );
  58.                                 }
  59.                             });
  60.                         }
  61.                     } else {
  62.                         self.properties(properties);
  63.                     }
  64.                 }
  65.                 updateProperties();
  66.                 this.config.nodeid.subscribe(updateProperties);
  67.                 this.isEditable = true;
  68.                 if (params.graph) {
  69.                     this.propertyName = ko.computed(function () {
  70.                         var propertyId = self.config.property();
  71.                         var selectedProperty = _.find(self.properties(), function(property) {
  72.                             return property.id === propertyId;
  73.                         });
  74.                         return selectedProperty ? selectedProperty.name : '';
  75.                     });
  76.                     this.relatedNodeName = ko.computed(function () {
  77.                         var nodeid = self.config.nodeid();
  78.                         var relatedNode =  _.find(params.graph.get('nodes')(), function(node) {
  79.                             return node.id === nodeid;
  80.                         });
  81.                         return relatedNode ? relatedNode.name() : '';
  82.                     });
  83.                     var cards = _.filter(params.graph.get('cards')(), function(card){return card.nodegroup_id === params.nodeGroupId()})
  84.                     if (cards.length) {
  85.                         this.isEditable = cards[0].is_editable
  86.                     }
  87.                 } else if (params.widget) {
  88.                     this.isEditable = params.widget.card.get('is_editable')
  89.                 }
  90.             } else {
  91.                 var filter = params.filterValue();
  92.                 this.node = params.node;
  93.                 this.op = ko.observable(filter.op || '');
  94.                 this.searchValue = ko.observable(filter.val || '');
  95.                 this.filterValue = ko.computed(function () {
  96.                     return {
  97.                         op: self.op(),
  98.                         val: self.searchValue() || ''
  99.                     }
  100.                 }).extend({ throttle: 750 });
  101.                 params.filterValue(this.filterValue());
  102.                 this.filterValue.subscribe(function (val) {
  103.                     params.filterValue(val);
  104.                 });
  105.             }
  106.         },
  107.         template: { require: 'text!datatype-config-templates/node-value' }
  108.     });
  109.     return name;
  110. });

Raw Paste


Login or Register to edit or fork this paste. It's free.