WIP Implement ability to set default role per organization

multitenancy_ui_manage_providers
Alex P 2017-11-08 19:35:14 -08:00
parent 169dcfd168
commit 99e847df48
5 changed files with 98 additions and 15 deletions

View File

@ -1,5 +1,7 @@
import React, {PropTypes} from 'react' import React, {PropTypes} from 'react'
import {MEMBER_ROLE} from 'src/auth/Authorized'
// This is a non-editable organization row, used currently for DEFAULT_ORG // This is a non-editable organization row, used currently for DEFAULT_ORG
const DefaultOrganization = ({organization}) => const DefaultOrganization = ({organization}) =>
<div className="orgs-table--org"> <div className="orgs-table--org">
@ -9,6 +11,9 @@ const DefaultOrganization = ({organization}) =>
<div className="orgs-table--name-disabled"> <div className="orgs-table--name-disabled">
{organization.name} {organization.name}
</div> </div>
<div className="orgs-table--default-role-disabled">
{MEMBER_ROLE}
</div>
<button <button
className="btn btn-sm btn-default btn-square orgs-table--delete" className="btn btn-sm btn-default btn-square orgs-table--delete"
disabled={true} disabled={true}

View File

@ -1,13 +1,18 @@
import React, {Component, PropTypes} from 'react' import React, {Component, PropTypes} from 'react'
import ConfirmButtons from 'shared/components/ConfirmButtons' import ConfirmButtons from 'shared/components/ConfirmButtons'
import Dropdown from 'shared/components/Dropdown'
import {USER_ROLES} from 'src/admin/constants/dummyUsers'
import {MEMBER_ROLE} from 'src/auth/Authorized'
class Organization extends Component { class Organization extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
this.state = { this.state = {
organizationName: 'Untitled Organization', name: 'Untitled Organization',
defaultRole: MEMBER_ROLE,
} }
} }
@ -25,7 +30,7 @@ class Organization extends Component {
} }
handleInputChange = e => { handleInputChange = e => {
this.setState({organizationName: e.target.value.trim()}) this.setState({name: e.target.value.trim()})
} }
handleInputFocus = e => { handleInputFocus = e => {
@ -34,17 +39,26 @@ class Organization extends Component {
handleClickSave = () => { handleClickSave = () => {
const {onCancelCreateOrganization, onCreateOrganization} = this.props const {onCancelCreateOrganization, onCreateOrganization} = this.props
const {organizationName} = this.state const {name, defaultRole} = this.state
onCreateOrganization(organizationName) onCreateOrganization(name, defaultRole)
onCancelCreateOrganization() onCancelCreateOrganization()
} }
handleChooseDefaultRole = role => {
this.setState({defaultRole: role.name})
}
render() { render() {
const {organizationName} = this.state const {name, defaultRole} = this.state
const {onCancelCreateOrganization} = this.props const {onCancelCreateOrganization} = this.props
const isSaveDisabled = organizationName === null || organizationName === '' const isSaveDisabled = name === null || name === ''
const defaultRoleItems = USER_ROLES.map(role => ({
...role,
text: role.name,
}))
return ( return (
<div className="orgs-table--org orgs-table--new-org"> <div className="orgs-table--org orgs-table--new-org">
@ -52,7 +66,7 @@ class Organization extends Component {
<input <input
type="text" type="text"
className="form-control input-sm orgs-table--input" className="form-control input-sm orgs-table--input"
value={organizationName} value={name}
onKeyDown={this.handleKeyDown} onKeyDown={this.handleKeyDown}
onChange={this.handleInputChange} onChange={this.handleInputChange}
onFocus={this.handleInputFocus} onFocus={this.handleInputFocus}
@ -60,6 +74,14 @@ class Organization extends Component {
autoFocus={true} autoFocus={true}
ref={r => (this.inputRef = r)} ref={r => (this.inputRef = r)}
/> />
<div className="orgs-table--default-role editing">
<Dropdown
items={defaultRoleItems}
onChoose={this.handleChooseDefaultRole}
selected={defaultRole}
className="dropdown-stretch"
/>
</div>
<ConfirmButtons <ConfirmButtons
disabled={isSaveDisabled} disabled={isSaveDisabled}
onCancel={onCancelCreateOrganization} onCancel={onCancelCreateOrganization}

View File

@ -1,6 +1,10 @@
import React, {Component, PropTypes} from 'react' import React, {Component, PropTypes} from 'react'
import ConfirmButtons from 'shared/components/ConfirmButtons' import ConfirmButtons from 'shared/components/ConfirmButtons'
import Dropdown from 'shared/components/Dropdown'
import {USER_ROLES} from 'src/admin/constants/dummyUsers'
import {MEMBER_ROLE} from 'src/auth/Authorized'
class Organization extends Component { class Organization extends Component {
constructor(props) { constructor(props) {
@ -11,6 +15,7 @@ class Organization extends Component {
isEditing: false, isEditing: false,
isDeleting: false, isDeleting: false,
workingName: this.props.organization.name, workingName: this.props.organization.name,
defaultRole: MEMBER_ROLE,
} }
} }
@ -58,10 +63,23 @@ class Organization extends Component {
onDelete(organization) onDelete(organization)
} }
handleChooseDefaultRole = role => {
this.setState({defaultRole: role.name})
}
render() { render() {
const {workingName, reset, isEditing, isDeleting} = this.state const {workingName, reset, isEditing, isDeleting, defaultRole} = this.state
const {organization} = this.props const {organization} = this.props
const defaultRoleItems = USER_ROLES.map(role => ({
...role,
text: role.name,
}))
const defaultRoleClassName = isDeleting
? 'orgs-table--default-role editing'
: 'orgs-table--default-role'
return ( return (
<div className="orgs-table--org"> <div className="orgs-table--org">
<div className="orgs-table--id"> <div className="orgs-table--id">
@ -83,6 +101,14 @@ class Organization extends Component {
{workingName} {workingName}
<span className="icon pencil" /> <span className="icon pencil" />
</div>} </div>}
<div className={defaultRoleClassName}>
<Dropdown
items={defaultRoleItems}
onChoose={this.handleChooseDefaultRole}
selected={defaultRole}
className="dropdown-stretch"
/>
</div>
{isDeleting {isDeleting
? <ConfirmButtons ? <ConfirmButtons
item={organization} item={organization}

View File

@ -57,6 +57,8 @@ class OrganizationsTable extends Component {
<div className="orgs-table--org-labels"> <div className="orgs-table--org-labels">
<div className="orgs-table--id">ID</div> <div className="orgs-table--id">ID</div>
<div className="orgs-table--name">Name</div> <div className="orgs-table--name">Name</div>
<div className="orgs-table--default-role">Default Role</div>
<div className="orgs-table--delete" />
</div> </div>
{isAddingOrganization {isAddingOrganization
? <NewOrganization ? <NewOrganization

View File

@ -78,12 +78,39 @@ input[type="text"].form-control.orgs-table--input {
color: $g9-mountain; color: $g9-mountain;
} }
.orgs-table--default-role,
.orgs-table--default-role-disabled {
width: 130px;
height: 30px;
margin-right: 4px;
}
.orgs-table--default-role.editing {
width: 96px;
}
.orgs-table--default-role-disabled {
background-color: $g4-onyx;
font-style: italic;
color: $g9-mountain;
padding: 0 11px;
line-height: 30px;
font-size: 13px;
font-weight: 600;
@include no-user-select();
}
.orgs-table--delete {
height: 30px;
width: 30px;
}
/* Table Headers */
.orgs-table--org-labels { .orgs-table--org-labels {
display: flex; display: flex;
align-items: center; align-items: center;
border-bottom: 2px solid $g3-castle; border-bottom: 2px solid $g5-pepper;
margin-bottom: 8px; margin-bottom: 10px;
width: 100%; width: 100%;
@include no-user-select();
> .orgs-table--name, > .orgs-table--name,
> .orgs-table--name:hover { > .orgs-table--name:hover {
@ -94,13 +121,14 @@ input[type="text"].form-control.orgs-table--input {
> .orgs-table--id, > .orgs-table--id,
> .orgs-table--name, > .orgs-table--name,
> .orgs-table--name:hover { > .orgs-table--name:hover,
> .orgs-table--default-role {
color: $g15-platinum; color: $g15-platinum;
font-weight: 700; font-weight: 700;
} }
} > .orgs-table--default-role {
.orgs-table--org.orgs-table--new-org { line-height: 30px;
.btn { font-size: 13px;
margin-left: 4px; padding: 0 11px;
} }
} }