From 88b06945c8a1fcb7bc518de878a4894de70dda94 Mon Sep 17 00:00:00 2001 From: bobzel Date: Sat, 22 Aug 2020 14:21:41 -0400 Subject: major overhaul of search to avoid writing anything to filtered documents and to make the UI work properly. --- src/client/views/collections/CollectionSubView.tsx | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'src/client/views/collections/CollectionSubView.tsx') diff --git a/src/client/views/collections/CollectionSubView.tsx b/src/client/views/collections/CollectionSubView.tsx index a1dd905c2..c73159084 100644 --- a/src/client/views/collections/CollectionSubView.tsx +++ b/src/client/views/collections/CollectionSubView.tsx @@ -111,6 +111,9 @@ export function CollectionSubView(schemaCtor: (doc: Doc) => T, moreProps?: return this.props.ignoreFields?.includes("_docFilters") ? [] : [...this.props.docFilters(), ...Cast(this.props.Document._docFilters, listSpec("string"), [])]; } + searchFilterDocs = () => { + return [...this.props.searchFilterDocs(), ...DocListCast(this.props.Document._searchFilterDocs)]; + } @computed get childDocs() { let rawdocs: (Doc | Promise)[] = []; if (this.dataField instanceof Doc) { // if collection data is just a document, then promote it to a singleton list; @@ -128,34 +131,31 @@ export function CollectionSubView(schemaCtor: (doc: Doc) => T, moreProps?: const viewSpecScript = Cast(this.props.Document.viewSpecScript, ScriptField); const childDocs = viewSpecScript ? docs.filter(d => viewSpecScript.script.run({ doc: d }, console.log).result) : docs; - let searchDocs = DocListCast(this.props.Document._searchDocs); - + let searchDocs = this.searchFilterDocs(); let docsforFilter: Doc[] = childDocs; - if (searchDocs !== undefined && searchDocs.length > 0) { + if (searchDocs.length > 0) { docsforFilter = []; const docRangeFilters = this.props.ignoreFields?.includes("_docRangeFilters") ? [] : Cast(this.props.Document._docRangeFilters, listSpec("string"), []); - console.log(searchDocs); searchDocs = DocUtils.FilterDocs(searchDocs, this.docFilters(), docRangeFilters, viewSpecScript); childDocs.forEach((d) => { + let notFiltered = searchDocs.includes(d) || d.z; if (d.data !== undefined) { - let newdocs = DocListCast(d.data); - if (newdocs.length > 0) { - let displaycheck = false; + let subDocs = DocListCast(d.data); + if (subDocs.length > 0) { let newarray: Doc[] = []; - while (newdocs.length > 0) { + while (subDocs.length > 0 && !notFiltered) { newarray = []; - newdocs.forEach((t) => { + subDocs.forEach((t) => { + notFiltered = notFiltered || searchDocs.includes(t); DocListCast(t.data).forEach((newdoc) => newarray.push(newdoc)); - displaycheck = displaycheck || searchDocs.includes(t); }); - newdocs = newarray; + subDocs = newarray; } - displaycheck && docsforFilter.push(d); } } - searchDocs.includes(d) && docsforFilter.push(d); + notFiltered && docsforFilter.push(d); }); return docsforFilter; } -- cgit v1.2.3-70-g09d2