@jbrowse/core 2.0.1 → 2.1.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/BaseFeatureWidget/BaseFeatureDetail.d.ts +6 -0
- package/BaseFeatureWidget/BaseFeatureDetail.js +313 -592
- package/BaseFeatureWidget/SequenceFeatureDetails.js +213 -479
- package/BaseFeatureWidget/index.js +88 -126
- package/BaseFeatureWidget/types.js +1 -4
- package/BaseFeatureWidget/util.js +40 -75
- package/CorePlugin.js +55 -94
- package/Plugin.js +9 -34
- package/PluginLoader.js +153 -422
- package/PluginManager.d.ts +17 -14
- package/PluginManager.js +377 -666
- package/ReExports/Attributes.js +3 -10
- package/ReExports/BaseCard.js +3 -10
- package/ReExports/DataGrid.js +5 -12
- package/ReExports/FeatureDetails.js +3 -10
- package/ReExports/index.js +6 -12
- package/ReExports/list.d.ts +5 -0
- package/ReExports/list.js +271 -7
- package/ReExports/material-ui-colors.js +15 -16
- package/ReExports/modules.d.ts +0 -1
- package/ReExports/modules.js +453 -798
- package/TextSearch/BaseResults.js +51 -123
- package/TextSearch/TextSearchManager.js +66 -144
- package/assemblyManager/assembly.js +280 -555
- package/assemblyManager/assemblyConfigSchema.js +47 -64
- package/assemblyManager/assemblyManager.js +126 -272
- package/assemblyManager/index.js +9 -22
- package/configuration/configurationSchema.js +167 -203
- package/configuration/configurationSlot.js +248 -326
- package/configuration/index.js +19 -35
- package/configuration/util.js +131 -173
- package/data_adapters/BaseAdapter.d.ts +2 -2
- package/data_adapters/BaseAdapter.js +132 -521
- package/data_adapters/CytobandAdapter.js +40 -126
- package/data_adapters/dataAdapterCache.js +77 -158
- package/package.json +4 -5
- package/pluggableElementTypes/AdapterType.js +24 -79
- package/pluggableElementTypes/AddTrackWorkflowType.d.ts +17 -0
- package/pluggableElementTypes/AddTrackWorkflowType.js +20 -0
- package/pluggableElementTypes/ConnectionType.js +22 -65
- package/pluggableElementTypes/DisplayType.js +35 -82
- package/pluggableElementTypes/InternetAccountType.js +23 -64
- package/pluggableElementTypes/PluggableElementBase.js +8 -20
- package/pluggableElementTypes/RpcMethodType.js +85 -427
- package/pluggableElementTypes/TextSearchAdapterType.js +16 -55
- package/pluggableElementTypes/TrackType.js +26 -70
- package/pluggableElementTypes/ViewType.js +21 -63
- package/pluggableElementTypes/WidgetType.js +21 -64
- package/pluggableElementTypes/index.d.ts +4 -3
- package/pluggableElementTypes/index.js +42 -125
- package/pluggableElementTypes/models/BaseConnectionModelFactory.js +28 -43
- package/pluggableElementTypes/models/BaseDisplayModel.js +58 -95
- package/pluggableElementTypes/models/BaseTrackModel.js +139 -199
- package/pluggableElementTypes/models/BaseViewModel.js +24 -40
- package/pluggableElementTypes/models/InternetAccountModel.js +116 -263
- package/pluggableElementTypes/models/baseConnectionConfig.js +14 -25
- package/pluggableElementTypes/models/baseInternetAccountConfig.js +29 -38
- package/pluggableElementTypes/models/baseTrackConfig.js +106 -133
- package/pluggableElementTypes/models/index.js +21 -70
- package/pluggableElementTypes/renderers/BoxRendererType.js +132 -291
- package/pluggableElementTypes/renderers/CircularChordRendererType.js +8 -38
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +60 -192
- package/pluggableElementTypes/renderers/FeatureRendererType.d.ts +0 -2
- package/pluggableElementTypes/renderers/FeatureRendererType.js +89 -264
- package/pluggableElementTypes/renderers/RendererType.js +31 -105
- package/pluggableElementTypes/renderers/ServerSideRenderedContent.js +61 -72
- package/pluggableElementTypes/renderers/ServerSideRendererType.js +112 -265
- package/pluggableElementTypes/renderers/index.js +19 -62
- package/pluggableElementTypes/renderers/util/serializableFilterChain.js +27 -65
- package/rpc/BaseRpcDriver.js +169 -405
- package/rpc/MainThreadRpcDriver.js +27 -150
- package/rpc/RpcManager.js +58 -159
- package/rpc/WebWorkerRpcDriver.js +54 -171
- package/rpc/configSchema.js +25 -49
- package/rpc/coreRpcMethods.js +221 -959
- package/rpc/remoteAbortSignals.js +46 -70
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/AboutDialog.js +106 -162
- package/ui/App.js +157 -242
- package/ui/AssemblySelector.js +59 -120
- package/ui/CascadingMenu.js +101 -196
- package/ui/ColorPicker.d.ts +16 -0
- package/ui/ColorPicker.js +97 -0
- package/ui/Drawer.js +28 -61
- package/ui/DrawerWidget.js +108 -202
- package/ui/DropDownMenu.js +60 -91
- package/ui/EditableTypography.js +87 -149
- package/ui/ErrorMessage.js +41 -56
- package/ui/FactoryResetDialog.js +24 -57
- package/ui/FatalErrorDialog.js +59 -91
- package/ui/FileSelector/FileSelector.js +123 -189
- package/ui/FileSelector/LocalFileChooser.js +44 -75
- package/ui/FileSelector/UrlChooser.js +17 -38
- package/ui/FileSelector/index.js +6 -12
- package/ui/Icons.js +45 -69
- package/ui/Logo.js +57 -110
- package/ui/Menu.js +232 -354
- package/ui/PrerenderedCanvas.js +63 -87
- package/ui/ResizeHandle.js +87 -116
- package/ui/ReturnToImportFormDialog.js +32 -63
- package/ui/SanitizedHTML.js +64 -47
- package/ui/Snackbar.js +74 -101
- package/ui/SnackbarModel.js +37 -51
- package/ui/Tooltip.js +49 -76
- package/ui/ViewContainer.js +113 -196
- package/ui/colors.d.ts +10 -0
- package/ui/colors.js +78 -0
- package/ui/index.js +51 -181
- package/ui/react-colorful.d.ts +17 -0
- package/ui/react-colorful.js +455 -0
- package/ui/theme.js +199 -247
- package/util/Base1DUtils.js +163 -202
- package/util/Base1DViewModel.js +121 -168
- package/util/QuickLRU.js +84 -332
- package/util/TimeTraveller.d.ts +19 -0
- package/util/TimeTraveller.js +86 -0
- package/util/aborting.js +49 -127
- package/util/analytics.js +91 -154
- package/util/blockTypes.js +106 -240
- package/util/calculateDynamicBlocks.js +98 -128
- package/util/calculateStaticBlocks.js +105 -125
- package/util/color/cssColorsLevel4.js +156 -160
- package/util/color/index.js +33 -55
- package/util/compositeMap.js +49 -333
- package/util/formatFastaStrings.js +9 -14
- package/util/idMaker.js +18 -31
- package/util/index.d.ts +7 -20
- package/util/index.js +742 -1188
- package/util/io/RemoteFileWithRangeCache.js +88 -257
- package/util/io/index.js +95 -169
- package/util/jexl.js +60 -115
- package/util/jexlStrings.js +24 -29
- package/util/layouts/BaseLayout.js +1 -4
- package/util/layouts/GranularRectLayout.js +388 -555
- package/util/layouts/MultiLayout.js +41 -109
- package/util/layouts/PrecomputedLayout.js +56 -112
- package/util/layouts/PrecomputedMultiLayout.js +22 -59
- package/util/layouts/SceneGraph.js +127 -197
- package/util/layouts/index.js +29 -66
- package/util/mst-reflection.js +55 -71
- package/util/offscreenCanvasPonyfill.js +66 -134
- package/util/offscreenCanvasUtils.d.ts +2 -7
- package/util/offscreenCanvasUtils.js +49 -146
- package/util/range.js +29 -40
- package/util/rxjs.js +20 -27
- package/util/simpleFeature.js +88 -152
- package/util/stats.js +91 -151
- package/util/tracks.js +130 -173
- package/util/types/index.js +110 -179
- package/util/types/mst.js +91 -146
- package/util/types/util.js +1 -4
- package/util/when.js +54 -101
- package/BaseFeatureWidget/SequenceFeatureDetails.test.js +0 -122
- package/BaseFeatureWidget/index.test.js +0 -69
- package/TextSearch/BaseResults.test.js +0 -42
- package/configuration/configurationSchema.test.js +0 -266
- package/configuration/configurationSlot.test.js +0 -69
- package/configuration/util.test.js +0 -39
- package/data_adapters/BaseAdapter.test.js +0 -200
- package/declare.d.js +0 -1
- package/pluggableElementTypes/RpcMethodType.test.js +0 -118
- package/pluggableElementTypes/renderers/declare.d.js +0 -1
- package/pluggableElementTypes/renderers/util/serializableFilterChain.test.js +0 -20
- package/rpc/BaseRpcDriver.test.js +0 -540
- package/rpc/declaration.d.js +0 -1
- package/ui/FatalErrorDialog.test.js +0 -82
- package/ui/SanitizedHTML.test.js +0 -36
- package/ui/theme.test.js +0 -92
- package/util/Base1DViewModel.test.js +0 -130
- package/util/calculateDynamicBlocks.test.js +0 -74
- package/util/calculateStaticBlocks.test.js +0 -297
- package/util/declare.d.js +0 -1
- package/util/formatFastaStrings.test.js +0 -40
- package/util/index.test.js +0 -213
- package/util/jexlStrings.test.js +0 -48
- package/util/layouts/GranularRectLayout.test.js +0 -99
- package/util/range.test.js +0 -64
- package/util/simpleFeature.test.js +0 -34
- package/util/stats.test.js +0 -172
|
@@ -1,115 +1,82 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
3
|
exports.BaseDisplay = void 0;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
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; }
|
|
23
|
-
|
|
24
|
-
var BaseDisplay = _mobxStateTree.types.model('BaseDisplay', {
|
|
25
|
-
id: _mst.ElementId,
|
|
26
|
-
type: _mobxStateTree.types.string,
|
|
27
|
-
rpcDriverName: _mobxStateTree.types.maybe(_mobxStateTree.types.string)
|
|
28
|
-
}).volatile(function () {
|
|
29
|
-
return {
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
6
|
+
const configuration_1 = require("../../configuration");
|
|
7
|
+
const tracks_1 = require("../../util/tracks");
|
|
8
|
+
const mst_1 = require("../../util/types/mst");
|
|
9
|
+
exports.BaseDisplay = mobx_state_tree_1.types
|
|
10
|
+
.model('BaseDisplay', {
|
|
11
|
+
id: mst_1.ElementId,
|
|
12
|
+
type: mobx_state_tree_1.types.string,
|
|
13
|
+
rpcDriverName: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
|
|
14
|
+
})
|
|
15
|
+
.volatile(() => ({
|
|
30
16
|
rendererTypeName: '',
|
|
31
|
-
error: undefined
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return {
|
|
17
|
+
error: undefined,
|
|
18
|
+
}))
|
|
19
|
+
.views(self => ({
|
|
35
20
|
get RenderingComponent() {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
var displayType = pluginManager.getDisplayType(self.type);
|
|
40
|
-
return displayType.ReactComponent;
|
|
21
|
+
const { pluginManager } = (0, mobx_state_tree_1.getEnv)(self);
|
|
22
|
+
const displayType = pluginManager.getDisplayType(self.type);
|
|
23
|
+
return displayType.ReactComponent;
|
|
41
24
|
},
|
|
42
|
-
|
|
43
25
|
get DisplayBlurb() {
|
|
44
|
-
|
|
26
|
+
return null;
|
|
45
27
|
},
|
|
46
|
-
|
|
47
28
|
get adapterConfig() {
|
|
48
|
-
|
|
29
|
+
return (0, configuration_1.getConf)(this.parentTrack, 'adapter');
|
|
49
30
|
},
|
|
50
|
-
|
|
51
31
|
get parentTrack() {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
32
|
+
let track = (0, mobx_state_tree_1.getParent)(self);
|
|
33
|
+
while (!(track.configuration && (0, configuration_1.getConf)(track, 'trackId'))) {
|
|
34
|
+
if ((0, mobx_state_tree_1.isRoot)(track)) {
|
|
35
|
+
throw new Error(`No parent track found for ${self.type} ${self.id}`);
|
|
36
|
+
}
|
|
37
|
+
track = (0, mobx_state_tree_1.getParent)(track);
|
|
57
38
|
}
|
|
58
|
-
|
|
59
|
-
track = (0, _mobxStateTree.getParent)(track);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return track;
|
|
39
|
+
return track;
|
|
63
40
|
},
|
|
64
|
-
|
|
65
41
|
/**
|
|
66
42
|
* the react props that are passed to the Renderer when data
|
|
67
43
|
* is rendered in this display
|
|
68
44
|
*/
|
|
69
|
-
renderProps
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
45
|
+
renderProps() {
|
|
46
|
+
return {
|
|
47
|
+
...(0, tracks_1.getParentRenderProps)(self),
|
|
48
|
+
rpcDriverName: self.rpcDriverName,
|
|
49
|
+
displayModel: self,
|
|
50
|
+
};
|
|
74
51
|
},
|
|
75
|
-
|
|
76
52
|
/**
|
|
77
53
|
* the pluggable element type object for this display's
|
|
78
54
|
* renderer
|
|
79
55
|
*/
|
|
80
56
|
get rendererType() {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (!RendererType.ReactComponent) {
|
|
91
|
-
throw new Error("renderer ".concat(self.rendererTypeName, " has no ReactComponent, it may not be completely implemented yet"));
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return RendererType;
|
|
57
|
+
const { pluginManager } = (0, mobx_state_tree_1.getEnv)(self);
|
|
58
|
+
const RendererType = pluginManager.getRendererType(self.rendererTypeName);
|
|
59
|
+
if (!RendererType) {
|
|
60
|
+
throw new Error(`renderer "${self.rendererTypeName}" not found`);
|
|
61
|
+
}
|
|
62
|
+
if (!RendererType.ReactComponent) {
|
|
63
|
+
throw new Error(`renderer ${self.rendererTypeName} has no ReactComponent, it may not be completely implemented yet`);
|
|
64
|
+
}
|
|
65
|
+
return RendererType;
|
|
95
66
|
},
|
|
96
|
-
|
|
97
67
|
/**
|
|
98
68
|
* if a display-level message should be displayed instead,
|
|
99
69
|
* make this return a react component
|
|
100
70
|
*/
|
|
101
71
|
get DisplayMessageComponent() {
|
|
102
|
-
|
|
72
|
+
return undefined;
|
|
103
73
|
},
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return [];
|
|
74
|
+
trackMenuItems() {
|
|
75
|
+
return [];
|
|
107
76
|
},
|
|
108
|
-
|
|
109
77
|
get viewMenuActions() {
|
|
110
|
-
|
|
78
|
+
return [];
|
|
111
79
|
},
|
|
112
|
-
|
|
113
80
|
/**
|
|
114
81
|
* @param region -
|
|
115
82
|
* @returns falsy if the region is fine to try rendering. Otherwise,
|
|
@@ -117,21 +84,17 @@ var BaseDisplay = _mobxStateTree.types.model('BaseDisplay', {
|
|
|
117
84
|
* string of text describes why it cannot be rendered
|
|
118
85
|
* react node allows user to force load at current setting
|
|
119
86
|
*/
|
|
120
|
-
regionCannotBeRendered
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
self.error = error;
|
|
87
|
+
regionCannotBeRendered( /* region */) {
|
|
88
|
+
return undefined;
|
|
89
|
+
},
|
|
90
|
+
}))
|
|
91
|
+
.actions(self => ({
|
|
92
|
+
setError(error) {
|
|
93
|
+
self.error = error;
|
|
128
94
|
},
|
|
129
|
-
setRpcDriverName
|
|
130
|
-
|
|
95
|
+
setRpcDriverName(rpcDriverName) {
|
|
96
|
+
self.rpcDriverName = rpcDriverName;
|
|
131
97
|
},
|
|
132
98
|
// base display reload does nothing, see specialized displays for details
|
|
133
|
-
reload
|
|
134
|
-
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
exports.BaseDisplay = BaseDisplay;
|
|
99
|
+
reload() { },
|
|
100
|
+
}));
|
|
@@ -1,207 +1,147 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
|
|
12
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
-
|
|
14
|
-
var _mobx = require("mobx");
|
|
15
|
-
|
|
16
|
-
var _mobxStateTree = require("mobx-state-tree");
|
|
17
|
-
|
|
18
|
-
var _configuration = require("../../configuration");
|
|
19
|
-
|
|
20
|
-
var _util = require("../../util");
|
|
21
|
-
|
|
22
|
-
var _types = require("../../util/types");
|
|
23
|
-
|
|
24
|
-
var _mst = require("../../util/types/mst");
|
|
25
|
-
|
|
26
|
-
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; }
|
|
27
|
-
|
|
28
|
-
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; }
|
|
29
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createBaseTrackModel = void 0;
|
|
4
|
+
const mobx_1 = require("mobx");
|
|
5
|
+
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
6
|
+
const configuration_1 = require("../../configuration");
|
|
7
|
+
const util_1 = require("../../util");
|
|
8
|
+
const types_1 = require("../../util/types");
|
|
9
|
+
const mst_1 = require("../../util/types/mst");
|
|
30
10
|
// these MST models only exist for tracks that are *shown*.
|
|
31
11
|
// they should contain only UI state for the track, and have
|
|
32
12
|
// a reference to a track configuration (stored under
|
|
33
13
|
// session.configuration.assemblies.get(assemblyName).tracks).
|
|
34
14
|
// note that multiple displayed tracks could use the same configuration.
|
|
35
15
|
function createBaseTrackModel(pluginManager, trackType, baseTrackConfig) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
return self.displays.remove(d);
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
return t.length;
|
|
141
|
-
},
|
|
142
|
-
replaceDisplay: function replaceDisplay(oldId, newId) {
|
|
143
|
-
var initialSnapshot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
144
|
-
var idx = self.displays.findIndex(function (d) {
|
|
145
|
-
return d.conf.displayId === oldId;
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
if (idx === -1) {
|
|
149
|
-
throw new Error("could not find display id ".concat(oldId, " to replace"));
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
var schema = pluginManager.pluggableConfigSchemaType('display');
|
|
153
|
-
var conf = (0, _mobxStateTree.resolveIdentifier)(schema, (0, _mobxStateTree.getRoot)(self), newId);
|
|
154
|
-
var displayType = pluginManager.getDisplayType(conf.type);
|
|
155
|
-
|
|
156
|
-
if (!displayType) {
|
|
157
|
-
throw new Error("unknown display type ".concat(conf.type));
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
self.displays.splice(idx, 1, _objectSpread(_objectSpread({}, initialSnapshot), {}, {
|
|
161
|
-
type: conf.type,
|
|
162
|
-
configuration: conf
|
|
163
|
-
}));
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
}).views(function (self) {
|
|
167
|
-
return {
|
|
168
|
-
trackMenuItems: function trackMenuItems() {
|
|
169
|
-
var menuItems = [];
|
|
170
|
-
self.displays.forEach(function (display) {
|
|
171
|
-
menuItems.push.apply(menuItems, (0, _toConsumableArray2.default)(display.trackMenuItems()));
|
|
172
|
-
});
|
|
173
|
-
var displayChoices = [];
|
|
174
|
-
var view = (0, _util.getContainingView)(self);
|
|
175
|
-
var viewType = pluginManager.getViewType(view.type);
|
|
176
|
-
var compatibleDisplayTypes = viewType.displayTypes.map(function (displayType) {
|
|
177
|
-
return displayType.name;
|
|
178
|
-
});
|
|
179
|
-
var compatibleDisplays = self.configuration.displays.filter(function (displayConf) {
|
|
180
|
-
return compatibleDisplayTypes.includes(displayConf.type);
|
|
181
|
-
});
|
|
182
|
-
var shownId = self.displays[0].configuration.displayId;
|
|
183
|
-
|
|
184
|
-
if (compatibleDisplays.length > 1) {
|
|
185
|
-
displayChoices.push({
|
|
186
|
-
type: 'divider'
|
|
187
|
-
}, {
|
|
188
|
-
type: 'subHeader',
|
|
189
|
-
label: 'Display types'
|
|
190
|
-
});
|
|
191
|
-
compatibleDisplays.forEach(function (displayConf) {
|
|
192
|
-
displayChoices.push({
|
|
193
|
-
type: 'radio',
|
|
194
|
-
label: displayConf.type,
|
|
195
|
-
checked: displayConf.displayId === shownId,
|
|
196
|
-
onClick: function onClick() {
|
|
197
|
-
return self.replaceDisplay(shownId, displayConf.displayId);
|
|
198
|
-
}
|
|
16
|
+
return mobx_state_tree_1.types
|
|
17
|
+
.model(trackType, {
|
|
18
|
+
id: mst_1.ElementId,
|
|
19
|
+
type: mobx_state_tree_1.types.literal(trackType),
|
|
20
|
+
configuration: (0, configuration_1.ConfigurationReference)(baseTrackConfig),
|
|
21
|
+
displays: mobx_state_tree_1.types.array(pluginManager.pluggableMstType('display', 'stateModel')),
|
|
22
|
+
})
|
|
23
|
+
.views(self => ({
|
|
24
|
+
get rpcSessionId() {
|
|
25
|
+
return self.configuration.trackId;
|
|
26
|
+
},
|
|
27
|
+
get name() {
|
|
28
|
+
return (0, configuration_1.getConf)(self, 'name');
|
|
29
|
+
},
|
|
30
|
+
get textSearchAdapter() {
|
|
31
|
+
return (0, configuration_1.getConf)(self, 'textSearchAdapter');
|
|
32
|
+
},
|
|
33
|
+
/**
|
|
34
|
+
* the PluggableElementType for the currently defined adapter
|
|
35
|
+
*/
|
|
36
|
+
get adapterType() {
|
|
37
|
+
const adapterConfig = (0, configuration_1.getConf)(self, 'adapter');
|
|
38
|
+
const { pluginManager: pm } = (0, mobx_state_tree_1.getEnv)(self);
|
|
39
|
+
if (!adapterConfig) {
|
|
40
|
+
throw new Error(`no adapter configuration provided for ${self.type}`);
|
|
41
|
+
}
|
|
42
|
+
const adapterType = pm.getAdapterType(adapterConfig.type);
|
|
43
|
+
if (!adapterType) {
|
|
44
|
+
throw new Error(`unknown adapter type ${adapterConfig.type}`);
|
|
45
|
+
}
|
|
46
|
+
return adapterType;
|
|
47
|
+
},
|
|
48
|
+
get viewMenuActions() {
|
|
49
|
+
const menuItems = [];
|
|
50
|
+
self.displays.forEach(display => {
|
|
51
|
+
menuItems.push(...display.viewMenuActions);
|
|
52
|
+
});
|
|
53
|
+
return menuItems;
|
|
54
|
+
},
|
|
55
|
+
get canConfigure() {
|
|
56
|
+
const session = (0, util_1.getSession)(self);
|
|
57
|
+
return ((0, types_1.isSessionModelWithConfigEditing)(session) &&
|
|
58
|
+
// @ts-ignore
|
|
59
|
+
(session.adminMode ||
|
|
60
|
+
// @ts-ignore
|
|
61
|
+
session.sessionTracks.find(track => {
|
|
62
|
+
return track.trackId === self.configuration.trackId;
|
|
63
|
+
})));
|
|
64
|
+
},
|
|
65
|
+
}))
|
|
66
|
+
.actions(self => ({
|
|
67
|
+
activateConfigurationUI() {
|
|
68
|
+
const session = (0, util_1.getSession)(self);
|
|
69
|
+
const view = (0, util_1.getContainingView)(self);
|
|
70
|
+
if ((0, types_1.isSessionModelWithConfigEditing)(session)) {
|
|
71
|
+
// @ts-ignore
|
|
72
|
+
const trackConf = session.editTrackConfiguration(self.configuration);
|
|
73
|
+
if (trackConf && trackConf !== self.configuration) {
|
|
74
|
+
// @ts-ignore
|
|
75
|
+
view.hideTrack(self.configuration);
|
|
76
|
+
// @ts-ignore
|
|
77
|
+
view.showTrack(trackConf);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
showDisplay(displayId, initialSnapshot = {}) {
|
|
82
|
+
const schema = pluginManager.pluggableConfigSchemaType('display');
|
|
83
|
+
const conf = (0, mobx_state_tree_1.resolveIdentifier)(schema, (0, mobx_state_tree_1.getRoot)(self), displayId);
|
|
84
|
+
const displayType = pluginManager.getDisplayType(conf.type);
|
|
85
|
+
if (!displayType) {
|
|
86
|
+
throw new Error(`unknown display type ${conf.type}`);
|
|
87
|
+
}
|
|
88
|
+
const display = displayType.stateModel.create({
|
|
89
|
+
...initialSnapshot,
|
|
90
|
+
type: conf.type,
|
|
91
|
+
configuration: conf,
|
|
92
|
+
});
|
|
93
|
+
self.displays.push(display);
|
|
94
|
+
},
|
|
95
|
+
hideDisplay(displayId) {
|
|
96
|
+
const schema = pluginManager.pluggableConfigSchemaType('display');
|
|
97
|
+
const conf = (0, mobx_state_tree_1.resolveIdentifier)(schema, (0, mobx_state_tree_1.getRoot)(self), displayId);
|
|
98
|
+
const t = self.displays.filter(d => d.conf === conf);
|
|
99
|
+
(0, mobx_1.transaction)(() => t.forEach(d => self.displays.remove(d)));
|
|
100
|
+
return t.length;
|
|
101
|
+
},
|
|
102
|
+
replaceDisplay(oldId, newId, initialSnapshot = {}) {
|
|
103
|
+
const idx = self.displays.findIndex(d => d.conf.displayId === oldId);
|
|
104
|
+
if (idx === -1) {
|
|
105
|
+
throw new Error(`could not find display id ${oldId} to replace`);
|
|
106
|
+
}
|
|
107
|
+
const schema = pluginManager.pluggableConfigSchemaType('display');
|
|
108
|
+
const conf = (0, mobx_state_tree_1.resolveIdentifier)(schema, (0, mobx_state_tree_1.getRoot)(self), newId);
|
|
109
|
+
const displayType = pluginManager.getDisplayType(conf.type);
|
|
110
|
+
if (!displayType) {
|
|
111
|
+
throw new Error(`unknown display type ${conf.type}`);
|
|
112
|
+
}
|
|
113
|
+
self.displays.splice(idx, 1, {
|
|
114
|
+
...initialSnapshot,
|
|
115
|
+
type: conf.type,
|
|
116
|
+
configuration: conf,
|
|
199
117
|
});
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
}
|
|
118
|
+
},
|
|
119
|
+
}))
|
|
120
|
+
.views(self => ({
|
|
121
|
+
trackMenuItems() {
|
|
122
|
+
const menuItems = [];
|
|
123
|
+
self.displays.forEach(display => {
|
|
124
|
+
menuItems.push(...display.trackMenuItems());
|
|
125
|
+
});
|
|
126
|
+
const displayChoices = [];
|
|
127
|
+
const view = (0, util_1.getContainingView)(self);
|
|
128
|
+
const viewType = pluginManager.getViewType(view.type);
|
|
129
|
+
const compatibleDisplayTypes = viewType.displayTypes.map(displayType => displayType.name);
|
|
130
|
+
const compatibleDisplays = self.configuration.displays.filter((displayConf) => compatibleDisplayTypes.includes(displayConf.type));
|
|
131
|
+
const shownId = self.displays[0].configuration.displayId;
|
|
132
|
+
if (compatibleDisplays.length > 1) {
|
|
133
|
+
displayChoices.push({ type: 'divider' }, { type: 'subHeader', label: 'Display types' });
|
|
134
|
+
compatibleDisplays.forEach((displayConf) => {
|
|
135
|
+
displayChoices.push({
|
|
136
|
+
type: 'radio',
|
|
137
|
+
label: displayConf.type,
|
|
138
|
+
checked: displayConf.displayId === shownId,
|
|
139
|
+
onClick: () => self.replaceDisplay(shownId, displayConf.displayId),
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return [...menuItems, ...displayChoices];
|
|
144
|
+
},
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
exports.createBaseTrackModel = createBaseTrackModel;
|
|
@@ -1,42 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
/* self */
|
|
17
|
-
() {
|
|
18
|
-
return {
|
|
19
|
-
width: 800
|
|
20
|
-
};
|
|
21
|
-
}).views(function
|
|
22
|
-
/* self */
|
|
23
|
-
() {
|
|
24
|
-
return {
|
|
25
|
-
menuItems: function menuItems() {
|
|
26
|
-
return [];
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
}).actions(function (self) {
|
|
30
|
-
return {
|
|
31
|
-
setDisplayName: function setDisplayName(name) {
|
|
32
|
-
self.displayName = name;
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
4
|
+
const mst_1 = require("../../util/types/mst");
|
|
5
|
+
const BaseViewModel = mobx_state_tree_1.types
|
|
6
|
+
.model('BaseView', {
|
|
7
|
+
id: mst_1.ElementId,
|
|
8
|
+
displayName: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string),
|
|
9
|
+
})
|
|
10
|
+
.volatile(( /* self */) => ({
|
|
11
|
+
width: 800,
|
|
12
|
+
}))
|
|
13
|
+
.views(( /* self */) => ({
|
|
14
|
+
menuItems() {
|
|
15
|
+
return [];
|
|
33
16
|
},
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
17
|
+
}))
|
|
18
|
+
.actions(self => ({
|
|
19
|
+
setDisplayName(name) {
|
|
20
|
+
self.displayName = name;
|
|
21
|
+
},
|
|
22
|
+
setWidth(newWidth) {
|
|
23
|
+
self.width = newWidth;
|
|
24
|
+
},
|
|
25
|
+
}));
|
|
26
|
+
exports.default = BaseViewModel;
|