Skip to content

Commit

Permalink
(feat) O3-3200 - service queues - prevent setting of queue entry's st…
Browse files Browse the repository at this point in the history
…art time to before previous queue entry's (#1254)
  • Loading branch information
chibongho authored Jul 29, 2024
1 parent 080c7ea commit 40ea44c
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export function QueueTableActionCell({ queueEntry }: QueueTableCellComponentProp
size={isDesktop(layout) ? 'sm' : 'lg'}>
{t('transition', 'Transition')}
</Button>
<OverflowMenu aria-label="Actions menu" size={isDesktop(layout) ? 'sm' : 'lg'} flipped>
<OverflowMenu aria-label="Actions menu" size={isDesktop(layout) ? 'sm' : 'lg'} align="left" flipped>
<OverflowMenuItem
className={styles.menuItem}
aria-label={t('edit', 'Edit')}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,13 +172,33 @@ export const QueueEntryActionModal: React.FC<QueueEntryActionModalProps> = ({
});
};

const isTimeInvalid = useMemo(() => {
// non-null if the selected date+time is invalid
const timeInvalidMessage = useMemo(() => {
const now = new Date();
const startAtDate = new Date(formState.transitionDate);
const [hour, minute] = convertTime12to24(formState.transitionTime, formState.transitionTimeFormat);
startAtDate.setHours(hour, minute, 0, 0);
return startAtDate > now;
}, [formState.transitionDate, formState.transitionTime, formState.transitionTimeFormat]);

const previousQueueEntryStartTimeStr = queueEntry.previousQueueEntry?.startedAt;
const previousQueueEntryStartTime = previousQueueEntryStartTimeStr
? new Date(previousQueueEntryStartTimeStr)
: null;

if (startAtDate > now) {
return t('timeCannotBeInFuture', 'Time cannot be in the future');
}
if (startAtDate <= previousQueueEntryStartTime) {
return t(
'timeCannotBePriorToPreviousQueueEntry',
'Time cannot be before start of previous queue entry: {{time}}',
{
time: previousQueueEntryStartTime.toLocaleString(),
interpolation: { escapeValue: false },
},
);
}
return null;
}, [formState.transitionDate, formState.transitionTime, formState.transitionTimeFormat, t]);

const selectedPriorityIndex = priorities?.findIndex((p) => p.uuid == formState.selectedPriority);

Expand Down Expand Up @@ -329,8 +349,8 @@ export const QueueEntryActionModal: React.FC<QueueEntryActionModalProps> = ({
onChange={(event) => setTransitionTime(event.target.value)}
pattern={time12HourFormatRegexPattern}
value={formState.transitionTime}
invalid={isTimeInvalid}
invalidText={t('timeCannotBeInFuture', 'Time cannot be in the future')}
invalid={timeInvalidMessage != null}
invalidText={timeInvalidMessage}
disabled={!formState.modifyDefaultTransitionDateTime}>
<TimePickerSelect
id="visitStartTimeSelect"
Expand Down

0 comments on commit 40ea44c

Please sign in to comment.