diff --git a/app/(dashboard)/shot-status/page.tsx b/app/(dashboard)/shot-status/page.tsx index 570973e..b351a64 100644 --- a/app/(dashboard)/shot-status/page.tsx +++ b/app/(dashboard)/shot-status/page.tsx @@ -30,14 +30,11 @@ async function getAssignableArtists() { }); } +const shotCodeCollator = new Intl.Collator(undefined, { numeric: true, sensitivity: "base" }); + async function getShotsForProject(projectId: string) { const shots = await db.shot.findMany({ where: { projectId }, - orderBy: [ - { episode: { sort: "asc", nulls: "last" } }, - { scene: "asc" }, - { shotNumber: "asc" }, - ], select: { id: true, shotCode: true, @@ -90,6 +87,16 @@ async function getShotsForProject(projectId: string) { }, }); + // Sorted by shot code rather than scene + shotNumber: imports and the + // external API assign shotNumber as "max + 10" (or 0), which needn't match + // the number in the code, so new shots could sink to the bottom. + shots.sort( + (a, b) => + (a.episode === null ? 1 : 0) - (b.episode === null ? 1 : 0) || + shotCodeCollator.compare(a.episode ?? "", b.episode ?? "") || + shotCodeCollator.compare(a.shotCode, b.shotCode) + ); + return shots.map(({ exports, ...shot }) => ({ ...shot, delivery: summariseShotDelivery({