diff options
4 files changed, 49 insertions, 6 deletions
diff --git a/plugins/base/frontend/src/main/components/search/search.scss b/plugins/base/frontend/src/main/components/search/search.scss index c3b1ab3b..cc5a61ac 100644 --- a/plugins/base/frontend/src/main/components/search/search.scss +++ b/plugins/base/frontend/src/main/components/search/search.scss @@ -12,4 +12,26 @@ .popup-wrapper { min-width: calc(100% - 360px) !important; +} + +.indented { + text-indent: 10px; +} + +.disabled { + color: gray; +} + +.template-wrapper { + display: grid; + grid-template-columns: auto auto; +} + +.template-name { + justify-self: start; +} + +.template-description { + color: gray; + justify-self: end; }
\ No newline at end of file diff --git a/plugins/base/frontend/src/main/components/search/search.tsx b/plugins/base/frontend/src/main/components/search/search.tsx index b0fdd96a..c7b36654 100644 --- a/plugins/base/frontend/src/main/components/search/search.tsx +++ b/plugins/base/frontend/src/main/components/search/search.tsx @@ -1,8 +1,9 @@ import React, {useCallback, useState} from 'react'; import {Select} from '@jetbrains/ring-ui'; +import {List} from '@jetbrains/ring-ui'; import '@jetbrains/ring-ui/components/input-size/input-size.scss'; import './search.scss'; -import {IWindow, Option, Props} from "./types"; +import {IWindow, Option, Props, Page} from "./types"; const WithFuzzySearchFilterComponent: React.FC<Props> = ({data}: Props) => { const [selected, onSelected] = useState<Option>(data[0]); @@ -43,15 +44,30 @@ const WithFuzzySearchFilterComponent: React.FC<Props> = ({data}: Props) => { ) } +const templateGenerator = (page:Page) => { + let classGenerator = (page:Page) => { + let classes = "" + if(page.level !== undefined) classes = classes + " indented" + if(page.disabled) classes = classes + " disabled" + return classes + } + return <div className="template-wrapper"> + <span className= {classGenerator(page)}>{page.name}</span> + <span className="template-description">{page.description}</span> + </div> +} + export const WithFuzzySearchFilter = () => { let data: Option[] = []; const pages = (window as IWindow).pages; if (pages) { data = pages.map((page, i) => ({ ...page, - label: page.name, + label: page.searchKey, key: i + 1, - type: page.kind + type: page.kind, + template: templateGenerator(page), + rgItemType: List.ListProps.Type.CUSTOM })); } diff --git a/plugins/base/frontend/src/main/components/search/types.ts b/plugins/base/frontend/src/main/components/search/types.ts index 2900153a..881a16d8 100644 --- a/plugins/base/frontend/src/main/components/search/types.ts +++ b/plugins/base/frontend/src/main/components/search/types.ts @@ -2,6 +2,11 @@ export type Page = { name: string; kind: string; location: string; + searchKey: string; + level: number; + index: string; + description: string; + disabled: boolean; } export type Option = Page & { diff --git a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt index f8fa3b2e..a950667f 100644 --- a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt +++ b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt @@ -605,14 +605,14 @@ open class HtmlRenderer( .mapIndexed { topLevelIndex, entry -> if (entry.value.size > 1) { listOf( - "{\'name\': \'${entry.key}\', \'index\': \'$topLevelIndex\', \'disabled\': true}" + "{\'name\': \'${entry.key}\', \'index\': \'$topLevelIndex\', \'disabled\': true, \'searchKey\':\'${entry.key}\' }" ) + entry.value.mapIndexed { index, subentry -> - "{\'name\': \'${subentry.value.first}\', \'level\': 1, \'index\': \'$topLevelIndex.$index\', \'description\':\'${subentry.key}\', \'location\':\'${subentry.value.second}\'}" + "{\'name\': \'${subentry.value.first}\', \'level\': 1, \'index\': \'$topLevelIndex.$index\', \'description\':\'${subentry.key}\', \'location\':\'${subentry.value.second}\', 'searchKey':'${entry.key}'}" } } else { val subentry = entry.value.single() listOf( - "{\'name\': \'${subentry.value.first}\', \'index\': \'$topLevelIndex\', \'description\':\'${subentry.key}\', \'location\':\'${subentry.value.second}\'}" + "{\'name\': \'${subentry.value.first}\', \'index\': \'$topLevelIndex\', \'description\':\'${subentry.key}\', \'location\':\'${subentry.value.second}\', 'searchKey':'${entry.key}'}" ) } } |