Added deadline to status table
Deploy / deploy (push) Failing after 2m44s

This commit is contained in:
twotalesanimation
2026-06-05 19:32:42 +02:00
parent b187e1b16e
commit fcd19d2ca0
2 changed files with 40 additions and 1 deletions
@@ -65,6 +65,7 @@ interface ShotStatusClientProps {
selectedProjectId: string | null;
selectedProject: Project | null;
shots: ShotRow[];
episodeDueDates: { episode: string; dueDate: Date | string }[];
canManage: boolean;
}
@@ -388,11 +389,23 @@ export function ShotStatusClient({
selectedProjectId,
selectedProject,
shots,
episodeDueDates,
canManage,
}: ShotStatusClientProps) {
const router = useRouter();
const { toast } = useToast();
// Restore last selected project if no project is currently selected
useEffect(() => {
if (!selectedProjectId) {
const saved = localStorage.getItem("shotStatus:lastProjectId");
if (saved && projects.some((p) => p.id === saved)) {
router.replace(`/shot-status?projectId=${saved}`);
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
const [collapsedEpisodes, setCollapsedEpisodes] = useState<Set<string>>(new Set());
const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());
const [dueDateDialogOpen, setDueDateDialogOpen] = useState(false);
@@ -405,6 +418,7 @@ export function ShotStatusClient({
});
const handleProjectChange = (id: string) => {
localStorage.setItem("shotStatus:lastProjectId", id);
setSelectedIds(new Set());
router.push(`/shot-status?projectId=${id}`);
};
@@ -454,6 +468,10 @@ export function ShotStatusClient({
})()
: [];
const episodeDueDateMap = new Map(
episodeDueDates.map((e) => [e.episode, new Date(e.dueDate)])
);
const statusCounts = shots.reduce(
(acc, s) => {
acc[s.status] = (acc[s.status] ?? 0) + 1;
@@ -557,6 +575,8 @@ export function ShotStatusClient({
const episodeIds = episodeShots.map((s) => s.id);
const allEpSelected = episodeIds.every((id) => selectedIds.has(id));
const someEpSelected = episodeIds.some((id) => selectedIds.has(id));
const epDueDate = episodeDueDateMap.get(episode);
const epIsOverdue = epDueDate && epDueDate < new Date();
return (
<div key={episode}>
<div className="flex items-center gap-2 px-4 py-3 bg-zinc-800/60 hover:bg-zinc-800/90 transition-colors">
@@ -581,6 +601,15 @@ export function ShotStatusClient({
<span className="text-xs text-zinc-500 font-normal">
{episodeShots.length} shot{episodeShots.length !== 1 ? "s" : ""}
</span>
{epDueDate && (
<span className={cn(
"flex items-center gap-1 text-xs",
epIsOverdue ? "text-red-400" : "text-zinc-400"
)}>
<Calendar className="h-3 w-3" />
{format(epDueDate, "d MMM yyyy")}
</span>
)}
</button>
</div>
{!collapsed && (