You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
4.5 KiB
163 lines
4.5 KiB
import { utc, duration } from "moment"; |
|
import React from "react"; |
|
import DatePicker from "react-datepicker"; |
|
import { Redirect } from "react-router-dom"; |
|
import { |
|
Container, |
|
Dropdown, |
|
Form, |
|
Header, |
|
Message, |
|
TextArea |
|
} from "semantic-ui-react"; |
|
|
|
import Error from "../../Shared/Error"; |
|
import "react-datepicker/dist/react-datepicker.css"; |
|
import "./shiftStartTimeOverrides.css"; |
|
|
|
const CShiftDurationOptions = []; |
|
for (let min = 60; min <= 480; min += 30) { |
|
let displayText = duration(min, "minutes").humanize(); |
|
if (min % 60) { |
|
displayText = duration(Math.floor(min / 60), "hours").humanize(); |
|
displayText += ` and ${duration(min % 60, "minutes").humanize()}`; |
|
} |
|
CShiftDurationOptions.push({ |
|
key: min, |
|
value: min, |
|
text: displayText |
|
}); |
|
} |
|
|
|
export const ClientShiftFormView = ({ |
|
isSendingCShiftRequest, |
|
cShiftRequestErrors, |
|
cShiftRequestSuccess, |
|
user, |
|
employeeChoices, |
|
priceChoices, |
|
employeeUUID, |
|
priceUUID, |
|
startTime, |
|
duration, |
|
note, |
|
selectedShiftDates, |
|
changeSelectedEmployee, |
|
changeSelectedPrice, |
|
changeShiftStartTime, |
|
changeShiftDuration, |
|
changeShiftNote, |
|
handleSelectDate, |
|
onSubmitShifts, |
|
isEditing = false, |
|
isProviderCheckedIn = false |
|
}) => ( |
|
<Container> |
|
<Header> |
|
{!isEditing && "Schedule Shifts"} |
|
{isEditing && !isProviderCheckedIn && "Edit Shift"} |
|
{isEditing && isProviderCheckedIn && "Adjust and Approve Hours"} |
|
</Header> |
|
<Form |
|
loading={isSendingCShiftRequest} |
|
onSubmit={onSubmitShifts} |
|
error={!!cShiftRequestErrors.length} |
|
success={!!cShiftRequestSuccess} |
|
> |
|
<Form.Group widths="equal"> |
|
<Form.Field> |
|
<label>Employee</label> |
|
<Dropdown |
|
onChange={changeSelectedEmployee} |
|
options={employeeChoices} |
|
placeholder="Select employee" |
|
selection |
|
fluid |
|
search |
|
disabled={!!isEditing} |
|
noResultsMessage="No approved employees found." |
|
value={employeeUUID} |
|
/> |
|
</Form.Field> |
|
<Form.Field> |
|
<label>Price</label> |
|
<Dropdown |
|
onChange={changeSelectedPrice} |
|
options={priceChoices} |
|
placeholder="Select price" |
|
selection |
|
fluid |
|
search |
|
disabled={!employeeUUID || !!isEditing} |
|
noResultsMessage="No prices for given employee." |
|
value={priceUUID} |
|
/> |
|
</Form.Field> |
|
<Form.Field> |
|
<label>Shift Start Time</label> |
|
<DatePicker |
|
selected={startTime} |
|
onChange={changeShiftStartTime} |
|
showTimeSelect |
|
showTimeSelectOnly |
|
timeIntervals={30} |
|
dateFormat="LT" |
|
timeFormat="h:mm a" |
|
placeholderText="Select shift start time" |
|
/> |
|
</Form.Field> |
|
<Form.Field> |
|
<label>Shift Duration</label> |
|
<Dropdown |
|
onChange={changeShiftDuration} |
|
options={CShiftDurationOptions} |
|
placeholder="Select duration" |
|
selection |
|
fluid |
|
value={duration} |
|
/> |
|
</Form.Field> |
|
</Form.Group> |
|
<Form.Field> |
|
<label>Note</label> |
|
<TextArea |
|
placeholder="Employee notes" |
|
value={note} |
|
onChange={changeShiftNote} |
|
/> |
|
</Form.Field> |
|
<Form.Field style={{ textAlign: "center" }}> |
|
<label>Dates</label> |
|
<DatePicker |
|
inline |
|
onSelect={handleSelectDate} |
|
highlightDates={selectedShiftDates} |
|
monthsShown={2} |
|
// https://github.com/Hacker0x01/react-datepicker/pull/1360 |
|
peekNextMonth={false} // this is broken? Fixed in PR 1360 |
|
minDate={utc(new Date()).add(1, "day")} |
|
maxDate={utc(new Date()) |
|
.add(1, "month") |
|
.endOf("month")} |
|
/> |
|
</Form.Field> |
|
{!!cShiftRequestErrors.length && ( |
|
<Error header="" error={cShiftRequestErrors[0]} /> |
|
)} |
|
<Message success> |
|
<Message.Header>Add Shift successful!</Message.Header> |
|
<p>Shifts successfully scheduled.</p> |
|
{!!cShiftRequestSuccess && ( |
|
<Redirect to="/user/profile/client/shifts" /> |
|
)} |
|
</Message> |
|
<Form.Button> |
|
{!isEditing && "Schedule Shifts"} |
|
{isEditing && !isProviderCheckedIn && "Edit Shift"} |
|
{isEditing && isProviderCheckedIn && "Adjust and Approve Hours"} |
|
</Form.Button> |
|
</Form> |
|
</Container> |
|
); |
|
|
|
export default ClientShiftFormView;
|
|
|