UNPKG

@jbrowse/plugin-linear-genome-view

Version:

JBrowse 2 linear genome view

84 lines (83 loc) 2.91 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { getSession } from '@jbrowse/core/util'; import { alpha, useTheme } from '@mui/material'; import { observer } from 'mobx-react'; import { makeStyles } from 'tss-react/mui'; import RefNameAutocomplete from './RefNameAutocomplete'; import EndAdornment from './RefNameAutocomplete/EndAdornment'; import { fetchResults } from './util'; import { handleSelectedRegion, navToOption } from '../../searchUtils'; import { SPACING, WIDGET_HEIGHT } from '../consts'; const useStyles = makeStyles()({ headerRefName: { minWidth: 100, }, }); async function onSelect({ option, model, assemblyName, }) { var _a; const { assemblyManager } = getSession(model); const assembly = assemblyManager.get(assemblyName); if (option.hasLocation()) { await navToOption({ option, model, assemblyName, }); } else if ((_a = option.results) === null || _a === void 0 ? void 0 : _a.length) { model.setSearchResults(option.results, option.getLabel()); } else if (assembly) { await handleSelectedRegion({ input: option.getLabel(), assembly, model, }); } } const SearchBox = observer(function ({ model, showHelp = true, }) { const { classes } = useStyles(); const theme = useTheme(); const session = getSession(model); const { textSearchManager, assemblyManager } = session; const { assemblyNames, rankSearchResults } = model; const assemblyName = assemblyNames[0]; const assembly = assemblyManager.get(assemblyName); const searchScope = model.searchScope(assemblyName); return (_jsx(RefNameAutocomplete, { onSelect: async (option) => { try { await onSelect({ model, assemblyName, option, }); } catch (e) { console.error(e); getSession(model).notify(`${e}`, 'warning'); } }, assemblyName: assemblyName, fetchResults: queryString => fetchResults({ queryString, searchScope, rankSearchResults, textSearchManager, assembly, }), model: model, minWidth: 175, TextFieldProps: { variant: 'outlined', className: classes.headerRefName, style: { margin: SPACING, }, slotProps: { input: { style: { padding: 0, height: WIDGET_HEIGHT, background: alpha(theme.palette.background.paper, 0.8), }, endAdornment: _jsx(EndAdornment, { showHelp: showHelp }), }, }, } })); }); export default SearchBox;