Files
kandev/apps/web/hooks/use-command-panel-task-navigation.ts
T
2026-08-05 22:08:57 +01:00

38 lines
1.2 KiB
TypeScript

import { useCallback, useEffect, useState } from "react";
import { useRouter } from "@/lib/routing/client-router";
import { isTaskDetailPath, linkToTask } from "@/lib/links";
import type { Task } from "@/lib/types/http";
import { cancelSidebarTaskReveal, revealSidebarTask } from "@/lib/sidebar/task-navigation";
export function useCommandPanelTaskNavigation(pathname: string, activeTaskId: string | null) {
const router = useRouter();
const [pendingTaskRevealId, setPendingTaskRevealId] = useState<string | null>(null);
const handleTaskNavigation = useCallback(
(task: Task) => {
cancelSidebarTaskReveal();
setPendingTaskRevealId(task.id);
router.push(linkToTask(task.id));
},
[router],
);
useEffect(() => {
if (
!pendingTaskRevealId ||
activeTaskId !== pendingTaskRevealId ||
!isTaskDetailPath(pathname, pendingTaskRevealId)
) {
return;
}
const taskId = pendingTaskRevealId;
void revealSidebarTask(taskId).finally(() => {
setPendingTaskRevealId((current) => (current === taskId ? null : current));
});
}, [activeTaskId, pathname, pendingTaskRevealId]);
return handleTaskNavigation;
}