JAVASCRIPT   88

resource-instance.js

Guest on 31st August 2021 05:20:37 PM

  1. define([
  2.     'knockout',
  3.     'underscore',
  4.     'view-data',
  5.     'arches',
  6.     'utils/ontology',
  7.     'views/components/widgets/resource-instance-select'
  8. ], function(ko, _, data, arches, ontologyUtils) {
  9.     var name = 'resource-instance-datatype-config';
  10.     ko.components.register(name, {
  11.         viewModel: function(params) {
  12.             var self = this;
  13.             this.search = params.search;
  14.             this.resourceModels = [{
  15.                 graphid: null,
  16.                 name: ''
  17.             }].concat(_.map(data.createableResources, function(graph) {
  18.                 return {
  19.                     graphid: graph.graphid,
  20.                     name: graph.name
  21.                 };
  22.             }));
  23.             if (!this.search) {
  24.                 this.makeFriendly = ontologyUtils.makeFriendly;
  25.                 this.getSelect2ConfigForOntologyProperties = ontologyUtils.getSelect2ConfigForOntologyProperties;
  26.                 this.isEditable = params.isEditable;
  27.                 this.graphIsSemantic = !!params.graph.get('ontology_id');
  28.                 this.rootOntologyClass = params.graph.get('root').ontologyclass();
  29.                 this.graphName = params.graph.get('root').name();
  30.                 if (params.graph) {
  31.                     var cards = _.filter(params.graph.get('cards')(), function(card){return card.nodegroup_id === params.nodeGroupId();});
  32.                     if (cards.length) {
  33.                         this.isEditable = cards[0].is_editable;
  34.                     }
  35.                 } else if (params.widget) {
  36.                     this.isEditable = params.widget.card.get('is_editable');
  37.                 }
  38.                 this.node = params;
  39.                 this.config = params.config;
  40.                 this.selectedResourceModel = ko.observable('');
  41.                 this.selectedResourceModel.subscribe(function(resourceType) {
  42.                     if (resourceType.length > 0) {
  43.                         resourceType = resourceType.concat(self.config.graphs());
  44.                         self.config.graphs(resourceType);
  45.                         self.selectedResourceModel([]);
  46.                     }
  47.                 });
  48.  
  49.                 this.selectedResourceType = ko.observable(null);
  50.                 this.toggleSelectedResource = function(resourceRelationship) {
  51.                     if (self.selectedResourceType() === resourceRelationship) {
  52.                         self.selectedResourceType(null);
  53.                     } else {
  54.                         self.selectedResourceType(resourceRelationship);
  55.                     }
  56.                 };
  57.  
  58.                 var preventSetup = false;
  59.                 var setupConfig = function(graph) {
  60.                     var model = _.find(self.resourceModels, function(model){
  61.                         return graph.graphid === model.graphid;
  62.                     });
  63.                     graph.ontologyProperty = ko.observable(ko.unwrap(graph.ontologyProperty));
  64.                     graph.inverseOntologyProperty = ko.observable(ko.unwrap(graph.inverseOntologyProperty));
  65.                     // use this so that graph.name won't get saved back to the node config
  66.                     Object.defineProperty(graph, 'name', {
  67.                         value: model.name
  68.                     });
  69.                     window.fetch(arches.urls.graph_nodes(graph.graphid))
  70.                         .then(function(response){
  71.                             if(response.ok) {
  72.                                 return response.json();
  73.                             }
  74.                             throw("error");
  75.                         })
  76.                         .then(function(json) {
  77.                             var node = _.find(json, function(node) {
  78.                                 return node.istopnode;
  79.                             });
  80.                             // use this so that graph.ontologyclass won't get saved back to the node config
  81.                             Object.defineProperty(graph, 'ontologyClass', {
  82.                                 value: node.ontologyclass
  83.                             });
  84.                         });
  85.  
  86.                     // need to listen to these properties change so we can
  87.                     // trigger a "dirty" state in the config
  88.                     var triggerDirtyState = function() {
  89.                         preventSetup = true;
  90.                         self.config.graphs(self.config.graphs());
  91.                         preventSetup = false;
  92.                     };
  93.                     graph.ontologyProperty.subscribe(triggerDirtyState);
  94.                     graph.inverseOntologyProperty.subscribe(triggerDirtyState);
  95.  
  96.                     graph.removeRelationship = function(graph){
  97.                         self.config.graphs.remove(graph);
  98.                     };
  99.                 };
  100.  
  101.                 this.config.graphs().forEach(function(graph) {
  102.                     setupConfig(graph);
  103.                 });
  104.  
  105.                 // this should only get completely run when discarding edits
  106.                 this.config.graphs.subscribe(function(graphs){
  107.                     if (!preventSetup) {
  108.                         graphs.forEach(function(graph) {
  109.                             setupConfig(graph);
  110.                         });
  111.                     }
  112.                 });
  113.  
  114.                 this.formatLabel = function(name, ontologyProperty, inverseOntologyProperty){
  115.                     if (self.graphIsSemantic) {
  116.                         return name + ' (' + ontologyUtils.makeFriendly(ontologyProperty) + '/' + ontologyUtils.makeFriendly(inverseOntologyProperty) + ')';
  117.                     }
  118.                     else {
  119.                         return name;
  120.                     }
  121.                 };
  122.  
  123.             } else {
  124.                 var filter = params.filterValue();
  125.                 this.node = params.node;
  126.                 this.op = ko.observable(filter.op || '');
  127.                 this.searchValue = ko.observable(filter.val || '');
  128.                 this.filterValue = ko.computed(function() {
  129.                     return {
  130.                         op: self.op(),
  131.                         val: self.searchValue() || ''
  132.                     };
  133.                 }).extend({ throttle: 750 });
  134.                 params.filterValue(this.filterValue());
  135.                 this.filterValue.subscribe(function(val) {
  136.                     params.filterValue(val);
  137.                 });
  138.                 this.datatype = params.datatype;
  139.  
  140.             }
  141.         },
  142.         template: { require: 'text!datatype-config-templates/resource-instance' }
  143.     });
  144.     return name;
  145. });

Raw Paste


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