| import React from "react"; | |
| import { Button } from "@/components/ui/button"; | |
| import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, DropdownMenuSeparator } from "@/components/ui/dropdown-menu"; | |
| import { Input as InputField } from "@/components/ui/input"; | |
| import { Paperclip, Upload, Link2 } from "lucide-react"; | |
| interface AttachmentDropdownProps { | |
| isUrlInputOpen: boolean; | |
| setIsUrlInputOpen: (open: boolean) => void; | |
| urlInput: string; | |
| setUrlInput: (url: string) => void; | |
| handleAttachmentFileUpload: (event: React.ChangeEvent<HTMLInputElement>) => void; | |
| handleAttachmentUrlUpload: () => void; | |
| } | |
| export const AttachmentDropdown = React.memo(({ | |
| isUrlInputOpen, | |
| setIsUrlInputOpen, | |
| urlInput, | |
| setUrlInput, | |
| handleAttachmentFileUpload, | |
| handleAttachmentUrlUpload | |
| }: AttachmentDropdownProps) => ( | |
| <DropdownMenu> | |
| <DropdownMenuTrigger asChild> | |
| <Button | |
| variant="ghost" | |
| size="icon" | |
| className="h-8 w-8" | |
| > | |
| <Paperclip className="h-4 w-4" /> | |
| </Button> | |
| </DropdownMenuTrigger> | |
| <DropdownMenuContent align="start" className="w-[300px]"> | |
| <DropdownMenuItem | |
| onSelect={() => { | |
| const input = document.createElement("input"); | |
| input.type = "file"; | |
| input.multiple = true; | |
| input.accept = ".pdf,.doc,.docx,.txt,.jpg,.jpeg,.png,.gif,.mp3,.mp4,.wav,.ogg"; | |
| input.onchange = (e) => handleAttachmentFileUpload(e as unknown as React.ChangeEvent<HTMLInputElement>); | |
| input.click(); | |
| }} | |
| > | |
| <Upload className="h-4 w-4 mr-2" /> | |
| Upload Files | |
| </DropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <DropdownMenuItem onSelect={(e) => { | |
| e.preventDefault(); | |
| setIsUrlInputOpen(true); | |
| }}> | |
| <Link2 className="h-4 w-4 mr-2" /> | |
| Add URLs | |
| </DropdownMenuItem> | |
| {isUrlInputOpen && ( | |
| <div className="p-2 flex gap-2"> | |
| <InputField | |
| value={urlInput} | |
| onChange={(e) => setUrlInput(e.target.value)} | |
| placeholder="Enter URLs (comma-separated)" | |
| className="flex-1" | |
| /> | |
| <Button size="sm" onClick={handleAttachmentUrlUpload}> | |
| Add | |
| </Button> | |
| </div> | |
| )} | |
| </DropdownMenuContent> | |
| </DropdownMenu> | |
| )); | |
| AttachmentDropdown.displayName = "AttachmentDropdown"; |