*/
'use strict';
-import _ from 'lodash'
+import _includes from 'lodash/includes'
import React from 'react'
import ReactDOM from 'react-dom'
import messages from './messages'
import CatalogPanelStore from '../stores/CatalogPanelStore'
import LoadingIndicator from './LoadingIndicator'
import SelectionManager from '../libraries/SelectionManager'
+import { isRBACValid } from 'widgets/skyquake_rbac/skyquakeRBAC';
+import ROLES from 'utils/roleConstants.js';
import '../styles/CatalogPanel.scss'
document.body.removeEventListener('dragend', this.onDragEnd);
window.removeEventListener('dragend', this.onDragEnd);
},
+ contextTypes: {
+ userProfile: React.PropTypes.object
+ },
render() {
+ const User = this.context.userProfile || {};
+ const isModifiableByUser = isRBACValid(User, [ROLES.PROJECT.PROJECT_ADMIN, ROLES.PROJECT.CATALOG_ADMIN]);
const onDropCatalogItem = e => {
e.preventDefault();
const isDraggingFiles = uiTransientState.isDragging && uiTransientState.isDraggingFiles;
const updateDropZone = createDropZone.bind(this, UploadDropZone.ACTIONS.update, '.action-update-catalog-package');
const onboardDropZone = createDropZone.bind(this, UploadDropZone.ACTIONS.onboard, '.action-onboard-catalog-package');
- const className = ClassNames('CatalogPanel', {'-is-tray-open': this.state.isTrayOpen});
+ const className = ClassNames('CatalogPanel', { '-is-tray-open': this.state.isTrayOpen });
const hasNoCatalogs = this.props.hasNoCatalogs;
const isLoading = this.props.isLoading;
+ const packageManagerPanel = (
+ <CatalogPanelTray show={this.state.isTrayOpen}>
+ <DropZonePanel show={isDraggingItem} title="Drop catalog item to export.">
+ <DropTarget className="action-export-catalog-items" onDrop={onDropCatalogItem}>
+ <span>Export catalog item.</span>
+ </DropTarget>
+ </DropZonePanel>
+ <DropZonePanel show={isDraggingFiles}>
+ <DropTarget className="action-onboard-catalog-package" dropZone={onboardDropZone} onDrop={onDropOnboardPackage}>
+ <span>On-board new catalog package.</span>
+ </DropTarget>
+ <DropTarget className="action-update-catalog-package" dropZone={updateDropZone} onDrop={onDropUpdatePackage}>
+ <span>Update existing catalog package.</span>
+ </DropTarget>
+ </DropZonePanel>
+ <CatalogPackageManager />
+ </CatalogPanelTray>
+ );
return (
- <div className={className} data-resizable="right" data-resizable-handle-offset="0 6" style={{width: this.props.layout.left}}>
- <CatalogPanelToolbar />
+ <div className={className} data-resizable="right" data-resizable-handle-offset="0 6" style={{ width: this.props.layout.left }}>
+ <CatalogPanelToolbar rbacDisabled={this.props.rbacDisabled} />
<div className="CatalogPanelBody">
{(() => {
if (isLoading) {
)
}
if (hasNoCatalogs) {
- return messages.catalogWelcome;
+ return messages.catalogWelcome(isModifiableByUser);
}
return (
<div>
);
})()}
</div>
- <CatalogPanelTray show={this.state.isTrayOpen}>
- <DropZonePanel show={isDraggingItem} title="Drop catalog item to export.">
- <DropTarget className="action-export-catalog-items" onDrop={onDropCatalogItem}>
- <span>Export catalog item.</span>
- </DropTarget>
- </DropZonePanel>
- <DropZonePanel show={isDraggingFiles}>
- <DropTarget className="action-onboard-catalog-package" dropZone={onboardDropZone} onDrop={onDropOnboardPackage}>
- <span>On-board new catalog package.</span>
- </DropTarget>
- <DropTarget className="action-update-catalog-package" dropZone={updateDropZone} onDrop={onDropUpdatePackage}>
- <span>Update existing catalog package.</span>
- </DropTarget>
- </DropZonePanel>
- <CatalogPackageManager />
- </CatalogPanelTray>
+ {isModifiableByUser ? packageManagerPanel : null}
</div>
);
uiTransientState.isDrop = false;
uiTransientState.isDragging = true;
uiTransientState.wasTrayOpen = this.state.isTrayOpen;
- uiTransientState.isDraggingFiles = _.includes(e.dataTransfer.types, 'Files');
+ uiTransientState.isDraggingFiles = _includes(e.dataTransfer.types, 'Files');
const dragState = ComposerAppStore.getState().drag || {};
if (uiTransientState.isDraggingFiles || (dragState.type === 'catalog-item')) {
CatalogPanelTrayActions.open();