From e449045a354b9f06b789388ad59c1442f3687238 Mon Sep 17 00:00:00 2001 From: xjh22222228 Date: Mon, 26 Apr 2021 21:20:53 +0800 Subject: [PATCH] fix(search): add default & current --- src/components/search-engine/index.ts | 1 + .../search-engine.component.html | 2 + .../search-engine/search-engine.component.ts | 2 +- src/utils/index.ts | 97 +++++++++++++------ 4 files changed, 70 insertions(+), 32 deletions(-) diff --git a/src/components/search-engine/index.ts b/src/components/search-engine/index.ts index d5be907..39680b8 100644 --- a/src/components/search-engine/index.ts +++ b/src/components/search-engine/index.ts @@ -4,4 +4,5 @@ export enum SearchType { Title, Desc, Url, + Current } diff --git a/src/components/search-engine/search-engine.component.html b/src/components/search-engine/search-engine.component.html index 40191f9..3e355b4 100644 --- a/src/components/search-engine/search-engine.component.html +++ b/src/components/search-engine/search-engine.component.html @@ -30,9 +30,11 @@ + + diff --git a/src/components/search-engine/search-engine.component.ts b/src/components/search-engine/search-engine.component.ts index 2218275..61e0e40 100644 --- a/src/components/search-engine/search-engine.component.ts +++ b/src/components/search-engine/search-engine.component.ts @@ -17,7 +17,7 @@ export class SearchEngineComponent { searchEngineList: ISearchEngineProps[] = (searchEngineList as any).default currentEngine: ISearchEngineProps = getDefaultSearchEngine() SearchType = SearchType - searchTypeValue = SearchType.Title + searchTypeValue = SearchType.All showEngine = false keyword = queryString().q diff --git a/src/utils/index.ts b/src/utils/index.ts index 699ca99..5a54efc 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -22,10 +22,12 @@ export function randomInt(max: number) { return Math.floor(Math.random() * max) } -export function fuzzySearch(navList: INavProps[], keyword: string) { - const sType = Number(queryString().type) || SearchType.Title +export function fuzzySearch(navList: INavProps[], keyword: string): INavThreeProp[] { + const { type, page, id } = queryString() + const sType = Number(type) || SearchType.Title const navData = [] const resultList = [{ nav: navData }] + const urlRecordMap = {} function f(arr?: any[]) { arr = arr || navList @@ -45,44 +47,73 @@ export function fuzzySearch(navList: INavProps[], keyword: string) { const search = keyword.toLowerCase() const urls = Object.values(item.urls || {}) + function searchTitle(): boolean { + if (name.includes(search)) { + let result = { ...item } + const regex = new RegExp(`(${keyword})`, 'i') + result.name = result.name.replace(regex, `$1`.bold()) + + if (!urlRecordMap[result.url]) { + urlRecordMap[result.url] = true + navData.push(result) + return true + } + } + return false + } + + function searchUrl() { + if (url?.includes?.(keyword.toLowerCase())) { + if (!urlRecordMap[item.url]) { + urlRecordMap[item.url] = true + navData.push(item) + return true + } + } + + const find = urls.some((item: string) => item.includes(keyword)) + if (find) { + if (!urlRecordMap[item.url]) { + urlRecordMap[item.url] = true + navData.push(item) + return true + } + } + } + + function searchDesc(): boolean { + if (desc.includes(search)) { + let result = { ...item } + const regex = new RegExp(`(${keyword})`, 'i') + result.desc = result.desc.replace(regex, `$1`.bold()) + + if (!urlRecordMap[result.url]) { + urlRecordMap[result.url] = true + navData.push(result) + return true + } + } + return false + } + try { switch (sType) { case SearchType.Url: - if (url?.includes?.(keyword.toLowerCase())) { - navData.push(item) - } - - const find = urls.some((item: string) => item.includes(keyword)) - if (find) { - navData.push(item) - } + searchUrl() break case SearchType.Title: - if (name.includes(search)) { - let result = { ...item } - const regex = new RegExp(`(${keyword})`, 'i') - result.name = result.name.replace(regex, `$1`.bold()) - - const exists = navData.some(item => item.name === result.name) - if (!exists) { - navData.push(result) - } - } + searchTitle() break case SearchType.Desc: - if (desc.includes(search)) { - let result = { ...item } - const regex = new RegExp(`(${keyword})`, 'i') - result.desc = result.desc.replace(regex, `$1`.bold()) - - const exists = navData.some(item => item.desc === result.desc) - if (!exists) { - navData.push(result) - } - } + searchDesc() break + + default: + searchTitle() + searchDesc() + searchUrl() } } catch (error) { console.error(error) @@ -91,7 +122,11 @@ export function fuzzySearch(navList: INavProps[], keyword: string) { } } - f() + if (sType === SearchType.Current) { + f(navList[page].nav[id].nav) + } else { + f() + } if (navData.length <= 0) { return [] -- GitLab