2023-10-06 22:54:24 +00:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
|
|
import { useState } from 'react';
|
|
|
|
|
|
|
|
|
|
import Link from 'next/link';
|
|
|
|
|
|
|
|
|
|
import { Copy, Edit, MoreHorizontal, Trash2 } from 'lucide-react';
|
|
|
|
|
import { useSession } from 'next-auth/react';
|
|
|
|
|
|
2023-12-14 15:28:27 +11:00
|
|
|
import type { Template } from '@documenso/prisma/client';
|
2023-10-06 22:54:24 +00:00
|
|
|
import {
|
|
|
|
|
DropdownMenu,
|
|
|
|
|
DropdownMenuContent,
|
|
|
|
|
DropdownMenuItem,
|
|
|
|
|
DropdownMenuLabel,
|
|
|
|
|
DropdownMenuTrigger,
|
|
|
|
|
} from '@documenso/ui/primitives/dropdown-menu';
|
|
|
|
|
|
|
|
|
|
import { DeleteTemplateDialog } from './delete-template-dialog';
|
|
|
|
|
import { DuplicateTemplateDialog } from './duplicate-template-dialog';
|
|
|
|
|
|
|
|
|
|
export type DataTableActionDropdownProps = {
|
|
|
|
|
row: Template;
|
2024-02-08 12:33:20 +11:00
|
|
|
templateRootPath: string;
|
|
|
|
|
teamId?: number;
|
2023-10-06 22:54:24 +00:00
|
|
|
};
|
|
|
|
|
|
2024-02-08 12:33:20 +11:00
|
|
|
export const DataTableActionDropdown = ({
|
|
|
|
|
row,
|
|
|
|
|
templateRootPath,
|
|
|
|
|
teamId,
|
|
|
|
|
}: DataTableActionDropdownProps) => {
|
2023-10-06 22:54:24 +00:00
|
|
|
const { data: session } = useSession();
|
|
|
|
|
|
|
|
|
|
const [isDeleteDialogOpen, setDeleteDialogOpen] = useState(false);
|
|
|
|
|
const [isDuplicateDialogOpen, setDuplicateDialogOpen] = useState(false);
|
|
|
|
|
|
|
|
|
|
if (!session) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const isOwner = row.userId === session.user.id;
|
2024-02-08 12:33:20 +11:00
|
|
|
const isTeamTemplate = row.teamId === teamId;
|
2023-10-06 22:54:24 +00:00
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<DropdownMenu>
|
|
|
|
|
<DropdownMenuTrigger>
|
|
|
|
|
<MoreHorizontal className="text-muted-foreground h-5 w-5" />
|
|
|
|
|
</DropdownMenuTrigger>
|
|
|
|
|
|
|
|
|
|
<DropdownMenuContent className="w-52" align="start" forceMount>
|
|
|
|
|
<DropdownMenuLabel>Action</DropdownMenuLabel>
|
|
|
|
|
|
2024-02-08 12:33:20 +11:00
|
|
|
<DropdownMenuItem disabled={!isOwner && !isTeamTemplate} asChild>
|
|
|
|
|
<Link href={`${templateRootPath}/${row.id}`}>
|
2023-10-06 22:54:24 +00:00
|
|
|
<Edit className="mr-2 h-4 w-4" />
|
|
|
|
|
Edit
|
|
|
|
|
</Link>
|
|
|
|
|
</DropdownMenuItem>
|
|
|
|
|
|
2024-02-08 12:33:20 +11:00
|
|
|
<DropdownMenuItem
|
|
|
|
|
disabled={!isOwner && !isTeamTemplate}
|
|
|
|
|
onClick={() => setDuplicateDialogOpen(true)}
|
|
|
|
|
>
|
2023-10-06 22:54:24 +00:00
|
|
|
<Copy className="mr-2 h-4 w-4" />
|
|
|
|
|
Duplicate
|
|
|
|
|
</DropdownMenuItem>
|
|
|
|
|
|
2024-02-08 12:33:20 +11:00
|
|
|
<DropdownMenuItem
|
|
|
|
|
disabled={!isOwner && !isTeamTemplate}
|
|
|
|
|
onClick={() => setDeleteDialogOpen(true)}
|
|
|
|
|
>
|
2023-10-06 22:54:24 +00:00
|
|
|
<Trash2 className="mr-2 h-4 w-4" />
|
|
|
|
|
Delete
|
|
|
|
|
</DropdownMenuItem>
|
|
|
|
|
</DropdownMenuContent>
|
|
|
|
|
|
|
|
|
|
<DuplicateTemplateDialog
|
|
|
|
|
id={row.id}
|
2024-02-08 12:33:20 +11:00
|
|
|
teamId={teamId}
|
2023-10-06 22:54:24 +00:00
|
|
|
open={isDuplicateDialogOpen}
|
|
|
|
|
onOpenChange={setDuplicateDialogOpen}
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
<DeleteTemplateDialog
|
|
|
|
|
id={row.id}
|
|
|
|
|
open={isDeleteDialogOpen}
|
|
|
|
|
onOpenChange={setDeleteDialogOpen}
|
|
|
|
|
/>
|
|
|
|
|
</DropdownMenu>
|
|
|
|
|
);
|
|
|
|
|
};
|