Files
old-crm-integration/client/src/scenes/SpecificMemberIncidentsReport/index.js

105 lines
3.8 KiB
JavaScript
Raw Normal View History

2019-06-19 11:23:58 +02:00
import React, { Component } from 'react';
import { connect } from 'react-redux';
2019-07-25 06:53:32 +02:00
import { Container, Grid } from 'semantic-ui-react';
2019-06-19 11:23:58 +02:00
import MainMenu from '../../components/MainMenu';
import DateRangePicker from '../../components/DateRangePicker';
2019-06-19 11:23:58 +02:00
import MemberSelector from './components/MemberSelector';
import MemberSummary from './components/MemberSummary';
2019-07-07 07:02:42 +02:00
import MemberIncidentsTables from '../../components/MemberIncidentsTables';
2019-07-25 06:53:32 +02:00
import GenerateFeesInORDButton from '../../components/GenerateFeesInORDButton';
2019-06-19 11:23:58 +02:00
import { fetchMemberIncidents } from '../../store/actions';
class SpecificMemberIncidentsReport extends Component {
2019-06-19 11:23:58 +02:00
constructor(props){
super(props);
this.state = {
dateRange: null,
2019-06-25 15:44:46 +02:00
memberId: props.match.params.memberId,
2019-06-19 11:23:58 +02:00
};
}
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 () {
2019-07-25 06:53:32 +02:00
const { memberIncidents, loadingMemberIncidents, loadingAddFeesStatus } = this.props;
const { memberId, dateRange } = this.state;
const loading = loadingAddFeesStatus || loadingMemberIncidents;
const addFeesButtonDisabled = !memberId || !dateRange || loading;
2019-06-19 11:23:58 +02:00
return (
<Container>
<MainMenu/>
<h3>Member Incidents Report</h3>
2019-06-19 11:23:58 +02:00
<hr/>
<Grid stackable columns="equal">
<Grid.Row>
<Grid.Column>
2019-07-07 07:02:42 +02:00
<MemberSelector onMemberSelect={this.onMemberSelectionUpdate.bind(this)} defaultMemberId={memberId} />
2019-06-19 11:23:58 +02:00
</Grid.Column>
<Grid.Column>
<DateRangePicker inlineButton onDatesUpdate={this.onDateRangeUpdate.bind(this)}/>
2019-06-19 11:23:58 +02:00
</Grid.Column>
</Grid.Row>
<Grid.Row>
<Grid.Column>
2019-06-20 14:18:36 +02:00
<MemberSummary
incidents={memberIncidents}
loading={loading}
/>
2019-06-19 11:23:58 +02:00
</Grid.Column>
</Grid.Row>
2019-07-25 06:53:32 +02:00
<Grid.Row>
<Grid.Column>
<GenerateFeesInORDButton
singleMember
disabled={addFeesButtonDisabled}
dateRange={dateRange}
memberIds={[memberId]}
/>
</Grid.Column>
</Grid.Row>
2019-06-20 14:18:36 +02:00
<Grid.Row/>
2019-06-19 11:23:58 +02:00
<Grid.Row>
<Grid.Column>
2019-07-07 07:02:42 +02:00
<MemberIncidentsTables incidents={memberIncidents} pendingIncidents={loading} hideMemberName/>
2019-06-19 11:23:58 +02:00
</Grid.Column>
</Grid.Row>
</Grid>
</Container>
);
}
}
const mapStateToProps = (state) => ({
memberIncidents: state.memberIncidents.result,
2019-07-25 06:53:32 +02:00
loadingMemberIncidents: state.memberIncidents.pending,
loadingAddFeesStatus: state.addFeesStatus.pending,
2019-06-19 11:23:58 +02:00
});
const mapDispatchToProps = (dispatch) => ({
fetchMemberIncidents: (memberId, dateRange) => fetchMemberIncidents(dispatch, memberId, dateRange),
});
export default connect(mapStateToProps, mapDispatchToProps)(SpecificMemberIncidentsReport);