/* * STANDARD_RIFT_IO_COPYRIGHT */ import React from 'react'; import ReactDOM from 'react-dom'; import AppHeader from 'widgets/header/header.jsx'; import ProjectManagementStore from './projectMgmtStore.js'; import SkyquakeComponent from 'widgets/skyquake_container/skyquakeComponent.jsx'; import SkyquakeRBAC from 'widgets/skyquake_rbac/skyquakeRBAC.jsx'; import 'style/layout.scss'; import './projectMgmt.scss'; import {Panel, PanelWrapper} from 'widgets/panel/panel'; import {InputCollection, FormSection} from 'widgets/form_controls/formControls.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 _ from 'lodash'; import ROLES from 'utils/roleConstants.js'; const PROJECT_ROLES = ROLES.PROJECT; const PLATFORM = ROLES.PLATFORM; class ProjectManagementDashboard extends React.Component { constructor(props) { super(props); this.Store = this.props.flux.stores.hasOwnProperty('ProjectManagementStore') ? this.props.flux.stores.ProjectManagementStore : this.props.flux.createStore(ProjectManagementStore); this.Store.getProjects(); this.Store.getUsers(); this.state = this.Store.getState(); this.actions = this.state.actions; } componentDidUpdate() { let self = this; ReactDOM.findDOMNode(this.projectList).addEventListener('transitionend', this.onTransitionEnd, false); setTimeout(function() { let element = self[`project-ref-${self.state.activeIndex}`] element && !isElementInView(element) && element.scrollIntoView({block: 'end', behavior: 'smooth'}); }) } componentWillMount() { this.Store.listen(this.updateState); } componentWillUnmount() { this.Store.unlisten(this.updateState); } updateState = (state) => { this.setState(state); } updateInput = (key, e) => { let property = key; this.actions.handleUpdateInput({ [property]:e.target.value }) } disabledChange = (e) => { this.actions.handleDisabledChange(e.target.checked); } 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) } addProject = () => { this.actions.handleAddProject(); } viewProject = (un, index) => { this.actions.viewProject(un, index, true); } editProject = () => { this.actions.editProject(false); } cancelEditProject = () => { this.actions.editProject(true) } closePanel = () => { this.actions.handleCloseProjectPanel(); } deleteProject = (e) => { e.preventDefault(); e.stopPropagation(); if (confirm('Are you sure you want to delete this project?')) { this.Store.deleteProject({ 'name': this.state['name'] }); } } createProject = (e) => { let self = this; e.preventDefault(); e.stopPropagation(); let projectName = self.state['name']; let projectUsers = self.state.projectUsers; let cleanUsers = this.cleanUsers(projectUsers, projectName); this.Store.createProject({ 'name': projectName, 'description': self.state.description, 'project-config' : { 'user': cleanUsers } }); } updateProject = (e) => { let self = this; e.preventDefault(); e.stopPropagation(); let projectName = self.state['name']; let projectUsers = _.cloneDeep(self.state.projectUsers); let cleanUsers = this.cleanUsers(projectUsers, projectName); this.Store.updateProject({ 'name': projectName, 'description': self.state.description, 'project-config' : { 'user': cleanUsers } }); } cleanUsers(projectUsers, projectName) { let self = this; let cleanUsers = []; //Remove null values from role projectUsers.map((u) => { let cleanRoles = []; let cleanManoRoles = []; u.role && u.role.map((r,i) => { let role = {}; //you may add a user without a role or a keys, but if one is present then the other must be as well. if(r.role) { delete r.keys; // r.keys = projectName; switch(ROLES.PROJECT.TYPE[r.role]) { case 'rw-project-mano' : cleanManoRoles.push(r); break; case 'rw-project' : cleanRoles.push(r); break; } } }); u.role = cleanRoles; u["rw-project-mano:mano-role"] = u["rw-project-mano:mano-role"] || []; u["rw-project-mano:mano-role"] = u["rw-project-mano:mano-role"].concat(cleanManoRoles); if (u['user-name'] != self.context.userProfile.userId) { cleanUsers.push(u); } }); return cleanUsers; } evaluateSubmit = (e) => { if (e.keyCode == 13) { if (this.props.isEdit) { this.updateProject(e); } else { this.createProject(e); } e.preventDefault(); e.stopPropagation(); } } updateSelectedUser = (e) => { this.setState({ selected }) } addUserToProject = (e) => { let selectUserList = this.selectUserList; console.log(ReactDOM.findDOMNode(selectUserList)) this.actions.handleAddUser(e); } removeUserFromProject = (userIndex, e) => { this.actions.handleRemoveUserFromProject(userIndex); } toggleUserRoleInProject = (userIndex, roleIndex, e) => { this.actions.handleToggleUserRoleInProject({ userIndex, roleIndex, checked: JSON.parse(e.currentTarget.checked) }) } removeRoleFromUserInProject = (userIndex, roleIndex, e) => { this.actions.handleRemoveRoleFromUserInProject({ userIndex, roleIndex }) } addRoleToUserInProject = (userIndex, e) => { this.actions.addRoleToUserInProject(userIndex); } onTransitionEnd = (e) => { this.actions.handleHideColumns(e); console.log('transition end') } disableChange = (e) => { let value = e.target.value; value = value.toUpperCase(); if (value=="TRUE") { value = true; } else { value = false; } console.log(value) } render() { let self = this; let html; let props = this.props; let state = this.state; let passwordSectionHTML = null; let formButtonsHTML = (