'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
Upload file {folderId === undefined ? 'File will be added to the root.' : entityType && entityId ? `File will be filed under this ${entityType}.` : 'File will be added to the current folder.'} { if (!file) { // Trailing "batch done" call — invalidate hub caches so the // newly-uploaded file appears in the Recent files / folder // listings without a manual reload. queryClient.invalidateQueries({ queryKey: ['files'] }); queryClient.invalidateQueries({ queryKey: ['documents'] }); setUploadOpen(false); } }} /> ); }