update from RIFT as of 696b75d2fe9fb046261b08c616f1bcf6c0b54a9b third try
[osm/UI.git] / skyquake / plugins / composer / src / src / components / model / PropertyNavigate.jsx
diff --git a/skyquake/plugins/composer/src/src/components/model/PropertyNavigate.jsx b/skyquake/plugins/composer/src/src/components/model/PropertyNavigate.jsx
new file mode 100644 (file)
index 0000000..4a41e99
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ *
+ *   Copyright 2016-2017 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 _keys from 'lodash/keys'
+import _isObject from 'lodash/isObject'
+
+import Select from 'react-select';
+import 'react-select/dist/react-select.css'
+
+import DescriptorEditorActions from '../../actions/DescriptorEditorActions'
+import CatalogItemsActions from '../../actions/CatalogItemsActions'
+import Property from '../../libraries/model/DescriptorModelMetaProperty'
+import SelectionManager from '../../libraries/SelectionManager'
+
+export default function PropertyNavigate(props) {
+    const { container, idMaker, options, placeholder, style } = props;
+
+    function gotoProperty(descriptor, path) {
+        DescriptorEditorActions.expandPanel({ descriptor, path });
+        function bringIntoViewAndFocusOnProperty() {
+            const element = document.getElementById(idMaker(container, path));
+            if (element) {
+                element.scrollIntoView();
+                setTimeout(function () {
+                    element.focus()
+                }, 100);
+            }
+        }
+        setTimeout(bringIntoViewAndFocusOnProperty, 100);
+    }
+    function onClickSelectItem(item) {
+        // we don't support traversing into an 'external' model (e.g. vlds)
+        // if we did then we would need to know when and then invoke something like
+        // CatalogItemsActions.catalogItemMetaDataChanged(root.model);
+        // and then after a delay fire the gotoProperty step
+        gotoProperty(container, item.value);
+    }
+    return (
+        <div style={style} >
+            <Select
+                placeholder={placeholder}
+                options={options}
+                onChange={onClickSelectItem}
+                scrollMenuIntoView={true}
+            />
+        </div>
+    );
+}