Rift.IO OSM R1 Initial Submission
[osm/UI.git] / skyquake / plugins / launchpad / src / virtual_links / nsVirtualLinkDetails.jsx
diff --git a/skyquake/plugins/launchpad/src/virtual_links/nsVirtualLinkDetails.jsx b/skyquake/plugins/launchpad/src/virtual_links/nsVirtualLinkDetails.jsx
new file mode 100644 (file)
index 0000000..33404e0
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * 
+ *   Copyright 2016 RIFT.IO Inc
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+import React from 'react';
+import RecordViewStore from '../recordViewer/recordViewStore.js';
+import Utils from 'utils/utils.js';
+import _ from 'lodash';
+import './nsVirtualLinks.scss';
+import UpTime from 'widgets/uptime/uptime.jsx';
+import NSVirtualLinksStore from './nsVirtualLinksStore.js';
+import NSVirtualLinksActions from './nsVirtualLinksActions.js';
+import SkyquakeComponent from 'widgets/skyquake_container/skyquakeComponent.jsx';
+import TextInput from 'widgets/form_controls/textInput.jsx';
+
+class NsVirtualLinkDetails extends React.Component {
+       constructor(props) {
+               super(props);
+               this.state = NSVirtualLinksStore.getState();
+       }
+
+       resolvePath = (obj, path) => {
+               // supports a.b, a[1] and foo[bar], etc.
+               // where obj is ['nope', 'yes', {a: {b: 1}, foo: 2}]
+               // then [1] returns 'yes'; [2].a.b returns 1; [2].a[foo] returns 2;
+               path = path.split(/[\.\[\]]/).filter(d => d);
+               return path.reduce((r, p) => {
+                       if (r) {
+                               return r[p];
+                       }
+               }, obj);
+       }
+
+       transformValue(field, value) {
+               let transformedValue = (field.transform && field.transform(value)) || value;
+               if (typeof transformedValue == 'object') {
+                       transformedValue = JSON.stringify(transformedValue);
+               }
+               return transformedValue;
+       }
+
+       render() {
+
+               let self = this;
+               let column = [];
+               
+               this.state.column.categories.map((category) => {
+                       let fields = [];
+
+                       category.fields && category.fields.map((field) => {
+                               let value = this.resolvePath(this.props.virtualLink, field.key);
+                               let textFields = [];
+
+                               if (_.isArray(value)) {
+                                       value.map((v, idx) => {
+                                               let transformedValue = this.transformValue(field, v);
+                                               textFields.push(
+                                                       <TextInput key={field.key + idx} className='value' type='text' value={transformedValue} readonly='true' defaultValue='--' />
+                                               );
+                                       })
+                               } else {
+                                       let transformedValue = this.transformValue(field, value);
+                                       textFields.push(
+                                               <TextInput key={field.key} className='value' label={field.label} type='text' value={transformedValue} readonly='true' defaultValue='--' />
+                                       );
+                               }
+                               fields.push(
+                                       <div key={field.key}>
+                                               {textFields}
+                                       </div>
+                               );
+                       });
+
+                       column.push(
+                               <div key={category.key}>
+                                       <h3>
+                                               {category.label}
+                                       </h3>
+                                       {fields}
+                               </div>
+                       );
+               });
+
+               
+               return this.props.virtualLink ? (
+                       <div className='nsVirtualLinkDetails'>
+                               <div className='column'>
+                                       {column}
+                               </div>
+                       </div>
+               ) : null
+       }
+}
+
+export default SkyquakeComponent(NsVirtualLinkDetails);
\ No newline at end of file