X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FUI.git;a=blobdiff_plain;f=skyquake%2Fplugins%2Fuser_management%2Fsrc%2Fdashboard%2Fdashboard.jsx;fp=skyquake%2Fplugins%2Fuser_management%2Fsrc%2Fdashboard%2Fdashboard.jsx;h=9bad06b71b7061f9b89e9ca157662016a13b0c48;hp=0000000000000000000000000000000000000000;hb=03156e335275de1dafbc2a816e98006afdf249bf;hpb=f2dc2462571800e62cba969964de621dca09299c diff --git a/skyquake/plugins/user_management/src/dashboard/dashboard.jsx b/skyquake/plugins/user_management/src/dashboard/dashboard.jsx new file mode 100644 index 000000000..9bad06b71 --- /dev/null +++ b/skyquake/plugins/user_management/src/dashboard/dashboard.jsx @@ -0,0 +1,509 @@ +/* + * STANDARD_RIFT_IO_COPYRIGHT + */ + +import React from 'react'; +import ReactDOM from 'react-dom'; +import AppHeader from 'widgets/header/header.jsx'; +import UserManagementStore from './userMgmtStore.js'; +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'; +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 { merge } from 'lodash'; + +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, 'UserManagementStore'); + this.state = this.Store.getState(); + this.actions = this.state.actions; + } + componentDidUpdate() { + let self = this; + ReactDOM.findDOMNode(this.UserList).addEventListener('transitionend', this.onTransitionEnd, false); + setTimeout(function () { + let element = self[`user-ref-${self.state.activeIndex}`] + element && !isElementInView(element) && element.scrollIntoView({ block: 'end', behavior: 'smooth' }); + }) + } + componentWillMount() { + this.Store.listen(this.updateState); + this.Store.getUsers(); + } + componentWillUnmount() { + this.Store.unlisten(this.updateState); + } + updateState = (state) => { + this.setState(state); + } + updateInput = (key, e) => { + let property = key; + this.actions.handleUpdateInput({ + [property]: e.target.value + }) + } + platformChange = (platformRole, e) => { + this.actions.handlePlatformRoleUpdate(platformRole, e.currentTarget.checked); + } + addProjectRole = (e) => { + this.actions.handleAddProjectItem(); + } + removeProjectRole = (i, e) => { + this.actions.handleRemoveProjectItem(i); + } + updateProjectRole = (i, e) => { + this.actions.handleUpdateProjectRole(i, e) + } + addUser = () => { + this.actions.handleAddUser(); + } + viewUser = (un, index) => { + this.actions.viewUser(un, index); + } + editUser = () => { + this.actions.editUser(false); + } + cancelEditUser = () => { + this.actions.editUser(true) + } + closePanel = () => { + this.actions.handleCloseUserPanel(); + } + // updateUser = (e) => { + // e.preventDefault(); + // e.stopPropagation(); + + // this.Store.updateUser(); + // } + deleteUser = (e) => { + e.preventDefault(); + e.stopPropagation(); + 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(); + e.stopPropagation(); + if (!this.state['user-name'] || (this.state['user-name'].trim() == "")) { + this.props.actions.showNotification('Please enter a valid username'); + return; + } + + if((this.state['user-domain'].toLowerCase() == 'system') && !this.state['new-password'] || (this.state['new-password'].trim == "")) { + this.props.actions.showNotification('You must enter a password'); + return; + } + if((this.state['user-domain'].toLowerCase() == 'system') && this.state['new-password'] != this.state['confirm-password']) { + this.props.actions.showNotification('Passwords do not match'); + return; + } else { + let isDisabled = {}; + if (this.state.disabled == "TRUE") { + isDisabled = { + disabled: [null] + } + } + this.Store.createUser(_.merge({ + 'user-name': this.state['user-name'], + 'user-domain': this.state['user-domain'], + 'password': this.state['new-password'], + // 'confirm-password': this.state['confirm-password'] + }, isDisabled)); + } + } + updateUser = (e) => { + let self = this; + e.preventDefault(); + e.stopPropagation(); + let validatedPasswords = validatePasswordFields(this.state); + if (validatedPasswords) { + let isDisabled = {}; + let password = {}; + if (self.state.disabled == "TRUE") { + isDisabled = { + disabled: [null] + } + } + if (this.state['new-password'] != '') { + password = { 'password': this.state['new-password'] } + } else { + password = { + 'password': this.state.currentPassword + } + } + this.Store.updateUser(_.merge({ + 'user-name': this.state['user-name'], + 'user-domain': this.state['user-domain'], + 'ui-state': this.context.userProfile.data['ui-state'] + }, _.merge(isDisabled, password))); + } + function validatePasswordFields(state) { + let newOne = state['new-password']; + let confirmOne = state['confirm-password']; + if (!newOne && !confirmOne) { + // self.props.actions.showNotification('Please fill in all fields.'); + return true; + } + if (newOne != confirmOne) { + self.props.actions.showNotification('Passwords do not match'); + return false; + } + return { + 'new-password': newOne, + 'confirm-password': confirmOne + } + } + } + evaluateSubmit = (e) => { + if (e.keyCode == 13) { + if (this.state.isEdit) { + this.updateUser(e); + } else { + this.createUser(e); + } + e.preventDefault(); + e.stopPropagation(); + } + } + onTransitionEnd = (e) => { + this.actions.handleHideColumns(e); + console.log('transition end') + } + disableChange = (e) => { + let value = e.target.value; + value = value.toUpperCase(); + this.actions.handleDisabledChange(value); + } + render() { + let self = this; + let html; + let props = this.props; + let state = this.state; + let passwordSectionHTML = null; + let formButtonsHTML = ( + +