@@ -179,7 +179,7 @@ export function QuizSettingModal({quiz, dueDate: initialDueDate, scheduledStartD
setValidated(new Set(['group', 'feedbackMode']))}
onClick={assign}
>
diff --git a/src/app/components/pages/AssignmentSchedule.tsx b/src/app/components/pages/AssignmentSchedule.tsx
index e0ad3d15cb..37b94e4cea 100644
--- a/src/app/components/pages/AssignmentSchedule.tsx
+++ b/src/app/components/pages/AssignmentSchedule.tsx
@@ -444,7 +444,7 @@ const AssignmentModal = ({user, showSetAssignmentUI, toggleSetAssignmentUI, assi
const yearRange = range(currentYear, currentYear + 5);
- const dueDateInvalid = dueDate && scheduledStartDate ? scheduledStartDate.valueOf() > dueDate.valueOf() : false;
+ const dueDateInvalid = isDefined(dueDate) && ((scheduledStartDate ? (nthHourOf(0, scheduledStartDate).valueOf() > dueDate.valueOf()) : false) || TODAY().valueOf() > dueDate.valueOf());
useEffect(() => {
if (showSetAssignmentUI) setShowGameboardPreview(false);
@@ -502,14 +502,14 @@ const AssignmentModal = ({user, showSetAssignmentUI, toggleSetAssignmentUI, assi
onChange={(e: ChangeEvent) => setScheduledStartDate(e.target.valueAsDate as Date)}
/>
- Due date reminder (optional)
+ Due date reminder
) => setDueDate(e.target.valueAsDate as Date)}
/>
{dueDateInvalid && Due date must be on or after start date. }
- From January 2025, due dates will be required for assignments.
+ Since January 2025, due dates are required for assignments.
{isStaff(user) && Notes (optional):
500) || !isDefined(selectedGameboard) || alreadyAssignedGroupNames.length === selectedGroups.length}
+ disabled={selectedGroups.length === 0 || (isDefined(assignmentNotes) && assignmentNotes.length > 500) || !isDefined(selectedGameboard) || alreadyAssignedGroupNames.length === selectedGroups.length || !dueDate || dueDateInvalid}
>
Assign to group{selectedGroups.length > 1 ? "s" : ""}
diff --git a/src/app/components/pages/SetAssignments.tsx b/src/app/components/pages/SetAssignments.tsx
index 391e6dd39c..c3ceae48ba 100644
--- a/src/app/components/pages/SetAssignments.tsx
+++ b/src/app/components/pages/SetAssignments.tsx
@@ -96,7 +96,7 @@ const AssignGroup = ({groups, board}: AssignGroupProps) => {
}
const yearRange = range(currentYear, currentYear + 5);
- const dueDateInvalid = dueDate && scheduledStartDate ? (nthHourOf(0, scheduledStartDate).valueOf() > dueDate.valueOf() || TODAY().valueOf() > dueDate.valueOf()) : false;
+ const dueDateInvalid = isDefined(dueDate) && ((scheduledStartDate ? (nthHourOf(0, scheduledStartDate).valueOf() > dueDate.valueOf()) : false) || TODAY().valueOf() > dueDate.valueOf());
const startDateInvalid = scheduledStartDate ? TODAY().valueOf() > scheduledStartDate.valueOf() : false;
function setScheduledStartDateAtSevenAM(e: ChangeEvent
) {
@@ -124,14 +124,14 @@ const AssignGroup = ({groups, board}: AssignGroupProps) => {
onChange={setScheduledStartDateAtSevenAM} />
{startDateInvalid && Start date must be in the future. }
- Due date reminder (optional)
+ Due date reminder
) => setDueDate(e.target.valueAsDate as Date)} /> {/* DANGER here with force-casting Date|null to Date */}
{dueDateInvalid && Due date must be on or after start date and in the future. }
{dueDateInvalid && startDateInvalid && }
- From {siteSpecific("Jan", "January")} 2025, due dates will be required for assignments.
+ Since {siteSpecific("Jan", "January")} 2025, due dates are required for assignments.
{isEventLeaderOrStaff(user) && Notes (optional):
{
block color={siteSpecific("secondary", "primary")}
onClick={assign}
role={"button"}
- disabled={selectedGroups.length === 0 || (isDefined(assignmentNotes) && assignmentNotes.length > 500) || dueDateInvalid || startDateInvalid}
+ disabled={selectedGroups.length === 0 || (isDefined(assignmentNotes) && assignmentNotes.length > 500) || !dueDate || dueDateInvalid || startDateInvalid}
>Assign to group{selectedGroups.length > 1 ? "s" : ""}
;
};
diff --git a/src/test/pages/SetAssignments.test.tsx b/src/test/pages/SetAssignments.test.tsx
index 1c01ea5f26..bf2c199a29 100644
--- a/src/test/pages/SetAssignments.test.tsx
+++ b/src/test/pages/SetAssignments.test.tsx
@@ -170,9 +170,10 @@ describe("SetAssignments", () => {
// Check scheduled start date and due date are there
within(modal).getByLabelText("Schedule an assignment start date", {exact: false});
- within(modal).getByLabelText("Due date reminder", {exact: false});
- // TODO check setting scheduled start date and due date - might be best to transition to
- // react-select date picker UI for this functionality anyway
+ const dueDateContainer = within(modal).getByLabelText("Due date reminder", {exact: false});
+ // TODO check setting scheduled start date and due date leads to correctly saved values,
+ // since this currently just checks any form of due date is set.
+ await userEvent.selectOptions(dueDateContainer, "1");
// Add some notes
const testNotes = "Test notes to test groups for test assignments";
@@ -195,7 +196,7 @@ describe("SetAssignments", () => {
expect(requestGroupIds).toEqual([mockActiveGroups[1].id]);
expect(requestAssignment.gameboardId).toEqual(mockGameboard.id);
expect(requestAssignment.notes).toEqual(testNotes);
- expect(requestAssignment.dueDate).not.toBeDefined();
+ expect(requestAssignment.dueDate).toBeDefined();
expect(requestAssignment.scheduledStartDate).not.toBeDefined();
});