@jbrowse/plugin-circular-view 1.6.9 → 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/BaseChordDisplay/components/BaseChordDisplay.js +53 -0
- package/dist/BaseChordDisplay/components/DisplayError.js +70 -0
- package/dist/BaseChordDisplay/components/Loading.js +122 -0
- package/dist/BaseChordDisplay/components/RpcRenderedSvgGroup.js +96 -0
- package/dist/BaseChordDisplay/index.js +31 -0
- package/dist/BaseChordDisplay/models/BaseChordDisplayModel.js +261 -0
- package/dist/BaseChordDisplay/models/baseChordDisplayConfig.js +20 -0
- package/dist/BaseChordDisplay/models/renderReaction.js +142 -0
- package/dist/CircularView/components/CircularView.js +203 -0
- package/dist/CircularView/components/ImportForm.js +97 -0
- package/dist/CircularView/components/Ruler.js +205 -0
- package/dist/CircularView/models/CircularView.js +422 -0
- package/dist/CircularView/models/slices.js +111 -0
- package/dist/CircularView/models/slices.test.js +83 -0
- package/dist/CircularView/models/viewportVisibleRegion.js +280 -0
- package/dist/CircularView/models/viewportVisibleRegion.test.js +130 -0
- package/dist/index.js +180 -6
- package/package.json +3 -6
|
@@ -0,0 +1,53 @@
|
|
|
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"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _Loading = _interopRequireDefault(require("./Loading"));
|
|
11
|
+
|
|
12
|
+
var _DisplayError = _interopRequireDefault(require("./DisplayError"));
|
|
13
|
+
|
|
14
|
+
var _RpcRenderedSvgGroup = _interopRequireDefault(require("./RpcRenderedSvgGroup"));
|
|
15
|
+
|
|
16
|
+
var _default = function _default(_ref) {
|
|
17
|
+
var lib = _ref.lib,
|
|
18
|
+
load = _ref.load;
|
|
19
|
+
var React = lib.react;
|
|
20
|
+
var _lib$mobxReact = lib['mobx-react'],
|
|
21
|
+
observer = _lib$mobxReact.observer,
|
|
22
|
+
MobxPropTypes = _lib$mobxReact.PropTypes;
|
|
23
|
+
var Loading = load(_Loading["default"]);
|
|
24
|
+
var DisplayError = load(_DisplayError["default"]);
|
|
25
|
+
var RpcRenderedSvgGroup = load(_RpcRenderedSvgGroup["default"]); // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
|
+
|
|
27
|
+
function BaseChordDisplay(_ref2) {
|
|
28
|
+
var display = _ref2.display;
|
|
29
|
+
|
|
30
|
+
if (display.error) {
|
|
31
|
+
return /*#__PURE__*/React.createElement(DisplayError, {
|
|
32
|
+
model: display
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (!display.filled) {
|
|
37
|
+
return /*#__PURE__*/React.createElement(Loading, {
|
|
38
|
+
model: display
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return /*#__PURE__*/React.createElement(RpcRenderedSvgGroup, {
|
|
43
|
+
model: display
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
BaseChordDisplay.propTypes = {
|
|
48
|
+
display: MobxPropTypes.observableObject.isRequired
|
|
49
|
+
};
|
|
50
|
+
return observer(BaseChordDisplay);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var _default = function _default(_ref) {
|
|
9
|
+
var jbrequire = _ref.jbrequire;
|
|
10
|
+
var React = jbrequire('react');
|
|
11
|
+
|
|
12
|
+
var _jbrequire = jbrequire('@material-ui/core/styles'),
|
|
13
|
+
makeStyles = _jbrequire.makeStyles;
|
|
14
|
+
|
|
15
|
+
var _jbrequire2 = jbrequire('mobx-react'),
|
|
16
|
+
observer = _jbrequire2.observer;
|
|
17
|
+
|
|
18
|
+
var useStyles = makeStyles({
|
|
19
|
+
errorMessage: {},
|
|
20
|
+
errorBackground: {},
|
|
21
|
+
errorText: {}
|
|
22
|
+
}); // 'repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255,255,255,.5) 5px, rgba(255,255,255,.5) 10px)',
|
|
23
|
+
|
|
24
|
+
var DisplayError = observer(function (_ref2) {
|
|
25
|
+
var _ref2$model = _ref2.model,
|
|
26
|
+
radius = _ref2$model.renderProps.radius,
|
|
27
|
+
error = _ref2$model.error;
|
|
28
|
+
var classes = useStyles();
|
|
29
|
+
return /*#__PURE__*/React.createElement("g", {
|
|
30
|
+
className: classes.errorMessage
|
|
31
|
+
}, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("pattern", {
|
|
32
|
+
id: "diagonalHatch",
|
|
33
|
+
width: "10",
|
|
34
|
+
height: "10",
|
|
35
|
+
patternTransform: "rotate(45 0 0)",
|
|
36
|
+
patternUnits: "userSpaceOnUse"
|
|
37
|
+
}, /*#__PURE__*/React.createElement("line", {
|
|
38
|
+
x1: "0",
|
|
39
|
+
y1: "0",
|
|
40
|
+
x2: "0",
|
|
41
|
+
y2: "10",
|
|
42
|
+
style: {
|
|
43
|
+
stroke: 'rgba(255,0,0,0.5)',
|
|
44
|
+
strokeWidth: 10
|
|
45
|
+
}
|
|
46
|
+
}))), /*#__PURE__*/React.createElement("circle", {
|
|
47
|
+
className: classes.errorBackground,
|
|
48
|
+
cx: "0",
|
|
49
|
+
cy: "0",
|
|
50
|
+
r: radius,
|
|
51
|
+
fill: "#ffb4b4"
|
|
52
|
+
}), /*#__PURE__*/React.createElement("circle", {
|
|
53
|
+
className: classes.errorPattern,
|
|
54
|
+
cx: "0",
|
|
55
|
+
cy: "0",
|
|
56
|
+
r: radius,
|
|
57
|
+
fill: "url(#diagonalHatch)"
|
|
58
|
+
}), /*#__PURE__*/React.createElement("text", {
|
|
59
|
+
className: classes.errorText,
|
|
60
|
+
x: "0",
|
|
61
|
+
y: "0",
|
|
62
|
+
transform: "rotate(90 0 0)",
|
|
63
|
+
dominantBaseline: "middle",
|
|
64
|
+
textAnchor: "middle"
|
|
65
|
+
}, String(error)));
|
|
66
|
+
});
|
|
67
|
+
return DisplayError;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,122 @@
|
|
|
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"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _default = function _default(pluginManager) {
|
|
13
|
+
var lib = pluginManager.lib;
|
|
14
|
+
var React = lib.react;
|
|
15
|
+
var useState = React.useState,
|
|
16
|
+
useEffect = React.useEffect;
|
|
17
|
+
var makeStyles = lib['@material-ui/core/styles'].makeStyles;
|
|
18
|
+
var observer = lib['mobx-react'].observer;
|
|
19
|
+
var useStyles = makeStyles(function (theme) {
|
|
20
|
+
var offset = 2;
|
|
21
|
+
var duration = 1.4;
|
|
22
|
+
return {
|
|
23
|
+
path: {
|
|
24
|
+
strokeDasharray: 187,
|
|
25
|
+
strokeDashoffset: 50,
|
|
26
|
+
animation: "$dash ".concat(duration, "s ease-in-out infinite, $colors ").concat(duration * 4, "s ease-in-out infinite")
|
|
27
|
+
},
|
|
28
|
+
'@keyframes colors': {
|
|
29
|
+
'0%': {
|
|
30
|
+
stroke: theme.palette.primary.light
|
|
31
|
+
},
|
|
32
|
+
'25%': {
|
|
33
|
+
stroke: theme.palette.secondary.light
|
|
34
|
+
},
|
|
35
|
+
'50%': {
|
|
36
|
+
stroke: theme.palette.tertiary.light
|
|
37
|
+
},
|
|
38
|
+
'75%': {
|
|
39
|
+
stroke: theme.palette.quaternary.light
|
|
40
|
+
},
|
|
41
|
+
'100%': {
|
|
42
|
+
stroke: theme.palette.primary.light
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
'@keyframes dash': {
|
|
46
|
+
'0%': {
|
|
47
|
+
strokeDashoffset: offset
|
|
48
|
+
},
|
|
49
|
+
'50%': {
|
|
50
|
+
strokeDashoffset: offset / 4,
|
|
51
|
+
transform: 'rotate(135deg)'
|
|
52
|
+
},
|
|
53
|
+
'100%': {
|
|
54
|
+
strokeDashoffset: offset,
|
|
55
|
+
transform: 'rotate(720deg)'
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}); // 'repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255,255,255,.5) 5px, rgba(255,255,255,.5) 10px)',
|
|
60
|
+
|
|
61
|
+
var Loading = observer(function (_ref) {
|
|
62
|
+
var radius = _ref.model.renderProps.radius;
|
|
63
|
+
var classes = useStyles(); // only show the loading message after 400ms to prevent excessive flickering
|
|
64
|
+
|
|
65
|
+
var _useState = useState(false),
|
|
66
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
67
|
+
shown = _useState2[0],
|
|
68
|
+
setShown = _useState2[1];
|
|
69
|
+
|
|
70
|
+
useEffect(function () {
|
|
71
|
+
var timeout = setTimeout(function () {
|
|
72
|
+
return setShown(true);
|
|
73
|
+
}, 400);
|
|
74
|
+
return function () {
|
|
75
|
+
return clearTimeout(timeout);
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
return !shown ? null : /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("pattern", {
|
|
79
|
+
id: "diagonalHatch",
|
|
80
|
+
width: "10",
|
|
81
|
+
height: "10",
|
|
82
|
+
patternTransform: "rotate(45 0 0)",
|
|
83
|
+
patternUnits: "userSpaceOnUse"
|
|
84
|
+
}, /*#__PURE__*/React.createElement("line", {
|
|
85
|
+
x1: "0",
|
|
86
|
+
y1: "0",
|
|
87
|
+
x2: "0",
|
|
88
|
+
y2: "10",
|
|
89
|
+
style: {
|
|
90
|
+
stroke: 'rgba(255,255,255,0.5)',
|
|
91
|
+
strokeWidth: 10
|
|
92
|
+
}
|
|
93
|
+
}))), /*#__PURE__*/React.createElement("circle", {
|
|
94
|
+
cx: "0",
|
|
95
|
+
cy: "0",
|
|
96
|
+
r: radius,
|
|
97
|
+
fill: "#f1f1f1"
|
|
98
|
+
}), /*#__PURE__*/React.createElement("circle", {
|
|
99
|
+
cx: "0",
|
|
100
|
+
cy: "0",
|
|
101
|
+
r: radius,
|
|
102
|
+
fill: "url(#diagonalHatch)"
|
|
103
|
+
}), /*#__PURE__*/React.createElement("text", {
|
|
104
|
+
x: "0",
|
|
105
|
+
y: "0",
|
|
106
|
+
transform: "rotate(90 0 0)",
|
|
107
|
+
dominantBaseline: "middle",
|
|
108
|
+
textAnchor: "middle"
|
|
109
|
+
}, "Loading\u2026"), /*#__PURE__*/React.createElement("circle", {
|
|
110
|
+
className: classes.path,
|
|
111
|
+
fill: "none",
|
|
112
|
+
strokeWidth: "4",
|
|
113
|
+
strokeLinecap: "round",
|
|
114
|
+
cx: "0",
|
|
115
|
+
cy: "0",
|
|
116
|
+
r: "60"
|
|
117
|
+
}));
|
|
118
|
+
});
|
|
119
|
+
return Loading;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,96 @@
|
|
|
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"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
|
+
|
|
14
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15
|
+
|
|
16
|
+
var _default = function _default(_ref) {
|
|
17
|
+
var jbrequire = _ref.jbrequire;
|
|
18
|
+
var React = jbrequire('react');
|
|
19
|
+
|
|
20
|
+
var _jbrequire = jbrequire('mobx-state-tree'),
|
|
21
|
+
isAlive = _jbrequire.isAlive;
|
|
22
|
+
|
|
23
|
+
var useEffect = React.useEffect,
|
|
24
|
+
useRef = React.useRef;
|
|
25
|
+
|
|
26
|
+
var _jbrequire2 = jbrequire('mobx-react'),
|
|
27
|
+
observer = _jbrequire2.observer,
|
|
28
|
+
MobxPropTypes = _jbrequire2.PropTypes;
|
|
29
|
+
|
|
30
|
+
var _jbrequire3 = jbrequire('react-dom'),
|
|
31
|
+
unmountComponentAtNode = _jbrequire3.unmountComponentAtNode,
|
|
32
|
+
hydrate = _jbrequire3.hydrate;
|
|
33
|
+
|
|
34
|
+
var _jbrequire4 = jbrequire('@jbrowse/core/util'),
|
|
35
|
+
rIC = _jbrequire4.rIC;
|
|
36
|
+
|
|
37
|
+
function RpcRenderedSvgGroup(_ref2) {
|
|
38
|
+
var model = _ref2.model;
|
|
39
|
+
var data = model.data,
|
|
40
|
+
html = model.html,
|
|
41
|
+
filled = model.filled,
|
|
42
|
+
renderingComponent = model.renderingComponent;
|
|
43
|
+
var ssrContainerNode = useRef(null);
|
|
44
|
+
useEffect(function () {
|
|
45
|
+
var domNode = ssrContainerNode.current;
|
|
46
|
+
|
|
47
|
+
function doHydrate() {
|
|
48
|
+
if (domNode && filled) {
|
|
49
|
+
if (domNode && domNode.innerHTML) {
|
|
50
|
+
domNode.style.display = 'none';
|
|
51
|
+
unmountComponentAtNode(domNode);
|
|
52
|
+
} // setting outline:none fixes react "focusable" element issue. see
|
|
53
|
+
// https://github.com/GMOD/jbrowse-components/issues/2160
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
domNode.style.outline = 'none';
|
|
57
|
+
domNode.innerHTML = html; // use requestIdleCallback to defer main-thread rendering
|
|
58
|
+
// and hydration for when we have some free time. helps
|
|
59
|
+
// keep the framerate up.
|
|
60
|
+
|
|
61
|
+
rIC(function () {
|
|
62
|
+
if (!isAlive(model)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
var mainThreadRendering = React.createElement(renderingComponent, _objectSpread(_objectSpread({}, data), model.renderProps()), null);
|
|
67
|
+
rIC(function () {
|
|
68
|
+
if (!isAlive(model)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
hydrate(mainThreadRendering, domNode);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
doHydrate();
|
|
79
|
+
return function () {
|
|
80
|
+
if (domNode) {
|
|
81
|
+
unmountComponentAtNode(domNode);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
});
|
|
85
|
+
return /*#__PURE__*/React.createElement("g", {
|
|
86
|
+
ref: ssrContainerNode
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
RpcRenderedSvgGroup.propTypes = {
|
|
91
|
+
model: MobxPropTypes.observableObject.isRequired
|
|
92
|
+
};
|
|
93
|
+
return observer(RpcRenderedSvgGroup);
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports, "BaseChordDisplayComponentFactory", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _BaseChordDisplay["default"];
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
Object.defineProperty(exports, "BaseChordDisplayModel", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function get() {
|
|
17
|
+
return _BaseChordDisplayModel.BaseChordDisplayModel;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(exports, "baseChordDisplayConfig", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function get() {
|
|
23
|
+
return _baseChordDisplayConfig.baseChordDisplayConfig;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
var _BaseChordDisplay = _interopRequireDefault(require("./components/BaseChordDisplay"));
|
|
28
|
+
|
|
29
|
+
var _BaseChordDisplayModel = require("./models/BaseChordDisplayModel");
|
|
30
|
+
|
|
31
|
+
var _baseChordDisplayConfig = require("./models/baseChordDisplayConfig");
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.BaseChordDisplayModel = void 0;
|
|
9
|
+
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
+
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
+
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
|
|
16
|
+
var _configuration = require("@jbrowse/core/configuration");
|
|
17
|
+
|
|
18
|
+
var _models = require("@jbrowse/core/pluggableElementTypes/models");
|
|
19
|
+
|
|
20
|
+
var _CircularChordRendererType = _interopRequireDefault(require("@jbrowse/core/pluggableElementTypes/renderers/CircularChordRendererType"));
|
|
21
|
+
|
|
22
|
+
var _util = require("@jbrowse/core/util");
|
|
23
|
+
|
|
24
|
+
var _simpleFeature = require("@jbrowse/core/util/simpleFeature");
|
|
25
|
+
|
|
26
|
+
var _tracks = require("@jbrowse/core/util/tracks");
|
|
27
|
+
|
|
28
|
+
var _mobxStateTree = require("mobx-state-tree");
|
|
29
|
+
|
|
30
|
+
var _renderReaction = _interopRequireDefault(require("./renderReaction"));
|
|
31
|
+
|
|
32
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
33
|
+
|
|
34
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
35
|
+
|
|
36
|
+
var BaseChordDisplayModel = _mobxStateTree.types.compose('BaseChordDisplay', _models.BaseDisplay, _mobxStateTree.types.model({
|
|
37
|
+
bezierRadiusRatio: 0.1,
|
|
38
|
+
assemblyName: _mobxStateTree.types.maybe(_mobxStateTree.types.string)
|
|
39
|
+
}))["volatile"](function () {
|
|
40
|
+
return {
|
|
41
|
+
// NOTE: all this volatile stuff has to be filled in at once
|
|
42
|
+
// so that it stays consistent
|
|
43
|
+
filled: false,
|
|
44
|
+
reactElement: undefined,
|
|
45
|
+
data: undefined,
|
|
46
|
+
message: '',
|
|
47
|
+
renderingComponent: undefined,
|
|
48
|
+
refNameMap: undefined
|
|
49
|
+
};
|
|
50
|
+
}).actions(function (self) {
|
|
51
|
+
var _getEnv = (0, _mobxStateTree.getEnv)(self),
|
|
52
|
+
pluginManager = _getEnv.pluginManager;
|
|
53
|
+
|
|
54
|
+
var track = self;
|
|
55
|
+
return {
|
|
56
|
+
onChordClick: function onChordClick(feature) {
|
|
57
|
+
(0, _configuration.getConf)(self, 'onChordClick', {
|
|
58
|
+
feature: feature,
|
|
59
|
+
track: track,
|
|
60
|
+
pluginManager: pluginManager
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}).views(function (self) {
|
|
65
|
+
return {
|
|
66
|
+
get blockDefinitions() {
|
|
67
|
+
var origSlices = (0, _util.getContainingView)(self).staticSlices;
|
|
68
|
+
|
|
69
|
+
if (!self.refNameMap) {
|
|
70
|
+
return origSlices;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
var slices = JSON.parse(JSON.stringify(origSlices)); // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
74
|
+
|
|
75
|
+
slices.forEach(function (slice) {
|
|
76
|
+
var regions = slice.region.elided ? slice.region.regions : [slice.region];
|
|
77
|
+
regions.forEach(function (region) {
|
|
78
|
+
var _self$refNameMap;
|
|
79
|
+
|
|
80
|
+
var renamed = (_self$refNameMap = self.refNameMap) === null || _self$refNameMap === void 0 ? void 0 : _self$refNameMap[region.refName];
|
|
81
|
+
|
|
82
|
+
if (renamed && region.refName !== renamed) {
|
|
83
|
+
region.refName = renamed;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
return slices;
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
renderProps: function renderProps() {
|
|
91
|
+
var view = (0, _util.getContainingView)(self);
|
|
92
|
+
return _objectSpread(_objectSpread({}, (0, _tracks.getParentRenderProps)(self)), {}, {
|
|
93
|
+
rpcDriverName: self.rpcDriverName,
|
|
94
|
+
displayModel: self,
|
|
95
|
+
bezierRadius: view.radiusPx * self.bezierRadiusRatio,
|
|
96
|
+
radius: view.radiusPx,
|
|
97
|
+
blockDefinitions: this.blockDefinitions,
|
|
98
|
+
onChordClick: self.onChordClick
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* the pluggable element type object for this diplay's
|
|
104
|
+
* renderer
|
|
105
|
+
*/
|
|
106
|
+
get rendererType() {
|
|
107
|
+
var display = self;
|
|
108
|
+
|
|
109
|
+
var _getEnv2 = (0, _mobxStateTree.getEnv)(self),
|
|
110
|
+
pluginManager = _getEnv2.pluginManager;
|
|
111
|
+
|
|
112
|
+
var ThisRendererType = pluginManager.getRendererType(self.rendererTypeName);
|
|
113
|
+
|
|
114
|
+
if (!ThisRendererType) {
|
|
115
|
+
throw new Error("renderer \"".concat(display.rendererTypeName, "\" not found"));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (!ThisRendererType.ReactComponent) {
|
|
119
|
+
throw new Error("renderer ".concat(display.rendererTypeName, " has no ReactComponent, it may not be completely implemented yet"));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return ThisRendererType;
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
isCompatibleWithRenderer: function isCompatibleWithRenderer(renderer) {
|
|
126
|
+
return !!(renderer instanceof _CircularChordRendererType["default"]);
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* returns a string feature ID if the globally-selected object
|
|
131
|
+
* is probably a feature
|
|
132
|
+
*/
|
|
133
|
+
get selectedFeatureId() {
|
|
134
|
+
if (!(0, _mobxStateTree.isAlive)(self)) {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
var session = (0, _util.getSession)(self);
|
|
139
|
+
|
|
140
|
+
if (!session) {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
var selection = session.selection; // does it quack like a feature?
|
|
145
|
+
|
|
146
|
+
if ((0, _simpleFeature.isFeature)(selection)) {
|
|
147
|
+
return selection.id();
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
};
|
|
154
|
+
}).actions(function (self) {
|
|
155
|
+
return {
|
|
156
|
+
renderStarted: function renderStarted() {
|
|
157
|
+
self.filled = false;
|
|
158
|
+
self.message = '';
|
|
159
|
+
self.reactElement = undefined;
|
|
160
|
+
self.data = undefined;
|
|
161
|
+
self.error = undefined;
|
|
162
|
+
self.renderingComponent = undefined;
|
|
163
|
+
},
|
|
164
|
+
renderSuccess: function renderSuccess(_ref) {
|
|
165
|
+
var message = _ref.message,
|
|
166
|
+
data = _ref.data,
|
|
167
|
+
reactElement = _ref.reactElement,
|
|
168
|
+
renderingComponent = _ref.renderingComponent;
|
|
169
|
+
|
|
170
|
+
if (message) {
|
|
171
|
+
self.filled = false;
|
|
172
|
+
self.message = message;
|
|
173
|
+
self.reactElement = undefined;
|
|
174
|
+
self.data = undefined;
|
|
175
|
+
self.error = undefined;
|
|
176
|
+
self.renderingComponent = undefined;
|
|
177
|
+
} else {
|
|
178
|
+
self.filled = true;
|
|
179
|
+
self.message = '';
|
|
180
|
+
self.reactElement = reactElement;
|
|
181
|
+
self.data = data;
|
|
182
|
+
self.error = undefined;
|
|
183
|
+
self.renderingComponent = renderingComponent;
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
renderError: function renderError(error) {
|
|
187
|
+
console.error(error); // the rendering failed for some reason
|
|
188
|
+
|
|
189
|
+
self.filled = false;
|
|
190
|
+
self.message = '';
|
|
191
|
+
self.reactElement = undefined;
|
|
192
|
+
self.data = undefined;
|
|
193
|
+
self.error = error;
|
|
194
|
+
self.renderingComponent = undefined;
|
|
195
|
+
},
|
|
196
|
+
setRefNameMap: function setRefNameMap(refNameMap) {
|
|
197
|
+
self.refNameMap = refNameMap;
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
}).actions(function (self) {
|
|
201
|
+
var _getEnv3 = (0, _mobxStateTree.getEnv)(self),
|
|
202
|
+
pluginManager = _getEnv3.pluginManager;
|
|
203
|
+
|
|
204
|
+
var _pluginManager$jbrequ = pluginManager.jbrequire(_renderReaction["default"]),
|
|
205
|
+
renderReactionData = _pluginManager$jbrequ.renderReactionData,
|
|
206
|
+
renderReactionEffect = _pluginManager$jbrequ.renderReactionEffect;
|
|
207
|
+
|
|
208
|
+
return {
|
|
209
|
+
afterAttach: function afterAttach() {
|
|
210
|
+
(0, _util.makeAbortableReaction)(self, renderReactionData, renderReactionEffect, {
|
|
211
|
+
name: "".concat(self.type, " ").concat(self.id, " rendering"),
|
|
212
|
+
// delay: self.renderDelay || 300,
|
|
213
|
+
fireImmediately: true
|
|
214
|
+
}, self.renderStarted, self.renderSuccess, self.renderError);
|
|
215
|
+
(0, _util.makeAbortableReaction)(self, function () {
|
|
216
|
+
return {
|
|
217
|
+
assemblyNames: (0, _tracks.getTrackAssemblyNames)(self.parentTrack),
|
|
218
|
+
adapter: (0, _configuration.getConf)((0, _mobxStateTree.getParent)(self, 2), 'adapter'),
|
|
219
|
+
assemblyManager: (0, _util.getSession)(self).assemblyManager
|
|
220
|
+
};
|
|
221
|
+
},
|
|
222
|
+
/*#__PURE__*/
|
|
223
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
224
|
+
function () {
|
|
225
|
+
var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref2, signal) {
|
|
226
|
+
var assemblyNames, adapter, assemblyManager;
|
|
227
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
228
|
+
while (1) {
|
|
229
|
+
switch (_context.prev = _context.next) {
|
|
230
|
+
case 0:
|
|
231
|
+
assemblyNames = _ref2.assemblyNames, adapter = _ref2.adapter, assemblyManager = _ref2.assemblyManager;
|
|
232
|
+
return _context.abrupt("return", assemblyManager.getRefNameMapForAdapter(adapter, assemblyNames[0], {
|
|
233
|
+
signal: signal,
|
|
234
|
+
sessionId: (0, _tracks.getRpcSessionId)(self)
|
|
235
|
+
}));
|
|
236
|
+
|
|
237
|
+
case 2:
|
|
238
|
+
case "end":
|
|
239
|
+
return _context.stop();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}, _callee);
|
|
243
|
+
}));
|
|
244
|
+
|
|
245
|
+
return function (_x, _x2) {
|
|
246
|
+
return _ref3.apply(this, arguments);
|
|
247
|
+
};
|
|
248
|
+
}(), {
|
|
249
|
+
name: "".concat(self.type, " ").concat(self.id, " getting refNames"),
|
|
250
|
+
fireImmediately: true
|
|
251
|
+
}, function () {}, function (refNameMap) {
|
|
252
|
+
self.setRefNameMap(refNameMap);
|
|
253
|
+
}, function (error) {
|
|
254
|
+
console.error(error);
|
|
255
|
+
self.setError(error);
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
exports.BaseChordDisplayModel = BaseChordDisplayModel;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.baseChordDisplayConfig = void 0;
|
|
7
|
+
|
|
8
|
+
var _configuration = require("@jbrowse/core/configuration");
|
|
9
|
+
|
|
10
|
+
var baseChordDisplayConfig = (0, _configuration.ConfigurationSchema)('BaseChordDisplay', {
|
|
11
|
+
onChordClick: {
|
|
12
|
+
type: 'boolean',
|
|
13
|
+
description: 'callback that should be run when a chord in the track is clicked',
|
|
14
|
+
defaultValue: false,
|
|
15
|
+
contextVariable: ['feature', 'track', 'pluginManager']
|
|
16
|
+
}
|
|
17
|
+
}, {
|
|
18
|
+
explicitIdentifier: 'displayId'
|
|
19
|
+
});
|
|
20
|
+
exports.baseChordDisplayConfig = baseChordDisplayConfig;
|