[Parecer Juridico]

This commit is contained in:
luisfepsale
2025-10-28 09:56:35 -03:00
parent 9f75feb69a
commit 45ea53b364
8 changed files with 904 additions and 225 deletions
+73
View File
@@ -48,7 +48,10 @@ export const ChatSidebar = ({ isCollapsed, onToggleCollapse, onNewChat, onSelect
const [isCreateFolderOpen, setIsCreateFolderOpen] = useState(false);
const [isDeleteFolderOpen, setIsDeleteFolderOpen] = useState(false);
const [isDeleteChatOpen, setIsDeleteChatOpen] = useState(false);
const [isRenameFolderOpen, setIsRenameFolderOpen] = useState(false);
const [newFolderName, setNewFolderName] = useState("");
const [renamingFolder, setRenamingFolder] = useState<FolderRecord | null>(null);
const [renamedFolderName, setRenamedFolderName] = useState("");
const [deletingFolder, setDeletingFolder] = useState<FolderRecord | null>(null);
const [deletingChat, setDeletingChat] = useState<ChatRecord | null>(null);
const [isLoading, setIsLoading] = useState(false);
@@ -154,6 +157,36 @@ export const ChatSidebar = ({ isCollapsed, onToggleCollapse, onNewChat, onSelect
setIsDeleteFolderOpen(true);
};
const openRenameFolder = (folder: FolderRecord) => {
setRenamingFolder(folder);
setRenamedFolderName(folder.name);
setIsRenameFolderOpen(true);
};
const handleRenameFolder = async () => {
if (renamingFolder && renamedFolderName.trim()) {
try {
await chatService.renameFolder(renamingFolder.id, renamedFolderName);
await loadChatsAndFolders();
setRenamingFolder(null);
setRenamedFolderName("");
setIsRenameFolderOpen(false);
toast({
title: "Pasta renomeada",
description: `Pasta renomeada para "${renamedFolderName}" com sucesso.`,
});
} catch (error: any) {
console.error('Erro ao renomear pasta:', error);
toast({
title: "Erro ao renomear pasta",
description: error.message || "Não foi possível renomear a pasta. Tente novamente.",
variant: "destructive",
});
}
}
};
const toggleFolder = (folderId: string) => {
const newExpanded = new Set(expandedFolders);
if (newExpanded.has(folderId)) {
@@ -318,6 +351,39 @@ export const ChatSidebar = ({ isCollapsed, onToggleCollapse, onNewChat, onSelect
</DialogContent>
</Dialog>
{/* Rename Folder Dialog */}
<Dialog open={isRenameFolderOpen} onOpenChange={setIsRenameFolderOpen}>
<DialogContent className="glass-effect bg-card border-border z-50">
<DialogHeader>
<DialogTitle>Renomear Pasta</DialogTitle>
<DialogDescription>
Digite o novo nome para a pasta "{renamingFolder?.name}".
</DialogDescription>
</DialogHeader>
<div className="space-y-4 py-4">
<div className="space-y-2">
<Label htmlFor="rename-folder-name">Novo Nome</Label>
<Input
id="rename-folder-name"
value={renamedFolderName}
onChange={(e) => setRenamedFolderName(e.target.value)}
placeholder="Ex: Projetos, Estudos..."
onKeyDown={(e) => e.key === "Enter" && handleRenameFolder()}
autoFocus
/>
</div>
</div>
<DialogFooter>
<Button variant="outline" onClick={() => setIsRenameFolderOpen(false)}>
Cancelar
</Button>
<Button onClick={handleRenameFolder} disabled={!renamedFolderName.trim()}>
Renomear
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
{/* Delete Folder Alert */}
<AlertDialog open={isDeleteFolderOpen} onOpenChange={setIsDeleteFolderOpen}>
<AlertDialogContent className="glass-effect bg-card border-border z-50">
@@ -376,6 +442,13 @@ export const ChatSidebar = ({ isCollapsed, onToggleCollapse, onNewChat, onSelect
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="glass-effect bg-popover border-border z-50">
<DropdownMenuItem
className="gap-2"
onClick={() => openRenameFolder(folder)}
>
<Edit className="w-3 h-3" />
Renomear Pasta
</DropdownMenuItem>
<DropdownMenuItem
className="gap-2 text-destructive"
onClick={() => openDeleteFolder(folder)}