show incidents for selected member and selected dates

This commit is contained in:
Bilal Catic
2019-06-19 00:23:40 +02:00
parent 0ccd2ff55c
commit 4166ff7a48
8 changed files with 200 additions and 5 deletions

View File

@@ -1,20 +1,58 @@
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Dropdown, Form } from 'semantic-ui-react';
import { fetchMembersList } from '../../../store/actions';
class MemberSelector extends Component {
componentDidMount() {
const { fetchMembersList } = this.props;
fetchMembersList();
}
onMemberSelectionChange(event, data){
const { onMemberSelect } = this.props;
const { value } = data;
if (onMemberSelect && value){
onMemberSelect(value);
}
}
render(){
const { members } = this.props;
const dropdownOptions = members && Array.isArray(members) ? members.map(member => ({
key: member.memberId,
value: member.memberId,
text: member.name
})
) : null;
return (
<Form>
<label>{'\u00A0'}</label>
<Dropdown
options={dropdownOptions}
placeholder="Select Member"
selection
search
fluid
onChange={this.onMemberSelectionChange.bind(this)}
/>
</Form>
);
}
}
export default MemberSelector;
const mapStateToProps = (state) => ({
members: state.membersList.result,
});
const mapDispatchToProps = (dispatch) => ({
fetchMembersList: () => fetchMembersList(dispatch),
});
export default connect(mapStateToProps, mapDispatchToProps)(MemberSelector);

View File

@@ -8,8 +8,39 @@ import MemberSelector from './components/MemberSelector';
import MemberSummary from './components/MemberSummary';
import MemberIncidentsTable from '../../components/MemberIncidentsTable';
import { fetchMemberIncidents } from '../../store/actions';
class PracticeSummaryReport extends Component {
constructor(props){
super(props);
this.state = {
dateRange: null,
memberId: null,
};
}
onDateRangeUpdate(dateRange){
this.fetchIncidents(dateRange, this.state.memberId);
this.setState({dateRange});
}
onMemberSelectionUpdate(memberId){
this.fetchIncidents(this.state.dateRange, memberId);
this.setState({memberId});
}
fetchIncidents(dateRange, memberId){
const { fetchMemberIncidents } = this.props;
if (dateRange && dateRange.startDate && dateRange.endDate && memberId){
fetchMemberIncidents(memberId, dateRange);
}
}
render () {
const { memberIncidents, loading } = this.props;
return (
<Container>
<MainMenu/>
@@ -18,10 +49,10 @@ class PracticeSummaryReport extends Component {
<Grid stackable columns="equal">
<Grid.Row>
<Grid.Column>
<MemberSelector />
<MemberSelector onMemberSelect={this.onMemberSelectionUpdate.bind(this)} />
</Grid.Column>
<Grid.Column>
<DateRangePicker />
<DateRangePicker onDatesUpdate={this.onDateRangeUpdate.bind(this)}/>
</Grid.Column>
</Grid.Row>
<Grid.Row>
@@ -31,7 +62,11 @@ class PracticeSummaryReport extends Component {
</Grid.Row>
<Grid.Row>
<Grid.Column>
<MemberIncidentsTable title="Incidents list" />
<MemberIncidentsTable
title="Detail list"
incidents={memberIncidents}
loading={loading}
/>
</Grid.Column>
</Grid.Row>
</Grid>
@@ -41,9 +76,12 @@ class PracticeSummaryReport extends Component {
}
const mapStateToProps = (state) => ({
memberIncidents: state.memberIncidents.result,
loading: state.memberIncidents.pending,
});
const mapDispatchToProps = (dispatch) => ({
fetchMemberIncidents: (memberId, dateRange) => fetchMemberIncidents(dispatch, memberId, dateRange),
});
export default connect(mapStateToProps, mapDispatchToProps)(PracticeSummaryReport);