UNPKG

@jbrowse/plugin-linear-genome-view

Version:

JBrowse 2 linear genome view

81 lines (80 loc) 3.23 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.navToOption = navToOption; exports.handleSelectedRegion = handleSelectedRegion; exports.checkRef = checkRef; exports.fetchResults = fetchResults; exports.splitLast = splitLast; const BaseResults_1 = __importDefault(require("@jbrowse/core/TextSearch/BaseResults")); const util_1 = require("@jbrowse/core/util"); async function navToOption({ option, model, assemblyName, }) { const location = option.getLocation(); const trackId = option.getTrackId(); if (location) { await model.navToLocString(location, assemblyName, 0.2); if (trackId) { model.showTrack(trackId); } } } async function handleSelectedRegion({ input, model, assembly, }) { const allRefs = assembly.allRefNamesWithLowerCase || []; const assemblyName = assembly.name; if (input.split(' ').every(entry => checkRef(entry, allRefs))) { await model.navToLocString(input, assembly.name); } else { const searchScope = model.searchScope(assemblyName); const { textSearchManager } = (0, util_1.getSession)(model); const results = await fetchResults({ queryString: input, searchType: 'exact', searchScope, rankSearchResults: model.rankSearchResults, textSearchManager, assembly, }); if (results.length > 1) { model.setSearchResults(results, input.toLowerCase(), assemblyName); } else if (results.length === 1) { await navToOption({ option: results[0], model, assemblyName, }); } else { await model.navToLocString(input, assemblyName); } } } function checkRef(str, allRefs) { const [ref, rest] = splitLast(str, ':'); return (allRefs.includes(str) || (allRefs.includes(ref) && !Number.isNaN(Number.parseInt(rest, 10)))); } async function fetchResults({ queryString, searchType, searchScope, rankSearchResults, textSearchManager, assembly, }) { var _a; if (!textSearchManager) { console.warn('No text search manager'); } const textSearchResults = await (textSearchManager === null || textSearchManager === void 0 ? void 0 : textSearchManager.search({ queryString, searchType, }, searchScope, rankSearchResults)); const refNameResults = (_a = assembly === null || assembly === void 0 ? void 0 : assembly.allRefNames) === null || _a === void 0 ? void 0 : _a.filter(ref => ref.toLowerCase().startsWith(queryString.toLowerCase())).slice(0, 10).map(r => new BaseResults_1.default({ label: r })); return (0, util_1.dedupe)([...(refNameResults || []), ...(textSearchResults || [])], elt => elt.getId()); } function splitLast(str, split) { const lastIndex = str.lastIndexOf(split); if (lastIndex === -1) { return [str, '']; } const before = str.slice(0, lastIndex); const after = str.slice(lastIndex + 1); return [before, after]; }