From 2c1a47d3c0a4f250fd98b63e357573bd5b5e1884 Mon Sep 17 00:00:00 2001 From: Anant Mittal Date: Tue, 28 Mar 2023 14:24:49 -0700 Subject: [PATCH 1/3] Activity Scheduling: Show error message if schedule time is before current time --- .../components/Forms/AddEditActivityForm.tsx | 18 +++++++++++++++++- web_patient/src/services/strings.ts | 2 ++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/web_patient/src/components/Forms/AddEditActivityForm.tsx b/web_patient/src/components/Forms/AddEditActivityForm.tsx index a5460a5c..59ec10d2 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'; @@ -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 = ( Date: Fri, 31 Mar 2023 13:22:36 -0700 Subject: [PATCH 2/3] CarePlanPage.tsx: Render activity schedule properties from activity schedule instead of dataSnapshot --- .../src/components/CarePlan/CarePlanPage.tsx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) 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)} From fb819b219300320846a11a26b39e32813ce71f54 Mon Sep 17 00:00:00 2001 From: Anant Mittal Date: Fri, 31 Mar 2023 13:25:27 -0700 Subject: [PATCH 3/3] AddEditActivityForm.tsx: Remove toLocalDateOnly --- web_patient/src/components/Forms/AddEditActivityForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_patient/src/components/Forms/AddEditActivityForm.tsx b/web_patient/src/components/Forms/AddEditActivityForm.tsx index 59ec10d2..c33c6d0b 100644 --- a/web_patient/src/components/Forms/AddEditActivityForm.tsx +++ b/web_patient/src/components/Forms/AddEditActivityForm.tsx @@ -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,