'use client';
import { useState } from 'react';
import Link from 'next/link';
import { useQueryClient } from '@tanstack/react-query';
import { ChevronDown, FileSignature, Plus, Upload } from 'lucide-react';
import { Button } from '@/components/ui/button';
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
} from '@/components/ui/dialog';
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';
import { FileUploadZone } from '@/components/files/file-upload-zone';
/**
* Dropdown that replaces the bare "+ New document" button on the documents
* hub. Splits the action into the two real flows so reps know which one
* they want before they click:
* - "Upload file" → opens a dialog with FileUploadZone scoped to the
* current folder + entity context. No signing flow attached.
* - "Generate document for signing" → links to /documents/new wizard.
*
* Folder/entity context is passed through so uploaded files land in the
* right place (entity FK + folder_id). Drops do the same via FileUploadZone's
* existing folderId / entity props.
*/
interface NewDocumentMenuProps {
portSlug: string;
/** Selected folderId, or null for the root folder, or undefined when the
* user is on the hub landing page (no folder selected). */
folderId?: string | null;
/** Entity context for system-managed entity folders. When set, uploaded
* files are wired to the right FK column on the files table. */
entityType?: 'client' | 'company' | 'yacht';
entityId?: string;
/** Visual variant: "default" for big banner placement, "sm" for the
* inline-with-breadcrumb placement on folder views. */
size?: 'default' | 'sm';
}
export function NewDocumentMenu({
portSlug,
folderId,
entityType,
entityId,
size = 'default',
}: NewDocumentMenuProps) {
const [uploadOpen, setUploadOpen] = useState(false);
const queryClient = useQueryClient();
return (
<>
setUploadOpen(true)} className="gap-2 py-2.5">
Upload file
Drop or browse — stored in the current folder
Generate document for signing
EOI, contract, or custom — sent for e-signature