UNPKG

@jbrowse/plugin-linear-genome-view

Version:

JBrowse 2 linear genome view

83 lines (82 loc) 2.9 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { getSession } from '@jbrowse/core/util'; import { makeStyles } from '@jbrowse/core/util/tss-react'; import { alpha, useTheme } from '@mui/material'; import { observer } from 'mobx-react'; import EndAdornment from "./RefNameAutocomplete/EndAdornment.js"; import RefNameAutocomplete from "./RefNameAutocomplete/index.js"; import { fetchResults } from "./util.js"; import { handleSelectedRegion, navToOption } from "../../searchUtils.js"; import { SPACING, WIDGET_HEIGHT } from "../consts.js"; const useStyles = makeStyles()({ headerRefName: { minWidth: 100, }, }); async function onSelect({ option, model, assemblyName, }) { const { assemblyManager } = getSession(model); const assembly = assemblyManager.get(assemblyName); if (option.hasLocation()) { await navToOption({ option, model, assemblyName, }); } else if (option.results?.length) { model.setSearchResults(option.results, option.getLabel()); } else if (assembly) { await handleSelectedRegion({ input: option.getLabel(), assembly, model, }); } } const SearchBox = observer(function SearchBox({ 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;