Change password requires all fields to be input before checking equivalence.
[osm/UI.git] / skyquake / plugins / user_management / src / dashboard / dashboard.jsx
index c86d6b1..cb6b9a0 100644 (file)
@@ -10,7 +10,7 @@ import SkyquakeComponent from 'widgets/skyquake_container/skyquakeComponent.jsx'
 import 'style/layout.scss';
 import './userMgmt.scss';
 import {Panel, PanelWrapper} from 'widgets/panel/panel';
-
+import SkyquakeRBAC from 'widgets/skyquake_rbac/skyquakeRBAC.jsx';
 
 import TextInput from 'widgets/form_controls/textInput.jsx';
 import Input from 'widgets/form_controls/input.jsx';
@@ -18,15 +18,17 @@ import Button, {ButtonGroup} from 'widgets/button/sq-button.jsx';
 import SelectOption from 'widgets/form_controls/selectOption.jsx';
 import 'widgets/form_controls/formControls.scss';
 import imgAdd from '../../node_modules/open-iconic/svg/plus.svg'
-import imgRemove from '../../node_modules/open-iconic/svg/trash.svg'
+import imgRemove from '../../node_modules/open-iconic/svg/trash.svg';
+
+import ROLES from 'utils/roleConstants.js';
+const PLATFORM = ROLES.PLATFORM;
 
 class UserManagementDashboard extends React.Component {
     constructor(props) {
         super(props);
         this.Store = this.props.flux.stores.hasOwnProperty('UserManagementStore') ? this.props.flux.stores.UserManagementStore : this.props.flux.createStore(UserManagementStore);
-        this.Store.getUsers();
-        this.state = this.Store.getState();
-        this.actions = this.state.actions;
+       this.state = this.Store.getState();
+       this.actions = this.state.actions;
     }
     componentDidUpdate() {
         let self = this;
@@ -38,6 +40,7 @@ class UserManagementDashboard extends React.Component {
     }
     componentWillMount() {
         this.Store.listen(this.updateState);
+        this.Store.getUsers();
     }
     componentWillUnmount() {
         this.Store.unlisten(this.updateState);
@@ -78,7 +81,7 @@ class UserManagementDashboard extends React.Component {
     cancelEditUser = () => {
         this.actions.editUser(true)
     }
-    closePanel = () => {
+    osePanel = () => {
         this.actions.handleCloseUserPanel();
     }
     // updateUser = (e) => {
@@ -90,10 +93,13 @@ class UserManagementDashboard extends React.Component {
     deleteUser = (e) => {
         e.preventDefault();
         e.stopPropagation();
-        this.Store.deleteUser({
+        if (confirm('Are you sure you want to delete this user?')) {
+            this.Store.deleteUser({
                 'user-name': this.state['user-name'],
                 'user-domain': this.state['user-domain']
             });
+        }
+
     }
     createUser = (e) => {
         e.preventDefault();
@@ -126,6 +132,10 @@ class UserManagementDashboard extends React.Component {
             let newOne = state['new-password'];
             let confirmOne = state['confirm-password'];
             if(true) {
+                if(!oldOne || !newOne) {
+                     self.props.actions.showNotification('Please fill in all fields.');
+                    return false;
+                }
                 if(oldOne == newOne) {
                     self.props.actions.showNotification('Your new password must not match your old one');
                     return false;
@@ -211,86 +221,91 @@ class UserManagementDashboard extends React.Component {
                                 )
                             )
         }
-
         html = (
-            <PanelWrapper className={`row userManagement ${!this.state.userOpen ? 'userList-open' : ''}`} style={{'flexDirection': 'row'}} >
-                <PanelWrapper ref={(div) => { this.UserList = div}} className={`column userList expanded ${this.state.userOpen ? 'collapsed ' : ' '} ${this.state.hideColumns ? 'hideColumns ' : ' '}`}>
-                    <Panel title="User List" style={{marginBottom: 0}} no-corners>
-                        <div className="tableRow tableRow--header">
-                            <div className="userName">
-                                Username
-                            </div>
-                            <div>
-                                Domain
+            <PanelWrapper column>
+                <SkyquakeRBAC allow={[PLATFORM.SUPER, PLATFORM.ADMIN]} >
+                    <AppHeader nav={[{name: 'PLATFORM ROLE MANAGEMENT', onClick: this.context.router.push.bind(this, {pathname: '/platform'})}]}/>
+                </SkyquakeRBAC>
+                <PanelWrapper className={`row userManagement ${!this.state.userOpen ? 'userList-open' : ''}`} style={{'flexDirection': 'row'}} >
+                    <PanelWrapper ref={(div) => { this.UserList = div}} className={`column userList expanded ${this.state.userOpen ? 'collapsed ' : ' '} ${this.state.hideColumns ? 'hideColumns ' : ' '}`}>
+                        <Panel title="User List" style={{marginBottom: 0}} no-corners>
+                            <div className="tableRow tableRow--header">
+                                <div className="userName">
+                                    Username
+                                </div>
+                                <div>
+                                    Domain
+                                </div>
                             </div>
-                        </div>
-                        {state.users && state.users.map((u, k) => {
-                            let platformRoles = [];
-                            for(let role in u.platformRoles) {
-                                platformRoles.push(<div>{`${role}: ${u.platformRoles[role]}`}</div>)
-                            }
-                            return (
-                                <div ref={(el) => this[`user-ref-${k}`] = el} className={`tableRow tableRow--data ${((self.state.activeIndex == k) && self.state.userOpen) ? 'tableRow--data-active' : ''}`} key={k}>
-                                    <div
-                                        className={`userName userName-header ${((self.state.activeIndex == k) && self.state.userOpen) ? 'activeUser' : ''}`}
+                            {state.users && state.users.map((u, k) => {
+                                let platformRoles = [];
+                                for(let role in u.platformRoles) {
+                                    platformRoles.push(<div>{`${role}: ${u.platformRoles[role]}`}</div>)
+                                }
+                                return (
+                                    <div ref={(el) => this[`user-ref-${k}`] = el} className={`tableRow tableRow--data ${((self.state.activeIndex == k) && self.state.userOpen) ? 'tableRow--data-active' : ''}`}
+                                        key={k}
                                         onClick={self.viewUser.bind(null, u, k)}>
-                                        {u['user-name']}
-                                    </div>
-                                    <div>
-                                        {u['user-domain']}
-                                    </div>
-
-
-                                </div>
-                            )
-                        })}
-                    </Panel>
-                    <ButtonGroup  className="buttonGroup" style={{margin: '0 0.5rem 0.5rem', background: '#ddd', paddingBottom: '0.5rem'}}>
-                        <Button label="Add User" onClick={this.addUser} />
-                    </ButtonGroup>
-                </PanelWrapper>
-                <PanelWrapper onKeyUp={this.evaluateSubmit}
-                    className={`userAdmin column`}>
-                    <Panel
-                        title={state.isEdit ? state['user-name'] : 'Create User'}
-                        style={{marginBottom: 0}}
-                        hasCloseButton={this.closePanel}
-                        no-corners>
-                        <FormSection title="USER INFO">
-                        {
-                            this.state.isEdit ?
-                                null
-                                : <Input  readonly={state.isReadOnly}  label="Username" value={state['user-name']} onChange={this.updateInput.bind(null, 'user-name')} />
-                        }
-                            <Input readonly={true} label="Domain" value={state['user-domain']}  onChange={this.updateInput.bind(null, 'user-domain')}></Input>
+                                        <div
+                                            className={`userName userName-header ${((self.state.activeIndex == k) && self.state.userOpen) ? 'activeUser' : ''}`}
+                                            >
+                                            {u['user-name']}
+                                        </div>
+                                        <div>
+                                            {u['user-domain']}
+                                        </div>
 
-                            <Input type="radiogroup" readonly={state.isReadOnly} label="Disabled" value={state.disabled} options={[{value: true, label: 'YES'}, {value: false, label: 'NO'}]}  onChange={this.disableChange} />
-                        </FormSection>
-                        <FormSection title="PLATFORM ROLES" style={{display:'none'}}>
-                            <Input label="Super Admin" onChange={this.platformChange.bind(null, 'super_admin')} checked={state.platformRoles.super_admin} type="checkbox" />
-                            <Input label="Platform Admin" onChange={this.platformChange.bind(null, 'platform_admin')}  checked={state.platformRoles.platform_admin} type="checkbox" />
-                            <Input label="Platform Oper" onChange={this.platformChange.bind(null, 'platform_oper')}  checked={state.platformRoles.platform_oper} type="checkbox" />
-                        </FormSection>
-                        <FormSection title="PROJECT ROLES" style={{display:'none'}}>
-                            <InputCollection
-                                inital={true}
-                                type='select'
-                                readonly={state.isReadOnly}
-                                options={state.projectRolesOptions}
-                                collection={state.projectRoles}
-                                onChange={this.updateProjectRole}
-                                AddItemFn={this.addProjectRole}
-                                RemoveItemFn={this.removeProjectRole}
-                                />
-                        </FormSection>
-                        {passwordSectionHTML}
 
-                    </Panel>
-                        {formButtonsHTML}
+                                    </div>
+                                )
+                            })}
+                        </Panel>
+                        <SkyquakeRBAC allow={[PLATFORM.SUPER, PLATFORM.ADMIN]} className="rbacButtonGroup">
+                            <ButtonGroup  className="buttonGroup">
+                                <Button label="Add User" onClick={this.addUser} />
+                        </ButtonGroup>
+                        </SkyquakeRBAC>
+                    </PanelWrapper>
+                    <PanelWrapper onKeyUp={this.evaluateSubmit}
+                        className={`userAdmin column`}>
+                        <Panel
+                            title={state.isEdit ? state['user-name'] : 'Create User'}
+                            style={{marginBottom: 0}}
+                            hasCloseButton={this.closePanel}
+                            no-corners>
+                            <FormSection title="USER INFO">
+                                {
+                                    this.state.isEdit ?
+                                        null
+                                        : <Input  readonly={state.isReadOnly}  label="Username" value={state['user-name']} onChange={this.updateInput.bind(null, 'user-name')} />
+                                }
+                                <Input readonly={true} label="Domain" value={state['user-domain']}  onChange={this.updateInput.bind(null, 'user-domain')}></Input>
+                            </FormSection>
+                            <FormSection title="PLATFORM ROLES" style={{display:'none'}}>
+                                <Input label="Super Admin" onChange={this.platformChange.bind(null, 'super_admin')} checked={state.platformRoles.super_admin} type="checkbox" />
+                                <Input label="Platform Admin" onChange={this.platformChange.bind(null, 'platform_admin')}  checked={state.platformRoles.platform_admin} type="checkbox" />
+                                <Input label="Platform Oper" onChange={this.platformChange.bind(null, 'platform_oper')}  checked={state.platformRoles.platform_oper} type="checkbox" />
+                            </FormSection>
+                            <FormSection title="PROJECT ROLES" style={{display:'none'}}>
+                                <InputCollection
+                                    inital={true}
+                                    type='select'
+                                    readonly={state.isReadOnly}
+                                    options={state.projectRolesOptions}
+                                    collection={state.projectRoles}
+                                    onChange={this.updateProjectRole}
+                                    AddItemFn={this.addProjectRole}
+                                    RemoveItemFn={this.removeProjectRole}
+                                    />
+                            </FormSection>
+                            {passwordSectionHTML}
 
+                        </Panel>
+                        <SkyquakeRBAC allow={[PLATFORM.SUPER, PLATFORM.ADMIN]} className="rbacButtonGroup">
+                            {formButtonsHTML}
+                        </SkyquakeRBAC>
+                    </PanelWrapper>
                 </PanelWrapper>
-
-
             </PanelWrapper>
         );
         return html;
@@ -298,7 +313,8 @@ class UserManagementDashboard extends React.Component {
 }
 // onClick={this.Store.update.bind(null, Account)}
 UserManagementDashboard.contextTypes = {
-    router: React.PropTypes.object
+    router: React.PropTypes.object,
+    userProfile: React.PropTypes.object
 };
 
 UserManagementDashboard.defaultProps = {