import { RcIcon, RcTextField } from '@ringcentral/juno'; import { Search } from '@ringcentral/juno-icon'; import clsx from 'clsx'; import type { FunctionComponent } from 'react'; import React, { useContext, useState } from 'react'; import { SelectListContext } from '../../contexts'; import type { SearchResultProps } from './SearchResult'; import { SearchResult } from './SearchResult'; import i18n from './i18n'; import styles from './styles.scss'; interface SearchPanelClasses { root?: string; searchInput?: string; searchResults?: string; placeholder?: string; searchResult?: SearchResultProps['classes']; } export type SearchPanelProps = { placeholder?: string; classes?: SearchPanelClasses; searchOption(option: object, filter: string): boolean; renderList?(): React.ReactNode; } & Omit; export const SearchPanel: FunctionComponent = ({ placeholder, options, searchOption, currentLocale, renderListItem, renderList, classes = {}, }) => { const [filter, setFilter] = useState(''); const { scrollElmRef } = useContext(SelectListContext); const filteredOptions = filter ? options.filter((option) => searchOption(option, filter)) : options; return (
{!filter && ( // IE polyfill {placeholder || i18n.getString('search', currentLocale)} )} ), }} data-sign="searchBar" onChange={( event: React.ChangeEvent, ) => { if (event.target) { setFilter(event.target.value || ''); } }} />
{renderList ? ( renderList() ) : ( )}
); };