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 = (