Prevent log viewer configs overlay from updating unless state changes
parent
4389d8d7a9
commit
f954685a10
|
@ -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) => {
|
||||||
|
|
Loading…
Reference in New Issue