Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Workflow default dialog alert #4100

Merged
merged 12 commits into from
Oct 24, 2017
21 changes: 14 additions & 7 deletions app/pages/admin/project-status.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class ProjectStatus extends Component {
this.handleDialogSuccess = this.handleDialogSuccess.bind(this);

this.state = {
defaultWorkflowId: null,
dialogIsOpen: false,
error: null,
project: null,
Expand Down Expand Up @@ -85,17 +86,21 @@ class ProjectStatus extends Component {
this.setState({ dialogIsOpen: false });
}

handleDialogSuccess(workflow) {
handleDialogSuccess() {
const defaultWorkflow = this.state.workflows.filter(workflow => workflow.id === this.state.defaultWorkflowId);
Copy link
Contributor Author

@jelliotartz jelliotartz Oct 20, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wanted to call this variable workflow, but that raised a linter error ('workflow' is already declared in the upper scope), so I went with defaultWorkflow, which I guess is more explicit anyway...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good use of array.filter(), however, we can sidestep storing the default workflow id in the component state since it's already stored in the project resource:
const defaultWorkflow = this.state.workflows.filter(workflow => workflow.id === this.state.project.configuration.default_workflow);

this.state.project.update({ 'configuration.default_workflow': undefined }).save()
.then(() => {
workflow.update({ active: false }).save()
defaultWorkflow[0].update({ active: false }).save()
.then(() => {
this.getProjectAndWorkflows();
})
.catch(error => this.setState({ error }));
})
.then(() => {
this.setState({ dialogIsOpen: false });
this.setState({
defaultWorkflowId: null,
dialogIsOpen: false
});
})
.catch(error => this.setState({ error }));
}
Expand All @@ -106,7 +111,10 @@ class ProjectStatus extends Component {
const defaultWorkflowId = this.state.project.configuration.default_workflow;

if (defaultWorkflowId === workflow.id && workflow.active) {
this.setState({ dialogIsOpen: true });
this.setState({
defaultWorkflowId,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is redundant with the default_workflow already a property on the project resource which is already stored in the component state.

dialogIsOpen: true
});
}

if ((defaultWorkflowId !== workflow.id) || (defaultWorkflowId === workflow.id && !workflow.active)) {
Expand All @@ -125,8 +133,7 @@ class ProjectStatus extends Component {
{this.state.workflows.map((workflow) => {
return (
<li key={workflow.id} className="section-list__item">
{this.state.project.configuration.default_workflow === workflow.id ?
' * ' : ''}
{this.state.project.configuration.default_workflow === workflow.id ? ' * ' : ''}
<WorkflowToggle
workflow={workflow}
name="active"
Expand All @@ -136,7 +143,7 @@ class ProjectStatus extends Component {
{this.state.dialogIsOpen &&
<WorkflowDefaultDialog
onCancel={this.handleDialogCancel}
onSuccess={this.handleDialogSuccess.bind(null, workflow)}
onSuccess={this.handleDialogSuccess}
/>}
<label>
Level:{' '}
Expand Down