Composer buttons grayed out
[osm/UI.git] / skyquake / plugins / composer / src / src / components / ComposerApp.js
index b5cfa75..629f409 100644 (file)
@@ -48,6 +48,9 @@ import TooltipManager from '../libraries/TooltipManager'
 import CatalogItemsActions from '../actions/CatalogItemsActions'
 import CommonUtils from 'utils/utils.js'
 import FileManagerActions from './filemanager/FileManagerActions';
+import {SkyquakeRBAC, isRBACValid} from 'widgets/skyquake_rbac/skyquakeRBAC.jsx';
+import ROLES from 'utils/roleConstants.js';
+
 import 'normalize.css'
 import '../styles/AppRoot.scss'
 import 'style/layout.scss'
@@ -60,6 +63,8 @@ const clearLocalStorage = utils.getSearchParams(window.location).hasOwnProperty(
 const preventDefault = e => e.preventDefault();
 const clearDragState = () => ComposerAppActions.setDragState(null);
 
+const PROJECT_ROLES = ROLES.PROJECT;
+const PLATFORM = ROLES.PLATFORM;
 
 const ComposerApp = React.createClass({
        mixins: [PureRenderMixin],
@@ -69,6 +74,10 @@ const ComposerApp = React.createClass({
        getDefaultProps() {
                return {};
        },
+       contextTypes: {
+           router: React.PropTypes.object,
+           userProfile: React.PropTypes.object
+       },
        componentWillMount() {
                if (clearLocalStorage) {
                        window.localStorage.clear();
@@ -147,6 +156,8 @@ const ComposerApp = React.createClass({
        render() {
                let html = null;
                let self = this;
+               const User = this.context.userProfile || {};
+               const rbacDisabled = !isRBACValid(User, [PROJECT_ROLES.CAT_ADMIN]);
                if(this.state.hasModel) {
 
                        function onClickUpdateSelection(event) {
@@ -163,7 +174,7 @@ const ComposerApp = React.createClass({
                                }
                        }
 
-                       let cpNumber = 0;
+
                        let AppHeader = (<div className="AppHeader">
                                                                <RiftHeader />
                                                        </div>);
@@ -174,12 +185,7 @@ const ComposerApp = React.createClass({
                        const isModified = self.state.item && self.state.item.uiState.modified;
                        const isEditingNSD = self.state.item && self.state.item.uiState && /nsd/.test(self.state.item.uiState.type);
                        const isEditingVNFD = self.state.item && self.state.item.uiState && /vnfd/.test(self.state.item.uiState.type);
-                       const containers = [self.state.item].reduce(DescriptorModelFactory.buildCatalogItemFactory(CatalogDataStore.getState().catalogs), []);
-
-                       containers.filter(d => DescriptorModelFactory.isConnectionPoint(d)).forEach(d => {
-                               d.cpNumber = ++cpNumber;
-                               containers.filter(d => DescriptorModelFactory.isVnfdConnectionPointRef(d)).filter(ref => ref.key === d.key).forEach(ref => ref.cpNumber = d.cpNumber);
-                       });
+            const containers = self.state.containers;
                        const canvasTitle = containers.length ? containers[0].model.name : '';
                        const hasNoCatalogs = CatalogDataStore.getState().catalogs.length === 0;
                        const isLoading = self.state.isLoading;
@@ -200,7 +206,8 @@ const ComposerApp = React.createClass({
                                                        <CatalogPanel layout={self.state.layout}
                                                                                  isLoading={isLoading}
                                                                                  hasNoCatalogs={hasNoCatalogs}
-                                                                                 filterByType={self.state.filterCatalogByTypeValue} />
+                                                                                 filterByType={self.state.filterCatalogByTypeValue}
+                                                                                 rbacDisabled={rbacDisabled} />
                                                        <CanvasPanel layout={self.state.layout}
                                                                                 hasNoCatalogs={hasNoCatalogs}
                                                                                 showMore={self.state.showMore}
@@ -210,8 +217,10 @@ const ComposerApp = React.createClass({
                                                                                 panelTabShown={self.state.panelTabShown}
                                                                                 files={self.state.files}
                                                                                 filesState={self.state.filesState}
+                                         newPathName={self.state.newPathName}
                                                                                 item={self.state.item}
                                                                                 type={self.state.filterCatalogByTypeValue}
+                                                                                rbacDisabled={rbacDisabled}
                                                                                  />
                                                        {
                                                                (self.state.panelTabShown == 'descriptor') ?
@@ -229,7 +238,7 @@ const ComposerApp = React.createClass({
                                                                                                isEditingVNFD={isEditingVNFD}
                                                                                                isModified={isModified}
                                                                                                isNew={isNew}
-                                                                                               disabled={!hasItem}
+                                                                                               disabled={!hasItem || rbacDisabled}
                                                                                                onClick={event => event.stopPropagation()}
                                                                                                panelTabShown={self.state.panelTabShown}/>
                                                </div>
@@ -274,4 +283,5 @@ const ComposerApp = React.createClass({
 
 });
 
+
 export default ComposerApp;