import React, { useState, useContext } from 'react';
import PropTypes from 'prop-types';
import Fuse from 'fuse.js';
import InputAdornment from '@material-ui/core/InputAdornment';
import TextField from '../../../../components/ui/text-field';
import { I18nContext } from '../../../../contexts/i18n';
import SearchIcon from '../../../../components/ui/icon/search-icon';
export default function CustomContentSearch({
onSearch,
error,
networksList,
searchQueryInput,
}) {
const t = useContext(I18nContext);
const [searchIconColor, setSearchIconColor] = useState(
'var(--color-icon-muted)',
);
const networksListArray = Object.values(networksList);
const networksSearchFuse = new Fuse(networksListArray, {
shouldSort: true,
threshold: 0.2,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 1,
keys: ['label', 'labelKey'],
});
const handleSearch = async (searchQuery) => {
if (searchQuery === '') {
setSearchIconColor('var(--color-icon-muted)');
} else {
setSearchIconColor('var(--color-icon-alternative)');
}
const fuseSearchResult = networksSearchFuse.search(searchQuery);
const results = searchQuery ? [...fuseSearchResult] : networksListArray;
await onSearch({ searchQuery, results });
};
const renderStartAdornment = () => {
return (
);
};
const renderEndAdornment = () => {
return (
<>
{searchQueryInput && (
handleSearch('')}
>
)}
>
);
};
return (
handleSearch(e.target.value)}
error={error}
fullWidth
autoFocus
autoComplete="off"
classes={{
inputRoot: 'networks-tab__networks-list__custom-search-network',
}}
startAdornment={renderStartAdornment()}
endAdornment={renderEndAdornment()}
/>
);
}
CustomContentSearch.propTypes = {
/**
* The function searches the list of networks depending on
* the entered parameter and returns the entire list of
* networks when the user clicks on 'X' on the search tab
*/
onSearch: PropTypes.func,
/**
* An error message is displayed when a user searches for a specific
* network on the search tab and that network does not exist
* in the networks list
*/
error: PropTypes.string,
/**
* The list of networks available for search.
*/
networksList: PropTypes.array,
/**
* Search for a specific network(s) by label or labelKey
*/
searchQueryInput: PropTypes.string,
};