From c7ba14c1b252c5b75be4ceef54b6efc4efa2116d Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Thu, 16 Oct 2025 19:52:41 +0000 Subject: [PATCH] feat: Add search to history --- src/components/audio/AudioView.tsx | 305 +++++++++++++++++++---------- 1 file changed, 206 insertions(+), 99 deletions(-) diff --git a/src/components/audio/AudioView.tsx b/src/components/audio/AudioView.tsx index 62a45fe..229bcce 100644 --- a/src/components/audio/AudioView.tsx +++ b/src/components/audio/AudioView.tsx @@ -2,7 +2,8 @@ import { useState, useEffect } from "react"; import { ChatHeader } from "@/components/ChatHeader"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; -import { Upload, Mic, Play, Download, Trash2, FileAudio, Copy } from "lucide-react"; +import { Input } from "@/components/ui/input"; +import { Upload, Mic, Play, Download, Trash2, FileAudio, Copy, Search } from "lucide-react"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { @@ -82,6 +83,8 @@ export const AudioView = () => { const [generatedAudio, setGeneratedAudio] = useState(null); const [transcriptionHistory, setTranscriptionHistory] = useState([]); const [audioHistory, setAudioHistory] = useState([]); + const [transcriptionSearchQuery, setTranscriptionSearchQuery] = useState(""); + const [audioSearchQuery, setAudioSearchQuery] = useState(""); const { toast } = useToast(); // Load history from localStorage @@ -241,6 +244,17 @@ export const AudioView = () => { } }; + // Filter functions + const filteredTranscriptions = transcriptionHistory.filter(item => + item.fileName.toLowerCase().includes(transcriptionSearchQuery.toLowerCase()) || + item.text.toLowerCase().includes(transcriptionSearchQuery.toLowerCase()) + ); + + const filteredAudios = audioHistory.filter(item => + item.voiceLabel.toLowerCase().includes(audioSearchQuery.toLowerCase()) || + item.text.toLowerCase().includes(audioSearchQuery.toLowerCase()) + ); + const handleDownloadTranscription = () => { if (transcriptionResult) { const blob = new Blob([transcriptionResult.text], { type: 'text/plain' }); @@ -262,11 +276,17 @@ export const AudioView = () => {
- + - Transcrição de Áudio + Transcrição Geração de Voz + + Histórico Transcrições + + + Histórico Áudios + {/* Transcription Tab */} @@ -500,103 +520,190 @@ export const AudioView = () => {
)} + + {/* Transcription History Tab */} + +
+
+

Histórico de Transcrições

+

+ {transcriptionHistory.length} {transcriptionHistory.length === 1 ? 'transcrição' : 'transcrições'} +

+
+ +
+ + setTranscriptionSearchQuery(e.target.value)} + className="pl-10" + /> +
+
+ + {filteredTranscriptions.length > 0 ? ( +
+ {filteredTranscriptions.map((item) => ( +
+
+
+
+ +
+
+

{item.fileName}

+

+ {new Date(item.timestamp).toLocaleString('pt-BR')} +

+
+
+
+ + + +
+
+
+

+ {item.text} +

+
+
+ ))} +
+ ) : ( +
+ +

+ {transcriptionSearchQuery + ? "Nenhuma transcrição encontrada com este termo" + : "Nenhuma transcrição no histórico"} +

+
+ )} +
+ + {/* Audio History Tab */} + +
+
+

Histórico de Áudios Gerados

+

+ {audioHistory.length} {audioHistory.length === 1 ? 'áudio' : 'áudios'} +

+
+ +
+ + setAudioSearchQuery(e.target.value)} + className="pl-10" + /> +
+
+ + {filteredAudios.length > 0 ? ( +
+ {filteredAudios.map((item) => ( +
+
+
+
+ +
+
+

{item.voiceLabel}

+

+ {new Date(item.timestamp).toLocaleString('pt-BR')} +

+
+
+
+ + +
+
+
+

+ {item.text} +

+
+
+ +
+
+
+ + 0:00 + +
+
+ ))} +
+ ) : ( +
+ +

+ {audioSearchQuery + ? "Nenhum áudio encontrado com este termo" + : "Nenhum áudio no histórico"} +

+
+ )} + - - {/* History Section */} -
- {/* Transcription History */} - {transcriptionHistory.length > 0 && ( -
-

Histórico de Transcrições

-
- {transcriptionHistory.map((item) => ( -
-
-
- -
-
-

{item.fileName}

-

- {new Date(item.timestamp).toLocaleString('pt-BR')} -

-
-
-
- - -
-
- ))} -
-
- )} - - {/* Audio Generation History */} - {audioHistory.length > 0 && ( -
-

Histórico de Áudios Gerados

-
- {audioHistory.map((item) => ( -
-
-
- -
-
-

{item.voiceLabel}

-

- {new Date(item.timestamp).toLocaleString('pt-BR')} -

-
-
-
- - - -
-
- ))} -
-
- )} -