clean-up state & props delegation. destroy pikaday on unmount.

This commit is contained in:
Danny van Kooten 2018-05-24 17:02:19 +02:00
parent b414f10348
commit e7e693a71c
7 changed files with 32 additions and 33 deletions

View File

@ -82,15 +82,14 @@ class Chart extends Component {
} }
} }
componentWillReceiveProps(newProps, prevState) { componentWillReceiveProps(newProps) {
if(newProps.before == prevState.before && newProps.after == prevState.after) { if(newProps.before == this.props.before && newProps.after == this.props.after) {
return; return;
} }
this.fetchData(newProps.before, newProps.after); this.fetchData(newProps.before, newProps.after);
} }
@bind @bind
redrawChart() { redrawChart() {
var data = this.state.data; var data = this.state.data;
@ -202,9 +201,8 @@ class Chart extends Component {
this.setState({ this.setState({
loading: false, loading: false,
data: prepareData(after, before, d), data: prepareData(after, before, d),
}); })
this.redrawChart()
this.redrawChart();
}) })
} }

View File

@ -16,8 +16,8 @@ class CountWidget extends Component {
} }
} }
componentWillReceiveProps(newProps, prevState) { componentWillReceiveProps(newProps, newState) {
if(newProps.before == prevState.before && newProps.after == prevState.after) { if(newProps.before == this.props.before && newProps.after == this.props.after) {
return; return;
} }

View File

@ -33,6 +33,8 @@ class DatePicker extends Component {
period: props.value, period: props.value,
before: 0, before: 0,
after: 0, after: 0,
startDate: null,
endDate: null,
} }
this.updateDatesFromPeriod(this.state.period) this.updateDatesFromPeriod(this.state.period)
@ -89,17 +91,21 @@ class DatePicker extends Component {
endDate: endDate, endDate: endDate,
before: before, before: before,
after: after, after: after,
picking: '',
}); });
if(!this.timeout) {
this.timeout = window.setTimeout(() => {
this.props.onChange(this.state); this.props.onChange(this.state);
this.timeout = null;
}, 5)
}
} }
@bind @bind
setPeriod(e) { setPeriod(e) {
e.preventDefault(); e.preventDefault();
let newPeriod = e.target.dataset.value; let newPeriod = e.target.getAttribute('data-value');
if( newPeriod === this.state.period) { if( newPeriod === this.state.period) {
return; return;
} }

View File

@ -14,7 +14,7 @@ class Notification extends Component {
this.timeout = 0 this.timeout = 0
} }
componentWillReceiveProps(newProps, prevState) { componentWillReceiveProps(newProps) {
if(newProps.message === this.state.message) { if(newProps.message === this.state.message) {
return; return;
} }

View File

@ -14,14 +14,17 @@ class Pikadayer extends Component {
componentWillReceiveProps(newProps) { componentWillReceiveProps(newProps) {
// make sure pikaday updates if we set a date using one of our presets // make sure pikaday updates if we set a date using one of our presets
if(newProps.value !== this.state.value) { if(this.pikaday && newProps.value !== this.props.value) {
this.state.value = newProps.value; this.pikaday.setDate(newProps.value, true)
this.pikaday.setDate(newProps.value, false);
} }
} }
componentWillUnmount() {
this.pikaday.destroy()
}
render(props) { render(props) {
return <input {...props} /> return <input />
} }
} }

View File

@ -16,34 +16,26 @@ class Table extends Component {
records: [], records: [],
limit: 15, limit: 15,
loading: true, loading: true,
before: props.before,
after: props.after,
total: 0, total: 0,
} }
} }
componentWillReceiveProps(newProps, prevState) { componentWillReceiveProps(newProps) {
if(newProps.before == prevState.before && newProps.after == prevState.after) { if(newProps.before == this.props.before && newProps.after == this.props.after) {
return; return;
} }
this.setState({ this.fetchRecords(newProps.before, newProps.after);
before: newProps.before,
after: newProps.after,
});
this.fetchRecords();
} }
@bind @bind
fetchRecords() { fetchRecords(before, after) {
this.setState({ loading: true }); this.setState({ loading: true });
let before = this.state.before;
let after = this.state.after;
Client.request(`${this.props.endpoint}?before=${this.state.before}&after=${this.state.after}&limit=${this.state.limit}`) Client.request(`${this.props.endpoint}?before=${before}&after=${after}&limit=${this.state.limit}`)
.then((d) => { .then((d) => {
// request finished; check if timestamp range is still the one user wants to see // request finished; check if timestamp range is still the one user wants to see
if( this.state.before != before || this.state.after != after ) { if( this.props.before != before || this.props.after != after ) {
return; return;
} }
@ -54,7 +46,7 @@ class Table extends Component {
}); });
// fetch totals too // fetch totals too
Client.request(`${this.props.endpoint}/pageviews?before=${this.state.before}&after=${this.state.after}`) Client.request(`${this.props.endpoint}/pageviews?before=${before}&after=${after}`)
.then((d) => { .then((d) => {
this.setState({ this.setState({
total: d total: d

View File

@ -21,9 +21,9 @@ class App extends Component {
}) })
} }
render() { render(props, state) {
// logged-in // logged-in
if( this.state.authenticated ) { if( state.authenticated ) {
return <Dashboard onLogout={this.toggleAuth} /> return <Dashboard onLogout={this.toggleAuth} />
} }