/*
* 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 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);
}
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 = self.state.projectUsers;
let cleanUsers = this.cleanUsers(projectUsers, projectName);
this.Store.updateProject(_.merge({
'name': projectName,
'description': self.state.description,
'project-config' : {
'user': cleanUsers
}
}));
}
cleanUsers(projectUsers, projectName) {
let cleanUsers = [];
//Remove null values from role
projectUsers.map((u) => {
let cleanRoles = [];
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 ) {
} else {
delete r.keys;
// r.keys = projectName;
cleanRoles.push(r)
}
});
u.role = cleanRoles;
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);
}
updateUserRoleInProject = (userIndex, roleIndex, e) => {
this.actions.handleUpdateUserRoleInProject({
userIndex,
roleIndex,
value: JSON.parse(e.target.value)
})
}
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 = (
{
!state.isReadOnly ?
{!state.isReadOnly ?
{
state.projectUsers.map((u,i)=> {
let userRoles = u.role && u.role.map((r) => {
return r.role;
}) || [];
return (
: null}
User Name
{
state.roles.map((r,i) => {
return {r}
})
}
{!state.isReadOnly ?
)
})
}
: null}
{u['user-name']}
{
state.roles.map((r,j) => {
return -1)} />
})
}