UNPKG

@kaifronsdal/transcript-viewer

Version:

A web-based viewer for AI conversation transcripts with rollback support

67 lines (59 loc) 2.13 kB
import type { FilterState, TableRow } from '$lib/shared/types'; /** * Extract all transcripts from tree structure using unified TableRow type */ export function extractAllTranscriptsFromTree(nodes: TableRow[]): any[] { const transcripts: any[] = []; for (const node of nodes) { if (node.type === 'transcript') { transcripts.push(node.originalTranscript); // Use originalTranscript from unified type } else if (node.type === 'folder' && node.subRows) { transcripts.push(...extractAllTranscriptsFromTree(node.subRows)); } } return transcripts; } /** * Filter folder tree recursively based on filter state using unified TableRow type */ export function filterFolderTree( nodes: TableRow[], filters: FilterState, filterFunction: (transcript: any) => boolean ): TableRow[] { if (!nodes) { console.warn('⚠️ [DEBUG] filterFolderTree received undefined nodes'); return []; } return nodes .map(node => { if (node.type === 'transcript') { // Apply filters to transcript const transcript = node.originalTranscript; if (!transcript) { console.warn('⚠️ [DEBUG] Transcript node missing originalTranscript:', node); return null; } // Apply search query filter if (filters.searchQuery && !transcript.summary.toLowerCase().includes(filters.searchQuery.toLowerCase())) { return null; } // Apply expression filter if (!filterFunction(transcript)) return null; return node; } else if (node.type === 'folder') { // Recursively filter subRows (unified type) const filteredChildren = filterFolderTree(node.subRows || [], filters, filterFunction); // Only include folder if it has matching children if (filteredChildren.length > 0) { return { ...node, subRows: filteredChildren // Use subRows instead of children }; } return null; } return null; }) .filter((node): node is TableRow => node !== null); }