This commit is contained in:
parent
1ca5e4a3a8
commit
aa5741eafb
8 changed files with 76 additions and 59 deletions
|
|
@ -4,18 +4,16 @@ const { useState: useStateSV, useMemo: useMemoSV } = React;
|
|||
function SearchView({ data, setSelectedRecording, setView }) {
|
||||
const [query, setQuery] = useStateSV('');
|
||||
const [filterSource, setFilterSource] = useStateSV([]);
|
||||
const [filterQuality, setFilterQuality] = useStateSV([]);
|
||||
const [filterHasTranscript, setFilterHasTranscript] = useStateSV(false);
|
||||
const [filterHasHighlights, setFilterHasHighlights] = useStateSV(false);
|
||||
|
||||
const results = useMemoSV(() => {
|
||||
if (!query.trim() && filterSource.length === 0 && filterQuality.length === 0 && !filterHasTranscript && !filterHasHighlights) return [];
|
||||
if (!query.trim() && filterSource.length === 0 && !filterHasTranscript && !filterHasHighlights) return [];
|
||||
const q = query.toLowerCase().trim();
|
||||
const matches = [];
|
||||
|
||||
for (const r of data.recordings) {
|
||||
if (filterSource.length > 0 && !filterSource.includes(r.source)) continue;
|
||||
if (filterQuality.length > 0 && !filterQuality.includes(r.quality)) continue;
|
||||
if (filterHasTranscript && !r.hasTranscript) continue;
|
||||
if (filterHasHighlights && r.highlights.length === 0) continue;
|
||||
|
||||
|
|
@ -31,7 +29,7 @@ function SearchView({ data, setSelectedRecording, setView }) {
|
|||
}
|
||||
|
||||
return matches.sort((a, b) => b.matchingSegments.length - a.matchingSegments.length || b.recording.startTime - a.recording.startTime);
|
||||
}, [query, filterSource, filterQuality, filterHasTranscript, filterHasHighlights, data]);
|
||||
}, [query, filterSource, filterHasTranscript, filterHasHighlights, data]);
|
||||
|
||||
function toggleArr(arr, setArr, val) {
|
||||
setArr(prev => prev.includes(val) ? prev.filter(x => x !== val) : [...prev, val]);
|
||||
|
|
@ -61,9 +59,8 @@ function SearchView({ data, setSelectedRecording, setView }) {
|
|||
}
|
||||
|
||||
const SOURCES = ['portable', 'stationary', 'phone'];
|
||||
const QUALITIES = ['excellent', 'good', 'fair', 'poor'];
|
||||
|
||||
const hasFilters = query.trim() || filterSource.length > 0 || filterQuality.length > 0 || filterHasTranscript || filterHasHighlights;
|
||||
const hasFilters = query.trim() || filterSource.length > 0 || filterHasTranscript || filterHasHighlights;
|
||||
|
||||
return (
|
||||
<div style={{ flex: 1, display: 'flex', flexDirection: 'column', overflow: 'hidden' }}>
|
||||
|
|
@ -97,10 +94,6 @@ function SearchView({ data, setSelectedRecording, setView }) {
|
|||
<FilterChip key={s} label={s} active={filterSource.includes(s)} colorClass={`source-${s}`} onClick={() => toggleArr(filterSource, setFilterSource, s)} />
|
||||
))}
|
||||
<div style={{ width: 1, height: 14, background: 'var(--border)' }} />
|
||||
{QUALITIES.map(q => (
|
||||
<FilterChip key={q} label={q} active={filterQuality.includes(q)} colorClass={`q-${q}`} onClick={() => toggleArr(filterQuality, setFilterQuality, q)} />
|
||||
))}
|
||||
<div style={{ width: 1, height: 14, background: 'var(--border)' }} />
|
||||
<FilterChip label="has transcript" active={filterHasTranscript} colorClass="" onClick={() => setFilterHasTranscript(v => !v)} />
|
||||
<FilterChip label="has highlights" active={filterHasHighlights} colorClass="" onClick={() => setFilterHasHighlights(v => !v)} />
|
||||
</div>
|
||||
|
|
@ -176,7 +169,6 @@ function SearchResultCard({ recording: r, matchingSegments, query, highlightText
|
|||
<span style={{ fontFamily: 'var(--font-mono)', fontSize: 11, color: 'var(--text2)' }}>{dateStr} {timeStr}</span>
|
||||
<span className={`source-pill source-${r.source}`}>{r.source}</span>
|
||||
<span style={{ fontFamily: 'var(--font-mono)', fontSize: 11, color: 'var(--text3)' }}>{dur}</span>
|
||||
<span className={`q-${r.quality}`} style={{ fontFamily: 'var(--font-mono)', fontSize: 11 }}>{r.quality}</span>
|
||||
{r.highlights.length > 0 && (
|
||||
<span style={{ fontFamily: 'var(--font-mono)', fontSize: 10, color: 'var(--amber)' }}>◈ {r.highlights.length}</span>
|
||||
)}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue