aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/frontend/src/main/components/search
diff options
context:
space:
mode:
authorMarcin Aman <marcin.aman@gmail.com>2020-10-16 13:39:02 +0200
committerGitHub <noreply@github.com>2020-10-16 13:39:02 +0200
commitc482ed6e688cb9e5105aa0d686613c8ad81905fb (patch)
tree385a9bc8f8144c1c05af4ccccf08afbbd270b5ee /plugins/base/frontend/src/main/components/search
parent991913dc02f342615f33511f96891e5db7487cd4 (diff)
downloaddokka-c482ed6e688cb9e5105aa0d686613c8ad81905fb.tar.gz
dokka-c482ed6e688cb9e5105aa0d686613c8ad81905fb.tar.bz2
dokka-c482ed6e688cb9e5105aa0d686613c8ad81905fb.zip
Explicit fallback in searchbar (#1559)
Diffstat (limited to 'plugins/base/frontend/src/main/components/search')
-rw-r--r--plugins/base/frontend/src/main/components/search/dokkaFuzzyFilter.tsx24
-rw-r--r--plugins/base/frontend/src/main/components/search/search.tsx2
-rw-r--r--plugins/base/frontend/src/main/components/search/searchResultRow.tsx7
-rw-r--r--plugins/base/frontend/src/main/components/search/types.ts8
4 files changed, 20 insertions, 21 deletions
diff --git a/plugins/base/frontend/src/main/components/search/dokkaFuzzyFilter.tsx b/plugins/base/frontend/src/main/components/search/dokkaFuzzyFilter.tsx
index 6d40336f..98fb1455 100644
--- a/plugins/base/frontend/src/main/components/search/dokkaFuzzyFilter.tsx
+++ b/plugins/base/frontend/src/main/components/search/dokkaFuzzyFilter.tsx
@@ -1,5 +1,5 @@
import {Select} from "@jetbrains/ring-ui";
-import {Option, OptionWithHighlightComponent, OptionWithSearchResult, SearchRank} from "./types";
+import {Option, OptionWithHighlightComponent, OptionWithSearchResult} from "./types";
import fuzzyHighlight from '@jetbrains/ring-ui/components/global/fuzzy-highlight.js'
import React from "react";
import {SearchResultRow, signatureFromSearchResult} from "./searchResultRow";
@@ -8,7 +8,7 @@ import _ from "lodash";
const orderRecords = (records: OptionWithSearchResult[], searchPhrase: string): OptionWithSearchResult[] => {
return records.sort((a: OptionWithSearchResult, b: OptionWithSearchResult) => {
//Prefer higher rank
- const byRank = b.rank - a.rank
+ const byRank = a.rank - b.rank
if(byRank !== 0){
return byRank
}
@@ -70,23 +70,29 @@ export class DokkaFuzzyFilterComponent extends Select {
}
}
- getListItems(rawFilterString: string, _: Option[]) {
+ getListItems(rawFilterString: string, e: Option[]) {
const filterPhrase = (rawFilterString ? rawFilterString : '').trim()
const matchedRecords = this.props.data
.map((record: Option) => {
- const bySearchKey = fuzzyHighlight(filterPhrase, record.searchKey, false)
- if(bySearchKey.matched){
+ const searched = record.searchKeys.map((value, index) => {
return {
- ...bySearchKey,
+ ...fuzzyHighlight(filterPhrase, value, false),
...record,
- rank: SearchRank.SearchKeyMatch
+ rank: index
}
+ }).filter((e) => e.matched)
+
+ const first = _.head(searched)
+
+ if(first){
+ return first
}
+
return {
- ...fuzzyHighlight(filterPhrase, record.name, false),
+ matched: false,
...record,
- rank: SearchRank.NameMatch
}
+
})
.filter((record: OptionWithSearchResult) => record.matched && (hasAnyMatchedPhraseLongerThan(record, 3) || filterPhrase.length < 3))
diff --git a/plugins/base/frontend/src/main/components/search/search.tsx b/plugins/base/frontend/src/main/components/search/search.tsx
index ba7f6093..3616a396 100644
--- a/plugins/base/frontend/src/main/components/search/search.tsx
+++ b/plugins/base/frontend/src/main/components/search/search.tsx
@@ -47,7 +47,7 @@ export const WithFuzzySearchFilter = () => {
if (pages) {
data = pages.map((page, i) => ({
...page,
- label: page.searchKey,
+ label: page.name,
key: i + 1,
type: page.kind,
rgItemType: List.ListProps.Type.CUSTOM
diff --git a/plugins/base/frontend/src/main/components/search/searchResultRow.tsx b/plugins/base/frontend/src/main/components/search/searchResultRow.tsx
index 5910eec4..b9dbf482 100644
--- a/plugins/base/frontend/src/main/components/search/searchResultRow.tsx
+++ b/plugins/base/frontend/src/main/components/search/searchResultRow.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import {OptionWithSearchResult, SearchProps, SearchRank} from "./types";
+import {OptionWithSearchResult, SearchProps} from "./types";
import _ from "lodash";
type HighlighterProps = {
@@ -11,10 +11,7 @@ const Highlighter: React.FC<HighlighterProps> = ({label}: HighlighterProps) => {
}
export const signatureFromSearchResult = (searchResult: OptionWithSearchResult): string => {
- if(searchResult.rank == SearchRank.SearchKeyMatch){
- return searchResult.name.replace(searchResult.searchKey, searchResult.highlight)
- }
- return searchResult.highlight
+ return searchResult.name.replace(searchResult.searchKeys[searchResult.rank], searchResult.highlight)
}
export const SearchResultRow: React.FC<SearchProps> = ({searchResult}: SearchProps) => {
diff --git a/plugins/base/frontend/src/main/components/search/types.ts b/plugins/base/frontend/src/main/components/search/types.ts
index 11e2edf8..84e55399 100644
--- a/plugins/base/frontend/src/main/components/search/types.ts
+++ b/plugins/base/frontend/src/main/components/search/types.ts
@@ -4,7 +4,7 @@ export type Page = {
name: string;
kind: string;
location: string;
- searchKey: string;
+ searchKeys: string[];
description: string;
}
@@ -24,14 +24,10 @@ export type Props = {
data: Option[]
};
-export enum SearchRank {
- SearchKeyMatch = 1,
- NameMatch = 0
-}
export type OptionWithSearchResult = Option & {
matched: boolean,
highlight: string,
- rank: SearchRank
+ rank: number
}
export type OptionWithHighlightComponent = Option & {