You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.7 KiB
TypeScript

import React, { PureComponent } from 'react';
import { Location, Action } from 'history';
import * as queryString from 'query-string';
import { connect } from 'react-redux';
import { getTasksAsync } from '../../actions/tasks.actions';
import { filterTasks } from '../../actions/tasks-filter.actions';
import { Layout } from 'antd';
import DashboardHeader from './header/dashboard-header';
import DashboardContent from './content/dashboard-content';
import DashboardFooter from './footer/dashboard-footer';
import './dashboard.scss';
class Dashboard extends PureComponent<any, any> {
componentDidMount() {
this.loadTasks(this.props.location.search);
this.props.history.listen((location: Location, action: Action) => {
this.loadTasks(location.search);
})
}
render() {
return (
<Layout className="layout">
<DashboardHeader />
<DashboardContent />
<DashboardFooter />
</Layout>
);
}
private loadTasks = (params: any) => {
const query = queryString.parse(params);
const queryObject = this.setQueryObject(query);
this.props.dispatch(filterTasks(queryObject));
this.props.dispatch(getTasksAsync(queryObject));
}
private setQueryObject = (params: { search?: string, page?: string }): { search?: string, page?: number } => {
const queryObject: { search?: string, page?: number } = {};
if (params['search']) {
queryObject.search = params.search.toString();
}
if (params['page']) {
queryObject.page = parseInt(params.page);
}
return queryObject;
}
}
const mapStateToProps = (state: any) => {
return { ...state.tasks, ...state.tasksFilter };
};
export default connect(mapStateToProps)(Dashboard);