Prevent log viewer configs overlay from updating unless state changes

pull/3873/head
Iris Scholten 2018-07-11 09:31:59 -07:00
parent 4389d8d7a9
commit f954685a10
1 changed files with 35 additions and 21 deletions

View File

@ -26,7 +26,7 @@ interface Props {
} }
interface State { interface State {
workingSeverityLevels: SeverityLevelColor[] workingLevelColumns: SeverityLevelColor[]
workingColumns: LogsTableColumn[] workingColumns: LogsTableColumn[]
workingFormat: SeverityFormat workingFormat: SeverityFormat
} }
@ -37,14 +37,33 @@ class OptionsOverlay extends Component<Props, State> {
super(props) super(props)
this.state = { this.state = {
workingSeverityLevels: this.props.severityLevelColors, workingLevelColumns: this.props.severityLevelColors,
workingColumns: this.props.columns, workingColumns: this.props.columns,
workingFormat: this.props.severityFormat, workingFormat: this.props.severityFormat,
} }
} }
public shouldComponentUpdate(__, nextState: State) {
const isColorsDifferent = !_.isEqual(
nextState.workingLevelColumns,
this.state.workingLevelColumns
)
const isFormatDifferent = !_.isEqual(
nextState.workingFormat,
this.state.workingFormat
)
const isColumnsDifferent = !_.isEqual(
nextState.workingColumns,
this.state.workingColumns
)
if (isColorsDifferent || isFormatDifferent || isColumnsDifferent) {
return true
}
return false
}
public render() { public render() {
const {workingSeverityLevels, workingColumns, workingFormat} = this.state const {workingLevelColumns, workingColumns, workingFormat} = this.state
return ( return (
<Container maxWidth={800}> <Container maxWidth={800}>
@ -55,7 +74,7 @@ class OptionsOverlay extends Component<Props, State> {
<div className="row"> <div className="row">
<div className="col-sm-5"> <div className="col-sm-5">
<SeverityOptions <SeverityOptions
severityLevelColors={workingSeverityLevels} severityLevelColors={workingLevelColumns}
onReset={this.handleResetSeverityLevels} onReset={this.handleResetSeverityLevels}
onChangeSeverityLevel={this.handleChangeSeverityLevel} onChangeSeverityLevel={this.handleChangeSeverityLevel}
severityFormat={workingFormat} severityFormat={workingFormat}
@ -95,13 +114,10 @@ class OptionsOverlay extends Component<Props, State> {
} }
private get isSaveDisabled(): boolean { private get isSaveDisabled(): boolean {
const {workingSeverityLevels, workingColumns, workingFormat} = this.state const {workingLevelColumns, workingColumns, workingFormat} = this.state
const {severityLevelColors, columns, severityFormat} = this.props const {severityLevelColors, columns, severityFormat} = this.props
const severityChanged = !_.isEqual( const severityChanged = !_.isEqual(workingLevelColumns, severityLevelColors)
workingSeverityLevels,
severityLevelColors
)
const columnsChanged = !_.isEqual(workingColumns, columns) const columnsChanged = !_.isEqual(workingColumns, columns)
const formatChanged = !_.isEqual(workingFormat, severityFormat) const formatChanged = !_.isEqual(workingFormat, severityFormat)
@ -119,10 +135,10 @@ class OptionsOverlay extends Component<Props, State> {
onUpdateSeverityFormat, onUpdateSeverityFormat,
onUpdateColumns, onUpdateColumns,
} = this.props } = this.props
const {workingSeverityLevels, workingFormat, workingColumns} = this.state const {workingLevelColumns, workingFormat, workingColumns} = this.state
await onUpdateSeverityFormat(workingFormat) await onUpdateSeverityFormat(workingFormat)
await onUpdateSeverityLevels(workingSeverityLevels) await onUpdateSeverityLevels(workingLevelColumns)
await onUpdateColumns(workingColumns) await onUpdateColumns(workingColumns)
onDismissOverlay() onDismissOverlay()
} }
@ -131,24 +147,22 @@ class OptionsOverlay extends Component<Props, State> {
const defaults = _.map(DEFAULT_SEVERITY_LEVELS, (color, level) => { const defaults = _.map(DEFAULT_SEVERITY_LEVELS, (color, level) => {
return {level: SeverityLevelOptions[level], color} return {level: SeverityLevelOptions[level], color}
}) })
this.setState({workingSeverityLevels: defaults}) this.setState({workingLevelColumns: defaults})
} }
private handleChangeSeverityLevel = ( private handleChangeSeverityLevel = (
severityLevel: string, severityLevel: string,
override: SeverityColor override: SeverityColor
): void => { ): void => {
const workingSeverityLevels = this.state.workingSeverityLevels.map( const workingLevelColumns = this.state.workingLevelColumns.map(config => {
config => {
if (config.level === severityLevel) { if (config.level === severityLevel) {
return {...config, color: override.name} return {...config, color: override.name}
} }
return config return config
} })
)
this.setState({workingSeverityLevels}) this.setState({workingLevelColumns})
} }
private handleChangeSeverityFormat = (format: SeverityFormat) => { private handleChangeSeverityFormat = (format: SeverityFormat) => {