@jbrowse/plugin-alignments 1.7.8 → 1.7.11

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.
@@ -76,15 +76,24 @@ function Formatter(_ref) {
76
76
  show = _useState2[0],
77
77
  setShow = _useState2[1];
78
78
 
79
+ var _useState3 = (0, _react.useState)(false),
80
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
81
+ copied = _useState4[0],
82
+ setCopied = _useState4[1];
83
+
79
84
  var display = String(value);
80
85
 
81
86
  if (display.length > 100) {
82
87
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("button", {
83
88
  type: "button",
84
89
  onClick: function onClick() {
85
- return (0, _copyToClipboard.default)(display);
90
+ (0, _copyToClipboard.default)(display);
91
+ setCopied(true);
92
+ setTimeout(function () {
93
+ setCopied(false);
94
+ }, 700);
86
95
  }
87
- }, "Copy"), /*#__PURE__*/_react.default.createElement("button", {
96
+ }, copied ? 'Copied to clipboard' : 'Copy'), /*#__PURE__*/_react.default.createElement("button", {
88
97
  type: "button",
89
98
  onClick: function onClick() {
90
99
  return setShow(function (val) {
@@ -142,7 +151,8 @@ function SupplementaryAlignments(props) {
142
151
  return /*#__PURE__*/_react.default.createElement("li", {
143
152
  key: "".concat(locString, "-").concat(index)
144
153
  }, /*#__PURE__*/_react.default.createElement(_core.Link, {
145
- onClick: function onClick() {
154
+ onClick: function onClick(event) {
155
+ event.preventDefault();
146
156
  var view = model.view;
147
157
 
148
158
  try {
@@ -2,12 +2,37 @@ import PluginManager from '@jbrowse/core/PluginManager';
2
2
  declare const configSchema: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
3
3
  export declare function stateModelFactory(pluginManager: PluginManager): import("mobx-state-tree").IModelType<{
4
4
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
5
- type: import("mobx-state-tree").ISimpleType<"AlignmentsFeatureWidget">;
5
+ type: import("mobx-state-tree").ISimpleType<"BaseFeatureWidget">;
6
6
  featureData: import("mobx-state-tree").IType<any, any, any>;
7
+ formattedFields: import("mobx-state-tree").IType<any, any, any>;
8
+ unformattedFeatureData: import("mobx-state-tree").IType<any, any, any>;
7
9
  view: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IReferenceType<import("mobx-state-tree").IAnyType>>;
10
+ track: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IReferenceType<import("mobx-state-tree").IAnyType>>;
11
+ } & {
12
+ type: import("mobx-state-tree").ISimpleType<"AlignmentsFeatureWidget">;
8
13
  }, {
9
- setFeatureData(data: unknown): void;
14
+ setFeatureData(featureData: Record<string, unknown>): void;
10
15
  clearFeatureData(): void;
11
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
16
+ setFormattedData(feat: Record<string, unknown>): void;
17
+ } & {
18
+ afterCreate(): void;
19
+ }, {
20
+ type: "BaseFeatureWidget";
21
+ } & Partial<import("mobx-state-tree/dist/internal").ExtractCFromProps<{
22
+ id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
23
+ type: import("mobx-state-tree").ISimpleType<"BaseFeatureWidget">;
24
+ featureData: import("mobx-state-tree").IType<any, any, any>;
25
+ formattedFields: import("mobx-state-tree").IType<any, any, any>;
26
+ unformattedFeatureData: import("mobx-state-tree").IType<any, any, any>;
27
+ view: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IReferenceType<import("mobx-state-tree").IAnyType>>;
28
+ track: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IReferenceType<import("mobx-state-tree").IAnyType>>;
29
+ }>> & import("mobx-state-tree")._NotCustomized, {
30
+ id: string;
31
+ type: "BaseFeatureWidget";
32
+ formattedFields: any;
33
+ view: import("mobx-state-tree").ReferenceIdentifier | undefined;
34
+ track: import("mobx-state-tree").ReferenceIdentifier | undefined;
35
+ finalizedFeatureData: any;
36
+ } & import("mobx-state-tree")._NotCustomized>;
12
37
  export default function register(pluginManager: PluginManager): void;
13
38
  export { configSchema };
@@ -15,12 +15,12 @@ var _react = require("react");
15
15
 
16
16
  var _configuration = require("@jbrowse/core/configuration");
17
17
 
18
- var _mst = require("@jbrowse/core/util/types/mst");
19
-
20
18
  var _mobxStateTree = require("mobx-state-tree");
21
19
 
22
20
  var _WidgetType = _interopRequireDefault(require("@jbrowse/core/pluggableElementTypes/WidgetType"));
23
21
 
22
+ var _BaseFeatureWidget = require("@jbrowse/core/BaseFeatureWidget");
23
+
24
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
25
 
26
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; }
@@ -29,21 +29,10 @@ var configSchema = (0, _configuration.ConfigurationSchema)('AlignmentsFeatureWid
29
29
  exports.configSchema = configSchema;
30
30
 
31
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
- });
32
+ var baseModel = (0, _BaseFeatureWidget.stateModelFactory)(pluginManager);
33
+ return _mobxStateTree.types.compose(baseModel, _mobxStateTree.types.model('AlignmentsFeatureWidget', {
34
+ type: _mobxStateTree.types.literal('AlignmentsFeatureWidget')
35
+ }));
47
36
  }
48
37
 
49
38
  function register(pluginManager) {
@@ -24,6 +24,7 @@ var _util = require("@jbrowse/core/util");
24
24
  var _marked = /*#__PURE__*/_regenerator.default.mark(getNextRefPos);
25
25
 
26
26
  var mdRegex = new RegExp(/(\d+|\^[a-z]+|[a-z])/gi);
27
+ var modificationRegex = new RegExp(/([A-Z])([-+])([^,.?]+)([.?])?/);
27
28
 
28
29
  function parseCigar(cigar) {
29
30
  return (cigar || '').split(/([MIDNSHPX=])/);
@@ -50,6 +51,7 @@ function cigarToMismatches(ops, seq, ref, qual) {
50
51
  start: roffset + j,
51
52
  type: 'mismatch',
52
53
  base: seq[soffset + j],
54
+ altbase: ref[roffset + j],
53
55
  length: 1
54
56
  });
55
57
  }
@@ -351,7 +353,7 @@ function getModificationPositions(mm, fseq, fstrand) {
351
353
  skips = _mod$split2.slice(1); // regexes based on parse_mm.pl from hts-specs
352
354
 
353
355
 
354
- var matches = basemod.match(/([A-Z])([-+])([^,.?]+)([.?])?/);
356
+ var matches = basemod.match(modificationRegex);
355
357
 
356
358
  if (!matches) {
357
359
  throw new Error('bad format for MM tag');
@@ -426,7 +428,7 @@ function getModificationTypes(mm) {
426
428
  _mod$split4 = (0, _slicedToArray2.default)(_mod$split3, 1),
427
429
  basemod = _mod$split4[0];
428
430
 
429
- var matches = basemod.match(/([A-Z])([-+])([^,]+)/);
431
+ var matches = basemod.match(modificationRegex);
430
432
 
431
433
  if (!matches) {
432
434
  throw new Error('bad format for MM tag');
@@ -1,8 +1,8 @@
1
1
  /// <reference types="react" />
2
+ import { Instance } from 'mobx-state-tree';
3
+ import { AnyConfigurationModel } from '@jbrowse/core/configuration';
2
4
  import { Feature } from '@jbrowse/core/util';
3
5
  import { ContentCopy as ContentCopyIcon } from '@jbrowse/core/ui/Icons';
4
- import { Instance } from 'mobx-state-tree';
5
- import { AnyConfigurationModel } from '@jbrowse/core/configuration/configurationSchema';
6
6
  import { LinearPileupDisplayConfigModel } from './configSchema';
7
7
  declare const stateModelFactory: (configSchema: LinearPileupDisplayConfigModel) => import("mobx-state-tree").IModelType<{
8
8
  id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
@@ -149,7 +149,7 @@ declare const stateModelFactory: (configSchema: LinearPileupDisplayConfigModel)
149
149
  estimatedRegionStatsP: Promise<import("@jbrowse/core/data_adapters/BaseAdapter").Stats> | undefined;
150
150
  estimatedRegionStats: import("@jbrowse/core/data_adapters/BaseAdapter").Stats | undefined;
151
151
  } & {
152
- readonly blockType: "staticBlocks" | "dynamicBlocks";
152
+ readonly blockType: "dynamicBlocks" | "staticBlocks";
153
153
  readonly blockDefinitions: import("@jbrowse/core/util/blockTypes").BlockSet;
154
154
  } & {
155
155
  readonly renderDelay: number;
@@ -213,6 +213,7 @@ declare const stateModelFactory: (configSchema: LinearPileupDisplayConfigModel)
213
213
  } & {
214
214
  colorTagMap: import("mobx").ObservableMap<string, string>;
215
215
  modificationTagMap: import("mobx").ObservableMap<string, string>;
216
+ featureUnderMouseVolatile: Feature | undefined;
216
217
  ready: boolean;
217
218
  } & {
218
219
  setReady(flag: boolean): void;
@@ -225,6 +226,7 @@ declare const stateModelFactory: (configSchema: LinearPileupDisplayConfigModel)
225
226
  }): void;
226
227
  updateModificationColorMap(uniqueModifications: string[]): void;
227
228
  updateColorTagMap(uniqueTag: string[]): void;
229
+ setFeatureUnderMouse(feat?: Feature): void;
228
230
  } & {
229
231
  afterAttach(): void;
230
232
  selectFeature(feature: Feature): void;
@@ -233,7 +235,7 @@ declare const stateModelFactory: (configSchema: LinearPileupDisplayConfigModel)
233
235
  toggleSoftClipping(): void;
234
236
  toggleMismatchAlpha(): void;
235
237
  setConfig(configuration: AnyConfigurationModel): void;
236
- setSortedBy(type: string, tag?: string | undefined): void;
238
+ setSortedBy(type: string, tag?: string): void;
237
239
  setFilterBy(filter: {
238
240
  flagInclude: number;
239
241
  flagExclude: number;
@@ -250,6 +252,7 @@ declare const stateModelFactory: (configSchema: LinearPileupDisplayConfigModel)
250
252
  readonly rendererConfig: any;
251
253
  readonly featureHeightSetting: any;
252
254
  readonly mismatchAlphaSetting: any;
255
+ readonly featureUnderMouse: Feature | undefined;
253
256
  } & {
254
257
  readonly rendererTypeName: string;
255
258
  contextMenuItems(): {
@@ -21,21 +21,23 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
21
21
 
22
22
  var _react = require("react");
23
23
 
24
+ var _mobx = require("mobx");
25
+
26
+ var _mobxStateTree = require("mobx-state-tree");
27
+
28
+ var _copyToClipboard = _interopRequireDefault(require("copy-to-clipboard"));
29
+
24
30
  var _configuration = require("@jbrowse/core/configuration");
25
31
 
26
32
  var _tracks = require("@jbrowse/core/util/tracks");
27
33
 
28
34
  var _util = require("@jbrowse/core/util");
29
35
 
30
- var _Visibility = _interopRequireDefault(require("@material-ui/icons/Visibility"));
31
-
32
- var _Icons = require("@jbrowse/core/ui/Icons");
33
-
34
36
  var _pluginLinearGenomeView = require("@jbrowse/plugin-linear-genome-view");
35
37
 
36
- var _mobxStateTree = require("mobx-state-tree");
38
+ var _Visibility = _interopRequireDefault(require("@material-ui/icons/Visibility"));
37
39
 
38
- var _copyToClipboard = _interopRequireDefault(require("copy-to-clipboard"));
40
+ var _Icons = require("@jbrowse/core/ui/Icons");
39
41
 
40
42
  var _MenuOpen = _interopRequireDefault(require("@material-ui/icons/MenuOpen"));
41
43
 
@@ -45,8 +47,6 @@ var _Palette = _interopRequireDefault(require("@material-ui/icons/Palette"));
45
47
 
46
48
  var _ClearAll = _interopRequireDefault(require("@material-ui/icons/ClearAll"));
47
49
 
48
- var _mobx = require("mobx");
49
-
50
50
  var _LinearPileupDisplayBlurb = _interopRequireDefault(require("./components/LinearPileupDisplayBlurb"));
51
51
 
52
52
  var _shared = require("../shared");
@@ -61,6 +61,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
61
61
 
62
62
  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; }
63
63
 
64
+ // async
64
65
  var ColorByTagDlg = /*#__PURE__*/(0, _react.lazy)(function () {
65
66
  return Promise.resolve().then(function () {
66
67
  return _interopRequireWildcard(require('./components/ColorByTag'));
@@ -129,6 +130,7 @@ var stateModelFactory = function stateModelFactory(configSchema) {
129
130
  return {
130
131
  colorTagMap: _mobx.observable.map({}),
131
132
  modificationTagMap: _mobx.observable.map({}),
133
+ featureUnderMouseVolatile: undefined,
132
134
  ready: false
133
135
  };
134
136
  }).actions(function (self) {
@@ -162,7 +164,9 @@ var stateModelFactory = function stateModelFactory(configSchema) {
162
164
  });
163
165
  },
164
166
  updateColorTagMap: function updateColorTagMap(uniqueTag) {
165
- // pale color scheme https://cran.r-project.org/web/packages/khroma/vignettes/tol.html e.g. "tol_light"
167
+ // pale color scheme
168
+ // https://cran.r-project.org/web/packages/khroma/vignettes/tol.html
169
+ // e.g. "tol_light"
166
170
  var colorPalette = ['#BBCCEE', 'pink', '#CCDDAA', '#EEEEBB', '#FFCCCC', 'lightblue', 'lightgreen', 'tan', '#CCEEFF', 'lightsalmon'];
167
171
  uniqueTag.forEach(function (value) {
168
172
  if (!self.colorTagMap.has(value)) {
@@ -171,6 +175,9 @@ var stateModelFactory = function stateModelFactory(configSchema) {
171
175
  self.colorTagMap.set(value, newColor);
172
176
  }
173
177
  });
178
+ },
179
+ setFeatureUnderMouse: function setFeatureUnderMouse(feat) {
180
+ self.featureUnderMouseVolatile = feat;
174
181
  }
175
182
  };
176
183
  }).actions(function (self) {
@@ -269,7 +276,75 @@ var stateModelFactory = function stateModelFactory(configSchema) {
269
276
  }, _callee, null, [[0, 28]]);
270
277
  })), {
271
278
  delay: 1000
272
- }));
279
+ })); // autorun synchronizes featureUnderMouse with featureIdUnderMouse
280
+
281
+ (0, _mobxStateTree.addDisposer)(self, (0, _mobx.autorun)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
282
+ var session, _self$featureUnderMou, featureId, sessionId, view, _ref3, feature;
283
+
284
+ return _regenerator.default.wrap(function _callee2$(_context2) {
285
+ while (1) {
286
+ switch (_context2.prev = _context2.next) {
287
+ case 0:
288
+ session = (0, _util.getSession)(self);
289
+ _context2.prev = 1;
290
+ featureId = self.featureIdUnderMouse;
291
+
292
+ if (!(((_self$featureUnderMou = self.featureUnderMouse) === null || _self$featureUnderMou === void 0 ? void 0 : _self$featureUnderMou.id()) !== featureId)) {
293
+ _context2.next = 15;
294
+ break;
295
+ }
296
+
297
+ if (featureId) {
298
+ _context2.next = 8;
299
+ break;
300
+ }
301
+
302
+ self.setFeatureUnderMouse(undefined);
303
+ _context2.next = 15;
304
+ break;
305
+
306
+ case 8:
307
+ sessionId = (0, _tracks.getRpcSessionId)(self);
308
+ view = (0, _util.getContainingView)(self);
309
+ _context2.next = 12;
310
+ return session.rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
311
+ featureId: featureId,
312
+ sessionId: sessionId,
313
+ layoutId: view.id,
314
+ rendererType: 'PileupRenderer'
315
+ });
316
+
317
+ case 12:
318
+ _ref3 = _context2.sent;
319
+ feature = _ref3.feature;
320
+
321
+ // check featureIdUnderMouse is still the same as the
322
+ // feature.id that was returned e.g. that the user hasn't
323
+ // moused over to a new position during the async operation
324
+ // above
325
+ // @ts-ignore
326
+ if (self.featureIdUnderMouse === feature.uniqueId) {
327
+ // @ts-ignore
328
+ self.setFeatureUnderMouse(new _util.SimpleFeature(feature));
329
+ }
330
+
331
+ case 15:
332
+ _context2.next = 21;
333
+ break;
334
+
335
+ case 17:
336
+ _context2.prev = 17;
337
+ _context2.t0 = _context2["catch"](1);
338
+ console.error(_context2.t0);
339
+ session.notify("".concat(_context2.t0), 'error');
340
+
341
+ case 21:
342
+ case "end":
343
+ return _context2.stop();
344
+ }
345
+ }
346
+ }, _callee2, null, [[1, 17]]);
347
+ }))));
273
348
  },
274
349
  selectFeature: function selectFeature(feature) {
275
350
  var session = (0, _util.getSession)(self);
@@ -307,8 +382,8 @@ var stateModelFactory = function stateModelFactory(configSchema) {
307
382
  self.configuration = configuration;
308
383
  },
309
384
  setSortedBy: function setSortedBy(type, tag) {
310
- var _ref2 = (0, _util.getContainingView)(self),
311
- centerLineInfo = _ref2.centerLineInfo;
385
+ var _ref4 = (0, _util.getContainingView)(self),
386
+ centerLineInfo = _ref4.centerLineInfo;
312
387
 
313
388
  if (!centerLineInfo) {
314
389
  return;
@@ -369,6 +444,10 @@ var stateModelFactory = function stateModelFactory(configSchema) {
369
444
 
370
445
  get mismatchAlphaSetting() {
371
446
  return self.mismatchAlpha !== undefined ? self.mismatchAlpha : (0, _configuration.readConfObject)(this.rendererConfig, 'mismatchAlpha');
447
+ },
448
+
449
+ get featureUnderMouse() {
450
+ return self.featureUnderMouseVolatile;
372
451
  }
373
452
 
374
453
  };
@@ -422,10 +501,12 @@ var stateModelFactory = function stateModelFactory(configSchema) {
422
501
  sortedBy = self.sortedBy,
423
502
  colorBy = self.colorBy,
424
503
  filterBy = self.filterBy,
425
- rpcDriverName = self.rpcDriverName;
504
+ rpcDriverName = self.rpcDriverName,
505
+ currBpPerPx = self.currBpPerPx,
506
+ ready = self.ready;
426
507
  var superProps = superRenderProps();
427
508
  return _objectSpread(_objectSpread({}, superProps), {}, {
428
- notReady: superProps.notReady || !self.ready || sortedBy && self.currBpPerPx !== view.bpPerPx,
509
+ notReady: superProps.notReady || !ready || sortedBy && currBpPerPx !== view.bpPerPx,
429
510
  rpcDriverName: rpcDriverName,
430
511
  displayModel: self,
431
512
  sortedBy: sortedBy,
@@ -436,30 +517,30 @@ var stateModelFactory = function stateModelFactory(configSchema) {
436
517
  showSoftClip: self.showSoftClipping,
437
518
  config: self.rendererConfig,
438
519
  onFeatureClick: function onFeatureClick(_, featureId) {
439
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
440
- var session, rpcManager, f, sessionId, _ref3, feature;
520
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
521
+ var session, rpcManager, f, sessionId, _ref5, feature;
441
522
 
442
- return _regenerator.default.wrap(function _callee2$(_context2) {
523
+ return _regenerator.default.wrap(function _callee3$(_context3) {
443
524
  while (1) {
444
- switch (_context2.prev = _context2.next) {
525
+ switch (_context3.prev = _context3.next) {
445
526
  case 0:
446
527
  session = (0, _util.getSession)(self);
447
528
  rpcManager = session.rpcManager;
448
- _context2.prev = 2;
529
+ _context3.prev = 2;
449
530
  f = featureId || self.featureIdUnderMouse;
450
531
 
451
532
  if (f) {
452
- _context2.next = 8;
533
+ _context3.next = 8;
453
534
  break;
454
535
  }
455
536
 
456
537
  self.clearFeatureSelection();
457
- _context2.next = 14;
538
+ _context3.next = 14;
458
539
  break;
459
540
 
460
541
  case 8:
461
542
  sessionId = (0, _tracks.getRpcSessionId)(self);
462
- _context2.next = 11;
543
+ _context3.next = 11;
463
544
  return rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
464
545
  featureId: f,
465
546
  sessionId: sessionId,
@@ -468,8 +549,8 @@ var stateModelFactory = function stateModelFactory(configSchema) {
468
549
  });
469
550
 
470
551
  case 11:
471
- _ref3 = _context2.sent;
472
- feature = _ref3.feature;
552
+ _ref5 = _context3.sent;
553
+ feature = _ref5.feature;
473
554
 
474
555
  if (feature) {
475
556
  // @ts-ignore
@@ -477,21 +558,21 @@ var stateModelFactory = function stateModelFactory(configSchema) {
477
558
  }
478
559
 
479
560
  case 14:
480
- _context2.next = 20;
561
+ _context3.next = 20;
481
562
  break;
482
563
 
483
564
  case 16:
484
- _context2.prev = 16;
485
- _context2.t0 = _context2["catch"](2);
486
- console.error(_context2.t0);
487
- session.notify("".concat(_context2.t0));
565
+ _context3.prev = 16;
566
+ _context3.t0 = _context3["catch"](2);
567
+ console.error(_context3.t0);
568
+ session.notify("".concat(_context3.t0));
488
569
 
489
570
  case 20:
490
571
  case "end":
491
- return _context2.stop();
572
+ return _context3.stop();
492
573
  }
493
574
  }
494
- }, _callee2, null, [[2, 16]]);
575
+ }, _callee3, null, [[2, 16]]);
495
576
  }))();
496
577
  },
497
578
  onClick: function onClick() {
@@ -499,30 +580,30 @@ var stateModelFactory = function stateModelFactory(configSchema) {
499
580
  },
500
581
  // similar to click but opens a menu with further options
501
582
  onFeatureContextMenu: function onFeatureContextMenu(_, featureId) {
502
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
503
- var session, rpcManager, f, sessionId, _ref4, feature;
583
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
584
+ var session, rpcManager, f, sessionId, _ref6, feature;
504
585
 
505
- return _regenerator.default.wrap(function _callee3$(_context3) {
586
+ return _regenerator.default.wrap(function _callee4$(_context4) {
506
587
  while (1) {
507
- switch (_context3.prev = _context3.next) {
588
+ switch (_context4.prev = _context4.next) {
508
589
  case 0:
509
590
  session = (0, _util.getSession)(self);
510
591
  rpcManager = session.rpcManager;
511
- _context3.prev = 2;
592
+ _context4.prev = 2;
512
593
  f = featureId || self.featureIdUnderMouse;
513
594
 
514
595
  if (f) {
515
- _context3.next = 8;
596
+ _context4.next = 8;
516
597
  break;
517
598
  }
518
599
 
519
600
  self.clearFeatureSelection();
520
- _context3.next = 14;
601
+ _context4.next = 14;
521
602
  break;
522
603
 
523
604
  case 8:
524
605
  sessionId = (0, _tracks.getRpcSessionId)(self);
525
- _context3.next = 11;
606
+ _context4.next = 11;
526
607
  return rpcManager.call(sessionId, 'CoreGetFeatureDetails', {
527
608
  featureId: f,
528
609
  sessionId: sessionId,
@@ -531,8 +612,8 @@ var stateModelFactory = function stateModelFactory(configSchema) {
531
612
  });
532
613
 
533
614
  case 11:
534
- _ref4 = _context3.sent;
535
- feature = _ref4.feature;
615
+ _ref6 = _context4.sent;
616
+ feature = _ref6.feature;
536
617
 
537
618
  if (feature) {
538
619
  // @ts-ignore
@@ -540,21 +621,21 @@ var stateModelFactory = function stateModelFactory(configSchema) {
540
621
  }
541
622
 
542
623
  case 14:
543
- _context3.next = 20;
624
+ _context4.next = 20;
544
625
  break;
545
626
 
546
627
  case 16:
547
- _context3.prev = 16;
548
- _context3.t0 = _context3["catch"](2);
549
- console.error(_context3.t0);
550
- session.notify("".concat(_context3.t0));
628
+ _context4.prev = 16;
629
+ _context4.t0 = _context4["catch"](2);
630
+ console.error(_context4.t0);
631
+ session.notify("".concat(_context4.t0));
551
632
 
552
633
  case 20:
553
634
  case "end":
554
- return _context3.stop();
635
+ return _context4.stop();
555
636
  }
556
637
  }
557
- }, _callee3, null, [[2, 16]]);
638
+ }, _callee4, null, [[2, 16]]);
558
639
  }))();
559
640
  }
560
641
  });
@@ -587,10 +668,10 @@ var stateModelFactory = function stateModelFactory(configSchema) {
587
668
  })), [{
588
669
  label: 'Sort by tag...',
589
670
  onClick: function onClick() {
590
- (0, _util.getSession)(self).queueDialog(function (doneCallback) {
671
+ (0, _util.getSession)(self).queueDialog(function (handleClose) {
591
672
  return [SortByTagDlg, {
592
673
  model: self,
593
- handleClose: doneCallback
674
+ handleClose: handleClose
594
675
  }];
595
676
  });
596
677
  }
@@ -11,42 +11,63 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
 
14
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
+
14
16
  var _react = _interopRequireDefault(require("react"));
15
17
 
16
18
  var _mobxReact = require("mobx-react");
17
19
 
18
20
  var _pluginWiggle = require("@jbrowse/plugin-wiggle");
19
21
 
20
- /* eslint-disable @typescript-eslint/no-explicit-any */
22
+ var _excluded = ["refbase", "all", "total", "ref", "-1", "1", "0"];
23
+
21
24
  var en = function en(n) {
22
25
  return n.toLocaleString('en-US');
23
26
  };
24
27
 
25
- var TooltipContents = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
28
+ var toP = function toP() {
29
+ var s = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
30
+ return +(+s).toFixed(1);
31
+ };
32
+
33
+ var pct = function pct(n, total) {
34
+ return "".concat(toP(n / (total || 1) * 100), "%");
35
+ };
36
+
37
+ var TooltipContents = /*#__PURE__*/_react.default.forwardRef(function (_ref, reactRef) {
26
38
  var feature = _ref.feature;
27
39
  var start = feature.get('start');
28
40
  var end = feature.get('end');
29
41
  var name = feature.get('refName');
30
- var info = feature.get('snpinfo');
42
+
43
+ var _ref2 = feature.get('snpinfo'),
44
+ refbase = _ref2.refbase,
45
+ all = _ref2.all,
46
+ total = _ref2.total,
47
+ ref = _ref2.ref,
48
+ rn1 = _ref2['-1'],
49
+ r1 = _ref2['1'],
50
+ r0 = _ref2['0'],
51
+ info = (0, _objectWithoutProperties2.default)(_ref2, _excluded);
52
+
31
53
  var loc = [name, start === end ? en(start) : "".concat(en(start), "..").concat(en(end))].filter(function (f) {
32
54
  return !!f;
33
55
  }).join(':');
34
- var total = info === null || info === void 0 ? void 0 : info.total;
35
56
  return /*#__PURE__*/_react.default.createElement("div", {
36
- ref: ref
37
- }, /*#__PURE__*/_react.default.createElement("table", null, /*#__PURE__*/_react.default.createElement("caption", null, loc), /*#__PURE__*/_react.default.createElement("thead", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("th", null, "Base"), /*#__PURE__*/_react.default.createElement("th", null, "Count"), /*#__PURE__*/_react.default.createElement("th", null, "% of Total"), /*#__PURE__*/_react.default.createElement("th", null, "Strands"), /*#__PURE__*/_react.default.createElement("th", null, "Source"))), /*#__PURE__*/_react.default.createElement("tbody", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", null, "Total"), /*#__PURE__*/_react.default.createElement("td", null, info.total)), /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", null, "REF"), /*#__PURE__*/_react.default.createElement("td", null, info.ref), /*#__PURE__*/_react.default.createElement("td", null, info['-1'] ? "".concat(info['-1'], "(-)") : '', info['1'] ? "".concat(info['1'], "(+)") : ''), /*#__PURE__*/_react.default.createElement("td", null)), Object.entries(info).map(function (_ref2) {
38
- var _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
39
- key = _ref3[0],
40
- entry = _ref3[1];
57
+ ref: reactRef
58
+ }, /*#__PURE__*/_react.default.createElement("table", null, /*#__PURE__*/_react.default.createElement("caption", null, loc), /*#__PURE__*/_react.default.createElement("thead", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("th", null, "Base"), /*#__PURE__*/_react.default.createElement("th", null, "Count"), /*#__PURE__*/_react.default.createElement("th", null, "% of Total"), /*#__PURE__*/_react.default.createElement("th", null, "Strands"), /*#__PURE__*/_react.default.createElement("th", null, "Source"))), /*#__PURE__*/_react.default.createElement("tbody", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", null, "Total"), /*#__PURE__*/_react.default.createElement("td", null, all)), /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", null, "REF ", refbase ? "(".concat(refbase.toUpperCase(), ")") : ''), /*#__PURE__*/_react.default.createElement("td", null, ref), /*#__PURE__*/_react.default.createElement("td", null, pct(ref, all)), /*#__PURE__*/_react.default.createElement("td", null, rn1 ? "".concat(rn1, "(-)") : '', r1 ? "".concat(r1, "(+)") : ''), /*#__PURE__*/_react.default.createElement("td", null)), Object.entries(info).map(function (_ref3) {
59
+ var _ref4 = (0, _slicedToArray2.default)(_ref3, 2),
60
+ key = _ref4[0],
61
+ entry = _ref4[1];
41
62
 
42
- return Object.entries(entry).map(function (_ref4) {
43
- var _ref5 = (0, _slicedToArray2.default)(_ref4, 2),
44
- base = _ref5[0],
45
- score = _ref5[1];
63
+ return Object.entries(entry).map(function (_ref5) {
64
+ var _ref6 = (0, _slicedToArray2.default)(_ref5, 2),
65
+ base = _ref6[0],
66
+ score = _ref6[1];
46
67
 
47
68
  return /*#__PURE__*/_react.default.createElement("tr", {
48
69
  key: base
49
- }, /*#__PURE__*/_react.default.createElement("td", null, base.toUpperCase()), /*#__PURE__*/_react.default.createElement("td", null, score.total), /*#__PURE__*/_react.default.createElement("td", null, base === 'total' || base === 'skip' ? '---' : "".concat(Math.floor(score.total / (total || score.total || 1) * 100), "%")), /*#__PURE__*/_react.default.createElement("td", null, score['-1'] ? "".concat(score['-1'], "(-)") : '', score['1'] ? "".concat(score['1'], "(+)") : ''), /*#__PURE__*/_react.default.createElement("td", null, key));
70
+ }, /*#__PURE__*/_react.default.createElement("td", null, base.toUpperCase()), /*#__PURE__*/_react.default.createElement("td", null, score.total), /*#__PURE__*/_react.default.createElement("td", null, base === 'total' || base === 'skip' ? '---' : pct(score.total, all)), /*#__PURE__*/_react.default.createElement("td", null, score['-1'] ? "".concat(score['-1'], "(-)") : '', score['1'] ? "".concat(score['1'], "(+)") : ''), /*#__PURE__*/_react.default.createElement("td", null, key));
50
71
  });
51
72
  }))));
52
73
  });