make scheme a dropdown, update the redux store for a mapping change corectly, and add an empty state for the provider mappings page
parent
343f417474
commit
9ecbf9daf7
|
@ -35,6 +35,14 @@ class ProvidersTable extends Component {
|
||||||
const tableTitle =
|
const tableTitle =
|
||||||
mappings.length === 1 ? '1 Map' : `${mappings.length} Maps`
|
mappings.length === 1 ? '1 Map' : `${mappings.length} Maps`
|
||||||
|
|
||||||
|
// define scheme options
|
||||||
|
const schemes = [
|
||||||
|
{text: '*'},
|
||||||
|
{text: 'oauth2'},
|
||||||
|
{text: 'option2'},
|
||||||
|
{text: 'option3'},
|
||||||
|
]
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="panel panel-default">
|
<div className="panel panel-default">
|
||||||
<div className="panel-heading u-flex u-ai-center u-jc-space-between">
|
<div className="panel-heading u-flex u-ai-center u-jc-space-between">
|
||||||
|
@ -49,38 +57,55 @@ class ProvidersTable extends Component {
|
||||||
<span className="icon plus" /> Create Map
|
<span className="icon plus" /> Create Map
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div className="panel-body">
|
{(mappings && mappings.length) || isCreatingMap
|
||||||
<div className="fancytable--labels">
|
? <div className="panel-body">
|
||||||
<div className="fancytable--th provider--id">ID</div>
|
<div className="fancytable--labels">
|
||||||
<div className="fancytable--th provider--scheme">Scheme</div>
|
<div className="fancytable--th provider--id">ID</div>
|
||||||
<div className="fancytable--th provider--provider">Provider</div>
|
<div className="fancytable--th provider--scheme">Scheme</div>
|
||||||
<div className="fancytable--th provider--providerorg">
|
<div className="fancytable--th provider--provider">
|
||||||
Provider Org
|
Provider
|
||||||
|
</div>
|
||||||
|
<div className="fancytable--th provider--providerorg">
|
||||||
|
Provider Org
|
||||||
|
</div>
|
||||||
|
<div className="fancytable--th provider--arrow" />
|
||||||
|
<div className="fancytable--th provider--redirect">
|
||||||
|
Organization
|
||||||
|
</div>
|
||||||
|
<div className="fancytable--th" />
|
||||||
|
<div className="fancytable--th provider--delete" />
|
||||||
|
</div>
|
||||||
|
{mappings.map(mapping =>
|
||||||
|
<ProvidersTableRow
|
||||||
|
key={mapping.id}
|
||||||
|
mapping={mapping}
|
||||||
|
organizations={organizations}
|
||||||
|
schemes={schemes}
|
||||||
|
onDelete={onDeleteMap}
|
||||||
|
onUpdate={onUpdateMap}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
{isCreatingMap
|
||||||
|
? <ProvidersTableRowNew
|
||||||
|
organizations={organizations}
|
||||||
|
schemes={schemes}
|
||||||
|
onCreate={this.handleCreateMap}
|
||||||
|
onCancel={this.handleCancelCreateMap}
|
||||||
|
/>
|
||||||
|
: null}
|
||||||
</div>
|
</div>
|
||||||
<div className="fancytable--th provider--arrow" />
|
: <div className="generic-empty-state">
|
||||||
<div className="fancytable--th provider--redirect">
|
<h4 style={{margin: '90px 0'}}>
|
||||||
Organization
|
Looks like you don’t have any mappings
|
||||||
</div>
|
</h4>
|
||||||
<div className="fancytable--th" />
|
<button
|
||||||
<div className="fancytable--th provider--delete" />
|
className="btn btn-sm btn-primary"
|
||||||
</div>
|
onClick={this.handleClickCreateMap}
|
||||||
{mappings.map(mapping =>
|
disabled={isCreatingMap}
|
||||||
<ProvidersTableRow
|
>
|
||||||
key={mapping.id}
|
<span className="icon plus" /> Create Map
|
||||||
mapping={mapping}
|
</button>
|
||||||
organizations={organizations}
|
</div>}
|
||||||
onDelete={onDeleteMap}
|
|
||||||
onUpdate={onUpdateMap}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{isCreatingMap
|
|
||||||
? <ProvidersTableRowNew
|
|
||||||
organizations={organizations}
|
|
||||||
onCreate={this.handleCreateMap}
|
|
||||||
onCancel={this.handleCancelCreateMap}
|
|
||||||
/>
|
|
||||||
: null}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,30 +33,68 @@ class ProvidersTableRow extends Component {
|
||||||
onDelete(mapping)
|
onDelete(mapping)
|
||||||
}
|
}
|
||||||
|
|
||||||
handleChangeScheme = scheme => {
|
|
||||||
this.setState({scheme})
|
|
||||||
this.handleUpdateMapping()
|
|
||||||
}
|
|
||||||
|
|
||||||
handleChangeProvider = provider => {
|
handleChangeProvider = provider => {
|
||||||
this.setState({provider})
|
this.setState({provider})
|
||||||
this.handleUpdateMapping()
|
const {scheme, organizationId, providerOrganization} = this.state
|
||||||
|
const {onUpdate, mapping: {id}} = this.props
|
||||||
|
const updatedMap = {
|
||||||
|
id,
|
||||||
|
scheme,
|
||||||
|
provider,
|
||||||
|
providerOrganization,
|
||||||
|
organizationId,
|
||||||
|
}
|
||||||
|
onUpdate(updatedMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
handleChangeProviderOrg = providerOrganization => {
|
handleChangeProviderOrg = providerOrganization => {
|
||||||
this.setState({providerOrganization})
|
this.setState({providerOrganization})
|
||||||
this.handleUpdateMapping()
|
const {onUpdate, mapping: {id}} = this.props
|
||||||
|
const {scheme, provider, organizationId} = this.state
|
||||||
|
const updatedMap = {
|
||||||
|
id,
|
||||||
|
scheme,
|
||||||
|
provider,
|
||||||
|
providerOrganization,
|
||||||
|
organizationId,
|
||||||
|
}
|
||||||
|
onUpdate(updatedMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
handleChooseOrganization = org => {
|
handleChooseOrganization = org => {
|
||||||
this.setState({organizationId: org.id})
|
const organizationId = org.id
|
||||||
this.handleUpdateMapping()
|
this.setState({organizationId})
|
||||||
|
const {onUpdate, mapping: {id}} = this.props
|
||||||
|
const {scheme, provider, providerOrganization} = this.state
|
||||||
|
const updatedMap = {
|
||||||
|
id,
|
||||||
|
scheme,
|
||||||
|
provider,
|
||||||
|
providerOrganization,
|
||||||
|
organizationId,
|
||||||
|
}
|
||||||
|
onUpdate(updatedMap)
|
||||||
|
}
|
||||||
|
|
||||||
|
handleChooseScheme = s => {
|
||||||
|
const scheme = s.text
|
||||||
|
this.setState({scheme})
|
||||||
|
const {onUpdate, mapping: {id}} = this.props
|
||||||
|
const {provider, providerOrganization, organizationId} = this.state
|
||||||
|
const updatedMap = {
|
||||||
|
id,
|
||||||
|
scheme,
|
||||||
|
provider,
|
||||||
|
providerOrganization,
|
||||||
|
organizationId,
|
||||||
|
}
|
||||||
|
onUpdate(updatedMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
handleUpdateMapping = () => {
|
handleUpdateMapping = () => {
|
||||||
|
// this was getting called by all the handlers for input/dropdown changes but it meant the state was not getting updated so the updated map was stale
|
||||||
const {onUpdate, mapping: {id}} = this.props
|
const {onUpdate, mapping: {id}} = this.props
|
||||||
const {scheme, provider, providerOrganization, organizationId} = this.state
|
const {scheme, provider, providerOrganization, organizationId} = this.state
|
||||||
|
|
||||||
const updatedMap = {
|
const updatedMap = {
|
||||||
id,
|
id,
|
||||||
scheme,
|
scheme,
|
||||||
|
@ -75,11 +113,10 @@ class ProvidersTableRow extends Component {
|
||||||
organizationId,
|
organizationId,
|
||||||
isDeleting,
|
isDeleting,
|
||||||
} = this.state
|
} = this.state
|
||||||
const {organizations, mapping} = this.props
|
const {organizations, mapping, schemes} = this.props
|
||||||
|
|
||||||
const selectedOrg = organizations.find(o => o.id === organizationId)
|
const selectedOrg = organizations.find(o => o.id === organizationId)
|
||||||
|
const orgDropdownItems = organizations.map(role => ({
|
||||||
const dropdownItems = organizations.map(role => ({
|
|
||||||
...role,
|
...role,
|
||||||
text: role.name,
|
text: role.name,
|
||||||
}))
|
}))
|
||||||
|
@ -95,11 +132,11 @@ class ProvidersTableRow extends Component {
|
||||||
<div className="fancytable--td provider--id">
|
<div className="fancytable--td provider--id">
|
||||||
{mapping.id}
|
{mapping.id}
|
||||||
</div>
|
</div>
|
||||||
<InputClickToEdit
|
<Dropdown
|
||||||
value={scheme}
|
items={schemes}
|
||||||
wrapperClass="fancytable--td provider--scheme"
|
onChoose={this.handleChooseScheme}
|
||||||
onUpdate={this.handleChangeScheme}
|
selected={scheme}
|
||||||
disabled={isDefaultMapping}
|
className="fancytable--td provider--scheme"
|
||||||
/>
|
/>
|
||||||
<InputClickToEdit
|
<InputClickToEdit
|
||||||
value={provider}
|
value={provider}
|
||||||
|
@ -118,7 +155,7 @@ class ProvidersTableRow extends Component {
|
||||||
</div>
|
</div>
|
||||||
<div className={organizationIdClassName}>
|
<div className={organizationIdClassName}>
|
||||||
<Dropdown
|
<Dropdown
|
||||||
items={dropdownItems}
|
items={orgDropdownItems}
|
||||||
onChoose={this.handleChooseOrganization}
|
onChoose={this.handleChooseOrganization}
|
||||||
selected={selectedOrg.name}
|
selected={selectedOrg.name}
|
||||||
className="dropdown-stretch"
|
className="dropdown-stretch"
|
||||||
|
@ -158,6 +195,11 @@ ProvidersTableRow.propTypes = {
|
||||||
name: string.isRequired,
|
name: string.isRequired,
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
|
schemes: arrayOf(
|
||||||
|
shape({
|
||||||
|
text: string.isRequired,
|
||||||
|
})
|
||||||
|
),
|
||||||
onDelete: func.isRequired,
|
onDelete: func.isRequired,
|
||||||
onUpdate: func.isRequired,
|
onUpdate: func.isRequired,
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,15 +9,15 @@ class ProvidersTableRowNew extends Component {
|
||||||
super(props)
|
super(props)
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
scheme: null,
|
scheme: '*',
|
||||||
provider: null,
|
provider: null,
|
||||||
providerOrganization: null,
|
providerOrganization: null,
|
||||||
organizationId: 'default',
|
organizationId: 'default',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleChangeScheme = scheme => {
|
handleChooseScheme = scheme => {
|
||||||
this.setState({scheme})
|
this.setState({scheme: scheme.text})
|
||||||
}
|
}
|
||||||
|
|
||||||
handleChangeProvider = provider => {
|
handleChangeProvider = provider => {
|
||||||
|
@ -42,7 +42,7 @@ class ProvidersTableRowNew extends Component {
|
||||||
render() {
|
render() {
|
||||||
const {scheme, provider, providerOrganization, organizationId} = this.state
|
const {scheme, provider, providerOrganization, organizationId} = this.state
|
||||||
|
|
||||||
const {organizations, onCancel} = this.props
|
const {organizations, onCancel, schemes} = this.props
|
||||||
|
|
||||||
const selectedOrg = organizations.find(o => o.id === organizationId)
|
const selectedOrg = organizations.find(o => o.id === organizationId)
|
||||||
|
|
||||||
|
@ -54,10 +54,12 @@ class ProvidersTableRowNew extends Component {
|
||||||
return (
|
return (
|
||||||
<div className="fancytable--row">
|
<div className="fancytable--row">
|
||||||
<div className="fancytable--td provider--id">--</div>
|
<div className="fancytable--td provider--id">--</div>
|
||||||
<InputClickToEdit
|
|
||||||
value={scheme}
|
<Dropdown
|
||||||
wrapperClass="fancytable--td provider--scheme"
|
items={schemes}
|
||||||
onUpdate={this.handleChangeScheme}
|
onChoose={this.handleChooseScheme}
|
||||||
|
selected={scheme}
|
||||||
|
className={'fancytable--td provider--scheme'}
|
||||||
/>
|
/>
|
||||||
<InputClickToEdit
|
<InputClickToEdit
|
||||||
value={provider}
|
value={provider}
|
||||||
|
@ -98,6 +100,11 @@ ProvidersTableRowNew.propTypes = {
|
||||||
name: string.isRequired,
|
name: string.isRequired,
|
||||||
})
|
})
|
||||||
).isRequired,
|
).isRequired,
|
||||||
|
schemes: arrayOf(
|
||||||
|
shape({
|
||||||
|
text: string.isRequired,
|
||||||
|
})
|
||||||
|
),
|
||||||
onCreate: func.isRequired,
|
onCreate: func.isRequired,
|
||||||
onCancel: func.isRequired,
|
onCancel: func.isRequired,
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,6 @@ class ProvidersPage extends Component {
|
||||||
handleUpdateMap = updatedMap => {
|
handleUpdateMap = updatedMap => {
|
||||||
// update the redux store
|
// update the redux store
|
||||||
this.props.actions.updateMappingAsync(updatedMap)
|
this.props.actions.updateMappingAsync(updatedMap)
|
||||||
|
|
||||||
// update the server
|
// update the server
|
||||||
/*
|
/*
|
||||||
const {actionsAdmin: {updateMappingAsync}} = this.props
|
const {actionsAdmin: {updateMappingAsync}} = this.props
|
||||||
|
|
Loading…
Reference in New Issue