@jbrowse/plugin-linear-genome-view
Version:
JBrowse 2 linear genome view
84 lines (83 loc) • 2.91 kB
JavaScript
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;