@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
66 lines (65 loc) • 2.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useFeatureSequence = useFeatureSequence;
const react_1 = require("react");
const configuration_1 = require("../../configuration");
const util_1 = require("../../util");
const BPLIMIT = 500000;
function useFeatureSequence(model, feature, upDownBp, forceLoad) {
const [sequence, setSequence] = (0, react_1.useState)();
const [error, setError] = (0, react_1.useState)();
(0, react_1.useEffect)(() => {
var _a, _b;
if (!model) {
return;
}
const { assemblyManager, rpcManager } = (0, util_1.getSession)(model);
const assemblyName = ((_b = (_a = model.view) === null || _a === void 0 ? void 0 : _a.assemblyNames) === null || _b === void 0 ? void 0 : _b[0]) || '';
async function fetchSeq(start, end, refName) {
const assembly = await assemblyManager.waitForAssembly(assemblyName);
if (!assembly) {
throw new Error('assembly not found');
}
const sessionId = 'getSequence';
const feats = await rpcManager.call(sessionId, 'CoreGetFeatures', {
adapterConfig: (0, configuration_1.getConf)(assembly, ['sequence', 'adapter']),
sessionId,
regions: [
{
start,
end,
refName: assembly.getCanonicalRefName(refName),
assemblyName,
},
],
});
const [feat] = feats;
return (feat === null || feat === void 0 ? void 0 : feat.get('seq')) || '';
}
;
(async () => {
try {
setError(undefined);
const { start, end, refName } = feature;
if (!forceLoad && end - start > BPLIMIT) {
setSequence({
error: `Genomic sequence larger than ${BPLIMIT}bp, use "force load" button to display`,
});
}
else {
const b = start - upDownBp;
const e = end + upDownBp;
const seq = await fetchSeq(start, end, refName);
const up = await fetchSeq(Math.max(0, b), start, refName);
const down = await fetchSeq(end, e, refName);
setSequence({ seq, upstream: up, downstream: down });
}
}
catch (e) {
console.error(e);
setError(e);
}
})();
}, [feature, model, upDownBp, forceLoad]);
return { sequence, error };
}