Store selected time in state on dashboard header
parent
b85269589a
commit
391a8925c6
|
@ -15,6 +15,10 @@ import * as AppActions from 'src/types/actions/app'
|
||||||
import * as DashboardsModels from 'src/types/dashboards'
|
import * as DashboardsModels from 'src/types/dashboards'
|
||||||
import * as QueriesModels from 'src/types/queries'
|
import * as QueriesModels from 'src/types/queries'
|
||||||
|
|
||||||
|
interface State {
|
||||||
|
selected: QueriesModels.TimeRange
|
||||||
|
}
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
activeDashboard: string
|
activeDashboard: string
|
||||||
dashboard: DashboardsModels.Dashboard
|
dashboard: DashboardsModels.Dashboard
|
||||||
|
@ -33,7 +37,7 @@ interface Props {
|
||||||
isHidden: boolean
|
isHidden: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
class DashboardHeader extends Component<Props> {
|
class DashboardHeader extends Component<Props, State> {
|
||||||
public static defaultProps: Partial<Props> = {
|
public static defaultProps: Partial<Props> = {
|
||||||
zoomedTimeRange: {
|
zoomedTimeRange: {
|
||||||
upper: null,
|
upper: null,
|
||||||
|
@ -41,6 +45,29 @@ class DashboardHeader extends Component<Props> {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static getDerivedStateFromProps(props: Props): Partial<State> {
|
||||||
|
const {upper, lower} = props.zoomedTimeRange
|
||||||
|
|
||||||
|
if (upper || lower) {
|
||||||
|
return {selected: {upper, lower}}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(props: Props) {
|
||||||
|
super(props)
|
||||||
|
|
||||||
|
const {timeRange, zoomedTimeRange} = props
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
selected: {
|
||||||
|
upper: timeRange.upper || zoomedTimeRange.upper,
|
||||||
|
lower: timeRange.lower || zoomedTimeRange.lower,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public render() {
|
public render() {
|
||||||
const {isHidden} = this.props
|
const {isHidden} = this.props
|
||||||
|
|
||||||
|
@ -65,14 +92,9 @@ class DashboardHeader extends Component<Props> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private get optionsComponents(): JSX.Element {
|
private get optionsComponents(): JSX.Element {
|
||||||
const {
|
const {handleChooseAutoRefresh, onManualRefresh, autoRefresh} = this.props
|
||||||
handleChooseAutoRefresh,
|
|
||||||
onManualRefresh,
|
const {selected} = this.state
|
||||||
autoRefresh,
|
|
||||||
handleChooseTimeRange,
|
|
||||||
timeRange: {upper, lower},
|
|
||||||
zoomedTimeRange: {upper: zoomedUpper, lower: zoomedLower},
|
|
||||||
} = this.props
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
@ -86,11 +108,8 @@ class DashboardHeader extends Component<Props> {
|
||||||
iconName="refresh"
|
iconName="refresh"
|
||||||
/>
|
/>
|
||||||
<TimeRangeDropdown
|
<TimeRangeDropdown
|
||||||
onChooseTimeRange={handleChooseTimeRange}
|
onChooseTimeRange={this.handleChooseTimeRange}
|
||||||
selected={{
|
selected={selected}
|
||||||
upper: zoomedUpper || upper,
|
|
||||||
lower: zoomedLower || lower,
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
<button
|
<button
|
||||||
className="btn btn-default btn-sm btn-square"
|
className="btn btn-default btn-sm btn-square"
|
||||||
|
@ -101,6 +120,17 @@ class DashboardHeader extends Component<Props> {
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private handleChooseTimeRange = (
|
||||||
|
timeRange: QueriesModels.TimeRange
|
||||||
|
): void => {
|
||||||
|
this.setState({selected: timeRange}, () => {
|
||||||
|
window.setTimeout(() => {
|
||||||
|
this.props.handleChooseTimeRange(timeRange)
|
||||||
|
}, 0)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
private handleClickPresentationButton = (): void => {
|
private handleClickPresentationButton = (): void => {
|
||||||
this.props.handleClickPresentationButton()
|
this.props.handleClickPresentationButton()
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,8 +50,11 @@ class TimeRangeDropdown extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
handleSelection = timeRange => () => {
|
handleSelection = timeRange => () => {
|
||||||
this.props.onChooseTimeRange(timeRange)
|
this.setState({customTimeRange: emptyTime, isOpen: false}, () => {
|
||||||
this.setState({customTimeRange: emptyTime, isOpen: false})
|
window.setTimeout(() => {
|
||||||
|
this.props.onChooseTimeRange(timeRange)
|
||||||
|
}, 0)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleMenu = () => {
|
toggleMenu = () => {
|
||||||
|
|
Loading…
Reference in New Issue