Commit 803f056a authored by Lijiao's avatar Lijiao Committed by chicm-ms
Browse files

maintain selected status (#1710)

parent bf236012
...@@ -10,6 +10,7 @@ interface AppState { ...@@ -10,6 +10,7 @@ interface AppState {
columnList: Array<string>; columnList: Array<string>;
experimentUpdateBroadcast: number; experimentUpdateBroadcast: number;
trialsUpdateBroadcast: number; trialsUpdateBroadcast: number;
metricGraphMode: 'max' | 'min'; // tuner's optimize_mode filed
} }
class App extends React.Component<{}, AppState> { class App extends React.Component<{}, AppState> {
...@@ -22,6 +23,7 @@ class App extends React.Component<{}, AppState> { ...@@ -22,6 +23,7 @@ class App extends React.Component<{}, AppState> {
columnList: COLUMN, columnList: COLUMN,
experimentUpdateBroadcast: 0, experimentUpdateBroadcast: 0,
trialsUpdateBroadcast: 0, trialsUpdateBroadcast: 0,
metricGraphMode: 'max'
}; };
} }
...@@ -30,6 +32,7 @@ class App extends React.Component<{}, AppState> { ...@@ -30,6 +32,7 @@ class App extends React.Component<{}, AppState> {
this.setState(state => ({ experimentUpdateBroadcast: state.experimentUpdateBroadcast + 1 })); this.setState(state => ({ experimentUpdateBroadcast: state.experimentUpdateBroadcast + 1 }));
this.setState(state => ({ trialsUpdateBroadcast: state.trialsUpdateBroadcast + 1 })); this.setState(state => ({ trialsUpdateBroadcast: state.trialsUpdateBroadcast + 1 }));
this.timerId = window.setTimeout(this.refresh, this.state.interval * 1000); this.timerId = window.setTimeout(this.refresh, this.state.interval * 1000);
this.setState({ metricGraphMode: (EXPERIMENT.optimizeMode === 'minimize' ? 'min' : 'max') });
} }
changeInterval = (interval: number) => { changeInterval = (interval: number) => {
...@@ -46,8 +49,12 @@ class App extends React.Component<{}, AppState> { ...@@ -46,8 +49,12 @@ class App extends React.Component<{}, AppState> {
this.setState({ columnList: columnList }); this.setState({ columnList: columnList });
} }
changeMetricGraphMode = (val: 'max' | 'min') => {
this.setState({ metricGraphMode: val });
}
render() { render() {
const { interval, columnList, experimentUpdateBroadcast, trialsUpdateBroadcast } = this.state; const { interval, columnList, experimentUpdateBroadcast, trialsUpdateBroadcast, metricGraphMode } = this.state;
if (experimentUpdateBroadcast === 0 || trialsUpdateBroadcast === 0) { if (experimentUpdateBroadcast === 0 || trialsUpdateBroadcast === 0) {
return null; // TODO: render a loading page return null; // TODO: render a loading page
} }
...@@ -59,6 +66,7 @@ class App extends React.Component<{}, AppState> { ...@@ -59,6 +66,7 @@ class App extends React.Component<{}, AppState> {
columnList, changeColumn: this.changeColumn, columnList, changeColumn: this.changeColumn,
experimentUpdateBroadcast, experimentUpdateBroadcast,
trialsUpdateBroadcast, trialsUpdateBroadcast,
metricGraphMode, changeMetricGraphMode: this.changeMetricGraphMode
}) })
); );
return ( return (
......
...@@ -19,31 +19,33 @@ require('../static/style/overviewTitle.scss'); ...@@ -19,31 +19,33 @@ require('../static/style/overviewTitle.scss');
interface OverviewProps { interface OverviewProps {
experimentUpdateBroadcast: number; experimentUpdateBroadcast: number;
trialsUpdateBroadcast: number; trialsUpdateBroadcast: number;
metricGraphMode: 'max' | 'min';
changeMetricGraphMode: (val: 'max' | 'min') => void;
} }
interface OverviewState { interface OverviewState {
trialConcurrency: number; trialConcurrency: number;
metricGraphMode: 'max' | 'min';
} }
class Overview extends React.Component<OverviewProps, OverviewState> { class Overview extends React.Component<OverviewProps, OverviewState> {
constructor(props: OverviewProps) { constructor(props: OverviewProps) {
super(props); super(props);
this.state = { this.state = {
trialConcurrency: EXPERIMENT.trialConcurrency, trialConcurrency: EXPERIMENT.trialConcurrency
metricGraphMode: (EXPERIMENT.optimizeMode === 'minimize' ? 'min' : 'max'),
}; };
} }
clickMaxTop = (event: React.SyntheticEvent<EventTarget>) => { clickMaxTop = (event: React.SyntheticEvent<EventTarget>) => {
event.stopPropagation(); event.stopPropagation();
// #999 panel active bgcolor; #b3b3b3 as usual // #999 panel active bgcolor; #b3b3b3 as usual
this.setState({ metricGraphMode: 'max' }); const { changeMetricGraphMode } = this.props;
changeMetricGraphMode('max');
} }
clickMinTop = (event: React.SyntheticEvent<EventTarget>) => { clickMinTop = (event: React.SyntheticEvent<EventTarget>) => {
event.stopPropagation(); event.stopPropagation();
this.setState({ metricGraphMode: 'min' }); const { changeMetricGraphMode } = this.props;
changeMetricGraphMode('min');
} }
changeConcurrency = (val: number) => { changeConcurrency = (val: number) => {
...@@ -51,8 +53,8 @@ class Overview extends React.Component<OverviewProps, OverviewState> { ...@@ -51,8 +53,8 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
} }
render() { render() {
const { trialConcurrency, metricGraphMode } = this.state; const { trialConcurrency } = this.state;
const { experimentUpdateBroadcast } = this.props; const { experimentUpdateBroadcast, metricGraphMode } = this.props;
const searchSpace = this.convertSearchSpace(); const searchSpace = this.convertSearchSpace();
...@@ -160,7 +162,7 @@ class Overview extends React.Component<OverviewProps, OverviewState> { ...@@ -160,7 +162,7 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
private findBestTrials(): Trial[] { private findBestTrials(): Trial[] {
let bestTrials = TRIALS.sort(); let bestTrials = TRIALS.sort();
if (this.state.metricGraphMode === 'max') { if (this.props.metricGraphMode === 'max') {
bestTrials.reverse().splice(10); bestTrials.reverse().splice(10);
} else { } else {
bestTrials.splice(10); bestTrials.splice(10);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment