Rift.IO OSM R1 Initial Submission
[osm/UI.git] / skyquake / plugins / composer / src / src / components / ComposerAppToolbar.js
diff --git a/skyquake/plugins/composer/src/src/components/ComposerAppToolbar.js b/skyquake/plugins/composer/src/src/components/ComposerAppToolbar.js
new file mode 100644 (file)
index 0000000..8515182
--- /dev/null
@@ -0,0 +1,186 @@
+
+/*
+ * 
+ *   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.
+ *
+ */
+'use strict';
+
+import React from 'react'
+import messages from './messages'
+import ClassNames from 'classnames'
+import PureRenderMixin from 'react-addons-pure-render-mixin'
+import Button from './Button'
+import CatalogItemsActions from '../actions/CatalogItemsActions'
+import CanvasEditorActions from '../actions/CanvasEditorActions'
+import ComposerAppActions from '../actions/ComposerAppActions'
+import SelectionManager from '../libraries/SelectionManager'
+import DeletionManager from '../libraries/DeletionManager'
+
+import '../styles/ComposerAppToolbar.scss'
+
+import imgSave from '../../../node_modules/open-iconic/svg/data-transfer-upload.svg'
+import imgCancel from '../../../node_modules/open-iconic/svg/circle-x.svg'
+import imgLayout from '../../../node_modules/open-iconic/svg/grid-three-up.svg'
+import imgVLD from '../../../node_modules/open-iconic/svg/link-intact.svg'
+import imgJSONViewer from '../../../node_modules/open-iconic/svg/code.svg'
+import imgFG from '../../../node_modules/open-iconic/svg/infinity.svg'
+import imgDelete from '../../../node_modules/open-iconic/svg/trash.svg'
+import imgVDU from '../../../node_modules/open-iconic/svg/laptop.svg'
+
+const ComposerAppToolbar = React.createClass({
+       mixins: [PureRenderMixin],
+       getInitialState() {
+               return {};
+       },
+       getDefaultProps() {
+               return {
+                       disabled: true,
+                       showMore: false,
+                       layout: {left: 300},
+                       isModified: false,
+                       isEditingNSD: false,
+                       isEditingVNFD: false,
+                       showJSONViewer: false,
+                       isNew: false
+               };
+       },
+       componentWillMount() {
+       },
+       componentDidMount() {
+       },
+       componentDidUpdate() {
+       },
+       componentWillUnmount() {
+       },
+       onClickSave(event) {
+               event.preventDefault();
+               event.stopPropagation();
+               CatalogItemsActions.saveCatalogItem();
+       },
+       onClickCancel(event) {
+               event.preventDefault();
+               event.stopPropagation();
+               CatalogItemsActions.cancelCatalogItemChanges();
+       },
+       onClickToggleShowMoreInfo(event) {
+               event.preventDefault();
+               event.stopPropagation();
+               CanvasEditorActions.toggleShowMoreInfo();
+       },
+       onClickAutoLayout(event) {
+               event.preventDefault();
+               event.stopPropagation();
+               CanvasEditorActions.applyDefaultLayout();
+       },
+       onClickAddVld(event) {
+               event.preventDefault();
+               event.stopPropagation();
+               CanvasEditorActions.addVirtualLinkDescriptor();
+       },
+       onClickAddVnffg(event) {
+               event.preventDefault();
+               event.stopPropagation();
+               CanvasEditorActions.addForwardingGraphDescriptor();
+       },
+       onClickAddVdu(event) {
+               event.preventDefault();
+               event.stopPropagation();
+               CanvasEditorActions.addVirtualDeploymentDescriptor();
+       },
+       onDragStartAddVdu(event) {
+               const data = {type: 'action', action: 'add-vdu'};
+               event.dataTransfer.effectAllowed = 'copy';
+               event.dataTransfer.setData('text', JSON.stringify(data));
+               ComposerAppActions.setDragState(data);
+       },
+       onDragStartAddVld(event) {
+               const data = {type: 'action', action: 'add-vld'};
+               event.dataTransfer.effectAllowed = 'copy';
+               event.dataTransfer.setData('text', JSON.stringify(data));
+               ComposerAppActions.setDragState(data);
+       },
+       onDragStartAddVnffg(event) {
+               const data = {type: 'action', action: 'add-vnffgd'};
+               event.dataTransfer.effectAllowed = 'copy';
+               event.dataTransfer.setData('text', JSON.stringify(data));
+               ComposerAppActions.setDragState(data);
+       },
+       onClickDeleteSelected(event) {
+               event.preventDefault();
+               event.stopPropagation();
+               DeletionManager.deleteSelected(event);
+       },
+       toggleJSONViewer(event) {
+               event.preventDefault();
+               if (this.props.showJSONViewer) {
+                       ComposerAppActions.closeJsonViewer();
+               } else {
+                       ComposerAppActions.closeJsonViewer();
+                       ComposerAppActions.showJsonViewer.defer();
+               }
+       },
+       render() {
+               const style = {left: this.props.layout.left};
+               const saveClasses = ClassNames('ComposerAppSave', {'primary-action': this.props.isModified || this.props.isNew});
+               const cancelClasses = ClassNames('ComposerAppCancel', {'secondary-action': this.props.isModified});
+               if (this.props.disabled) {
+                       return (
+                               <div className="ComposerAppToolbar" style={style}></div>
+                       );
+               }
+               const hasSelection = SelectionManager.getSelections().length > 0;
+               return (
+                       <div className="ComposerAppToolbar" style={style}>
+                               {(()=>{
+                                       if (this.props.isEditingNSD || this.props.isEditingVNFD) {
+                                               return (
+                                                       <div className="FileActions">
+                                                               <Button className={saveClasses} onClick={this.onClickSave} label={messages.getSaveActionLabel(this.props.isNew)} src={imgSave} />
+                                                               <Button className={cancelClasses} onClick={this.onClickCancel} label="Cancel" src={imgCancel} />
+                                                               <Button className="ComposerAppToggleJSONViewerAction" onClick={this.toggleJSONViewer} label="YAML Viewer" src={imgJSONViewer} />
+                                                       </div>
+                                               );
+                                       }
+                               })()}
+                               <div className="LayoutActions">
+                                       <Button className="action-auto-layout" onClick={this.onClickAutoLayout} label="Auto Layout" src={imgLayout} />
+                                       {this.props.isEditingNSD ||
+                                               this.props.isEditingVNFD ? <Button className="action-add-vld"
+                                                                                                                  draggable="true"
+                                                                                                                  label={this.props.isEditingNSD ? 'Add VLD' : 'Add IVLD'}
+                                                                                                                  src={imgVLD}
+                                                                                                                  onDragStart={this.onDragStartAddVld}
+                                                                                                                  onClick={this.onClickAddVld} /> : null}
+                                       {this.props.isEditingNSD ? <Button className="action-add-vnffg"
+                                                                                                          draggable="true"
+                                                                                                          label="Add VNFFG"
+                                                                                                          src={imgFG}
+                                                                                                          onDragStart={this.onDragStartAddVnffg}
+                                                                                                          onClick={this.onClickAddVnffg} /> : null}
+                                       {this.props.isEditingVNFD ? <Button className="action-add-vdu"
+                                                                                                               draggable="true"
+                                                                                                               label="Add VDU"
+                                                                                                               src={imgVDU}
+                                                                                                               onDragStart={this.onDragStartAddVdu}
+                                                                                                               onClick={this.onClickAddVdu} /> : null}
+                                       <Button type="image" title="Delete selected items" className="action-delete-selected-items" disabled={!hasSelection} onClick = {this.onClickDeleteSelected} src={imgDelete} label="Delete" />
+                               </div>
+                       </div>
+               );
+       }
+});
+
+export default ComposerAppToolbar;