@jbrowse/plugin-linear-genome-view
Version:
JBrowse 2 linear genome view
81 lines (80 loc) • 3.23 kB
JavaScript
;
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];
}