mirror of
https://github.com/explosion/spaCy.git
synced 2025-02-14 10:30:34 +03:00
53 lines
1.4 KiB
JavaScript
53 lines
1.4 KiB
JavaScript
|
import React, { useEffect, useState } from 'react'
|
||
|
import PropTypes from 'prop-types'
|
||
|
import { window } from 'browser-monads'
|
||
|
|
||
|
import Icon from './icon'
|
||
|
import classes from '../styles/search.module.sass'
|
||
|
|
||
|
const Search = ({ id, placeholder, settings }) => {
|
||
|
const { apiKey, indexName } = settings
|
||
|
const [isInitialized, setIsInitialized] = useState(false)
|
||
|
useEffect(() => {
|
||
|
if (!isInitialized) {
|
||
|
setIsInitialized(true)
|
||
|
window.docsearch({
|
||
|
apiKey,
|
||
|
indexName,
|
||
|
inputSelector: `#${id}`,
|
||
|
debug: false,
|
||
|
})
|
||
|
}
|
||
|
}, window.docsearch)
|
||
|
return (
|
||
|
<form className={classes.root}>
|
||
|
<label htmlFor={id} className={classes.icon}>
|
||
|
<Icon name="search" width={24} />
|
||
|
</label>
|
||
|
<input
|
||
|
id={id}
|
||
|
className={classes.input}
|
||
|
type="search"
|
||
|
placeholder={placeholder}
|
||
|
aria-label={placeholder}
|
||
|
/>
|
||
|
</form>
|
||
|
)
|
||
|
}
|
||
|
|
||
|
Search.defaultProps = {
|
||
|
id: 'docsearch',
|
||
|
placeholder: 'Search docs',
|
||
|
}
|
||
|
|
||
|
Search.propTypes = {
|
||
|
settings: PropTypes.shape({
|
||
|
apiKey: PropTypes.string.isRequired,
|
||
|
indexName: PropTypes.string.isRequired,
|
||
|
}).isRequired,
|
||
|
id: PropTypes.string.isRequired,
|
||
|
placeholder: PropTypes.string.isRequired,
|
||
|
}
|
||
|
|
||
|
export default Search
|