|
1 | 1 | import { faMagnifyingGlass, faTimes } from "@fortawesome/free-solid-svg-icons" |
2 | 2 | import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" |
3 | | -import { collection, getDocs, orderBy, query } from "firebase/firestore" |
4 | 3 | import { useTranslation } from "next-i18next" |
5 | 4 | import React, { useCallback, useEffect, useState } from "react" |
6 | 5 | import styled from "styled-components" |
7 | 6 | import { Col, Container, Row } from "../bootstrap" |
8 | | -import { firestore } from "../firebase" |
9 | | - |
10 | | -type Paragraph = { |
11 | | - confidence: number |
12 | | - end: number |
13 | | - start: number |
14 | | - text: string |
15 | | -} |
| 7 | +import { Paragraph, formatMilliseconds } from "./transcription" |
16 | 8 |
|
17 | 9 | const ClearButton = styled(FontAwesomeIcon)` |
18 | 10 | position: absolute; |
@@ -54,7 +46,7 @@ const TranscriptBottom = styled(Container)` |
54 | 46 | ` |
55 | 47 |
|
56 | 48 | const TranscriptContainer = styled(Container)` |
57 | | - max-height: 460px; |
| 49 | + max-height: 483px; |
58 | 50 | overflow-y: auto; |
59 | 51 | background-color: #ffffff; |
60 | 52 | ` |
@@ -115,57 +107,32 @@ const SearchWrapper = styled.div` |
115 | 107 | ` |
116 | 108 |
|
117 | 109 | export const Transcriptions = ({ |
118 | | - handleTranscriptData, |
| 110 | + transcriptData, |
119 | 111 | setCurTimeVideo, |
120 | 112 | videoLoaded, |
121 | | - videoRef, |
122 | | - videoTranscriptionId |
| 113 | + videoRef |
123 | 114 | }: { |
124 | | - handleTranscriptData: (data: any) => void |
| 115 | + transcriptData: Paragraph[] |
125 | 116 | setCurTimeVideo: any |
126 | 117 | videoLoaded: boolean |
127 | 118 | videoRef: any |
128 | | - videoTranscriptionId: string |
129 | 119 | }) => { |
130 | 120 | const { t } = useTranslation(["common", "hearing"]) |
131 | 121 | const [highlightedId, setHighlightedId] = useState(-1) |
132 | | - const [transcriptData, setTranscriptData] = useState<Paragraph[]>([]) |
133 | 122 | const [searchTerm, setSearchTerm] = useState("") |
134 | | - const vid = videoTranscriptionId || "prevent FirebaseError" |
135 | | - |
136 | | - const subscriptionRef = collection( |
137 | | - firestore, |
138 | | - `transcriptions/${vid}/paragraphs` |
139 | | - ) |
140 | | - |
141 | | - const fetchTranscriptionData = useCallback(async () => { |
142 | | - let docList: any[] = [] |
143 | | - |
144 | | - const q = query(subscriptionRef, orderBy("start")) |
145 | | - const querySnapshot = await getDocs(q) |
146 | | - |
147 | | - querySnapshot.forEach(doc => { |
148 | | - // doc.data() is never undefined for query doc snapshots |
149 | | - docList.push(doc.data()) |
150 | | - }) |
151 | | - |
152 | | - if (transcriptData.length === 0 && docList.length != 0) { |
153 | | - setTranscriptData(docList) |
154 | | - handleTranscriptData(docList) |
155 | | - } |
156 | | - }, [subscriptionRef, transcriptData]) |
| 123 | + const [filteredData, setFilteredData] = useState<Paragraph[]>([]) |
157 | 124 |
|
158 | 125 | const handleClearInput = () => { |
159 | 126 | setSearchTerm("") |
160 | 127 | } |
161 | 128 |
|
162 | 129 | useEffect(() => { |
163 | | - fetchTranscriptionData() |
164 | | - }, [fetchTranscriptionData]) |
165 | | - |
166 | | - const filteredData = transcriptData.filter(el => |
167 | | - el.text.toLowerCase().includes(searchTerm.toLowerCase()) |
168 | | - ) |
| 130 | + setFilteredData( |
| 131 | + transcriptData.filter(el => |
| 132 | + el.text.toLowerCase().includes(searchTerm.toLowerCase()) |
| 133 | + ) |
| 134 | + ) |
| 135 | + }, [transcriptData, searchTerm]) |
169 | 136 |
|
170 | 137 | useEffect(() => { |
171 | 138 | const handleTimeUpdate = () => { |
@@ -261,23 +228,6 @@ function TranscriptItem({ |
261 | 228 | setCurTimeVideo(valSeconds) |
262 | 229 | } |
263 | 230 |
|
264 | | - const formatMilliseconds = (ms: number) => { |
265 | | - const totalSeconds = Math.floor(ms / 1000) |
266 | | - const hours = Math.floor(totalSeconds / 3600) |
267 | | - const minutes = Math.floor((totalSeconds % 3600) / 60) |
268 | | - const seconds = totalSeconds % 60 |
269 | | - |
270 | | - const formattedHours = String(hours).padStart(2, "0") |
271 | | - const formattedMinutes = String(minutes).padStart(2, "0") |
272 | | - const formattedSeconds = String(seconds).padStart(2, "0") |
273 | | - |
274 | | - if (hours >= 1) { |
275 | | - return `${formattedHours}:${formattedMinutes}:${formattedSeconds}` |
276 | | - } else { |
277 | | - return `${formattedMinutes}:${formattedSeconds}` |
278 | | - } |
279 | | - } |
280 | | - |
281 | 231 | const isHighlighted = (index: number): boolean => { |
282 | 232 | return index === highlightedId |
283 | 233 | } |
|
0 commit comments