diff --git a/frontend/connectivity/slow_down.ts b/frontend/connectivity/slow_down.ts index 66334b7c1..68aa4c521 100644 --- a/frontend/connectivity/slow_down.ts +++ b/frontend/connectivity/slow_down.ts @@ -2,5 +2,5 @@ import { throttle } from "lodash"; /** Too many status updates === too many screen redraws. */ export const slowDown = - (fn: (...args: unknown[]) => unknown) => + Returns>(fn: Fn) => throttle(fn, 600, { leading: false, trailing: true }); diff --git a/frontend/folders/actions.ts b/frontend/folders/actions.ts index 2f042c026..cf50d3c6c 100644 --- a/frontend/folders/actions.ts +++ b/frontend/folders/actions.ts @@ -106,9 +106,8 @@ const isSearchMatch = }; /** Given an input search term, returns folder IDs (number) and Sequence UUIDs - * that match - */ -export function searchFoldersAndSequencesForTerm(props: FolderSearchProps) { + * that match */ +export const searchFoldersAndSequencesForTerm = (props: FolderSearchProps) => { type MappableFolder = FolderNodeMedial | FolderNodeTerminal; const searchTerm = props.input.toLowerCase(); const sequenceSet = new Set(); @@ -128,17 +127,21 @@ export function searchFoldersAndSequencesForTerm(props: FolderSearchProps) { } }; + const filter = (finalNode: FolderUnion): FolderUnion => { + return { + ...finalNode, + content: finalNode.content.filter(seqUUID => sequenceSet.has(seqUUID)) + }; + }; + climb(props.folders, (node: FolderUnion) => { node.content.map(sequenceMaper(node)); const nodes: MappableFolder[] = node.children || []; nodes.map(nodeMapper); }); - return { - folders: Array.from(folderSet), - sequences: Array.from(sequenceSet) - }; -} + return Array.from(folderSet).map(filter); +}; export const toggleFolderOpenState = (id: number) => Promise .resolve(store.dispatch({ type: Actions.FOLDER_TOGGLE, payload: { id } })); diff --git a/frontend/folders/index.tsx b/frontend/folders/index.tsx index ee553f1e4..46657eb1b 100644 --- a/frontend/folders/index.tsx +++ b/frontend/folders/index.tsx @@ -126,6 +126,11 @@ export class RawFolders extends React.Component { + +
+            {JSON.stringify(this.props.folders, undefined, "  ")}
+          
+
; } diff --git a/frontend/resources/reducer.ts b/frontend/resources/reducer.ts index 67ed0e760..a4719901b 100644 --- a/frontend/resources/reducer.ts +++ b/frontend/resources/reducer.ts @@ -187,8 +187,8 @@ export let resourceReducer = }) .add(Actions.FOLDER_SEARCH, (s, { payload }) => { s.index.sequenceFolders.searchTerm = payload; - if (payload && payload.length > 3) { - const { folders } = searchFoldersAndSequencesForTerm({ + if (payload) { + const folders = searchFoldersAndSequencesForTerm({ references: s.index.references, input: payload, folders: s.index.sequenceFolders.folders