X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FUI.git;a=blobdiff_plain;f=skyquake%2Fplugins%2Fcomposer%2Fsrc%2Fsrc%2Fcomponents%2FEditDescriptorModelProperties.js;fp=skyquake%2Fplugins%2Fcomposer%2Fsrc%2Fsrc%2Fcomponents%2FEditDescriptorModelProperties.js;h=19e699d2862dd8570e353765fc42cdc87fea7f7b;hp=ad2bf3dc986ece04f29f74c5d2f7b9a14adf4541;hb=03156e335275de1dafbc2a816e98006afdf249bf;hpb=f2dc2462571800e62cba969964de621dca09299c diff --git a/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js b/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js index ad2bf3dc9..19e699d28 100644 --- a/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js +++ b/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js @@ -21,371 +21,134 @@ * This class generates the form fields used to edit the CONFD JSON model. */ -import _includes from 'lodash/includes' -import _isArray from 'lodash/isArray' -import _cloneDeep from 'lodash/cloneDeep' -import _debounce from 'lodash/debounce'; import _uniqueId from 'lodash/uniqueId'; import _set from 'lodash/set'; import _get from 'lodash/get'; import _has from 'lodash/has'; +import _keys from 'lodash/keys'; +import _isObject from 'lodash/isObject'; +import _isArray from 'lodash/isArray'; import utils from '../libraries/utils' import React from 'react' -import ClassNames from 'classnames' import changeCase from 'change-case' import toggle from '../libraries/ToggleElementHandler' -import Button from './Button' import Property from '../libraries/model/DescriptorModelMetaProperty' +import SelectionManager from '../libraries/SelectionManager' import ComposerAppActions from '../actions/ComposerAppActions' import CatalogItemsActions from '../actions/CatalogItemsActions' -import DESCRIPTOR_MODEL_FIELDS from '../libraries/model/DescriptorModelFields' +import DescriptorEditorActions from '../actions/DescriptorEditorActions' import DescriptorModelFactory from '../libraries/model/DescriptorModelFactory' import DescriptorModelMetaFactory from '../libraries/model/DescriptorModelMetaFactory' -import SelectionManager from '../libraries/SelectionManager' -import DeletionManager from '../libraries/DeletionManager' -import DescriptorModelIconFactory from '../libraries/model/IconFactory' -import getEventPath from '../libraries/getEventPath' -import CatalogDataStore from '../stores/CatalogDataStore' -import imgAdd from '../../../node_modules/open-iconic/svg/plus.svg' -import imgRemove from '../../../node_modules/open-iconic/svg/trash.svg' +import ModelBreadcrumb from './model/ModelBreadcrumb' +import ListItemAsLink from './model/ListItemAsLink' +import LeafField from './model/LeafField' +import { List, ListItem } from './model/List' +import ContainerWrapper from './model/Container' +import Choice from './model/Choice' import '../styles/EditDescriptorModelProperties.scss' -const EMPTY_LEAF_PRESENT = '--empty-leaf-set--'; function resolveReactKey(value) { - const keyPath = ['uiState', 'fieldKey']; + const keyPath = ['uiState', 'fieldKey']; if (!_has(value, keyPath)) { _set(value, keyPath, _uniqueId()); } return _get(value, keyPath); } -function getDescriptorMetaBasicForType(type) { - const basicPropertiesFilter = d => _includes(DESCRIPTOR_MODEL_FIELDS[type], d.name); - return DescriptorModelMetaFactory.getModelMetaForType(type, basicPropertiesFilter) || {properties: []}; +function getTipForProperty(property) { + return property.name === 'constituent-vnfd' ? "Drag a VNFD from the Catalog to add more." : null } -function getDescriptorMetaAdvancedForType(type) { - const advPropertiesFilter = d => !_includes(DESCRIPTOR_MODEL_FIELDS[type], d.name); - return DescriptorModelMetaFactory.getModelMetaForType(type, advPropertiesFilter) || {properties: []}; +function selectModel(container, model, property) { + ComposerAppActions.selectModel(container.findChildByUid(model)); } -function getTitle(model = {}) { - if (typeof model['short-name'] === 'string' && model['short-name']) { - return model['short-name']; - } - if (typeof model.name === 'string' && model.name) { - return model.name; - } - if (model.uiState && typeof model.uiState.displayName === 'string' && model.uiState.displayName) { - return model.uiState.displayName - } - if (typeof model.id === 'string') { - return model.id; - } +function removeListEntry(container, property, path) { + DescriptorEditorActions.removeListItem({ descriptor: container, property, path }); } -export default function EditDescriptorModelProperties(props) { - - const container = props.container; - - if (!(DescriptorModelFactory.isContainer(container))) { - return - } - - function startEditing() { - DeletionManager.removeEventListeners(); - } - - function endEditing() { - DeletionManager.addEventListeners(); - } - - function onClickSelectItem(property, path, value, event) { - event.preventDefault(); - const root = this.getRoot(); - if (SelectionManager.select(value)) { - CatalogItemsActions.catalogItemMetaDataChanged(root.model); - } - } - - function onFocusPropertyFormInputElement(property, path, value, event) { - - event.preventDefault(); - startEditing(); - - function removeIsFocusedClass(event) { - event.target.removeEventListener('blur', removeIsFocusedClass); - Array.from(document.querySelectorAll('.-is-focused')).forEach(d => d.classList.remove('-is-focused')); - } - - removeIsFocusedClass(event); +function createAndAddItemToPath(container, property, path) { + DescriptorEditorActions.addListItem({ descriptor: container, property, path }); +} - const propertyWrapper = getEventPath(event).reduce((parent, element) => { - if (parent) { - return parent; - } - if (!element.classList) { - return false; - } - if (element.classList.contains('property')) { - return element; - } - }, false); +function notifyPropertyFocused(container, path) { + container.getRoot().uiState.focusedPropertyPath = path.join('.'); + console.debug('property selected', path.join('.')); + ComposerAppActions.propertySelected([path.join('.')]); +} - if (propertyWrapper) { - propertyWrapper.classList.add('-is-focused'); - event.target.addEventListener('blur', removeIsFocusedClass); - } +function setPropertyOpenState(container, path, property, isOpen) { + DescriptorEditorActions.setOpenState({ descriptor: container, property, path, isOpen }); +} - } +function isDataProperty(property) { + return property.type === 'leaf' || property.type === 'leaf_list' || property.type === 'choice'; +} - function buildAddPropertyAction(container, property, path) { - function onClickAddProperty(property, path, event) { - event.preventDefault(); - //SelectionManager.resume(); - const create = Property.getContainerCreateMethod(property, this); - if (create) { - const model = null; - create(model, path, property); - } else { - const name = path.join('.'); - // get a unique name for the new list item based on the current list content - // some lists, based on the key, may not get a uniqueName generated here - const uniqueName = DescriptorModelMetaFactory.generateItemUniqueName(container.model[property.name], property); - const value = Property.createModelInstance(property, uniqueName); - utils.assignPathValue(this.model, name, value); - } - CatalogItemsActions.catalogItemDescriptorChanged(this.getRoot()); +function checkIfValueEmpty(value) { + if (value === null || typeof value === 'undefined') { + return true; + } else if (_isArray(value) && !value.length) { + return true; + } else if (_isObject(value)) { + const keys = _keys(value); + if (keys.length < 2) { + return !keys.length || (keys[0] === 'uiState') } - return ( -