import React, { useEffect, useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { Card, CardContent, CardHeader, CardTitle, CardDescription, } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Folder, Search as SearchIcon } from "lucide-react"; import { apiRequest } from "@/lib/queryClient"; import { useToast } from "@/hooks/use-toast"; import type { CloudFolder } from "@repo/db/types"; import FolderPanel from "@/components/cloud-storage/folder-panel"; // ----------------------------- // Reusable NewFolderModal // ----------------------------- export type NewFolderModalProps = { isOpen: boolean; initialName?: string; title?: string; submitLabel?: string; onClose: () => void; onSubmit: (name: string) => Promise | void; }; export function NewFolderModal({ isOpen, initialName = "", title = "New Folder", submitLabel = "Create", onClose, onSubmit, }: NewFolderModalProps) { const [name, setName] = useState(initialName); const [isSubmitting, setIsSubmitting] = useState(false); useEffect(() => { setName(initialName); }, [initialName, isOpen]); if (!isOpen) return null; return (
{ if (!isSubmitting) onClose(); }} />

{title}

{ e.preventDefault(); if (!name.trim()) return; try { setIsSubmitting(true); await onSubmit(name.trim()); } finally { setIsSubmitting(false); } }} >
setName(e.target.value)} className="w-full rounded-md border px-3 py-2" placeholder="Enter folder name" disabled={isSubmitting} />
); }