@jbrowse/plugin-alignments 1.6.7 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +216 -0
- package/dist/AlignmentsFeatureDetail/index.js +63 -0
- package/dist/AlignmentsFeatureDetail/index.test.js +60 -0
- package/dist/AlignmentsTrack/index.js +37 -0
- package/dist/BamAdapter/BamAdapter.js +598 -0
- package/dist/BamAdapter/BamAdapter.test.js +177 -0
- package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +1 -10
- package/dist/BamAdapter/BamSlightlyLazyFeature.js +176 -0
- package/dist/BamAdapter/MismatchParser.d.ts +3 -5
- package/dist/BamAdapter/MismatchParser.js +384 -0
- package/dist/BamAdapter/MismatchParser.test.js +259 -0
- package/dist/BamAdapter/configSchema.js +48 -0
- package/dist/BamAdapter/index.js +36 -0
- package/dist/CramAdapter/CramAdapter.js +660 -0
- package/dist/CramAdapter/CramAdapter.test.js +138 -0
- package/dist/CramAdapter/CramSlightlyLazyFeature.d.ts +1 -2
- package/dist/CramAdapter/CramSlightlyLazyFeature.js +447 -0
- package/dist/CramAdapter/CramTestAdapters.js +234 -0
- package/dist/CramAdapter/configSchema.js +40 -0
- package/dist/CramAdapter/index.js +36 -0
- package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js +97 -0
- package/dist/HtsgetBamAdapter/configSchema.js +31 -0
- package/dist/HtsgetBamAdapter/index.js +42 -0
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +69 -0
- package/dist/LinearAlignmentsDisplay/index.js +31 -0
- package/dist/LinearAlignmentsDisplay/models/configSchema.js +25 -0
- package/dist/LinearAlignmentsDisplay/models/configSchema.test.js +83 -0
- package/dist/LinearAlignmentsDisplay/models/model.js +250 -0
- package/dist/LinearPileupDisplay/components/ColorByModifications.js +123 -0
- package/dist/LinearPileupDisplay/components/ColorByTag.js +98 -0
- package/dist/LinearPileupDisplay/components/FilterByTag.js +203 -0
- package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +32 -0
- package/dist/LinearPileupDisplay/components/SetFeatureHeight.js +99 -0
- package/dist/LinearPileupDisplay/components/SetMaxHeight.js +90 -0
- package/dist/LinearPileupDisplay/components/SortByTag.js +95 -0
- package/dist/LinearPileupDisplay/configSchema.js +47 -0
- package/dist/LinearPileupDisplay/configSchema.test.js +92 -0
- package/dist/LinearPileupDisplay/index.js +30 -0
- package/dist/LinearPileupDisplay/model.js +602 -0
- package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +63 -0
- package/dist/LinearSNPCoverageDisplay/index.js +30 -0
- package/dist/LinearSNPCoverageDisplay/models/configSchema.js +57 -0
- package/dist/LinearSNPCoverageDisplay/models/configSchema.test.js +62 -0
- package/dist/LinearSNPCoverageDisplay/models/model.d.ts +2 -2
- package/dist/LinearSNPCoverageDisplay/models/model.js +237 -0
- package/dist/NestedFrequencyTable.js +152 -0
- package/dist/PileupRPC/rpcMethods.js +285 -0
- package/dist/PileupRenderer/PileupLayoutSession.js +79 -0
- package/dist/PileupRenderer/PileupRenderer.d.ts +20 -6
- package/dist/PileupRenderer/PileupRenderer.js +1220 -0
- package/dist/PileupRenderer/components/PileupRendering.js +270 -0
- package/dist/PileupRenderer/components/PileupRendering.test.js +36 -0
- package/dist/PileupRenderer/configSchema.js +72 -0
- package/dist/PileupRenderer/index.js +25 -0
- package/dist/PileupRenderer/sortUtil.js +112 -0
- package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +3 -11
- package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +606 -0
- package/dist/SNPCoverageAdapter/configSchema.js +22 -0
- package/dist/SNPCoverageAdapter/index.js +45 -0
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +296 -0
- package/dist/SNPCoverageRenderer/configSchema.js +40 -0
- package/dist/SNPCoverageRenderer/index.js +34 -0
- package/dist/declare.d.js +1 -0
- package/dist/index.js +154 -6
- package/dist/index.test.js +26 -0
- package/dist/plugin-alignments.cjs.development.js +591 -552
- package/dist/plugin-alignments.cjs.development.js.map +1 -1
- package/dist/plugin-alignments.cjs.production.min.js +1 -1
- package/dist/plugin-alignments.cjs.production.min.js.map +1 -1
- package/dist/plugin-alignments.esm.js +594 -555
- package/dist/plugin-alignments.esm.js.map +1 -1
- package/dist/shared.js +96 -0
- package/dist/util.d.ts +4 -0
- package/dist/util.js +135 -0
- package/package.json +5 -9
- package/src/BamAdapter/BamAdapter.ts +45 -15
- package/src/BamAdapter/BamSlightlyLazyFeature.ts +11 -79
- package/src/BamAdapter/MismatchParser.test.ts +53 -297
- package/src/BamAdapter/MismatchParser.ts +54 -116
- package/src/BamAdapter/configSchema.ts +0 -4
- package/src/CramAdapter/CramAdapter.ts +42 -15
- package/src/CramAdapter/CramSlightlyLazyFeature.ts +3 -10
- package/src/LinearPileupDisplay/components/ColorByModifications.tsx +76 -80
- package/src/LinearPileupDisplay/components/ColorByTag.tsx +24 -23
- package/src/LinearPileupDisplay/components/FilterByTag.tsx +73 -68
- package/src/LinearPileupDisplay/components/SetFeatureHeight.tsx +28 -26
- package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +24 -13
- package/src/LinearPileupDisplay/components/SortByTag.tsx +29 -21
- package/src/LinearPileupDisplay/model.ts +8 -22
- package/src/LinearSNPCoverageDisplay/models/model.ts +6 -36
- package/src/PileupRenderer/PileupRenderer.tsx +178 -60
- package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +189 -244
- package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +12 -11
- package/src/util.ts +25 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports["default"] = void 0;
|
|
11
|
+
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
14
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
15
|
+
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
|
+
|
|
18
|
+
var _core = require("@material-ui/core");
|
|
19
|
+
|
|
20
|
+
var _mobxReact = require("mobx-react");
|
|
21
|
+
|
|
22
|
+
var _util = require("@jbrowse/core/util");
|
|
23
|
+
|
|
24
|
+
var _copyToClipboard = _interopRequireDefault(require("copy-to-clipboard"));
|
|
25
|
+
|
|
26
|
+
var _BaseFeatureDetail = require("@jbrowse/core/BaseFeatureWidget/BaseFeatureDetail");
|
|
27
|
+
|
|
28
|
+
var _MismatchParser = require("../BamAdapter/MismatchParser");
|
|
29
|
+
|
|
30
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
31
|
+
|
|
32
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
33
|
+
|
|
34
|
+
var useStyles = (0, _core.makeStyles)(function () {
|
|
35
|
+
return {
|
|
36
|
+
compact: {
|
|
37
|
+
paddingRight: 0,
|
|
38
|
+
paddingTop: 0,
|
|
39
|
+
paddingBottom: 0
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
var omit = ['clipPos', 'flags']; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
+
|
|
45
|
+
function AlignmentFlags(props) {
|
|
46
|
+
var classes = useStyles();
|
|
47
|
+
var feature = props.feature;
|
|
48
|
+
var flags = feature.flags;
|
|
49
|
+
var flagNames = ['read paired', 'read mapped in proper pair', 'read unmapped', 'mate unmapped', 'read reverse strand', 'mate reverse strand', 'first in pair', 'second in pair', 'not primary alignment', 'read fails platform/vendor quality checks', 'read is PCR or optical duplicate', 'supplementary alignment'];
|
|
50
|
+
return /*#__PURE__*/_react["default"].createElement(_BaseFeatureDetail.BaseCard, (0, _extends2["default"])({}, props, {
|
|
51
|
+
title: "Flags"
|
|
52
|
+
}), /*#__PURE__*/_react["default"].createElement(_BaseFeatureDetail.SimpleValue, {
|
|
53
|
+
name: 'Flag',
|
|
54
|
+
value: flags
|
|
55
|
+
}), /*#__PURE__*/_react["default"].createElement(_core.FormGroup, null, flagNames.map(function (name, index) {
|
|
56
|
+
var val = flags & 1 << index;
|
|
57
|
+
var key = "".concat(name, "_").concat(val);
|
|
58
|
+
return /*#__PURE__*/_react["default"].createElement(_core.FormControlLabel, {
|
|
59
|
+
key: key,
|
|
60
|
+
control: /*#__PURE__*/_react["default"].createElement(_core.Checkbox, {
|
|
61
|
+
className: classes.compact,
|
|
62
|
+
checked: Boolean(val),
|
|
63
|
+
name: name,
|
|
64
|
+
readOnly: true
|
|
65
|
+
}),
|
|
66
|
+
label: name
|
|
67
|
+
});
|
|
68
|
+
})));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function Formatter(_ref) {
|
|
72
|
+
var value = _ref.value;
|
|
73
|
+
|
|
74
|
+
var _useState = (0, _react.useState)(false),
|
|
75
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
76
|
+
show = _useState2[0],
|
|
77
|
+
setShow = _useState2[1];
|
|
78
|
+
|
|
79
|
+
var display = String(value);
|
|
80
|
+
|
|
81
|
+
if (display.length > 100) {
|
|
82
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("button", {
|
|
83
|
+
type: "button",
|
|
84
|
+
onClick: function onClick() {
|
|
85
|
+
return (0, _copyToClipboard["default"])(display);
|
|
86
|
+
}
|
|
87
|
+
}, "Copy"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
88
|
+
type: "button",
|
|
89
|
+
onClick: function onClick() {
|
|
90
|
+
return setShow(function (val) {
|
|
91
|
+
return !val;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}, show ? 'Show less' : 'Show more'), /*#__PURE__*/_react["default"].createElement("div", null, show ? display : "".concat(display.slice(0, 100), "...")));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return /*#__PURE__*/_react["default"].createElement("div", null, display);
|
|
98
|
+
} // utility function to get length of alignment from cigar
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
function getLengthOnRef(cigar) {
|
|
102
|
+
var cigarOps = (0, _MismatchParser.parseCigar)(cigar);
|
|
103
|
+
var lengthOnRef = 0;
|
|
104
|
+
|
|
105
|
+
for (var i = 0; i < cigarOps.length; i += 2) {
|
|
106
|
+
var len = +cigarOps[i];
|
|
107
|
+
var op = cigarOps[i + 1];
|
|
108
|
+
|
|
109
|
+
if (op !== 'H' && op !== 'S' && op !== 'I') {
|
|
110
|
+
lengthOnRef += len;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return lengthOnRef;
|
|
115
|
+
} // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
function SupplementaryAlignments(props) {
|
|
119
|
+
var tag = props.tag,
|
|
120
|
+
model = props.model;
|
|
121
|
+
var session = (0, _util.getSession)(model);
|
|
122
|
+
return /*#__PURE__*/_react["default"].createElement(_BaseFeatureDetail.BaseCard, (0, _extends2["default"])({}, props, {
|
|
123
|
+
title: "Supplementary alignments"
|
|
124
|
+
}), /*#__PURE__*/_react["default"].createElement(_core.Typography, null, "List of supplementary alignment locations"), /*#__PURE__*/_react["default"].createElement("ul", null, tag.split(';').filter(function (SA) {
|
|
125
|
+
return !!SA;
|
|
126
|
+
}).map(function (SA, index) {
|
|
127
|
+
var _SA$split = SA.split(','),
|
|
128
|
+
_SA$split2 = (0, _slicedToArray2["default"])(_SA$split, 4),
|
|
129
|
+
saRef = _SA$split2[0],
|
|
130
|
+
saStart = _SA$split2[1],
|
|
131
|
+
saStrand = _SA$split2[2],
|
|
132
|
+
saCigar = _SA$split2[3];
|
|
133
|
+
|
|
134
|
+
var saLength = getLengthOnRef(saCigar);
|
|
135
|
+
var extra = Math.floor(saLength / 5);
|
|
136
|
+
var start = +saStart;
|
|
137
|
+
var end = +saStart + saLength;
|
|
138
|
+
var locString = "".concat(saRef, ":").concat(Math.max(1, start - extra), "-").concat(end + extra);
|
|
139
|
+
var displayStart = start.toLocaleString('en-US');
|
|
140
|
+
var displayEnd = end.toLocaleString('en-US');
|
|
141
|
+
var displayString = "".concat(saRef, ":").concat(displayStart, "-").concat(displayEnd, " (").concat(saStrand, ")");
|
|
142
|
+
return /*#__PURE__*/_react["default"].createElement("li", {
|
|
143
|
+
key: "".concat(locString, "-").concat(index)
|
|
144
|
+
}, /*#__PURE__*/_react["default"].createElement(_core.Link, {
|
|
145
|
+
onClick: function onClick() {
|
|
146
|
+
var view = model.view;
|
|
147
|
+
|
|
148
|
+
try {
|
|
149
|
+
if (view) {
|
|
150
|
+
view.navToLocString(locString);
|
|
151
|
+
} else {
|
|
152
|
+
throw new Error('No view associated with this view anymore');
|
|
153
|
+
}
|
|
154
|
+
} catch (e) {
|
|
155
|
+
console.error(e);
|
|
156
|
+
session.notify("".concat(e));
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
href: "#"
|
|
160
|
+
}, displayString));
|
|
161
|
+
})));
|
|
162
|
+
} // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
function PairLink(_ref2) {
|
|
166
|
+
var locString = _ref2.locString,
|
|
167
|
+
model = _ref2.model;
|
|
168
|
+
var session = (0, _util.getSession)(model);
|
|
169
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Link, {
|
|
170
|
+
onClick: function onClick() {
|
|
171
|
+
var view = model.view;
|
|
172
|
+
|
|
173
|
+
try {
|
|
174
|
+
if (view) {
|
|
175
|
+
view.navToLocString(locString);
|
|
176
|
+
} else {
|
|
177
|
+
session.notify('No view associated with this feature detail panel anymore', 'warning');
|
|
178
|
+
}
|
|
179
|
+
} catch (e) {
|
|
180
|
+
console.error(e);
|
|
181
|
+
session.notify("".concat(e));
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
href: "#"
|
|
185
|
+
}, locString);
|
|
186
|
+
} // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
function AlignmentFeatureDetails(props) {
|
|
190
|
+
var model = props.model;
|
|
191
|
+
var feat = JSON.parse(JSON.stringify(model.featureData));
|
|
192
|
+
var SA = feat.tags && feat.tags.SA || feat.SA;
|
|
193
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Paper, {
|
|
194
|
+
"data-testid": "alignment-side-drawer"
|
|
195
|
+
}, /*#__PURE__*/_react["default"].createElement(_BaseFeatureDetail.FeatureDetails, (0, _extends2["default"])({}, props, {
|
|
196
|
+
omit: omit,
|
|
197
|
+
feature: feat,
|
|
198
|
+
formatter: function formatter(value, key) {
|
|
199
|
+
return key === 'next_segment_position' ? /*#__PURE__*/_react["default"].createElement(PairLink, {
|
|
200
|
+
model: model,
|
|
201
|
+
locString: value
|
|
202
|
+
}) : /*#__PURE__*/_react["default"].createElement(Formatter, {
|
|
203
|
+
value: value
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
})), SA ? /*#__PURE__*/_react["default"].createElement(SupplementaryAlignments, {
|
|
207
|
+
model: model,
|
|
208
|
+
tag: SA
|
|
209
|
+
}) : null, /*#__PURE__*/_react["default"].createElement(AlignmentFlags, (0, _extends2["default"])({
|
|
210
|
+
feature: feat
|
|
211
|
+
}, props)));
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
var _default = (0, _mobxReact.observer)(AlignmentFeatureDetails);
|
|
215
|
+
|
|
216
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.configSchema = void 0;
|
|
9
|
+
exports["default"] = register;
|
|
10
|
+
exports.stateModelFactory = stateModelFactory;
|
|
11
|
+
|
|
12
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
13
|
+
|
|
14
|
+
var _react = require("react");
|
|
15
|
+
|
|
16
|
+
var _configuration = require("@jbrowse/core/configuration");
|
|
17
|
+
|
|
18
|
+
var _mst = require("@jbrowse/core/util/types/mst");
|
|
19
|
+
|
|
20
|
+
var _mobxStateTree = require("mobx-state-tree");
|
|
21
|
+
|
|
22
|
+
var _WidgetType = _interopRequireDefault(require("@jbrowse/core/pluggableElementTypes/WidgetType"));
|
|
23
|
+
|
|
24
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
|
+
|
|
26
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || (0, _typeof2["default"])(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
27
|
+
|
|
28
|
+
var configSchema = (0, _configuration.ConfigurationSchema)('AlignmentsFeatureWidget', {});
|
|
29
|
+
exports.configSchema = configSchema;
|
|
30
|
+
|
|
31
|
+
function stateModelFactory(pluginManager) {
|
|
32
|
+
return _mobxStateTree.types.model('AlignmentsFeatureWidget', {
|
|
33
|
+
id: _mst.ElementId,
|
|
34
|
+
type: _mobxStateTree.types.literal('AlignmentsFeatureWidget'),
|
|
35
|
+
featureData: _mobxStateTree.types.frozen(),
|
|
36
|
+
view: _mobxStateTree.types.safeReference(pluginManager.pluggableMstType('view', 'stateModel'))
|
|
37
|
+
}).actions(function (self) {
|
|
38
|
+
return {
|
|
39
|
+
setFeatureData: function setFeatureData(data) {
|
|
40
|
+
self.featureData = data;
|
|
41
|
+
},
|
|
42
|
+
clearFeatureData: function clearFeatureData() {
|
|
43
|
+
self.featureData = undefined;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function register(pluginManager) {
|
|
50
|
+
pluginManager.addWidgetType(function () {
|
|
51
|
+
return new _WidgetType["default"]({
|
|
52
|
+
name: 'AlignmentsFeatureWidget',
|
|
53
|
+
heading: 'Feature details',
|
|
54
|
+
configSchema: configSchema,
|
|
55
|
+
stateModel: stateModelFactory(pluginManager),
|
|
56
|
+
ReactComponent: /*#__PURE__*/(0, _react.lazy)(function () {
|
|
57
|
+
return Promise.resolve().then(function () {
|
|
58
|
+
return _interopRequireWildcard(require('./AlignmentsFeatureDetail'));
|
|
59
|
+
});
|
|
60
|
+
})
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = require("@testing-library/react");
|
|
6
|
+
|
|
7
|
+
var _mobxStateTree = require("mobx-state-tree");
|
|
8
|
+
|
|
9
|
+
var _react2 = _interopRequireDefault(require("react"));
|
|
10
|
+
|
|
11
|
+
var _PluginManager = _interopRequireDefault(require("@jbrowse/core/PluginManager"));
|
|
12
|
+
|
|
13
|
+
var _configuration = require("@jbrowse/core/configuration");
|
|
14
|
+
|
|
15
|
+
var _ = require(".");
|
|
16
|
+
|
|
17
|
+
var _AlignmentsFeatureDetail = _interopRequireDefault(require("./AlignmentsFeatureDetail"));
|
|
18
|
+
|
|
19
|
+
test('open up a widget', function () {
|
|
20
|
+
console.warn = jest.fn();
|
|
21
|
+
var pluginManager = new _PluginManager["default"]([]);
|
|
22
|
+
|
|
23
|
+
var Session = _mobxStateTree.types.model({
|
|
24
|
+
pluginManager: _mobxStateTree.types.optional(_mobxStateTree.types.frozen(), {}),
|
|
25
|
+
rpcManager: _mobxStateTree.types.optional(_mobxStateTree.types.frozen(), {}),
|
|
26
|
+
configuration: (0, _configuration.ConfigurationSchema)('test', {}),
|
|
27
|
+
widget: (0, _.stateModelFactory)(pluginManager)
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
var session = Session.create({
|
|
31
|
+
widget: {
|
|
32
|
+
type: 'AlignmentsFeatureWidget'
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
session.widget.setFeatureData({
|
|
36
|
+
seq: 'TTGTTGCGGAGTTGAACAACGGCATTAGGAACACTTCCGTCTCTCACTTTTATACGATTATGATTGGTTCTTTAGCCTTGGTTTAGATTGGTAGTAGTAG',
|
|
37
|
+
start: 2,
|
|
38
|
+
end: 102,
|
|
39
|
+
strand: 1,
|
|
40
|
+
score: 37,
|
|
41
|
+
qual: '17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17',
|
|
42
|
+
MQ: 37,
|
|
43
|
+
CIGAR: '100M',
|
|
44
|
+
length_on_ref: 100,
|
|
45
|
+
template_length: 0,
|
|
46
|
+
seq_length: 100,
|
|
47
|
+
name: 'ctgA_3_555_0:0:0_2:0:0_102d',
|
|
48
|
+
refName: 'ctgA',
|
|
49
|
+
type: 'match'
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
var _render = (0, _react.render)( /*#__PURE__*/_react2["default"].createElement(_AlignmentsFeatureDetail["default"], {
|
|
53
|
+
model: session.widget
|
|
54
|
+
})),
|
|
55
|
+
container = _render.container,
|
|
56
|
+
getByText = _render.getByText;
|
|
57
|
+
|
|
58
|
+
expect(container.firstChild).toMatchSnapshot();
|
|
59
|
+
expect(getByText('ctgA:3..102 (+)')).toBeTruthy();
|
|
60
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = register;
|
|
9
|
+
|
|
10
|
+
var _TrackType = _interopRequireDefault(require("@jbrowse/core/pluggableElementTypes/TrackType"));
|
|
11
|
+
|
|
12
|
+
var _configuration = require("@jbrowse/core/configuration");
|
|
13
|
+
|
|
14
|
+
var _models = require("@jbrowse/core/pluggableElementTypes/models");
|
|
15
|
+
|
|
16
|
+
function configSchemaFactory(pluginManager) {
|
|
17
|
+
return (0, _configuration.ConfigurationSchema)('AlignmentsTrack', {}, {
|
|
18
|
+
baseConfiguration: (0, _models.createBaseTrackConfig)(pluginManager)
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function register(pluginManager) {
|
|
23
|
+
pluginManager.addTrackType(function () {
|
|
24
|
+
var configSchema = configSchemaFactory(pluginManager);
|
|
25
|
+
var track = new _TrackType["default"]({
|
|
26
|
+
name: 'AlignmentsTrack',
|
|
27
|
+
configSchema: configSchema,
|
|
28
|
+
stateModel: (0, _models.createBaseTrackModel)(pluginManager, 'AlignmentsTrack', configSchema)
|
|
29
|
+
});
|
|
30
|
+
var linearAlignmentsDisplay = pluginManager.getDisplayType('LinearAlignmentsDisplay'); // Add LinearAlignmentsDisplay here so that it has priority over the other
|
|
31
|
+
// linear displays (defaults to order the displays are added, but we have
|
|
32
|
+
// to add the Pileup and SNPCoverage displays first).
|
|
33
|
+
|
|
34
|
+
track.addDisplayType(linearAlignmentsDisplay);
|
|
35
|
+
return track;
|
|
36
|
+
});
|
|
37
|
+
}
|