import React from 'react'; import intl from 'react-intl-universal'; import classNames from 'classnames'; import { isUndefined } from 'lodash'; import { Overlay, InputGroup, Tag, MenuItem, Spinner, Intent, } from '@blueprintjs/core'; import { QueryList } from '@blueprintjs/select'; import { CLASSES } from 'common/classes'; import { Icon, If, ListSelect, FormattedMessage as T } from 'components'; import { UniversalSearchProvider, useUniversalSearchContext, } from './UniversalSearchProvider'; import { filterItemsByResourceType } from './utils'; import { RESOURCES_TYPES } from '../../common/resourcesTypes'; /** * Universal search input action. */ function UniversalSearchInputRightElements({ onSearchTypeChange }) { const { isLoading, searchType, defaultSearchResource, searchTypeOptions } = useUniversalSearchContext(); // Handle search type option change. const handleSearchTypeChange = (option) => { onSearchTypeChange && onSearchTypeChange(option); }; return (
); } /** * Universal search query list. */ function UniversalSearchQueryList(props) { const { isOpen, isLoading, onSearchTypeChange, searchType, ...restProps } = props; return ( ( )} noResults={ !isLoading ? ( } /> ) : ( } /> ) } /> ); } /** * Universal query search actions. */ function UniversalQuerySearchActions() { return (
ENTER {intl.get('universal_search.enter_text')}
ESC{' '} {intl.get('universal_search.close_text')}
{intl.get('universal_seach.navigate_text')}
); } /** * Universal search input bar with items list. */ function UniversalSearchBar({ isOpen, onSearchTypeChange, ...listProps }) { const { handleKeyDown, handleKeyUp } = listProps; const handlers = isOpen ? { onKeyDown: handleKeyDown, onKeyUp: handleKeyUp } : {}; return (
} placeholder={intl.get('universal_search.placeholder')} onChange={listProps.handleQueryChange} value={listProps.query} rightElement={ } /> {listProps.itemList}
); } /** * Universal search. */ export function UniversalSearch({ defaultSearchResource, searchResource, overlayProps, isOpen, isLoading, onSearchTypeChange, items, searchTypeOptions, ...queryListProps }) { // Search type state. const [searchType, setSearchType] = React.useState( defaultSearchResource || RESOURCES_TYPES.CUSTOMER, ); // Handle search resource type controlled mode. React.useEffect(() => { if ( !isUndefined(searchResource) && searchResource !== defaultSearchResource ) { setSearchType(searchResource); } }, [searchResource, defaultSearchResource]); // Handle search type change. const handleSearchTypeChange = (searchTypeResource) => { setSearchType(searchTypeResource.key); onSearchTypeChange && onSearchTypeChange(searchTypeResource); }; // Filters query list items based on the given search type. const filteredItems = filterItemsByResourceType(items, searchType); return (
); }