Skip to content

Commit 952c4be

Browse files
authored
Merge pull request #3123 from Blargian/search_for_kb
Add search for knowledge-base articles
2 parents 0083491 + 5d400ad commit 952c4be

File tree

5 files changed

+125
-33
lines changed

5 files changed

+125
-33
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import React from 'react';
2+
import styles from './styles.module.css'
3+
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
4+
import {useState, useEffect} from "react";
5+
6+
const KBArticleSearch = ({kb_articles, onUpdateResults}) => {
7+
8+
const [searchTerm, setSearchTerm] = useState('');
9+
const handleSearch = (event) => {
10+
setSearchTerm(event.target.value);
11+
};
12+
13+
const filteredArticles = searchTerm ? kb_articles.filter((article) =>
14+
searchTerm && article.title.match(new RegExp(searchTerm, 'i')) // Case-insensitive search
15+
) : kb_articles;
16+
17+
useEffect(() => {
18+
onUpdateResults(filteredArticles); // Call callback with filtered articles
19+
}, [filteredArticles, onUpdateResults]); // Update on filter changes
20+
21+
return (
22+
<form autoComplete="off" className="DocSearch-Button">
23+
<span className="DocSearch-Button-Container">
24+
<svg width="20" height="20" className="DocSearch-Search-Icon" viewBox="0 0 20 20" aria-hidden="true"><path
25+
d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z"
26+
stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round"
27+
stroke-linejoin="round"></path></svg>
28+
</span>
29+
<input
30+
type="text"
31+
onKeyUp={handleSearch}
32+
placeholder="Search Knowledge Base"
33+
className={styles.KBArticleInputSearchArea}
34+
/>
35+
</form>
36+
)
37+
}
38+
39+
export default KBArticleSearch;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
.KBArticleInput {
2+
width: 98%;
3+
border: none;
4+
}
5+
6+
.KBArticleInputSearchArea {
7+
width: 100%;
8+
background-color: transparent;
9+
border: none !important;
10+
outline: none;
11+
padding-left: 5px;
12+
}

src/css/custom.scss

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,6 +1158,35 @@ nav[aria-label='Docs sidebar']:hover {
11581158

11591159
}
11601160

1161+
form.DocSearch-Button {
1162+
justify-content: normal;
1163+
margin-bottom: 8px;
1164+
width: 98%;
1165+
}
1166+
1167+
.sidebarSearchContainer_BOHF {
1168+
margin-bottom: 1rem !important;
1169+
width: 98%;
1170+
}
1171+
1172+
/* Style changes to placeholder text of form element used in KBArticleSearch */
1173+
1174+
input::-webkit-input-placeholder { /* Chrome, Edge, Safari */
1175+
color: var(--docsearch-muted-color);;
1176+
}
1177+
1178+
input::-moz-placeholder { /* Firefox 19+ */
1179+
color:var(--docsearch-muted-color);;
1180+
}
1181+
1182+
input:-ms-input-placeholder { /* IE 10-11 */
1183+
color: var(--docsearch-muted-color);;
1184+
}
1185+
1186+
input::-ms-input-placeholder { /* Microsoft Edge */
1187+
color: var(--docsearch-muted-color);;
1188+
}
1189+
11611190
[data-theme='light'] .details_r1OI {
11621191
--ifm-alert-background-color: #F6F7FA;
11631192
--ifm-alert-foreground-color: var(--ifm-alert-foreground-color);

src/theme/BlogSidebar/Desktop/index.js

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,40 +4,53 @@ import Link from '@docusaurus/Link';
44
import {translate} from '@docusaurus/Translate';
55
import styles from './styles.module.css';
66
import SearchBar from "../../SearchBar";
7+
import KBArticleSearch from "../../../components/KBArticleSearch/KBArticleSearch";
8+
import {DocSearchButton} from "@docsearch/react";
79
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
10+
import {useState} from "react";
11+
812
export default function BlogSidebarDesktop({sidebar}) {
913
const { siteConfig } = useDocusaurusContext();
14+
15+
const [filteredArticles, setFilteredArticles] = useState(sidebar.items);
16+
const updateResults = (filteredArticlesFromSearch) => {
17+
setFilteredArticles(filteredArticlesFromSearch);
18+
}
1019
return (
11-
<aside className="col col--3">
12-
<div className={styles.sidebarSearchContainer}>
13-
<SearchBar />
14-
</div>
15-
<nav
16-
className={clsx(styles.sidebar, 'thin-scrollbar')}
17-
aria-label={translate({
18-
id: 'theme.blog.sidebar.navAriaLabel',
19-
message: 'Blog recent posts navigation',
20-
description: 'The ARIA label for recent posts in the blog sidebar',
21-
})}>
22-
<div className={clsx(styles.sidebarItemTitle, 'margin-bottom--md')}>
23-
<Link to={siteConfig.customFields.blogSidebarLink}>
24-
{sidebar.title}
25-
</Link>
26-
</div>
27-
<ul className={clsx(styles.sidebarItemList, 'clean-list')}>
28-
{sidebar.items.map((item) => (
29-
<li key={item.permalink} className={styles.sidebarItem}>
30-
<Link
31-
isNavLink
32-
to={item.permalink}
33-
className={styles.sidebarItemLink}
34-
activeClassName={styles.sidebarItemLinkActive}>
35-
{item.title}
36-
</Link>
37-
</li>
38-
))}
39-
</ul>
40-
</nav>
41-
</aside>
42-
);
20+
<aside className="col col--3">
21+
<div className={styles.sidebarSearchContainer}>
22+
<SearchBar className={styles.blogsSearch}/>
23+
</div>
24+
<div className={clsx(styles.sidebarItemTitle, 'margin-bottom--md')}>
25+
<Link to={siteConfig.customFields.blogSidebarLink}>
26+
{sidebar.title}
27+
</Link>
28+
</div>
29+
<div>
30+
<KBArticleSearch kb_articles={sidebar.items} onUpdateResults={updateResults}
31+
className={styles.KBArticleInput}/>
32+
</div>
33+
<nav
34+
className={clsx(styles.sidebar, 'thin-scrollbar')}
35+
aria-label={translate({
36+
id: 'theme.blog.sidebar.navAriaLabel',
37+
message: 'Blog recent posts navigation',
38+
description: 'The ARIA label for recent posts in the blog sidebar',
39+
})}>
40+
<ul className={clsx(styles.sidebarItemList, 'clean-list')}>
41+
{filteredArticles.map((item) => (
42+
<li key={item.permalink} className={styles.sidebarItem}>
43+
<Link
44+
isNavLink
45+
to={item.permalink}
46+
className={styles.sidebarItemLink}
47+
activeClassName={styles.sidebarItemLinkActive}>
48+
{item.title}
49+
</Link>
50+
</li>
51+
))}
52+
</ul>
53+
</nav>
54+
</aside>
55+
);
4356
}

src/theme/DocSidebar/Desktop/styles.module.css

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,5 @@
3838

3939
.sidebarSearchContainer {
4040
margin-top: 2rem;
41-
/* margin-bottom: 1.75rem; */
4241
padding: 0 1rem;
4342
}

0 commit comments

Comments
 (0)