nocobase/.dumi/theme/components/SearchBar.tsx
chenos d5d0e1036b
docs: add docs (#75)
* docs: add docs

* ignore dumi theme test

* fix: error TS2717: Subsequent property declarations must have the same type.

* update docs

* deploy gh-pages

* plugins docs

* hash & cname

* exportStatic

* ssr

* vercel

* vercel

* fix: deploy vercel

* Delete vercel.json

* docs

* fix APP_DIST

* on master branch
2021-04-17 21:33:21 +08:00

42 lines
1.1 KiB
TypeScript
Executable File

import React, { useState, useEffect, useRef } from 'react';
import { useSearch, AnchorLink } from 'dumi/theme';
import './SearchBar.less';
export default () => {
const [keywords, setKeywords] = useState<string>('');
const [items, setItems] = useState([]);
const input = useRef<HTMLInputElement>();
const result = useSearch(keywords);
useEffect(() => {
if (Array.isArray(result)) {
setItems(result);
} else if (typeof result === 'function') {
result(`.${input.current.className}`);
}
}, [result]);
return (
<div className="__dumi-default-search">
<input
className="__dumi-default-search-input"
type="search"
ref={input}
{...(Array.isArray(result)
? { value: keywords, onChange: ev => setKeywords(ev.target.value) }
: {})}
/>
<ul>
{items.map(meta => (
<li key={meta.path} onClick={() => setKeywords('')}>
<AnchorLink to={meta.path}>
{meta.parent?.title && <span>{meta.parent.title}</span>}
{meta.title}
</AnchorLink>
</li>
))}
</ul>
</div>
);
};