import { utc, ISO_8601, duration } from "moment"; import React, { Component } from "react"; import { connect } from "react-redux"; import { Redirect, Link } from "react-router-dom"; import { Button, Container, Dropdown, Header, Item, Segment, Pagination, Loader, Label } from "semantic-ui-react"; import { getEmployerFromPrice, getPriceFromPrice } from "./ProviderShiftsShared"; import { setPShiftPage, setPShiftApprovalFilter, setPShiftCompletedFilter, setPShiftClientFilter, setPShiftWorkTypeFilter } from "../../../actions/pShift/reducer.actions"; import { getPShiftsRequest, updatePShiftRequest } from "../../../actions/pShift/saga.actions"; class ProviderShifts extends Component { constructor(props) { super(props); this.state = { pageSize: 10 // client can't control this, but set here just in case }; } componentWillMount = () => { this.props.dispatch( getPShiftsRequest({ page: this.props.page, approved: this.props.approvalFilter, completed: this.props.completedFilter, manage: this.props.clientFilter, work_type: this.props.workTypeFilter, page_size: this.state.pageSize }) ); }; handlePaginationChange = (event, { activePage }) => { this.props.dispatch( getPShiftsRequest({ page: activePage, approved: this.props.approvalFilter, completed: this.props.completedFilter, manage: this.props.clientFilter, work_type: this.props.workTypeFilter, page_size: this.state.pageSize }) ); this.props.dispatch(setPShiftPage(activePage)); }; handleChangeApprovalFilter = (event, { value }) => { this.props.dispatch( getPShiftsRequest({ page: 1, approved: value, completed: this.props.completedFilter, manage: this.props.clientFilter, work_type: this.props.workTypeFilter, page_size: this.state.pageSize }) ); this.props.dispatch(setPShiftApprovalFilter(value)); this.props.dispatch(setPShiftPage(1)); }; handleChangeCompletedFilter = (event, { value }) => { this.props.dispatch( getPShiftsRequest({ page: 1, approved: this.props.approvalFilter, completed: value, manage: this.props.clientFilter, work_type: this.props.workTypeFilter, page_size: this.state.pageSize }) ); this.props.dispatch(setPShiftCompletedFilter(value)); this.props.dispatch(setPShiftPage(1)); }; handleChangeClientFilter = (event, { value }) => { this.props.dispatch( getPShiftsRequest({ page: 1, approved: this.props.approvalFilter, completed: this.props.completedFilter, manage: value, work_type: this.props.workTypeFilter, page_size: this.state.pageSize }) ); this.props.dispatch(setPShiftClientFilter(value)); this.props.dispatch(setPShiftPage(1)); }; handleChangeWorkTypeFilter = (event, { value }) => { this.props.dispatch( getPShiftsRequest({ page: 1, approved: this.props.approvalFilter, completed: this.props.completedFilter, manage: this.props.clientFilter, work_type: value, page_size: this.state.pageSize }) ); this.props.dispatch(setPShiftWorkTypeFilter(value)); this.props.dispatch(setPShiftPage(1)); }; handleChangePShiftApproval = (uuid, approved) => { return () => { this.props.dispatch( updatePShiftRequest({ uuid, approved, action: "", chart: null }) ); }; }; render() { const { isSendingPShiftRequest, pShiftRequestSuccess, selfUser, page, approvalFilter, completedFilter, clientFilter, workTypeFilter } = this.props; const { pageSize } = this.state; if (selfUser.provider) { return ( ); } else { return ; } } } function mapStateToProps(state) { return { ...state.pShift, selfUser: state.user.selfUser }; } const ProviderShiftsView = ({ isSendingPShiftRequest, pShiftRequestSuccess, user, page, approvalFilter, completedFilter, clientFilter, workTypeFilter, pageSize, handlePaginationChange, handleChangeApprovalFilter, handleChangeCompletedFilter, handleChangeClientFilter, handleChangeWorkTypeFilter, handleChangePShiftApproval }) => { const OLD_PEOPLE_TIME_FORMAT = "dddd, MMMM Do YYYY, h:mm a"; const { count = 0, results = [] } = pShiftRequestSuccess; const approvedOptions = [ { text: "Approved", value: true }, { text: "Rejected", value: false }, { text: "Pending", value: "" }, { text: "All", value: null } ]; const completedOptions = [ { text: "Completed", value: true }, { text: "Incomplete", value: false }, { text: "All", value: null } ]; const manageOptions = (user.provider.employers || []).map(employer => { const name = `${employer.client.first_name} ${employer.client.last_name}`.trim() || "No Name"; return { text: `${name} <${employer.client.email}>`, value: employer.uuid }; }); manageOptions.push({ text: `All`, value: null }); const workTypeMultiOptions = []; (user.provider.employers || []).forEach(employer => { (employer.prices || []).forEach(price => { workTypeMultiOptions.push({ value: price.work_type.uuid, text: price.work_type.label, label: (