diff --git a/web_patient/src/components/CarePlan/CarePlanPage.tsx b/web_patient/src/components/CarePlan/CarePlanPage.tsx index 2e110cae..4560906b 100644 --- a/web_patient/src/components/CarePlan/CarePlanPage.tsx +++ b/web_patient/src/components/CarePlan/CarePlanPage.tsx @@ -33,7 +33,7 @@ import { getString } from 'src/services/strings'; import { useStores } from 'src/stores/stores'; import styled from 'styled-components'; import { HelperText } from 'src/components/Forms/FormSection'; -import { formatDateOnly, formatDayOfWeekOnly, formatTimeOfDayOnly, getDayOfWeekCount } from 'shared/time'; +import { formatDayOfWeekOnly, formatTimeOfDayOnly, getDayOfWeekCount } from 'shared/time'; import { sortActivitiesByName, sortActivitySchedulesByDateAndTime } from 'shared/sorting'; import StatefulDialog from 'src/components/common/StatefulDialog'; @@ -242,16 +242,19 @@ export const CarePlanPage: FunctionComponent = observer(() => { }); const renderActivitySchedule = (nextTask: IScheduledActivity): ReactNode => { + const activitySchedule = patientStore.getActivityScheduleById(nextTask.activityScheduleId); + return ( - {formatDateOnly(nextTask.dueDateTime, 'EEE, MMM d') + + {format(nextTask.dueDateTime, 'EEE, MMM d') + ', ' + - formatTimeOfDayOnly(nextTask.dataSnapshot.activitySchedule.timeOfDay)} + formatTimeOfDayOnly((activitySchedule as IActivitySchedule).timeOfDay)} - {nextTask.dataSnapshot.activitySchedule.hasRepetition && ( + + {(activitySchedule as IActivitySchedule).hasRepetition && ( - {getRepeatDayText(nextTask.dataSnapshot.activitySchedule.repeatDayFlags as DayOfWeekFlags)} + {getRepeatDayText((activitySchedule as IActivitySchedule).repeatDayFlags as DayOfWeekFlags)} )} @@ -346,9 +349,8 @@ export const CarePlanPage: FunctionComponent = observer(() => { button component={Link} to={getFormLink(ParameterValues.form.editActivitySchedule, { - [Parameters.activityScheduleId as string]: nextTask - .dataSnapshot.activitySchedule - .activityScheduleId as string, + [Parameters.activityScheduleId as string]: + nextTask.activityScheduleId as string, })}> {renderActivitySchedule(nextTask)} diff --git a/web_patient/src/components/Forms/AddEditActivityForm.tsx b/web_patient/src/components/Forms/AddEditActivityForm.tsx index a5460a5c..c33c6d0b 100644 --- a/web_patient/src/components/Forms/AddEditActivityForm.tsx +++ b/web_patient/src/components/Forms/AddEditActivityForm.tsx @@ -22,7 +22,7 @@ import { TextField, Typography, } from '@mui/material'; -import { isEqual } from 'date-fns'; +import { isEqual, isSameDay } from 'date-fns'; import { action, runInAction } from 'mobx'; import { observer, useLocalObservable } from 'mobx-react'; import React, { Fragment, FunctionComponent } from 'react'; @@ -278,7 +278,7 @@ export const AddEditActivityForm: FunctionComponent = editActivitySchedule.activityScheduleId as string, ); - const nextTaskDueDate = toLocalDateOnly(nextTask?.dueDateTime as Date); + const nextTaskDueDate = nextTask?.dueDateTime as Date; return { ...defaultViewState, @@ -755,6 +755,21 @@ export const AddEditActivityForm: FunctionComponent = }; } + // Check if activityScheduleViewState.displayedDate is today + const currentTime = new Date(); + if (isSameDay(activityScheduleViewState.displayedDate as Date, currentTime)) { + // If so, check if the time is in the past + const timeOfDayDate = new Date(2023, 0, 1, date.getHours(), date.getMinutes(), 0); + const currentTimeDate = new Date(2023, 0, 1, currentTime.getHours(), currentTime.getMinutes(), 0); + if (timeOfDayDate < currentTimeDate) { + return { + valid: false, + error: true, + errorMessage: getString('form_add_edit_activity_schedule_time_of_day_validation_in_past'), + }; + } + } + return { valid: true, error: false, @@ -1038,6 +1053,7 @@ export const AddEditActivityForm: FunctionComponent = activityScheduleViewState.hasRepetition, activityScheduleViewState.repeatDayFlags, ); + const activitySchedulePage = (