added ability for client to adjust shift hours

This commit is contained in:
Alexander Wong 2018-07-02 15:03:00 -06:00
parent ffa46b1435
commit fb5f71a881
No known key found for this signature in database
GPG Key ID: E90E5D6448C2C663
8 changed files with 260 additions and 101 deletions

View File

@ -6,7 +6,7 @@ import { put } from "./baseApi";
* @param {boolean} approved - whether or not to approve employment relationship * @param {boolean} approved - whether or not to approve employment relationship
*/ */
export function updateEmployer(uuid, approved) { export function updateEmployer(uuid, approved) {
return put(`/employer/${uuid}/`, { approved }).then(resp => return put(`/employer/${uuid}/`, { provider_approved: approved }).then(resp =>
Promise.resolve(resp) Promise.resolve(resp)
); );
} }

View File

@ -0,0 +1,25 @@
import React from "react";
import { Label } from "semantic-ui-react";
export default ({
provider_approved,
client_approved_start,
client_approved_end
}) => {
const providerApproved = !!provider_approved;
const clientApproved = !!client_approved_start && providerApproved;
const providerRejected = !provider_approved && provider_approved !== null;
const providerPending = provider_approved === null;
return (
<Label
color={providerApproved ? "green" : providerRejected ? "red" : "grey"}
tag
size="small"
>
{!clientApproved && providerApproved && "Provider Approved Shift"}
{clientApproved && "Client Approved Hours"}
{providerPending && "Provider Approval Pending"}
{providerRejected && "Provider Rejected Shift"}
</Label>
);
};

View File

@ -82,6 +82,8 @@ class ClientAddShiftForm extends Component {
get_price_uuid: priceUUID, get_price_uuid: priceUUID,
set_start: dynamicStartTime.format(), set_start: dynamicStartTime.format(),
set_end: dynamicEndTime.format(), set_end: dynamicEndTime.format(),
approved_start: null,
approved_end: null,
description: note ? note : undefined description: note ? note : undefined
}); });
} }

View File

