70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
"use client";
|
|
|
|
import { TaskRenameDialog } from "./task-rename-dialog";
|
|
import { TaskArchiveConfirmDialog } from "./task-archive-confirm-dialog";
|
|
import { TaskDeleteConfirmDialog } from "./task-delete-confirm-dialog";
|
|
|
|
type Target = { id: string; title: string } | null;
|
|
|
|
export type SidebarDialogsActions = {
|
|
renamingTask: Target;
|
|
setRenamingTask: (next: Target) => void;
|
|
handleRenameSubmit: (newTitle: string) => Promise<void> | void;
|
|
archivingTask: Target;
|
|
setArchivingTask: (next: Target) => void;
|
|
isArchiving: boolean;
|
|
handleArchiveConfirm: (opts: { cascade: boolean }) => Promise<void> | void;
|
|
deletingTask: Target;
|
|
setDeletingTask: (next: Target) => void;
|
|
isDeleting: boolean;
|
|
handleDeleteConfirm: (opts: { cascade: boolean }) => Promise<void> | void;
|
|
};
|
|
|
|
export function SidebarDialogs({ actions }: { actions: SidebarDialogsActions }) {
|
|
const {
|
|
renamingTask,
|
|
setRenamingTask,
|
|
handleRenameSubmit,
|
|
archivingTask,
|
|
setArchivingTask,
|
|
isArchiving,
|
|
handleArchiveConfirm,
|
|
deletingTask,
|
|
setDeletingTask,
|
|
isDeleting,
|
|
handleDeleteConfirm,
|
|
} = actions;
|
|
return (
|
|
<>
|
|
<TaskRenameDialog
|
|
open={renamingTask !== null}
|
|
onOpenChange={(open) => {
|
|
if (!open) setRenamingTask(null);
|
|
}}
|
|
currentTitle={renamingTask?.title ?? ""}
|
|
onSubmit={handleRenameSubmit}
|
|
/>
|
|
<TaskArchiveConfirmDialog
|
|
open={archivingTask !== null}
|
|
onOpenChange={(open) => {
|
|
if (!open) setArchivingTask(null);
|
|
}}
|
|
taskTitle={archivingTask?.title ?? ""}
|
|
taskId={archivingTask?.id}
|
|
isArchiving={isArchiving}
|
|
onConfirm={handleArchiveConfirm}
|
|
/>
|
|
<TaskDeleteConfirmDialog
|
|
open={deletingTask !== null}
|
|
onOpenChange={(open) => {
|
|
if (!open) setDeletingTask(null);
|
|
}}
|
|
taskTitle={deletingTask?.title ?? ""}
|
|
taskId={deletingTask?.id}
|
|
isDeleting={isDeleting}
|
|
onConfirm={handleDeleteConfirm}
|
|
/>
|
|
</>
|
|
);
|
|
}
|