From 6efea75a40e621bd0fe90d2cdb43dc81407cb10e Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 2 Mar 2026 14:54:20 +0000 Subject: [PATCH 1/2] Fix stale rubric unsaved warning after save Co-authored-by: Jonathan Bell --- .../[assignment_id]/ManageAssignmentNav.tsx | 13 ++- .../[assignment_id]/rubric/page.tsx | 101 +++++++++++++++++- lib/rubricUnsavedChanges.ts | 36 +++++++ tests/unit/rubric-unsaved-changes.test.ts | 35 ++++++ 4 files changed, 182 insertions(+), 3 deletions(-) create mode 100644 lib/rubricUnsavedChanges.ts create mode 100644 tests/unit/rubric-unsaved-changes.test.ts diff --git a/app/course/[course_id]/manage/assignments/[assignment_id]/ManageAssignmentNav.tsx b/app/course/[course_id]/manage/assignments/[assignment_id]/ManageAssignmentNav.tsx index b218522fd..ef79f31cd 100644 --- a/app/course/[course_id]/manage/assignments/[assignment_id]/ManageAssignmentNav.tsx +++ b/app/course/[course_id]/manage/assignments/[assignment_id]/ManageAssignmentNav.tsx @@ -3,9 +3,10 @@ import { useIsGraderOrInstructor, useIsInstructor } from "@/hooks/useClassProfiles"; import { Box, Button, Flex, Heading, HStack, VStack } from "@chakra-ui/react"; import { Select } from "chakra-react-select"; +import { hasRubricUnsavedChangesFlag, RUBRIC_UNSAVED_CHANGES_WARNING_MESSAGE } from "@/lib/rubricUnsavedChanges"; import NextLink from "next/link"; import { useParams, usePathname, useRouter } from "next/navigation"; -import React, { useState } from "react"; +import React, { useCallback, useState } from "react"; import { FaCalendar, FaChartBar, @@ -106,6 +107,15 @@ export function ManageAssignmentNav({ const pathname = usePathname(); const [selectedPage, setSelectedPage] = useState(""); const router = useRouter(); + const confirmRubricNavigation = useCallback( + (nextHref: string) => { + if (!pathname.includes("/rubric")) return true; + if (pathname === nextHref) return true; + if (!hasRubricUnsavedChangesFlag(String(assignment_id))) return true; + return window.confirm(RUBRIC_UNSAVED_CHANGES_WARNING_MESSAGE); + }, + [assignment_id, pathname] + ); return ( <> @@ -156,6 +166,7 @@ export function ManageAssignmentNav({