generic-sequence-panel
Version:
read feature and sequence data and produce highlighted fasta
74 lines (73 loc) • 3.13 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { useState, useEffect } from "react";
import GenericSeqPanel from "./GenericSeqPanel";
import transcriptList from "../fetchTranscripts";
import { SequenceFeatureDetailsF } from "@jbrowse/core/BaseFeatureWidget/SequenceFeatureDetails/model";
import Selector from "./Selector";
import { observer } from "mobx-react";
import { types } from "mobx-state-tree";
import NCListFeature from "../NCListFeature";
// blank parent Model to allow afterAttach autorun to execute
const Model = types.model({
sequenceFeatureDetails: SequenceFeatureDetailsF(),
});
const GenericGeneSeqPanel = observer(function ({ nclistbaseurl, fastaurl, refseq, start, end, gene, urltemplate, }) {
var _a;
const [result, setResult] = useState();
const [error, setError] = useState();
const [{ sequenceFeatureDetails }] = useState(() => {
const model = Model.create({
sequenceFeatureDetails: {},
});
model.sequenceFeatureDetails.setUpDownBp(500);
return model;
});
useEffect(() => {
// eslint-disable-next-line @typescript-eslint/no-floating-promises
(async () => {
var _a;
try {
setError(undefined);
const res = await transcriptList({
nclistbaseurl,
refseq,
start,
end,
gene,
urltemplate,
});
const r = res.map(r => new NCListFeature(r));
setResult(r);
sequenceFeatureDetails.setFeature((_a = r[0]) === null || _a === void 0 ? void 0 : _a.toJSON());
}
catch (e) {
console.error(e);
setError(e);
}
})();
}, [
sequenceFeatureDetails,
nclistbaseurl,
fastaurl,
refseq,
start,
end,
gene,
urltemplate,
]);
if (error) {
return _jsx("div", { style: { color: "red" }, children: `${error}` });
}
else if (!result) {
return _jsx("div", { children: "Loading..." });
}
else {
return (_jsxs("div", { className: "GenericGeneSeqPanel", children: [_jsxs("div", { children: ["Transcript:", _jsx("select", { value: (_a = sequenceFeatureDetails.feature) === null || _a === void 0 ? void 0 : _a.uniqueId, onChange: e => {
var _a;
sequenceFeatureDetails.setFeature(
// @ts-expect-error
(_a = result.find(r => r.id() === e.target.value)) === null || _a === void 0 ? void 0 : _a.toJSON());
}, children: result.map(r => (_jsx("option", { value: r.id(), children: r.get("name") }, r.id()))) }), "\u00A0", _jsx(Selector, { model: sequenceFeatureDetails })] }), sequenceFeatureDetails.feature ? (_jsx(GenericSeqPanel, { refseq: refseq, fastaurl: fastaurl, model: sequenceFeatureDetails })) : null] }));
}
});
export default GenericGeneSeqPanel;