@ -87,6 +87,7 @@ class ClientEditShiftForm extends Component {
event.preventDefault(); event.preventDefault();
// change this into interable cshift post request bodies // change this into interable cshift post request bodies
const { const {
cShiftRequestSuccess,
cShiftUUID, cShiftUUID,
priceUUID, priceUUID,
startTime, startTime,
@ -94,6 +95,8 @@ class ClientEditShiftForm extends Component {
note, note,
shiftDates shiftDates
} = this.props; } = this.props;
const isProviderCheckedIn = !!cShiftRequestSuccess.actual_start;
const postRequestBodies = []; const postRequestBodies = [];
for (let shiftDateString in shiftDates) { for (let shiftDateString in shiftDates) {
const dynamicStartTime = utc(startTime); const dynamicStartTime = utc(startTime);
@ -107,8 +110,10 @@ class ClientEditShiftForm extends Component {
dynamicEndTime.add(duration, "minutes"); dynamicEndTime.add(duration, "minutes");
postRequestBodies.push({ postRequestBodies.push({
get_price_uuid: priceUUID, get_price_uuid: priceUUID,
set_start: dynamicStartTime.format(), set_start: isProviderCheckedIn ? null : dynamicStartTime.format(),
set_end: dynamicEndTime.format(), set_end: isProviderCheckedIn ? null : dynamicEndTime.format(),
approved_start: isProviderCheckedIn ? dynamicStartTime.format() : null,
approved_end: isProviderCheckedIn ? dynamicEndTime.format() : null,
description: note ? note : undefined description: note ? note : undefined
}); });
} }
@ -131,6 +136,7 @@ class ClientEditShiftForm extends Component {
shiftDates, shiftDates,
cShiftUUID cShiftUUID
} = this.props; } = this.props;
const isProviderCheckedIn = !!cShiftRequestSuccess.actual_start;
if (!selfUser.client) { if (!selfUser.client) {
return <Redirect to="/" />; return <Redirect to="/" />;
@ -206,6 +212,7 @@ class ClientEditShiftForm extends Component {
handleSelectDate={this.handleSelectDate} handleSelectDate={this.handleSelectDate}
onSubmitShifts={this.onSubmitShifts} onSubmitShifts={this.onSubmitShifts}
isEditing={true} isEditing={true}
isProviderCheckedIn={isProviderCheckedIn}
/> />
); );
} }

View File

@ -49,12 +49,14 @@ export const ClientShiftFormView = ({
changeShiftNote, changeShiftNote,
handleSelectDate, handleSelectDate,
onSubmitShifts, onSubmitShifts,
isEditing = false isEditing = false,
isProviderCheckedIn = false
}) => ( }) => (
<Container> <Container>
<Header> <Header>
{!isEditing && "Schedule Shifts"} {!isEditing && "Schedule Shifts"}
{isEditing && "Edit Shift"} {isEditing && !isProviderCheckedIn && "Edit Shift"}
{isEditing && isProviderCheckedIn && "Adjust and Approve Hours"}
</Header> </Header>
<Form <Form
loading={isSendingCShiftRequest} loading={isSendingCShiftRequest}
@ -151,7 +153,8 @@ export const ClientShiftFormView = ({
</Message> </Message>
<Form.Button> <Form.Button>
{!isEditing && "Schedule Shifts"} {!isEditing && "Schedule Shifts"}
{isEditing && "Edit Shift"} {isEditing && !isProviderCheckedIn && "Edit Shift"}
{isEditing && isProviderCheckedIn && "Adjust and Approve Hours"}
</Form.Button> </Form.Button>
</Form> </Form>
</Container> </Container>

View File

@ -1,5 +1,5 @@
import { utc, ISO_8601, duration } from "moment"; import { utc, ISO_8601, duration } from "moment";
import React, { Component } from "react"; import React, { Component, Fragment } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Redirect, Link } from "react-router-dom"; import { Redirect, Link } from "react-router-dom";
import { import {
@ -25,9 +25,11 @@ import {
} from "../../../actions/cShift/reducer.actions"; } from "../../../actions/cShift/reducer.actions";
import { import {
getCShiftsRequest, getCShiftsRequest,
deleteCShiftRequest deleteCShiftRequest,
editCShiftRequest
} from "../../../actions/cShift/saga.actions"; } from "../../../actions/cShift/saga.actions";
import { getEmployeeFromPrice, getPriceFromPrice } from "./ClientShiftShared"; import { getEmployeeFromPrice, getPriceFromPrice } from "./ClientShiftShared";
import ShiftLabel from "../../Shared/ShiftLabel";
class ClientShifts extends Component { class ClientShifts extends Component {
constructor(props) { constructor(props) {
@ -41,7 +43,7 @@ class ClientShifts extends Component {
this.props.dispatch( this.props.dispatch(
getCShiftsRequest({ getCShiftsRequest({
page: this.props.page, page: this.props.page,
approved: this.props.approvalFilter, provider_approved: this.props.approvalFilter,
completed: this.props.completedFilter, completed: this.props.completedFilter,
manage: this.props.providerFilter, manage: this.props.providerFilter,
work_type: this.props.workTypeFilter, work_type: this.props.workTypeFilter,
@ -54,7 +56,7 @@ class ClientShifts extends Component {
this.props.dispatch( this.props.dispatch(
getCShiftsRequest({ getCShiftsRequest({
page: activePage, page: activePage,
approved: this.props.approvalFilter, provider_approved: this.props.approvalFilter,
manage: this.props.providerFilter, manage: this.props.providerFilter,
work_type: this.props.workTypeFilter, work_type: this.props.workTypeFilter,
page_size: this.state.pageSize page_size: this.state.pageSize
@ -67,7 +69,7 @@ class ClientShifts extends Component {
this.props.dispatch( this.props.dispatch(
getCShiftsRequest({ getCShiftsRequest({
page: 1, page: 1,
approved: value, provider_approved: value,
completed: this.props.completedFilter, completed: this.props.completedFilter,
manage: this.props.providerFilter, manage: this.props.providerFilter,
work_type: this.props.workTypeFilter, work_type: this.props.workTypeFilter,
@ -82,7 +84,7 @@ class ClientShifts extends Component {
this.props.dispatch( this.props.dispatch(
getCShiftsRequest({ getCShiftsRequest({
page: 1, page: 1,
approved: this.props.approvalFilter, provider_approved: this.props.approvalFilter,
completed: value, completed: value,
manage: this.props.providerFilter, manage: this.props.providerFilter,
work_type: this.props.workTypeFilter, work_type: this.props.workTypeFilter,
@ -97,7 +99,7 @@ class ClientShifts extends Component {
this.props.dispatch( this.props.dispatch(
getCShiftsRequest({ getCShiftsRequest({
page: 1, page: 1,
approved: this.props.approvalFilter, provider_approved: this.props.approvalFilter,
completed: this.props.completedFilter, completed: this.props.completedFilter,
manage: value, manage: value,
work_type: this.props.workTypeFilter, work_type: this.props.workTypeFilter,
@ -112,7 +114,7 @@ class ClientShifts extends Component {
this.props.dispatch( this.props.dispatch(
getCShiftsRequest({ getCShiftsRequest({
page: 1, page: 1,
approved: this.props.approvalFilter, provider_approved: this.props.approvalFilter,
completed: this.props.completedFilter, completed: this.props.completedFilter,
manage: this.props.manageFilter, manage: this.props.manageFilter,
work_type: value, work_type: value,
@ -127,6 +129,34 @@ class ClientShifts extends Component {
this.props.dispatch(deleteCShiftRequest(uuid)); this.props.dispatch(deleteCShiftRequest(uuid));
}; };
approveHoursCShift = cshift => {
const {
set_start: approved_start,
set_end: approved_end,
price: get_price_uuid
} = cshift;
this.props.dispatch(
editCShiftRequest({
uuid: cshift.uuid,
get_price_uuid,
approved_start,
approved_end,
set_start: null,
set_end: null
})
);
this.props.dispatch(
getCShiftsRequest({
page: this.props.page,
provider_approved: this.props.approvalFilter,
completed: this.props.completedFilter,
manage: this.props.providerFilter,
work_type: this.props.workTypeFilter,
page_size: this.state.pageSize
})
);
};
render() { render() {
const { const {
isSendingCShiftRequest, isSendingCShiftRequest,
@ -157,6 +187,7 @@ class ClientShifts extends Component {
handleChangeProviderFilter={this.handleChangeProviderFilter} handleChangeProviderFilter={this.handleChangeProviderFilter}
handleChangeWorkTypeFilter={this.handleChangeWorkTypeFilter} handleChangeWorkTypeFilter={this.handleChangeWorkTypeFilter}
deleteCShift={this.deleteCShift} deleteCShift={this.deleteCShift}
approveHoursCShift={this.approveHoursCShift}
/> />
); );
} else { } else {
@ -184,7 +215,8 @@ const ClientShiftsView = ({
handleChangeCompletedFilter, handleChangeCompletedFilter,
handleChangeProviderFilter, handleChangeProviderFilter,
handleChangeWorkTypeFilter, handleChangeWorkTypeFilter,
deleteCShift deleteCShift,
approveHoursCShift
}) => { }) => {
const { count = 0, results = [] } = cShiftRequestSuccess; const { count = 0, results = [] } = cShiftRequestSuccess;
const approvedOptions = [ const approvedOptions = [
@ -240,7 +272,7 @@ const ClientShiftsView = ({
Schedule Shift Schedule Shift
</Button> </Button>
<Segment> <Segment>
{"Filter by Approval "} {"Filter by Provider Approval "}
<Dropdown <Dropdown
inline inline
placeholder={approvalFilter === null ? `All` : `Pending`} placeholder={approvalFilter === null ? `All` : `Pending`}
@ -302,9 +334,7 @@ const ClientShiftsView = ({
"minutes" "minutes"
).humanize()}`; ).humanize()}`;
} }
const approved = !!result.approved;
const rejected = !result.approved && result.approved !== null;
const pending = result.approved === null;
return ( return (
<Item key={result.uuid}> <Item key={result.uuid}>
<Item.Content> <Item.Content>
@ -320,18 +350,14 @@ const ClientShiftsView = ({
{workType.label} {workType.label}
</Item.Header> </Item.Header>
<Item.Extra> <Item.Extra>
<Label <ShiftLabel
color={approved ? "green" : rejected ? "red" : "grey"} provider_approved={result.provider_approved}
tag client_approved_start={result.approved_start}
size="small" client_approved_end={result.approved_end}
> />
{approved && "Approved"}
{pending && "Approval Pending"}
{rejected && "Rejected"}
</Label>
</Item.Extra> </Item.Extra>
<Item.Meta> <Item.Meta>
{"At " + {"Scheduled for " +
utc(result.set_start, ISO_8601) utc(result.set_start, ISO_8601)
.local(false) .local(false)
.format(OLD_PEOPLE_TIME_FORMAT)} .format(OLD_PEOPLE_TIME_FORMAT)}
@ -348,14 +374,6 @@ const ClientShiftsView = ({
</Item.Content> </Item.Content>
{!checkedIn && ( {!checkedIn && (
<Item.Extra> <Item.Extra>
<Button
primary
floated="right"
as={Link}
to={`/user/profile/client/edit-shift/${result.uuid}`}
>
Edit
</Button>
<Popup <Popup
content={ content={
<div> <div>
@ -378,14 +396,42 @@ const ClientShiftsView = ({
on="click" on="click"
position="top right" position="top right"
/> />
<Button
primary
floated="right"
as={Link}
to={`/user/profile/client/edit-shift/${result.uuid}`}
>
Edit
</Button>
</Item.Extra> </Item.Extra>
)} )}
{checkedIn && ( {checkedIn && (
<Fragment>
<Item.Content> <Item.Content>
<Item.Description> <Item.Description>
{result.description && ( {result.description && (
<Message>{result.description}</Message> <Message>{result.description}</Message>
)} )}
{result.approved_start && (
<Fragment>
<strong>Client</strong>
<List bulleted>
<List.Item>
{`Approved time start ${utc(
result.approved_start
)
.local(false)
.format(OLD_PEOPLE_TIME_FORMAT)}`}
</List.Item>
<List.Item>{`Approved time end ${utc(
result.approved_end
)
.local(false)
.format(OLD_PEOPLE_TIME_FORMAT)}`}</List.Item>
</List>
</Fragment>
)}
<strong>Provider</strong> <strong>Provider</strong>
<List bulleted> <List bulleted>
<List.Item> <List.Item>
@ -411,6 +457,48 @@ const ClientShiftsView = ({
)} )}
</Item.Description> </Item.Description>
</Item.Content> </Item.Content>
<Item.Extra>
<Popup
content={
<div>
Are you sure you want to delete this shift?<br />
<Button
basic
color="red"
size="small"
onClick={() => deleteCShift(result.uuid)}
>
Confirm Deletion
</Button>
</div>
}
trigger={
<Button color="red" floated="right">
Delete
</Button>
}
on="click"
position="top right"
/>
<Button
primary
floated="right"
as={Link}
to={`/user/profile/client/edit-shift/${result.uuid}`}
>
Adjust Hours
</Button>
{!result.approved_start && (
<Button
color="green"
floated="right"
onClick={() => approveHoursCShift(result)}
>
Approve Hours
</Button>
)}
</Item.Extra>
</Fragment>
)} )}
</Item> </Item>
); );

View File

@ -1,5 +1,5 @@
import { utc, duration, ISO_8601 } from "moment"; import { utc, duration, ISO_8601 } from "moment";
import React, { Component } from "react"; import React, { Component, Fragment } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Redirect } from "react-router-dom"; import { Redirect } from "react-router-dom";
import { import {
@ -27,6 +27,7 @@ import {
getWorkTypeFromPrice, getWorkTypeFromPrice,
getPriceFromPrice getPriceFromPrice
} from "./ProviderShiftsShared"; } from "./ProviderShiftsShared";
import ShiftLabel from "../../Shared/ShiftLabel";
class ProviderShift extends Component { class ProviderShift extends Component {
handleChangePShiftApproval = (uuid, approved) => { handleChangePShiftApproval = (uuid, approved) => {
@ -34,7 +35,7 @@ class ProviderShift extends Component {
this.props.dispatch( this.props.dispatch(
updatePShiftRequest({ updatePShiftRequest({
uuid, uuid,
approved, provider_approved: approved,
action: "", action: "",
chart: null, chart: null,
single: true single: true
@ -48,7 +49,7 @@ class ProviderShift extends Component {
this.props.dispatch( this.props.dispatch(
updatePShiftRequest({ updatePShiftRequest({
uuid: pShiftRequestSuccess.uuid, uuid: pShiftRequestSuccess.uuid,
approved: true, provider_approved: true,
action: "checkin", action: "checkin",
chart: null, chart: null,
single: true single: true
@ -65,7 +66,7 @@ class ProviderShift extends Component {
this.props.dispatch( this.props.dispatch(
updatePShiftRequest({ updatePShiftRequest({
uuid: pShiftRequestSuccess.uuid, uuid: pShiftRequestSuccess.uuid,
approved: true, provider_approved: true,
action: "checkout", action: "checkout",
chart, chart,
single: true single: true
@ -128,22 +129,18 @@ const ProviderShiftFormView = ({
displayDuration = duration(Math.floor(min / 60), "hours").humanize(); displayDuration = duration(Math.floor(min / 60), "hours").humanize();
displayDuration += ` and ${duration(min % 60, "minutes").humanize()}`; displayDuration += ` and ${duration(min % 60, "minutes").humanize()}`;
} }
const approved = !!shift.approved; const approved = !!shift.provider_approved;
const rejected = !shift.approved && shift.approved !== null; const rejected = !shift.provider_approved && shift.provider_approved !== null;
const pending = shift.approved === null; // const pending = shift.provider_approved === null;
return ( return (
<Container> <Container>
<Header>Shift Details</Header> <Header>Shift Details</Header>
<Loader active={isSendingPShiftRequest} /> <Loader active={isSendingPShiftRequest} />
<Label <ShiftLabel
color={approved ? "green" : rejected ? "red" : "grey"} provider_approved={shift.provider_approved}
tag client_approved_start={shift.approved_start}
size="small" client_approved_end={shift.approved_end}
> />
{approved && "Approved"}
{pending && "Approval Pending"}
{rejected && "Rejected"}
</Label>
<Label <Label
circular circular
empty empty
@ -155,7 +152,7 @@ const ProviderShiftFormView = ({
{workType.label} {workType.label}
<List bulleted> <List bulleted>
<List.Item> <List.Item>
{"Scheduled at " + {"Scheduled for " +
utc(shift.set_start, ISO_8601) utc(shift.set_start, ISO_8601)
.local(false) .local(false)
.format(OLD_PEOPLE_TIME_FORMAT)} .format(OLD_PEOPLE_TIME_FORMAT)}
@ -194,6 +191,22 @@ const ProviderShiftFormView = ({
)} )}
</Button.Group> </Button.Group>
)} )}
{shift.approved_start && (
<Fragment>
<strong>Client</strong>
<List bulleted>
<List.Item>
{`Approved time start ${utc(shift.approved_start)
.local(false)
.format(OLD_PEOPLE_TIME_FORMAT)}`}
</List.Item>
<List.Item>{`Approved time end ${utc(shift.approved_end)
.local(false)
.format(OLD_PEOPLE_TIME_FORMAT)}`}</List.Item>
</List>
</Fragment>
)}
<strong>Provider</strong>
<List bulleted> <List bulleted>
{!checkedIn && <List.Item>Pending Check In</List.Item>}{" "} {!checkedIn && <List.Item>Pending Check In</List.Item>}{" "}
{checkedIn && ( {checkedIn && (

View File

@ -1,5 +1,5 @@
import { utc, ISO_8601, duration } from "moment"; import { utc, ISO_8601, duration } from "moment";
import React, { Component } from "react"; import React, { Component, Fragment } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Redirect, Link } from "react-router-dom"; import { Redirect, Link } from "react-router-dom";
import { import {
@ -11,7 +11,8 @@ import {
Segment, Segment,
Pagination, Pagination,
Loader, Loader,
Label Label,
List
} from "semantic-ui-react"; } from "semantic-ui-react";
import { import {
getEmployerFromPrice, getEmployerFromPrice,
@ -28,6 +29,7 @@ import {
getPShiftsRequest, getPShiftsRequest,
updatePShiftRequest updatePShiftRequest
} from "../../../actions/pShift/saga.actions"; } from "../../../actions/pShift/saga.actions";
import ShiftLabel from "../../Shared/ShiftLabel";
class ProviderShifts extends Component { class ProviderShifts extends Component {
constructor(props) { constructor(props) {
@ -41,7 +43,7 @@ class ProviderShifts extends Component {
this.props.dispatch( this.props.dispatch(
getPShiftsRequest({ getPShiftsRequest({
page: this.props.page, page: this.props.page,
approved: this.props.approvalFilter, provider_approved: this.props.approvalFilter,
completed: this.props.completedFilter, completed: this.props.completedFilter,
manage: this.props.clientFilter, manage: this.props.clientFilter,
work_type: this.props.workTypeFilter, work_type: this.props.workTypeFilter,
@ -54,7 +56,7 @@ class ProviderShifts extends Component {
this.props.dispatch( this.props.dispatch(
getPShiftsRequest({ getPShiftsRequest({
page: activePage, page: activePage,
approved: this.props.approvalFilter, provider_approved: this.props.approvalFilter,
completed: this.props.completedFilter, completed: this.props.completedFilter,
manage: this.props.clientFilter, manage: this.props.clientFilter,
work_type: this.props.workTypeFilter, work_type: this.props.workTypeFilter,
@ -68,7 +70,7 @@ class ProviderShifts extends Component {
this.props.dispatch( this.props.dispatch(
getPShiftsRequest({ getPShiftsRequest({
page: 1, page: 1,
approved: value, provider_approved: value,
completed: this.props.completedFilter, completed: this.props.completedFilter,
manage: this.props.clientFilter, manage: this.props.clientFilter,
work_type: this.props.workTypeFilter, work_type: this.props.workTypeFilter,
@ -83,7 +85,7 @@ class ProviderShifts extends Component {
this.props.dispatch( this.props.dispatch(
getPShiftsRequest({ getPShiftsRequest({
page: 1, page: 1,
approved: this.props.approvalFilter, provider_approved: this.props.approvalFilter,
completed: value, completed: value,
manage: this.props.clientFilter, manage: this.props.clientFilter,
work_type: this.props.workTypeFilter, work_type: this.props.workTypeFilter,
@ -98,7 +100,7 @@ class ProviderShifts extends Component {
this.props.dispatch( this.props.dispatch(
getPShiftsRequest({ getPShiftsRequest({
page: 1, page: 1,
approved: this.props.approvalFilter, provider_approved: this.props.approvalFilter,
completed: this.props.completedFilter, completed: this.props.completedFilter,
manage: value, manage: value,
work_type: this.props.workTypeFilter, work_type: this.props.workTypeFilter,
@ -113,7 +115,7 @@ class ProviderShifts extends Component {
this.props.dispatch( this.props.dispatch(
getPShiftsRequest({ getPShiftsRequest({
page: 1, page: 1,
approved: this.props.approvalFilter, provider_approved: this.props.approvalFilter,
completed: this.props.completedFilter, completed: this.props.completedFilter,
manage: this.props.clientFilter, manage: this.props.clientFilter,
work_type: value, work_type: value,
@ -127,7 +129,12 @@ class ProviderShifts extends Component {
handleChangePShiftApproval = (uuid, approved) => { handleChangePShiftApproval = (uuid, approved) => {
return () => { return () => {
this.props.dispatch( this.props.dispatch(
updatePShiftRequest({ uuid, approved, action: "", chart: null }) updatePShiftRequest({
uuid,
provider_approved: approved,
action: "",
chart: null
})
); );
}; };
}; };
@ -244,7 +251,7 @@ const ProviderShiftsView = ({
<Header>Shifts</Header> <Header>Shifts</Header>
<Segment.Group horizontal> <Segment.Group horizontal>
<Segment> <Segment>
{"Filter by Approval "} {"Filter by Provider Approval "}
<Dropdown <Dropdown
inline inline
placeholder={approvalFilter === null ? `All` : `Pending`} placeholder={approvalFilter === null ? `All` : `Pending`}
@ -306,9 +313,10 @@ const ProviderShiftsView = ({
"minutes" "minutes"
).humanize()}`; ).humanize()}`;
} }
const approved = !!result.approved; const approved = !!result.provider_approved;
const rejected = !result.approved && result.approved !== null; const rejected =
const pending = result.approved === null; !result.provider_approved && result.provider_approved !== null;
// const pending = result.provider_approved === null;
return ( return (
<Item key={result.uuid}> <Item key={result.uuid}>
<Item.Content> <Item.Content>
@ -324,18 +332,14 @@ const ProviderShiftsView = ({
{workType.label} {workType.label}
</Item.Header> </Item.Header>
<Item.Extra> <Item.Extra>
<Label <ShiftLabel
color={approved ? "green" : rejected ? "red" : "grey"} provider_approved={result.provider_approved}
tag client_approved_start={result.approved_start}
size="small" client_approved_end={result.approved_end}
> />
{approved && "Approved"}
{pending && "Approval Pending"}
{rejected && "Rejected"}
</Label>
</Item.Extra> </Item.Extra>
<Item.Meta> <Item.Meta>
{"At " + {"Scheduled for " +
utc(result.set_start, ISO_8601) utc(result.set_start, ISO_8601)
.local(false) .local(false)
.format(OLD_PEOPLE_TIME_FORMAT)} .format(OLD_PEOPLE_TIME_FORMAT)}
@ -363,6 +367,23 @@ const ProviderShiftsView = ({
.format(OLD_PEOPLE_TIME_FORMAT)} .format(OLD_PEOPLE_TIME_FORMAT)}
</Item.Meta> </Item.Meta>
)} )}
{result.approved_start && (
<Fragment>
<strong>Client</strong>
<List bulleted>
<List.Item>
{`Approved time start ${utc(result.approved_start)
.local(false)
.format(OLD_PEOPLE_TIME_FORMAT)}`}
</List.Item>
<List.Item>{`Approved time end ${utc(
result.approved_end
)
.local(false)
.format(OLD_PEOPLE_TIME_FORMAT)}`}</List.Item>
</List>
</Fragment>
)}
</Item.Content> </Item.Content>
<Item.Extra> <Item.Extra>
{!checkedIn && ( {!checkedIn && (