agent-ecosystem/src/features/agent-graph/renderer/hooks/useGraphSurfaceInteractions.tsx
2026-05-17 14:18:54 +03:00

88 lines
3.1 KiB
TypeScript

import { useMemo } from 'react';
import { useGraphChangeReviewDialog } from './useGraphChangeReviewDialog';
import { useGraphCreateTaskDialog } from './useGraphCreateTaskDialog';
import { useGraphMemberDetailDialog } from './useGraphMemberDetailDialog';
import { useGraphSendMessageDialog } from './useGraphSendMessageDialog';
import { useGraphTaskActions } from './useGraphTaskActions';
import { useGraphTaskDetailDialog } from './useGraphTaskDetailDialog';
import type {
MemberActivityFilter,
MemberDetailTab,
} from '@renderer/components/team/members/memberDetailTypes';
interface OpenProfileOptions {
initialActivityFilter?: MemberActivityFilter;
initialTab?: MemberDetailTab;
}
export function useGraphSurfaceInteractions(teamName: string): {
dialogs: React.ReactNode;
onApproveTask: (taskId: string) => void;
onCancelTask: (taskId: string) => void;
onCompleteTask: (taskId: string) => void;
onDeleteTask: (taskId: string) => void;
onMoveBackToDone: (taskId: string) => void;
onRequestChanges: (taskId: string) => void;
onRequestReview: (taskId: string) => void;
onStartTask: (taskId: string) => void;
openCreateTask: (owner?: string) => void;
openMemberProfile: (memberName: string, options?: OpenProfileOptions) => void;
openSendMessage: (memberName?: string) => void;
openTaskChanges: (taskId: string, filePath?: string) => void;
openTaskDetail: (taskId: string) => void;
} {
const changeReview = useGraphChangeReviewDialog(teamName);
const createTask = useGraphCreateTaskDialog(teamName);
const sendMessage = useGraphSendMessageDialog(teamName);
const taskActions = useGraphTaskActions(teamName);
const taskDetail = useGraphTaskDetailDialog(teamName, {
onDeleteTask: taskActions.onDeleteTask,
onViewChanges: changeReview.openTaskChanges,
});
const memberDetail = useGraphMemberDetailDialog(teamName, {
onAssignTask: createTask.openCreateTaskDialog,
onSendMessage: sendMessage.openSendMessage,
onTaskClick: taskDetail.openTaskDetail,
onViewMemberChanges: changeReview.openMemberChanges,
});
const dialogs = useMemo(
() => (
<>
{createTask.dialog}
{sendMessage.dialog}
{taskActions.dialog}
{taskDetail.dialog}
{memberDetail.dialog}
{changeReview.dialog}
</>
),
[
changeReview.dialog,
createTask.dialog,
memberDetail.dialog,
sendMessage.dialog,
taskActions.dialog,
taskDetail.dialog,
]
);
return {
dialogs,
onApproveTask: taskActions.onApproveTask,
onCancelTask: taskActions.onCancelTask,
onCompleteTask: taskActions.onCompleteTask,
onDeleteTask: taskActions.onDeleteTask,
onMoveBackToDone: taskActions.onMoveBackToDone,
onRequestChanges: taskActions.onRequestChanges,
onRequestReview: taskActions.onRequestReview,
onStartTask: taskActions.onStartTask,
openCreateTask: createTask.openCreateTaskDialog,
openMemberProfile: memberDetail.openMemberProfile,
openSendMessage: sendMessage.openSendMessage,
openTaskChanges: changeReview.openTaskChanges,
openTaskDetail: taskDetail.openTaskDetail,
};
}