"use client"; import { TaskRenameDialog } from "./task-rename-dialog"; import { TaskArchiveConfirmDialog } from "./task-archive-confirm-dialog"; import { TaskDeleteConfirmDialog } from "./task-delete-confirm-dialog"; import { TaskExternalLinkDialog } from "./task-external-link-dialog"; import { TaskGitHubIssueDialog } from "./task-github-issue-dialog"; import { TaskGitHubPRDialog } from "./task-github-pr-dialog"; import type { Repository } from "@/lib/types/http"; import type { SidebarExternalLinkTarget, SidebarLinkTarget, } from "./task-session-sidebar-link-actions"; type Target = { id: string; title: string; executorType?: string | null } | null; type LinkTarget = SidebarLinkTarget | null; export type SidebarDialogsActions = { renamingTask: Target; setRenamingTask: (next: Target) => void; handleRenameSubmit: (newTitle: string) => Promise | void; archivingTask: Target; setArchivingTask: (next: Target) => void; archivingTaskId: string | null; isArchiving: boolean; handleArchiveConfirm: (opts: { cascade: boolean }) => Promise | void; deletingTask: Target; setDeletingTask: (next: Target) => void; isDeleting: boolean; handleDeleteConfirm: (opts: { cascade: boolean }) => Promise | void; linkingPullRequestTask: LinkTarget; setLinkingPullRequestTask: (next: LinkTarget) => void; linkingIssueTask: LinkTarget; setLinkingIssueTask: (next: LinkTarget) => void; linkingExternalIssueTask: SidebarExternalLinkTarget | null; setLinkingExternalIssueTask: (next: SidebarExternalLinkTarget | null) => void; }; export function SidebarDialogs({ actions, repositories, workspaceId, }: { actions: SidebarDialogsActions; repositories: Repository[]; workspaceId: string | null; }) { const { renamingTask, setRenamingTask, handleRenameSubmit, archivingTask, setArchivingTask, archivingTaskId, isArchiving, handleArchiveConfirm, deletingTask, setDeletingTask, isDeleting, handleDeleteConfirm, } = actions; return ( <> { if (!open) setRenamingTask(null); }} currentTitle={renamingTask?.title ?? ""} onSubmit={handleRenameSubmit} /> { if (!open) setArchivingTask(null); }} taskTitle={archivingTask?.title ?? ""} taskId={archivingTask?.id} executorType={archivingTask?.executorType} isArchiving={isArchiving && archivingTask?.id === archivingTaskId} onConfirm={handleArchiveConfirm} /> { if (!open) setDeletingTask(null); }} taskTitle={deletingTask?.title ?? ""} taskId={deletingTask?.id} executorType={deletingTask?.executorType} isDeleting={isDeleting} onConfirm={handleDeleteConfirm} /> ); } export function SidebarLinkDialogs({ actions, repositories, workspaceId, }: { actions: Pick< SidebarDialogsActions, | "linkingPullRequestTask" | "setLinkingPullRequestTask" | "linkingIssueTask" | "setLinkingIssueTask" | "linkingExternalIssueTask" | "setLinkingExternalIssueTask" >; repositories: Repository[]; workspaceId: string | null; }) { const { linkingPullRequestTask, setLinkingPullRequestTask, linkingIssueTask, setLinkingIssueTask, linkingExternalIssueTask, setLinkingExternalIssueTask, } = actions; return ( <> {linkingPullRequestTask && ( { if (!open) setLinkingPullRequestTask(null); }} task={linkingPullRequestTask} repositories={repositories} /> )} {linkingIssueTask && ( { if (!open) setLinkingIssueTask(null); }} task={linkingIssueTask} repositories={repositories} /> )} {linkingExternalIssueTask && workspaceId && ( { if (!open) setLinkingExternalIssueTask(null); }} provider={linkingExternalIssueTask.provider} task={linkingExternalIssueTask.task} workspaceId={workspaceId} /> )} ); }