aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/search/SearchBox.tsx
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2023-08-27 20:25:55 -0400
committerbobzel <zzzman@gmail.com>2023-08-27 20:25:55 -0400
commit9d6c7f8100de3a952d20ad41ab20872737cb909e (patch)
tree4e0ac145e4f22649b6516819f094e5ba0e6d6829 /src/client/views/search/SearchBox.tsx
parent9405a97acabb70ac671029f61e825ba00a8dc3ce (diff)
lots of cleanup to streamline import orderings (ie packages should not mutually import each other directly or via a chain). change raiseWhenDragged to be keepZWhenDragged and got rid of system wide default.
Diffstat (limited to 'src/client/views/search/SearchBox.tsx')
-rw-r--r--src/client/views/search/SearchBox.tsx110
1 files changed, 4 insertions, 106 deletions
diff --git a/src/client/views/search/SearchBox.tsx b/src/client/views/search/SearchBox.tsx
index 1ceea697a..6b6b0f2ff 100644
--- a/src/client/views/search/SearchBox.tsx
+++ b/src/client/views/search/SearchBox.tsx
@@ -19,6 +19,7 @@ import { fetchRecommendations } from '../newlightbox/utils';
import { IRecommendation, Recommendation } from '../newlightbox/components';
import { Colors } from '../global/globalEnums';
import { SettingsManager } from '../../util/SettingsManager';
+import { SearchUtil } from '../../util/SearchUtil';
const DAMPENING_FACTOR = 0.9;
const MAX_ITERATIONS = 25;
@@ -132,34 +133,6 @@ export class SearchBox extends ViewBoxBaseComponent<SearchBoxProps>() {
* @param {Doc[]} docs - docs to be searched through recursively
* @param {number, Doc => void} func - function to be called on each doc
*
- * This method iterates through an array of docs and all docs within those docs, calling
- * the function func on each doc.
- */
- static foreachRecursiveDoc(docs: Doc[], func: (depth: number, doc: Doc) => void) {
- let newarray: Doc[] = [];
- var depth = 0;
- const visited: Doc[] = [];
- while (docs.length > 0) {
- newarray = [];
- docs.filter(d => d && !visited.includes(d)).forEach(d => {
- visited.push(d);
- const fieldKey = Doc.LayoutFieldKey(d);
- const annos = !Field.toString(Doc.LayoutField(d) as Field).includes('CollectionView');
- const data = d[annos ? fieldKey + '_annotations' : fieldKey];
- data && newarray.push(...DocListCast(data));
- const sidebar = d[fieldKey + '_sidebar'];
- sidebar && newarray.push(...DocListCast(sidebar));
- func(depth, d);
- });
- docs = newarray;
- depth++;
- }
- }
-
- /**
- * @param {Doc[]} docs - docs to be searched through recursively
- * @param {number, Doc => void} func - function to be called on each doc
- *
* This method iterates asynchronously through an array of docs and all docs within those
* docs, calling the function func on each doc.
*/
@@ -213,74 +186,10 @@ export class SearchBox extends ViewBoxBaseComponent<SearchBoxProps>() {
@action
searchCollection(query: string) {
this._selectedResult = undefined;
- this._results = SearchBox.staticSearchCollection(CollectionDockingView.Instance?.rootDoc, query);
+ this._results = SearchUtil.SearchCollection(CollectionDockingView.Instance?.rootDoc, query);
this.computePageRanks();
}
- @action
- static staticSearchCollection(rootDoc: Opt<Doc>, query: string) {
- const blockedTypes = [DocumentType.PRESELEMENT, DocumentType.CONFIG, DocumentType.KVP, DocumentType.SEARCH, DocumentType.FONTICON, DocumentType.BUTTON, DocumentType.SCRIPTING];
- const blockedKeys = [
- 'x',
- 'y',
- 'proto',
- 'width',
- 'layout_autoHeight',
- 'acl-Override',
- 'acl-Guest',
- 'embedContainer',
- 'zIndex',
- 'height',
- 'text_scrollHeight',
- 'text_height',
- 'cloneFieldFilter',
- 'isDataDoc',
- 'text_annotations',
- 'dragFactory_count',
- 'text_noTemplate',
- 'proto_embeddings',
- 'isSystem',
- 'layout_fieldKey',
- 'isBaseProto',
- 'xMargin',
- 'yMargin',
- 'links',
- 'layout',
- 'layout_keyValue',
- 'layout_fitWidth',
- 'type_collection',
- 'title_custom',
- 'freeform_panX',
- 'freeform_panY',
- 'freeform_scale',
- ];
- query = query.toLowerCase();
-
- const results = new Map<Doc, string[]>();
- if (rootDoc) {
- const docs = DocListCast(rootDoc[Doc.LayoutFieldKey(rootDoc)]);
- const docIDs: String[] = [];
- SearchBox.foreachRecursiveDoc(docs, (depth: number, doc: Doc) => {
- const dtype = StrCast(doc.type) as DocumentType;
- if (dtype && !blockedTypes.includes(dtype) && !docIDs.includes(doc[Id]) && depth >= 0) {
- const hlights = new Set<string>();
- SearchBox.documentKeys(doc).forEach(
- key =>
- Field.toString(doc[key] as Field)
- .toLowerCase()
- .includes(query) && hlights.add(key)
- );
- blockedKeys.forEach(key => hlights.delete(key));
-
- if (Array.from(hlights.keys()).length > 0) {
- results.set(doc, Array.from(hlights.keys()));
- }
- }
- docIDs.push(doc[Id]);
- });
- }
- return results;
- }
/**
* This method initializes the page rank of every document to the reciprocal
@@ -374,17 +283,6 @@ export class SearchBox extends ViewBoxBaseComponent<SearchBoxProps>() {
}
/**
- * @param {Doc} doc - doc for which keys are returned
- *
- * This method returns a list of a document doc's keys.
- */
- static documentKeys(doc: Doc) {
- const keys: { [key: string]: boolean } = {};
- Doc.GetAllPrototypes(doc).map(proto => Object.keys(proto).forEach(key => (keys[key] = false)));
- return Array.from(Object.keys(keys));
- }
-
- /**
* This method submits a search with the _searchString as its query and updates
* the results array accordingly.
*/
@@ -518,7 +416,7 @@ export class SearchBox extends ViewBoxBaseComponent<SearchBoxProps>() {
className={className}>
<div className="searchBox-result-title">{title as string}</div>
<div className="searchBox-result-type">{formattedType}</div>
- <div className="searchBox-result-keys" style={{ color: SettingsManager.Instance.userVariantColor }}>
+ <div className="searchBox-result-keys" style={{ color: SettingsManager.userVariantColor }}>
{result[1].join(', ')}
</div>
</div>
@@ -530,7 +428,7 @@ export class SearchBox extends ViewBoxBaseComponent<SearchBoxProps>() {
const recommendationsJSX: JSX.Element[] = this._recommendations.map(props => <Recommendation {...props} />);
return (
- <div className="searchBox-container" style={{ pointerEvents: 'all', color: SettingsManager.Instance.userColor, background: SettingsManager.Instance.userBackgroundColor }}>
+ <div className="searchBox-container" style={{ pointerEvents: 'all', color: SettingsManager.userColor, background: SettingsManager.userBackgroundColor }}>
<div className="searchBox-bar">
{isLinkSearch ? null : (
<select name="type" id="searchBox-type" className="searchBox-type" onChange={this.onSelectChange}>