@jbrowse/plugin-linear-genome-view 1.5.1 → 1.5.2
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/LinearGenomeView/components/HelpDialog.d.ts +5 -0
- package/dist/LinearGenomeView/components/RefNameAutocomplete.d.ts +2 -1
- package/dist/plugin-linear-genome-view.cjs.development.js +254 -198
- package/dist/plugin-linear-genome-view.cjs.development.js.map +1 -1
- package/dist/plugin-linear-genome-view.cjs.production.min.js +1 -1
- package/dist/plugin-linear-genome-view.cjs.production.min.js.map +1 -1
- package/dist/plugin-linear-genome-view.esm.js +255 -199
- package/dist/plugin-linear-genome-view.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/LinearGenomeView/components/HelpDialog.tsx +81 -0
- package/src/LinearGenomeView/components/ImportForm.tsx +18 -27
- package/src/LinearGenomeView/components/LinearGenomeViewSvg.tsx +1 -1
- package/src/LinearGenomeView/components/OverviewRubberBand.tsx +1 -1
- package/src/LinearGenomeView/components/OverviewScaleBar.tsx +6 -2
- package/src/LinearGenomeView/components/RefNameAutocomplete.tsx +132 -114
- package/src/LinearGenomeView/components/SearchResultsDialog.tsx +12 -34
- package/src/LinearGenomeView/components/__snapshots__/LinearGenomeView.test.js.snap +49 -3
|
@@ -51,6 +51,7 @@ var BaseResult = require('@jbrowse/core/TextSearch/BaseResults');
|
|
|
51
51
|
var BaseResult__default = _interopDefault(BaseResult);
|
|
52
52
|
var SearchIcon = _interopDefault(require('@material-ui/icons/Search'));
|
|
53
53
|
var Autocomplete = _interopDefault(require('@material-ui/lab/Autocomplete'));
|
|
54
|
+
var HelpIcon = _interopDefault(require('@material-ui/icons/Help'));
|
|
54
55
|
var CloseIcon = _interopDefault(require('@material-ui/icons/Close'));
|
|
55
56
|
var ArrowForwardIcon = _interopDefault(require('@material-ui/icons/ArrowForward'));
|
|
56
57
|
var ArrowBackIcon = _interopDefault(require('@material-ui/icons/ArrowBack'));
|
|
@@ -65,6 +66,7 @@ var colorManipulator = require('@material-ui/core/styles/colorManipulator');
|
|
|
65
66
|
var Popover = _interopDefault(require('@material-ui/core/Popover'));
|
|
66
67
|
var Tooltip$1 = _interopDefault(require('@material-ui/core/Tooltip'));
|
|
67
68
|
var AssemblySelector = _interopDefault(require('@jbrowse/core/ui/AssemblySelector'));
|
|
69
|
+
var ErrorMessage = _interopDefault(require('@jbrowse/core/ui/ErrorMessage'));
|
|
68
70
|
var ArrowDown = _interopDefault(require('@material-ui/icons/KeyboardArrowDown'));
|
|
69
71
|
var Menu = _interopDefault(require('@jbrowse/core/ui/Menu'));
|
|
70
72
|
var copy = _interopDefault(require('copy-to-clipboard'));
|
|
@@ -2518,7 +2520,9 @@ function mathPower(num) {
|
|
|
2518
2520
|
return "".concat(mathPower(~~(num / 1000)), ",").concat("00".concat(~~(num % 1000)).substr(-3, 3));
|
|
2519
2521
|
}
|
|
2520
2522
|
|
|
2521
|
-
var useStyles$4 = /*#__PURE__*/styles.makeStyles(function
|
|
2523
|
+
var useStyles$4 = /*#__PURE__*/styles.makeStyles(function
|
|
2524
|
+
/* theme */
|
|
2525
|
+
() {
|
|
2522
2526
|
return {
|
|
2523
2527
|
majorTickLabel: {
|
|
2524
2528
|
fontSize: '11px'
|
|
@@ -2701,7 +2705,7 @@ function OverviewRubberBand(_ref2) {
|
|
|
2701
2705
|
|
|
2702
2706
|
|
|
2703
2707
|
if (controlsRef.current && startX !== undefined && currentX === undefined) {
|
|
2704
|
-
var clickedAt = overview.pxToBp(startX);
|
|
2708
|
+
var clickedAt = overview.pxToBp(startX - cytobandOffset);
|
|
2705
2709
|
model.centerAt(Math.round(clickedAt.coord), clickedAt.refName, clickedAt.index);
|
|
2706
2710
|
}
|
|
2707
2711
|
|
|
@@ -2905,7 +2909,7 @@ var useStyles$6 = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
|
2905
2909
|
height: HEADER_OVERVIEW_HEIGHT,
|
|
2906
2910
|
pointerEvents: 'none',
|
|
2907
2911
|
zIndex: 100,
|
|
2908
|
-
border: '1px solid
|
|
2912
|
+
border: '1px solid'
|
|
2909
2913
|
},
|
|
2910
2914
|
overview: {
|
|
2911
2915
|
height: HEADER_BAR_HEIGHT,
|
|
@@ -3149,6 +3153,8 @@ var ScaleBar = /*#__PURE__*/mobxReact.observer(function (_ref6) {
|
|
|
3149
3153
|
var lastOverviewPx = overview.bpToPx(_objectSpread2(_objectSpread2({}, last), {}, {
|
|
3150
3154
|
coord: last.reversed ? last.start : last.end
|
|
3151
3155
|
})) || 0;
|
|
3156
|
+
var color = showCytobands ? '#f00' : scaleBarColor;
|
|
3157
|
+
var transparency = showCytobands ? 0.1 : 0.3;
|
|
3152
3158
|
return /*#__PURE__*/React__default.createElement("div", {
|
|
3153
3159
|
className: classes.scaleBar
|
|
3154
3160
|
}, /*#__PURE__*/React__default.createElement("div", {
|
|
@@ -3156,7 +3162,8 @@ var ScaleBar = /*#__PURE__*/mobxReact.observer(function (_ref6) {
|
|
|
3156
3162
|
style: {
|
|
3157
3163
|
width: lastOverviewPx - firstOverviewPx,
|
|
3158
3164
|
left: firstOverviewPx + cytobandOffset,
|
|
3159
|
-
background:
|
|
3165
|
+
background: core.alpha(color, transparency),
|
|
3166
|
+
borderColor: color
|
|
3160
3167
|
}
|
|
3161
3168
|
}), overviewVisibleRegions.map(function (block, idx) {
|
|
3162
3169
|
return !(block instanceof blockTypes.ContentBlock) ? /*#__PURE__*/React__default.createElement("div", {
|
|
@@ -3374,7 +3381,7 @@ var SVGHeader = function SVGHeader(_ref3) {
|
|
|
3374
3381
|
block: block
|
|
3375
3382
|
}), /*#__PURE__*/React__default.createElement("rect", {
|
|
3376
3383
|
stroke: "red",
|
|
3377
|
-
fill: "
|
|
3384
|
+
fill: "rgb(255,0,0,0.1)",
|
|
3378
3385
|
width: Math.max(lastOverviewPx - firstOverviewPx, 0.5),
|
|
3379
3386
|
height: HEADER_OVERVIEW_HEIGHT - 1,
|
|
3380
3387
|
x: firstOverviewPx,
|
|
@@ -3549,6 +3556,9 @@ function dedupe() {
|
|
|
3549
3556
|
});
|
|
3550
3557
|
}
|
|
3551
3558
|
|
|
3559
|
+
var HelpDialog = /*#__PURE__*/React.lazy(function () {
|
|
3560
|
+
return Promise.resolve().then(function () { return HelpDialog$2; });
|
|
3561
|
+
}); // the logic of this method is to only apply a filter to RefSequenceResults
|
|
3552
3562
|
// because they do not have a matchedObject. the trix search results already
|
|
3553
3563
|
// filter so don't need re-filtering
|
|
3554
3564
|
|
|
@@ -3580,6 +3590,8 @@ function RefNameAutocomplete(_ref) {
|
|
|
3580
3590
|
style = _ref.style,
|
|
3581
3591
|
fetchResults = _ref.fetchResults,
|
|
3582
3592
|
value = _ref.value,
|
|
3593
|
+
_ref$minWidth = _ref.minWidth,
|
|
3594
|
+
minWidth = _ref$minWidth === void 0 ? 200 : _ref$minWidth,
|
|
3583
3595
|
_ref$TextFieldProps = _ref.TextFieldProps,
|
|
3584
3596
|
TextFieldProps = _ref$TextFieldProps === void 0 ? {} : _ref$TextFieldProps;
|
|
3585
3597
|
var session = util.getSession(model);
|
|
@@ -3595,20 +3607,25 @@ function RefNameAutocomplete(_ref) {
|
|
|
3595
3607
|
loaded = _useState4[0],
|
|
3596
3608
|
setLoaded = _useState4[1];
|
|
3597
3609
|
|
|
3598
|
-
var _useState5 = React.useState(
|
|
3610
|
+
var _useState5 = React.useState(false),
|
|
3599
3611
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
3600
|
-
|
|
3601
|
-
|
|
3612
|
+
isHelpDialogDisplayed = _useState6[0],
|
|
3613
|
+
setHelpDialogDisplayed = _useState6[1];
|
|
3602
3614
|
|
|
3603
3615
|
var _useState7 = React.useState(''),
|
|
3604
3616
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
3605
|
-
|
|
3606
|
-
|
|
3617
|
+
currentSearch = _useState8[0],
|
|
3618
|
+
setCurrentSearch = _useState8[1];
|
|
3607
3619
|
|
|
3608
|
-
var _useState9 = React.useState(),
|
|
3620
|
+
var _useState9 = React.useState(''),
|
|
3609
3621
|
_useState10 = _slicedToArray(_useState9, 2),
|
|
3610
|
-
|
|
3611
|
-
|
|
3622
|
+
inputValue = _useState10[0],
|
|
3623
|
+
setInputValue = _useState10[1];
|
|
3624
|
+
|
|
3625
|
+
var _useState11 = React.useState(),
|
|
3626
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
3627
|
+
searchOptions = _useState12[0],
|
|
3628
|
+
setSearchOptions = _useState12[1];
|
|
3612
3629
|
|
|
3613
3630
|
var debouncedSearch = util.useDebounce(currentSearch, 300);
|
|
3614
3631
|
var coarseVisibleLocStrings = model.coarseVisibleLocStrings,
|
|
@@ -3688,12 +3705,13 @@ function RefNameAutocomplete(_ref) {
|
|
|
3688
3705
|
active = false;
|
|
3689
3706
|
};
|
|
3690
3707
|
}, [assemblyName, fetchResults, debouncedSearch, session, model]);
|
|
3691
|
-
var inputBoxVal = coarseVisibleLocStrings || value || ''; // heuristic, text width + icon width
|
|
3708
|
+
var inputBoxVal = coarseVisibleLocStrings || value || ''; // heuristic, text width + icon width
|
|
3709
|
+
// + 45 accomodates help icon and search icon
|
|
3692
3710
|
|
|
3693
|
-
var width = Math.min(Math.max(util.measureText(inputBoxVal, 16) +
|
|
3711
|
+
var width = Math.min(Math.max(util.measureText(inputBoxVal, 16) + 45, minWidth), 550); // notes on implementation:
|
|
3694
3712
|
// The selectOnFocus setting helps highlight the field when clicked
|
|
3695
3713
|
|
|
3696
|
-
return /*#__PURE__*/React__default.createElement(Autocomplete, {
|
|
3714
|
+
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Autocomplete, {
|
|
3697
3715
|
id: "refNameAutocomplete-".concat(model.id),
|
|
3698
3716
|
"data-testid": "autocomplete",
|
|
3699
3717
|
disableListWrap: true,
|
|
@@ -3777,7 +3795,11 @@ function RefNameAutocomplete(_ref) {
|
|
|
3777
3795
|
style: {
|
|
3778
3796
|
marginRight: 7
|
|
3779
3797
|
}
|
|
3780
|
-
}, /*#__PURE__*/React__default.createElement(SearchIcon, null)
|
|
3798
|
+
}, /*#__PURE__*/React__default.createElement(SearchIcon, null), /*#__PURE__*/React__default.createElement(core.IconButton, {
|
|
3799
|
+
onClick: function onClick() {
|
|
3800
|
+
return setHelpDialogDisplayed(true);
|
|
3801
|
+
}
|
|
3802
|
+
}, /*#__PURE__*/React__default.createElement(HelpIcon, null))), params.InputProps.endAdornment)
|
|
3781
3803
|
}),
|
|
3782
3804
|
placeholder: "Search for location",
|
|
3783
3805
|
onChange: function onChange(e) {
|
|
@@ -3800,7 +3822,11 @@ function RefNameAutocomplete(_ref) {
|
|
|
3800
3822
|
getOptionLabel: function getOptionLabel(option) {
|
|
3801
3823
|
return (typeof option === 'string' ? option : option.result.getLabel()) || '';
|
|
3802
3824
|
}
|
|
3803
|
-
})
|
|
3825
|
+
}), isHelpDialogDisplayed ? /*#__PURE__*/React__default.createElement(HelpDialog, {
|
|
3826
|
+
handleClose: function handleClose() {
|
|
3827
|
+
return setHelpDialogDisplayed(false);
|
|
3828
|
+
}
|
|
3829
|
+
}) : null);
|
|
3804
3830
|
}
|
|
3805
3831
|
|
|
3806
3832
|
var RefNameAutocomplete$1 = /*#__PURE__*/mobxReact.observer(RefNameAutocomplete);
|
|
@@ -5307,158 +5333,10 @@ function TracksContainer(_ref) {
|
|
|
5307
5333
|
|
|
5308
5334
|
var TracksContainer$1 = /*#__PURE__*/mobxReact.observer(TracksContainer);
|
|
5309
5335
|
|
|
5310
|
-
var
|
|
5311
|
-
return {
|
|
5312
|
-
dialogContent: {
|
|
5313
|
-
width: '80em'
|
|
5314
|
-
},
|
|
5315
|
-
closeButton: {
|
|
5316
|
-
position: 'absolute',
|
|
5317
|
-
right: theme.spacing(1),
|
|
5318
|
-
top: theme.spacing(1),
|
|
5319
|
-
color: theme.palette.grey[500]
|
|
5320
|
-
}
|
|
5321
|
-
};
|
|
5336
|
+
var SearchResultsDialog = /*#__PURE__*/React.lazy(function () {
|
|
5337
|
+
return Promise.resolve().then(function () { return SearchResultsDialog$2; });
|
|
5322
5338
|
});
|
|
5323
|
-
function
|
|
5324
|
-
var _model$searchResults;
|
|
5325
|
-
|
|
5326
|
-
var model = _ref.model,
|
|
5327
|
-
optAssemblyName = _ref.optAssemblyName,
|
|
5328
|
-
handleClose = _ref.handleClose;
|
|
5329
|
-
var classes = useStyles$i();
|
|
5330
|
-
var session = util.getSession(model);
|
|
5331
|
-
|
|
5332
|
-
var _getEnv = mobxStateTree.getEnv(session),
|
|
5333
|
-
pluginManager = _getEnv.pluginManager;
|
|
5334
|
-
|
|
5335
|
-
var assemblyManager = session.assemblyManager;
|
|
5336
|
-
var assemblyName = optAssemblyName;
|
|
5337
|
-
|
|
5338
|
-
if (model.displayedRegions.length > 0) {
|
|
5339
|
-
var _model$displayedRegio;
|
|
5340
|
-
|
|
5341
|
-
assemblyName = (_model$displayedRegio = model.displayedRegions[0]) === null || _model$displayedRegio === void 0 ? void 0 : _model$displayedRegio.assemblyName;
|
|
5342
|
-
}
|
|
5343
|
-
|
|
5344
|
-
if (!assemblyName) {
|
|
5345
|
-
throw new Error("Assembly name not found");
|
|
5346
|
-
}
|
|
5347
|
-
|
|
5348
|
-
var assembly = assemblyManager.get(assemblyName);
|
|
5349
|
-
|
|
5350
|
-
if (!assembly) {
|
|
5351
|
-
throw new Error("assembly ".concat(assemblyName, " not found"));
|
|
5352
|
-
}
|
|
5353
|
-
|
|
5354
|
-
if (!assembly.regions) {
|
|
5355
|
-
throw new Error("assembly ".concat(assemblyName, " regions not loaded"));
|
|
5356
|
-
}
|
|
5357
|
-
|
|
5358
|
-
var assemblyRegions = assembly.regions;
|
|
5359
|
-
|
|
5360
|
-
function handleClick(location) {
|
|
5361
|
-
try {
|
|
5362
|
-
var newRegion = assemblyRegions.find(function (region) {
|
|
5363
|
-
return location === region.refName;
|
|
5364
|
-
});
|
|
5365
|
-
|
|
5366
|
-
if (newRegion) {
|
|
5367
|
-
model.setDisplayedRegions([newRegion]); // we use showAllRegions after setDisplayedRegions to make the entire
|
|
5368
|
-
// region visible, xref #1703
|
|
5369
|
-
|
|
5370
|
-
model.showAllRegions();
|
|
5371
|
-
} else {
|
|
5372
|
-
model.navToLocString(location, assemblyName);
|
|
5373
|
-
}
|
|
5374
|
-
} catch (e) {
|
|
5375
|
-
console.warn(e);
|
|
5376
|
-
session.notify("".concat(e), 'warning');
|
|
5377
|
-
}
|
|
5378
|
-
}
|
|
5379
|
-
|
|
5380
|
-
function getTrackName(trackId) {
|
|
5381
|
-
if (trackId) {
|
|
5382
|
-
var trackConfigSchema = pluginManager.pluggableConfigSchemaType('track');
|
|
5383
|
-
var configuration = mobxStateTree.resolveIdentifier(trackConfigSchema, mobxStateTree.getRoot(model), trackId);
|
|
5384
|
-
|
|
5385
|
-
if (configuration) {
|
|
5386
|
-
var _configuration$name;
|
|
5387
|
-
|
|
5388
|
-
return (_configuration$name = configuration.name) === null || _configuration$name === void 0 ? void 0 : _configuration$name.value;
|
|
5389
|
-
}
|
|
5390
|
-
}
|
|
5391
|
-
|
|
5392
|
-
return '';
|
|
5393
|
-
}
|
|
5394
|
-
|
|
5395
|
-
return /*#__PURE__*/React__default.createElement(core.Dialog, {
|
|
5396
|
-
open: true,
|
|
5397
|
-
maxWidth: "xl",
|
|
5398
|
-
onClose: handleClose
|
|
5399
|
-
}, /*#__PURE__*/React__default.createElement(core.DialogTitle, {
|
|
5400
|
-
id: "search-results-dialog"
|
|
5401
|
-
}, "Search Results", handleClose ? /*#__PURE__*/React__default.createElement(core.IconButton, {
|
|
5402
|
-
"data-testid": "close-resultsDialog",
|
|
5403
|
-
className: classes.closeButton,
|
|
5404
|
-
onClick: function onClick() {
|
|
5405
|
-
handleClose();
|
|
5406
|
-
}
|
|
5407
|
-
}, /*#__PURE__*/React__default.createElement(CloseIcon, null)) : null), /*#__PURE__*/React__default.createElement(core.Divider, null), /*#__PURE__*/React__default.createElement(core.DialogContent, null, ((_model$searchResults = model.searchResults) === null || _model$searchResults === void 0 ? void 0 : _model$searchResults.length) === 0 || model.searchResults === undefined ? /*#__PURE__*/React__default.createElement(core.Typography, null, "No results found for ", /*#__PURE__*/React__default.createElement("b", null, model.searchQuery)) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(core.DialogContentText, {
|
|
5408
|
-
id: "alert-dialog-slide-description"
|
|
5409
|
-
}, "Showing results for ", /*#__PURE__*/React__default.createElement("b", null, model.searchQuery)), /*#__PURE__*/React__default.createElement(core.TableContainer, {
|
|
5410
|
-
component: core.Paper
|
|
5411
|
-
}, /*#__PURE__*/React__default.createElement(core.Table, null, /*#__PURE__*/React__default.createElement(core.TableHead, null, /*#__PURE__*/React__default.createElement(core.TableRow, null, /*#__PURE__*/React__default.createElement(core.TableCell, null, "Name"), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
5412
|
-
align: "right"
|
|
5413
|
-
}, "Location"), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
5414
|
-
align: "right"
|
|
5415
|
-
}, "Track"), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
5416
|
-
align: "right"
|
|
5417
|
-
}))), /*#__PURE__*/React__default.createElement(core.TableBody, null, model.searchResults.map(function (result, index) {
|
|
5418
|
-
return /*#__PURE__*/React__default.createElement(core.TableRow, {
|
|
5419
|
-
key: "".concat(result.getLabel(), "-").concat(index)
|
|
5420
|
-
}, /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
5421
|
-
component: "th",
|
|
5422
|
-
scope: "row"
|
|
5423
|
-
}, result.getLabel()), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
5424
|
-
align: "right"
|
|
5425
|
-
}, result.getLocation()), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
5426
|
-
align: "right"
|
|
5427
|
-
}, getTrackName(result.getTrackId()) || 'N/A'), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
5428
|
-
align: "right"
|
|
5429
|
-
}, /*#__PURE__*/React__default.createElement(core.Button, {
|
|
5430
|
-
onClick: function onClick() {
|
|
5431
|
-
handleClick(result.getLocation());
|
|
5432
|
-
handleClose();
|
|
5433
|
-
},
|
|
5434
|
-
color: "primary",
|
|
5435
|
-
variant: "contained"
|
|
5436
|
-
}, "Go to location")), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
5437
|
-
align: "right"
|
|
5438
|
-
}, /*#__PURE__*/React__default.createElement(core.Button, {
|
|
5439
|
-
onClick: function onClick() {
|
|
5440
|
-
handleClick(result.getLocation());
|
|
5441
|
-
var resultTrackId = result.getTrackId();
|
|
5442
|
-
|
|
5443
|
-
if (resultTrackId) {
|
|
5444
|
-
model.showTrack(resultTrackId);
|
|
5445
|
-
}
|
|
5446
|
-
|
|
5447
|
-
handleClose();
|
|
5448
|
-
},
|
|
5449
|
-
disabled: !getTrackName(result.getTrackId()),
|
|
5450
|
-
color: "primary",
|
|
5451
|
-
variant: "contained"
|
|
5452
|
-
}, "Show Track")));
|
|
5453
|
-
})))))), /*#__PURE__*/React__default.createElement(core.Divider, null), /*#__PURE__*/React__default.createElement(core.DialogActions, null, /*#__PURE__*/React__default.createElement(core.Button, {
|
|
5454
|
-
onClick: function onClick() {
|
|
5455
|
-
handleClose();
|
|
5456
|
-
},
|
|
5457
|
-
color: "primary"
|
|
5458
|
-
}, "Cancel")));
|
|
5459
|
-
}
|
|
5460
|
-
|
|
5461
|
-
var useStyles$j = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
5339
|
+
var useStyles$i = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
5462
5340
|
return {
|
|
5463
5341
|
importFormContainer: {
|
|
5464
5342
|
padding: theme.spacing(2)
|
|
@@ -5468,18 +5346,11 @@ var useStyles$j = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
|
5468
5346
|
}
|
|
5469
5347
|
};
|
|
5470
5348
|
});
|
|
5471
|
-
var
|
|
5472
|
-
var error = _ref.error;
|
|
5473
|
-
return /*#__PURE__*/React__default.createElement(core.Typography, {
|
|
5474
|
-
variant: "h6",
|
|
5475
|
-
color: "error"
|
|
5476
|
-
}, "".concat(error));
|
|
5477
|
-
});
|
|
5478
|
-
var ImportForm = /*#__PURE__*/mobxReact.observer(function (_ref2) {
|
|
5349
|
+
var ImportForm = /*#__PURE__*/mobxReact.observer(function (_ref) {
|
|
5479
5350
|
var _regions$;
|
|
5480
5351
|
|
|
5481
|
-
var model =
|
|
5482
|
-
var classes = useStyles$
|
|
5352
|
+
var model = _ref.model;
|
|
5353
|
+
var classes = useStyles$i();
|
|
5483
5354
|
var session = util.getSession(model);
|
|
5484
5355
|
var assemblyNames = session.assemblyNames,
|
|
5485
5356
|
assemblyManager = session.assemblyManager,
|
|
@@ -5518,14 +5389,11 @@ var ImportForm = /*#__PURE__*/mobxReact.observer(function (_ref2) {
|
|
|
5518
5389
|
|
|
5519
5390
|
function fetchResults(_x, _x2) {
|
|
5520
5391
|
return _fetchResults.apply(this, arguments);
|
|
5521
|
-
}
|
|
5522
|
-
|
|
5523
|
-
|
|
5524
|
-
|
|
5525
|
-
|
|
5526
|
-
* 2) if it's a single result navigate to it
|
|
5527
|
-
* 3) else assume it's a locstring and navigate to it
|
|
5528
|
-
*/
|
|
5392
|
+
} // gets a string as input, or use stored option results from previous query,
|
|
5393
|
+
// then re-query and
|
|
5394
|
+
// 1) if it has multiple results: pop a dialog
|
|
5395
|
+
// 2) if it's a single result navigate to it
|
|
5396
|
+
// 3) else assume it's a locstring and navigate to it
|
|
5529
5397
|
|
|
5530
5398
|
|
|
5531
5399
|
function _fetchResults() {
|
|
@@ -5651,13 +5519,13 @@ var ImportForm = /*#__PURE__*/mobxReact.observer(function (_ref2) {
|
|
|
5651
5519
|
return _handleSelectedRegion.apply(this, arguments);
|
|
5652
5520
|
}
|
|
5653
5521
|
|
|
5654
|
-
return /*#__PURE__*/React__default.createElement("div", null, err ? /*#__PURE__*/React__default.createElement(
|
|
5522
|
+
return /*#__PURE__*/React__default.createElement("div", null, err ? /*#__PURE__*/React__default.createElement(ErrorMessage, {
|
|
5655
5523
|
error: err
|
|
5656
5524
|
}) : null, /*#__PURE__*/React__default.createElement(core.Container, {
|
|
5657
5525
|
className: classes.importFormContainer
|
|
5658
5526
|
}, /*#__PURE__*/React__default.createElement("form", {
|
|
5659
5527
|
onSubmit: function onSubmit(event) {
|
|
5660
|
-
event.preventDefault();
|
|
5528
|
+
return event.preventDefault();
|
|
5661
5529
|
}
|
|
5662
5530
|
}, /*#__PURE__*/React__default.createElement(core.Grid, {
|
|
5663
5531
|
container: true,
|
|
@@ -5675,20 +5543,24 @@ var ImportForm = /*#__PURE__*/mobxReact.observer(function (_ref2) {
|
|
|
5675
5543
|
selected: selectedAsm
|
|
5676
5544
|
})), /*#__PURE__*/React__default.createElement(core.Grid, {
|
|
5677
5545
|
item: true
|
|
5678
|
-
}, selectedAsm ? err ? /*#__PURE__*/React__default.createElement(
|
|
5679
|
-
|
|
5680
|
-
|
|
5546
|
+
}, selectedAsm ? err ? /*#__PURE__*/React__default.createElement(CloseIcon, {
|
|
5547
|
+
style: {
|
|
5548
|
+
color: 'red'
|
|
5549
|
+
}
|
|
5550
|
+
}) : selectedRegion ? /*#__PURE__*/React__default.createElement(RefNameAutocomplete$1, {
|
|
5681
5551
|
fetchResults: fetchResults,
|
|
5682
5552
|
model: model,
|
|
5683
5553
|
assemblyName: assemblyError ? undefined : selectedAsm,
|
|
5684
5554
|
value: selectedRegion,
|
|
5555
|
+
// note: minWidth 270 accomodates full width of helperText
|
|
5556
|
+
minWidth: 270,
|
|
5685
5557
|
onSelect: function onSelect(option) {
|
|
5686
5558
|
return setOption(option);
|
|
5687
5559
|
},
|
|
5688
5560
|
TextFieldProps: {
|
|
5689
5561
|
margin: 'normal',
|
|
5690
5562
|
variant: 'outlined',
|
|
5691
|
-
helperText: 'Enter
|
|
5563
|
+
helperText: 'Enter sequence name, feature name, or location'
|
|
5692
5564
|
}
|
|
5693
5565
|
}) : /*#__PURE__*/React__default.createElement(core.CircularProgress, {
|
|
5694
5566
|
role: "progressbar",
|
|
@@ -5696,6 +5568,8 @@ var ImportForm = /*#__PURE__*/mobxReact.observer(function (_ref2) {
|
|
|
5696
5568
|
disableShrink: true
|
|
5697
5569
|
}) : null), /*#__PURE__*/React__default.createElement(core.Grid, {
|
|
5698
5570
|
item: true
|
|
5571
|
+
}), /*#__PURE__*/React__default.createElement(core.Grid, {
|
|
5572
|
+
item: true
|
|
5699
5573
|
}, /*#__PURE__*/React__default.createElement(core.Button, {
|
|
5700
5574
|
type: "submit",
|
|
5701
5575
|
disabled: !selectedRegion,
|
|
@@ -5776,7 +5650,7 @@ var MiniControls = /*#__PURE__*/mobxReact.observer(function (props) {
|
|
|
5776
5650
|
}));
|
|
5777
5651
|
});
|
|
5778
5652
|
|
|
5779
|
-
var useStyles$
|
|
5653
|
+
var useStyles$j = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
5780
5654
|
return {
|
|
5781
5655
|
loadingMessage: {
|
|
5782
5656
|
padding: theme.spacing(5)
|
|
@@ -5872,7 +5746,7 @@ function _fetchSequence() {
|
|
|
5872
5746
|
function SequenceDialog(_ref) {
|
|
5873
5747
|
var model = _ref.model,
|
|
5874
5748
|
handleClose = _ref.handleClose;
|
|
5875
|
-
var classes = useStyles$
|
|
5749
|
+
var classes = useStyles$j();
|
|
5876
5750
|
var session = util.getSession(model);
|
|
5877
5751
|
|
|
5878
5752
|
var _useState = React.useState(),
|
|
@@ -6037,6 +5911,150 @@ function SequenceDialog(_ref) {
|
|
|
6037
5911
|
|
|
6038
5912
|
var SequenceDialog$1 = /*#__PURE__*/mobxReact.observer(SequenceDialog);
|
|
6039
5913
|
|
|
5914
|
+
var useStyles$k = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
5915
|
+
return {
|
|
5916
|
+
dialogContent: {
|
|
5917
|
+
width: '80em'
|
|
5918
|
+
},
|
|
5919
|
+
closeButton: {
|
|
5920
|
+
position: 'absolute',
|
|
5921
|
+
right: theme.spacing(1),
|
|
5922
|
+
top: theme.spacing(1),
|
|
5923
|
+
color: theme.palette.grey[500]
|
|
5924
|
+
}
|
|
5925
|
+
};
|
|
5926
|
+
});
|
|
5927
|
+
function SearchResultsDialog$1(_ref) {
|
|
5928
|
+
var _model$searchResults;
|
|
5929
|
+
|
|
5930
|
+
var model = _ref.model,
|
|
5931
|
+
optAssemblyName = _ref.optAssemblyName,
|
|
5932
|
+
handleClose = _ref.handleClose;
|
|
5933
|
+
var classes = useStyles$k();
|
|
5934
|
+
var session = util.getSession(model);
|
|
5935
|
+
|
|
5936
|
+
var _getEnv = mobxStateTree.getEnv(session),
|
|
5937
|
+
pluginManager = _getEnv.pluginManager;
|
|
5938
|
+
|
|
5939
|
+
var assemblyManager = session.assemblyManager;
|
|
5940
|
+
var assemblyName = optAssemblyName;
|
|
5941
|
+
|
|
5942
|
+
if (model.displayedRegions.length > 0) {
|
|
5943
|
+
var _model$displayedRegio;
|
|
5944
|
+
|
|
5945
|
+
assemblyName = (_model$displayedRegio = model.displayedRegions[0]) === null || _model$displayedRegio === void 0 ? void 0 : _model$displayedRegio.assemblyName;
|
|
5946
|
+
}
|
|
5947
|
+
|
|
5948
|
+
if (!assemblyName) {
|
|
5949
|
+
throw new Error("Assembly name not found");
|
|
5950
|
+
}
|
|
5951
|
+
|
|
5952
|
+
var assembly = assemblyManager.get(assemblyName);
|
|
5953
|
+
|
|
5954
|
+
if (!assembly) {
|
|
5955
|
+
throw new Error("assembly ".concat(assemblyName, " not found"));
|
|
5956
|
+
}
|
|
5957
|
+
|
|
5958
|
+
if (!assembly.regions) {
|
|
5959
|
+
throw new Error("assembly ".concat(assemblyName, " regions not loaded"));
|
|
5960
|
+
}
|
|
5961
|
+
|
|
5962
|
+
var assemblyRegions = assembly.regions;
|
|
5963
|
+
|
|
5964
|
+
function handleClick(location) {
|
|
5965
|
+
try {
|
|
5966
|
+
var newRegion = assemblyRegions.find(function (region) {
|
|
5967
|
+
return location === region.refName;
|
|
5968
|
+
});
|
|
5969
|
+
|
|
5970
|
+
if (newRegion) {
|
|
5971
|
+
model.setDisplayedRegions([newRegion]); // we use showAllRegions after setDisplayedRegions to make the entire
|
|
5972
|
+
// region visible, xref #1703
|
|
5973
|
+
|
|
5974
|
+
model.showAllRegions();
|
|
5975
|
+
} else {
|
|
5976
|
+
model.navToLocString(location, assemblyName);
|
|
5977
|
+
}
|
|
5978
|
+
} catch (e) {
|
|
5979
|
+
console.warn(e);
|
|
5980
|
+
session.notify("".concat(e), 'warning');
|
|
5981
|
+
}
|
|
5982
|
+
}
|
|
5983
|
+
|
|
5984
|
+
function getTrackName(trackId) {
|
|
5985
|
+
if (trackId) {
|
|
5986
|
+
var trackConfigSchema = pluginManager.pluggableConfigSchemaType('track');
|
|
5987
|
+
var configuration = mobxStateTree.resolveIdentifier(trackConfigSchema, mobxStateTree.getRoot(model), trackId);
|
|
5988
|
+
|
|
5989
|
+
if (configuration) {
|
|
5990
|
+
var _configuration$name;
|
|
5991
|
+
|
|
5992
|
+
return (_configuration$name = configuration.name) === null || _configuration$name === void 0 ? void 0 : _configuration$name.value;
|
|
5993
|
+
}
|
|
5994
|
+
}
|
|
5995
|
+
|
|
5996
|
+
return '';
|
|
5997
|
+
}
|
|
5998
|
+
|
|
5999
|
+
return /*#__PURE__*/React__default.createElement(core.Dialog, {
|
|
6000
|
+
open: true,
|
|
6001
|
+
maxWidth: "xl",
|
|
6002
|
+
onClose: handleClose
|
|
6003
|
+
}, /*#__PURE__*/React__default.createElement(core.DialogTitle, null, "Search results", handleClose ? /*#__PURE__*/React__default.createElement(core.IconButton, {
|
|
6004
|
+
"data-testid": "close-resultsDialog",
|
|
6005
|
+
className: classes.closeButton,
|
|
6006
|
+
onClick: function onClick() {
|
|
6007
|
+
handleClose();
|
|
6008
|
+
}
|
|
6009
|
+
}, /*#__PURE__*/React__default.createElement(CloseIcon, null)) : null), /*#__PURE__*/React__default.createElement(core.Divider, null), /*#__PURE__*/React__default.createElement(core.DialogContent, null, !((_model$searchResults = model.searchResults) !== null && _model$searchResults !== void 0 && _model$searchResults.length) ? /*#__PURE__*/React__default.createElement(core.Typography, null, "No results found for ", /*#__PURE__*/React__default.createElement("b", null, model.searchQuery)) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(core.Typography, null, "Showing results for ", /*#__PURE__*/React__default.createElement("b", null, model.searchQuery)), /*#__PURE__*/React__default.createElement(core.TableContainer, {
|
|
6010
|
+
component: core.Paper
|
|
6011
|
+
}, /*#__PURE__*/React__default.createElement(core.Table, null, /*#__PURE__*/React__default.createElement(core.TableHead, null, /*#__PURE__*/React__default.createElement(core.TableRow, null, /*#__PURE__*/React__default.createElement(core.TableCell, null, "Name"), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
6012
|
+
align: "right"
|
|
6013
|
+
}, "Location"), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
6014
|
+
align: "right"
|
|
6015
|
+
}, "Track"), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
6016
|
+
align: "right"
|
|
6017
|
+
}))), /*#__PURE__*/React__default.createElement(core.TableBody, null, model.searchResults.map(function (result) {
|
|
6018
|
+
return /*#__PURE__*/React__default.createElement(core.TableRow, {
|
|
6019
|
+
key: "".concat(result.getId())
|
|
6020
|
+
}, /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
6021
|
+
component: "th",
|
|
6022
|
+
scope: "row"
|
|
6023
|
+
}, result.getLabel()), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
6024
|
+
align: "right"
|
|
6025
|
+
}, result.getLocation()), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
6026
|
+
align: "right"
|
|
6027
|
+
}, getTrackName(result.getTrackId()) || 'N/A'), /*#__PURE__*/React__default.createElement(core.TableCell, {
|
|
6028
|
+
align: "right"
|
|
6029
|
+
}, /*#__PURE__*/React__default.createElement(core.Button, {
|
|
6030
|
+
onClick: function onClick() {
|
|
6031
|
+
handleClick(result.getLocation());
|
|
6032
|
+
var resultTrackId = result.getTrackId();
|
|
6033
|
+
|
|
6034
|
+
if (resultTrackId) {
|
|
6035
|
+
model.showTrack(resultTrackId);
|
|
6036
|
+
}
|
|
6037
|
+
|
|
6038
|
+
handleClose();
|
|
6039
|
+
},
|
|
6040
|
+
disabled: !getTrackName(result.getTrackId()),
|
|
6041
|
+
color: "primary",
|
|
6042
|
+
variant: "contained"
|
|
6043
|
+
}, "Go")));
|
|
6044
|
+
})))))), /*#__PURE__*/React__default.createElement(core.Divider, null), /*#__PURE__*/React__default.createElement(core.DialogActions, null, /*#__PURE__*/React__default.createElement(core.Button, {
|
|
6045
|
+
onClick: function onClick() {
|
|
6046
|
+
return handleClose();
|
|
6047
|
+
},
|
|
6048
|
+
color: "primary"
|
|
6049
|
+
}, "Cancel")));
|
|
6050
|
+
}
|
|
6051
|
+
|
|
6052
|
+
var SearchResultsDialog$2 = {
|
|
6053
|
+
__proto__: null,
|
|
6054
|
+
useStyles: useStyles$k,
|
|
6055
|
+
'default': SearchResultsDialog$1
|
|
6056
|
+
};
|
|
6057
|
+
|
|
6040
6058
|
var useStyles$l = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
6041
6059
|
return {
|
|
6042
6060
|
note: {
|
|
@@ -6097,7 +6115,7 @@ var LinearGenomeView = /*#__PURE__*/mobxReact.observer(function (_ref) {
|
|
|
6097
6115
|
handleClose: function handleClose() {
|
|
6098
6116
|
model.setSequenceDialogOpen(false);
|
|
6099
6117
|
}
|
|
6100
|
-
}) : null, model.isSearchDialogDisplayed ? /*#__PURE__*/React__default.createElement(SearchResultsDialog, {
|
|
6118
|
+
}) : null, model.isSearchDialogDisplayed ? /*#__PURE__*/React__default.createElement(SearchResultsDialog$1, {
|
|
6101
6119
|
model: model,
|
|
6102
6120
|
handleClose: function handleClose() {
|
|
6103
6121
|
model.setSearchResults(undefined, undefined);
|
|
@@ -7200,7 +7218,8 @@ function stateModelFactory$1(pluginManager) {
|
|
|
7200
7218
|
self.zoomTo(self.bpPerPx);
|
|
7201
7219
|
|
|
7202
7220
|
if ( // already zoomed all the way in
|
|
7203
|
-
targetBpPerPx < self.bpPerPx && self.bpPerPx === self.minBpPerPx ||
|
|
7221
|
+
targetBpPerPx < self.bpPerPx && self.bpPerPx === self.minBpPerPx || // already zoomed all the way out
|
|
7222
|
+
targetBpPerPx > self.bpPerPx && self.bpPerPx === self.maxBpPerPx) {
|
|
7204
7223
|
return;
|
|
7205
7224
|
}
|
|
7206
7225
|
|
|
@@ -7729,6 +7748,43 @@ var LinearGenomeViewPlugin = /*#__PURE__*/function (_Plugin) {
|
|
|
7729
7748
|
}(Plugin);
|
|
7730
7749
|
|
|
7731
7750
|
var useStyles$m = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
7751
|
+
return {
|
|
7752
|
+
closeButton: {
|
|
7753
|
+
position: 'absolute',
|
|
7754
|
+
right: theme.spacing(1),
|
|
7755
|
+
top: theme.spacing(1),
|
|
7756
|
+
color: theme.palette.grey[500]
|
|
7757
|
+
}
|
|
7758
|
+
};
|
|
7759
|
+
});
|
|
7760
|
+
function HelpDialog$1(_ref) {
|
|
7761
|
+
var handleClose = _ref.handleClose;
|
|
7762
|
+
var classes = useStyles$m();
|
|
7763
|
+
return /*#__PURE__*/React__default.createElement(core.Dialog, {
|
|
7764
|
+
open: true,
|
|
7765
|
+
maxWidth: "xl",
|
|
7766
|
+
onClose: handleClose
|
|
7767
|
+
}, /*#__PURE__*/React__default.createElement(core.DialogTitle, null, "Using the search box", handleClose ? /*#__PURE__*/React__default.createElement(core.IconButton, {
|
|
7768
|
+
"data-testid": "close-resultsDialog",
|
|
7769
|
+
className: classes.closeButton,
|
|
7770
|
+
onClick: function onClick() {
|
|
7771
|
+
handleClose();
|
|
7772
|
+
}
|
|
7773
|
+
}, /*#__PURE__*/React__default.createElement(CloseIcon, null)) : null), /*#__PURE__*/React__default.createElement(core.Divider, null), /*#__PURE__*/React__default.createElement(core.DialogContent, null, /*#__PURE__*/React__default.createElement("h3", null, "Searching"), /*#__PURE__*/React__default.createElement("ul", null, /*#__PURE__*/React__default.createElement("li", null, "Jump to a feature or reference sequence by typing its name in the location box and pressing Enter."), /*#__PURE__*/React__default.createElement("li", null, "Jump to a specific region by typing the region into the location box as: ", /*#__PURE__*/React__default.createElement("code", null, "ref:start..end"), " or ", /*#__PURE__*/React__default.createElement("code", null, "ref:start-end"), ". Commas are allowed in the start and end coordinates.")), /*#__PURE__*/React__default.createElement("h3", null, "Example Searches"), /*#__PURE__*/React__default.createElement("ul", null, /*#__PURE__*/React__default.createElement("li", null, /*#__PURE__*/React__default.createElement("code", null, "BRCA"), " - searches for the feature named BRCA"), /*#__PURE__*/React__default.createElement("li", null, /*#__PURE__*/React__default.createElement("code", null, "chr4"), " - jumps to chromosome 4"), /*#__PURE__*/React__default.createElement("li", null, /*#__PURE__*/React__default.createElement("code", null, "chr4:79,500,000..80,000,000"), " - jumps the region on chromosome 4 between 79.5Mb and 80Mb."))), /*#__PURE__*/React__default.createElement(core.Divider, null), /*#__PURE__*/React__default.createElement(core.DialogActions, null, /*#__PURE__*/React__default.createElement(core.Button, {
|
|
7774
|
+
onClick: function onClick() {
|
|
7775
|
+
return handleClose();
|
|
7776
|
+
},
|
|
7777
|
+
color: "primary"
|
|
7778
|
+
}, "Close")));
|
|
7779
|
+
}
|
|
7780
|
+
|
|
7781
|
+
var HelpDialog$2 = {
|
|
7782
|
+
__proto__: null,
|
|
7783
|
+
useStyles: useStyles$m,
|
|
7784
|
+
'default': HelpDialog$1
|
|
7785
|
+
};
|
|
7786
|
+
|
|
7787
|
+
var useStyles$n = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
7732
7788
|
return {
|
|
7733
7789
|
root: {
|
|
7734
7790
|
width: 500
|
|
@@ -7748,7 +7804,7 @@ var useStyles$m = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
|
7748
7804
|
function SetMaxHeightDlg$1(props) {
|
|
7749
7805
|
var model = props.model,
|
|
7750
7806
|
handleClose = props.handleClose;
|
|
7751
|
-
var classes = useStyles$
|
|
7807
|
+
var classes = useStyles$n();
|
|
7752
7808
|
var _model$maxHeight = model.maxHeight,
|
|
7753
7809
|
maxHeight = _model$maxHeight === void 0 ? '' : _model$maxHeight;
|
|
7754
7810
|
|