@jbrowse/plugin-config 1.6.7 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/ConfigurationEditorWidget/components/CallbackEditor.js +123 -0
  2. package/dist/ConfigurationEditorWidget/components/CodeEditor.js +77 -0
  3. package/dist/ConfigurationEditorWidget/components/ColorEditor.js +125 -0
  4. package/dist/ConfigurationEditorWidget/components/ColorEditor.test.js +31 -0
  5. package/dist/ConfigurationEditorWidget/components/ColorPicker.js +72 -0
  6. package/dist/ConfigurationEditorWidget/components/ConfigurationEditor.js +176 -0
  7. package/dist/ConfigurationEditorWidget/components/ConfigurationEditor.test.js +121 -0
  8. package/dist/ConfigurationEditorWidget/components/JsonEditor.js +82 -0
  9. package/dist/ConfigurationEditorWidget/components/SlotEditor.js +438 -0
  10. package/dist/ConfigurationEditorWidget/components/TypeSelector.js +48 -0
  11. package/dist/ConfigurationEditorWidget/index.js +45 -0
  12. package/dist/ConfigurationEditorWidget/model.js +28 -0
  13. package/dist/FromConfigAdapter/FromConfigAdapter.js +215 -0
  14. package/dist/FromConfigAdapter/FromConfigAdapter.test.js +100 -0
  15. package/dist/FromConfigAdapter/FromConfigRegionsAdapter.js +154 -0
  16. package/dist/FromConfigAdapter/FromConfigRegionsAdapter.test.js +200 -0
  17. package/dist/FromConfigAdapter/FromConfigSequenceAdapter.js +201 -0
  18. package/dist/FromConfigAdapter/FromConfigSequenceAdapter.test.js +110 -0
  19. package/dist/FromConfigAdapter/configSchema.js +51 -0
  20. package/dist/FromConfigAdapter/index.js +51 -0
  21. package/dist/RefNameAliasAdapter/RefNameAliasAdapter.js +125 -0
  22. package/dist/RefNameAliasAdapter/RefNameAliasAdapter.test.js +41 -0
  23. package/dist/RefNameAliasAdapter/configSchema.js +26 -0
  24. package/dist/RefNameAliasAdapter/index.js +23 -0
  25. package/dist/index.js +150 -6
  26. package/dist/index.test.js +41 -0
  27. package/package.json +3 -6
  28. package/src/ConfigurationEditorWidget/components/ConfigurationEditor.js +22 -17
  29. package/src/ConfigurationEditorWidget/components/JsonEditor.js +1 -2
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _react2 = require("@testing-library/react");
8
+
9
+ var _configuration = require("@jbrowse/core/configuration");
10
+
11
+ var _PluginManager = _interopRequireDefault(require("@jbrowse/core/PluginManager"));
12
+
13
+ var _pluginAlignments = _interopRequireDefault(require("@jbrowse/plugin-alignments"));
14
+
15
+ var _pluginSvg = _interopRequireDefault(require("@jbrowse/plugin-svg"));
16
+
17
+ var _pluginLinearGenomeView = require("@jbrowse/plugin-linear-genome-view");
18
+
19
+ var _ConfigurationEditor = _interopRequireDefault(require("./ConfigurationEditor"));
20
+
21
+ describe('ConfigurationEditor widget', function () {
22
+ it('renders with just the required model elements', function () {
23
+ var TestSchema = (0, _configuration.ConfigurationSchema)('TestThing', {
24
+ foo: {
25
+ type: 'string',
26
+ defaultValue: 'bar'
27
+ }
28
+ });
29
+
30
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ConfigurationEditor["default"], {
31
+ model: {
32
+ target: TestSchema.create()
33
+ }
34
+ })),
35
+ container = _render.container;
36
+
37
+ expect(container.firstChild).toMatchSnapshot();
38
+ });
39
+ it('renders all the different types of built-in slots', function () {
40
+ var TestSchema = (0, _configuration.ConfigurationSchema)('TestThing', {
41
+ stringTest: {
42
+ name: 'stringTest',
43
+ description: 'stringTest',
44
+ type: 'string',
45
+ defaultValue: 'string1'
46
+ },
47
+ fileLocationTest: {
48
+ name: 'fileLocationTest',
49
+ description: 'fileLocationTest',
50
+ type: 'fileLocation',
51
+ defaultValue: {
52
+ uri: '/path/to/my.file',
53
+ locationType: 'UriLocation'
54
+ }
55
+ },
56
+ stringArrayTest: {
57
+ name: 'stringArrayTest',
58
+ description: 'stringArrayTest',
59
+ type: 'stringArray',
60
+ defaultValue: ['string1', 'string2']
61
+ },
62
+ stringArrayMapTest: {
63
+ name: 'stringArrayMapTest',
64
+ description: 'stringArrayMapTest',
65
+ type: 'stringArrayMap',
66
+ defaultValue: {
67
+ key1: ['string1', 'string2']
68
+ }
69
+ },
70
+ numberTest: {
71
+ name: 'numberTest',
72
+ description: 'numberTest',
73
+ type: 'number',
74
+ defaultValue: 88.5
75
+ },
76
+ integerTest: {
77
+ name: 'integerTest',
78
+ description: 'integerTest',
79
+ type: 'integer',
80
+ defaultValue: 42
81
+ },
82
+ colorTest: {
83
+ name: 'colorTest',
84
+ description: 'colorTest',
85
+ type: 'color',
86
+ defaultValue: '#396494'
87
+ },
88
+ booleanTest: {
89
+ name: 'booleanTest',
90
+ description: 'booleanTest',
91
+ type: 'boolean',
92
+ defaultValue: true
93
+ }
94
+ });
95
+
96
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ConfigurationEditor["default"], {
97
+ model: {
98
+ target: TestSchema.create()
99
+ }
100
+ })),
101
+ container = _render2.container;
102
+
103
+ expect(container.firstChild).toMatchSnapshot();
104
+ });
105
+ it('renders with defaults of the PileupTrack schema', function () {
106
+ console.warn = jest.fn();
107
+ var pluginManager = new _PluginManager["default"]([new _pluginAlignments["default"](), new _pluginSvg["default"]()]);
108
+ pluginManager.createPluggableElements();
109
+ pluginManager.configure();
110
+ var PileupDisplaySchema = (0, _pluginLinearGenomeView.linearBasicDisplayConfigSchemaFactory)(pluginManager);
111
+
112
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ConfigurationEditor["default"], {
113
+ model: {
114
+ target: PileupDisplaySchema.create()
115
+ }
116
+ })),
117
+ container = _render3.container;
118
+
119
+ expect(container.firstChild).toMatchSnapshot();
120
+ });
121
+ });
@@ -0,0 +1,82 @@
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 _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _util = require("@jbrowse/core/util");
17
+
18
+ var _core = require("@material-ui/core");
19
+
20
+ var _mobxReact = require("mobx-react");
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || (0, _typeof2["default"])(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ var useStyles = (0, _core.makeStyles)({
27
+ error: {
28
+ color: 'red',
29
+ fontSize: '0.8em'
30
+ }
31
+ });
32
+ var CodeEditor = /*#__PURE__*/(0, _react.lazy)(function () {
33
+ return Promise.resolve().then(function () {
34
+ return _interopRequireWildcard(require('./CodeEditor'));
35
+ });
36
+ });
37
+
38
+ function JsonEditor(_ref) {
39
+ var slot = _ref.slot;
40
+ var classes = useStyles();
41
+
42
+ var _useState = (0, _react.useState)(JSON.stringify(slot.value, null, ' ')),
43
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
44
+ contents = _useState2[0],
45
+ setContents = _useState2[1];
46
+
47
+ var _useState3 = (0, _react.useState)(),
48
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
49
+ error = _useState4[0],
50
+ setError = _useState4[1];
51
+
52
+ var debouncedJson = (0, _util.useDebounce)(contents, 400);
53
+ (0, _react.useEffect)(function () {
54
+ try {
55
+ slot.set(JSON.parse(debouncedJson));
56
+ setError(undefined);
57
+ } catch (e) {
58
+ setError(e.message);
59
+ }
60
+ }, [debouncedJson, slot]);
61
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, error ? /*#__PURE__*/_react["default"].createElement("p", {
62
+ className: classes.error
63
+ }, error) : null, /*#__PURE__*/_react["default"].createElement(_core.FormControl, {
64
+ error: error
65
+ }, /*#__PURE__*/_react["default"].createElement(_core.InputLabel, {
66
+ shrink: true,
67
+ htmlFor: "callback-editor"
68
+ }, slot.name), /*#__PURE__*/_react["default"].createElement(_react["default"].Suspense, {
69
+ fallback: /*#__PURE__*/_react["default"].createElement("div", null)
70
+ }, /*#__PURE__*/_react["default"].createElement(CodeEditor, {
71
+ contents: contents,
72
+ setContents: setContents
73
+ })), /*#__PURE__*/_react["default"].createElement(_core.FormHelperText, null, slot.description)));
74
+ }
75
+
76
+ JsonEditor.propTypes = {
77
+ slot: _mobxReact.PropTypes.objectOrObservableObject.isRequired
78
+ };
79
+
80
+ var _default = (0, _mobxReact.observer)(JsonEditor);
81
+
82
+ exports["default"] = _default;
@@ -0,0 +1,438 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.useSlotEditorStyles = exports["default"] = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _mobxReact = require("mobx-react");
17
+
18
+ var _mobxStateTree = require("mobx-state-tree");
19
+
20
+ var _ui = require("@jbrowse/core/ui");
21
+
22
+ var _mstReflection = require("@jbrowse/core/util/mst-reflection");
23
+
24
+ var _core = require("@material-ui/core");
25
+
26
+ var _Delete = _interopRequireDefault(require("@material-ui/icons/Delete"));
27
+
28
+ var _Add = _interopRequireDefault(require("@material-ui/icons/Add"));
29
+
30
+ var _RadioButtonUnchecked = _interopRequireDefault(require("@material-ui/icons/RadioButtonUnchecked"));
31
+
32
+ var _CallbackEditor = _interopRequireDefault(require("./CallbackEditor"));
33
+
34
+ var _ColorEditor = _interopRequireDefault(require("./ColorEditor"));
35
+
36
+ var _JsonEditor = _interopRequireDefault(require("./JsonEditor"));
37
+
38
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
39
+
40
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
41
+
42
+ // icons
43
+ // locals
44
+ var StringEditor = (0, _mobxReact.observer)(function (_ref) {
45
+ var slot = _ref.slot;
46
+ return /*#__PURE__*/_react["default"].createElement(_core.TextField, {
47
+ label: slot.name // error={filterError}
48
+ ,
49
+ helperText: slot.description,
50
+ fullWidth: true,
51
+ value: slot.value,
52
+ onChange: function onChange(evt) {
53
+ return slot.set(evt.target.value);
54
+ }
55
+ });
56
+ });
57
+ var TextEditor = (0, _mobxReact.observer)(function (_ref2) {
58
+ var slot = _ref2.slot;
59
+ return /*#__PURE__*/_react["default"].createElement(_core.TextField, {
60
+ label: slot.name,
61
+ helperText: slot.description,
62
+ fullWidth: true,
63
+ multiline: true,
64
+ value: slot.value,
65
+ onChange: function onChange(evt) {
66
+ return slot.set(evt.target.value);
67
+ }
68
+ });
69
+ }); // checked checkbox, looks like a styled (x)
70
+
71
+ var SvgCheckbox = function SvgCheckbox() {
72
+ return /*#__PURE__*/_react["default"].createElement(_core.SvgIcon, null, /*#__PURE__*/_react["default"].createElement("path", {
73
+ d: "M20.41,3C21.8,5.71 22.35,8.84 22,12C21.8,15.16 20.7,18.29 18.83,21L17.3,20C18.91,17.57 19.85,14.8 20,12C20.34,9.2 19.89,6.43 18.7,4L20.41,3M5.17,3L6.7,4C5.09,6.43 4.15,9.2 4,12C3.66,14.8 4.12,17.57 5.3,20L3.61,21C2.21,18.29 1.65,15.17 2,12C2.2,8.84 3.3,5.71 5.17,3M12.08,10.68L14.4,7.45H16.93L13.15,12.45L15.35,17.37H13.09L11.71,14L9.28,17.33H6.76L10.66,12.21L8.53,7.45H10.8L12.08,10.68Z"
74
+ }));
75
+ };
76
+
77
+ var StringArrayEditor = (0, _mobxReact.observer)(function (_ref3) {
78
+ var slot = _ref3.slot;
79
+
80
+ var _useState = (0, _react.useState)(''),
81
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
82
+ value = _useState2[0],
83
+ setValue = _useState2[1];
84
+
85
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, slot.name ? /*#__PURE__*/_react["default"].createElement(_core.InputLabel, null, slot.name) : null, /*#__PURE__*/_react["default"].createElement(_core.List, {
86
+ disablePadding: true
87
+ }, slot.value.map(function (val, idx) {
88
+ return /*#__PURE__*/_react["default"].createElement(_core.ListItem, {
89
+ key: idx,
90
+ disableGutters: true
91
+ }, /*#__PURE__*/_react["default"].createElement(_core.TextField, {
92
+ value: val,
93
+ onChange: function onChange(evt) {
94
+ return slot.setAtIndex(idx, evt.target.value);
95
+ },
96
+ InputProps: {
97
+ endAdornment: /*#__PURE__*/_react["default"].createElement(_core.InputAdornment, {
98
+ position: "end"
99
+ }, /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
100
+ color: "secondary",
101
+ onClick: function onClick() {
102
+ return slot.removeAtIndex(idx);
103
+ }
104
+ }, /*#__PURE__*/_react["default"].createElement(_Delete["default"], null)))
105
+ }
106
+ }));
107
+ }), /*#__PURE__*/_react["default"].createElement(_core.ListItem, {
108
+ disableGutters: true
109
+ }, /*#__PURE__*/_react["default"].createElement(_core.TextField, {
110
+ value: value,
111
+ placeholder: "add new",
112
+ onChange: function onChange(event) {
113
+ return setValue(event.target.value);
114
+ },
115
+ InputProps: {
116
+ endAdornment: /*#__PURE__*/_react["default"].createElement(_core.InputAdornment, {
117
+ position: "end"
118
+ }, /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
119
+ onClick: function onClick() {
120
+ slot.add(value);
121
+ setValue('');
122
+ },
123
+ disabled: value === '',
124
+ color: "secondary",
125
+ "data-testid": "stringArrayAdd-".concat(slot.name)
126
+ }, /*#__PURE__*/_react["default"].createElement(_Add["default"], null)))
127
+ }
128
+ }))), /*#__PURE__*/_react["default"].createElement(_core.FormHelperText, null, slot.description));
129
+ });
130
+ var useMapEditorStyles = (0, _core.makeStyles)(function (theme) {
131
+ return {
132
+ card: {
133
+ marginTop: theme.spacing(1)
134
+ }
135
+ };
136
+ });
137
+ var StringArrayMapEditor = (0, _mobxReact.observer)(function (_ref4) {
138
+ var slot = _ref4.slot;
139
+ var classes = useMapEditorStyles();
140
+
141
+ var _useState3 = (0, _react.useState)(''),
142
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
143
+ value = _useState4[0],
144
+ setValue = _useState4[1];
145
+
146
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.InputLabel, null, slot.name), Array.from(slot.value, function (_ref5) {
147
+ var _ref6 = (0, _slicedToArray2["default"])(_ref5, 2),
148
+ key = _ref6[0],
149
+ val = _ref6[1];
150
+
151
+ return /*#__PURE__*/_react["default"].createElement(_core.Card, {
152
+ raised: true,
153
+ key: key,
154
+ className: classes.card
155
+ }, /*#__PURE__*/_react["default"].createElement(_core.CardHeader, {
156
+ title: key,
157
+ action: /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
158
+ color: "secondary",
159
+ onClick: function onClick() {
160
+ return slot.remove(key);
161
+ }
162
+ }, /*#__PURE__*/_react["default"].createElement(_Delete["default"], null))
163
+ }), /*#__PURE__*/_react["default"].createElement(_core.CardContent, null, /*#__PURE__*/_react["default"].createElement(StringArrayEditor, {
164
+ slot: {
165
+ value: val,
166
+ description: "Values associated with entry ".concat(key),
167
+ setAtIndex: function setAtIndex(idx, strValue) {
168
+ slot.setAtKeyIndex(key, idx, strValue);
169
+ },
170
+ removeAtIndex: function removeAtIndex(idx) {
171
+ slot.removeAtKeyIndex(key, idx);
172
+ },
173
+ add: function add(strValue) {
174
+ slot.addToKey(key, strValue);
175
+ }
176
+ }
177
+ })));
178
+ }), /*#__PURE__*/_react["default"].createElement(_core.Card, {
179
+ raised: true,
180
+ className: classes.card
181
+ }, /*#__PURE__*/_react["default"].createElement(_core.CardHeader, {
182
+ disableTypography: true,
183
+ title: /*#__PURE__*/_react["default"].createElement(_core.TextField, {
184
+ fullWidth: true,
185
+ value: value,
186
+ placeholder: "add new",
187
+ onChange: function onChange(event) {
188
+ return setValue(event.target.value);
189
+ },
190
+ InputProps: {
191
+ endAdornment: /*#__PURE__*/_react["default"].createElement(_core.InputAdornment, {
192
+ position: "end"
193
+ }, /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
194
+ disabled: value === '',
195
+ onClick: function onClick() {
196
+ slot.add(value, []);
197
+ setValue('');
198
+ },
199
+ color: "secondary"
200
+ }, /*#__PURE__*/_react["default"].createElement(_Add["default"], null)))
201
+ }
202
+ })
203
+ })), /*#__PURE__*/_react["default"].createElement(_core.FormHelperText, null, slot.description));
204
+ });
205
+ var NumberMapEditor = (0, _mobxReact.observer)(function (_ref7) {
206
+ var slot = _ref7.slot;
207
+ var classes = useMapEditorStyles();
208
+
209
+ var _useState5 = (0, _react.useState)(''),
210
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
211
+ value = _useState6[0],
212
+ setValue = _useState6[1];
213
+
214
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.InputLabel, null, slot.name), Array.from(slot.value, function (_ref8) {
215
+ var _ref9 = (0, _slicedToArray2["default"])(_ref8, 2),
216
+ key = _ref9[0],
217
+ val = _ref9[1];
218
+
219
+ return /*#__PURE__*/_react["default"].createElement(_core.Card, {
220
+ raised: true,
221
+ key: key,
222
+ className: classes.card
223
+ }, /*#__PURE__*/_react["default"].createElement(_core.CardHeader, {
224
+ title: key,
225
+ action: /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
226
+ color: "secondary",
227
+ onClick: function onClick() {
228
+ return slot.remove(key);
229
+ }
230
+ }, /*#__PURE__*/_react["default"].createElement(_Delete["default"], null))
231
+ }), /*#__PURE__*/_react["default"].createElement(_core.CardContent, null, /*#__PURE__*/_react["default"].createElement(NumberEditor, {
232
+ slot: {
233
+ value: val,
234
+ set: function set(numValue) {
235
+ return slot.add(key, numValue);
236
+ }
237
+ }
238
+ })));
239
+ }), /*#__PURE__*/_react["default"].createElement(_core.Card, {
240
+ raised: true,
241
+ className: classes.card
242
+ }, /*#__PURE__*/_react["default"].createElement(_core.CardHeader, {
243
+ disableTypography: true,
244
+ title: /*#__PURE__*/_react["default"].createElement(_core.TextField, {
245
+ fullWidth: true,
246
+ value: value,
247
+ placeholder: "add new",
248
+ onChange: function onChange(event) {
249
+ return setValue(event.target.value);
250
+ },
251
+ InputProps: {
252
+ endAdornment: /*#__PURE__*/_react["default"].createElement(_core.InputAdornment, {
253
+ position: "end"
254
+ }, /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
255
+ disabled: value === '',
256
+ onClick: function onClick() {
257
+ slot.add(value, 0);
258
+ setValue('');
259
+ },
260
+ color: "secondary"
261
+ }, /*#__PURE__*/_react["default"].createElement(_Add["default"], null)))
262
+ }
263
+ })
264
+ })), /*#__PURE__*/_react["default"].createElement(_core.FormHelperText, null, slot.description));
265
+ });
266
+ var NumberEditor = (0, _mobxReact.observer)(function (_ref10) {
267
+ var slot = _ref10.slot;
268
+
269
+ var _useState7 = (0, _react.useState)(slot.value),
270
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
271
+ val = _useState8[0],
272
+ setVal = _useState8[1];
273
+
274
+ (0, _react.useEffect)(function () {
275
+ var num = parseFloat(val, 10);
276
+
277
+ if (!Number.isNaN(num)) {
278
+ slot.set(num);
279
+ } else {
280
+ slot.reset();
281
+ }
282
+ }, [slot, val]);
283
+ return /*#__PURE__*/_react["default"].createElement(_core.TextField, {
284
+ label: slot.name,
285
+ helperText: slot.description,
286
+ value: val,
287
+ type: "number",
288
+ onChange: function onChange(evt) {
289
+ return setVal(evt.target.value);
290
+ }
291
+ });
292
+ });
293
+ var IntegerEditor = (0, _mobxReact.observer)(function (_ref11) {
294
+ var slot = _ref11.slot;
295
+
296
+ var _useState9 = (0, _react.useState)(slot.value),
297
+ _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
298
+ val = _useState10[0],
299
+ setVal = _useState10[1];
300
+
301
+ (0, _react.useEffect)(function () {
302
+ var num = parseInt(val, 10);
303
+
304
+ if (!Number.isNaN(num)) {
305
+ slot.set(num);
306
+ }
307
+ }, [slot, val]);
308
+ return /*#__PURE__*/_react["default"].createElement(_core.TextField, {
309
+ label: slot.name,
310
+ helperText: slot.description,
311
+ value: val,
312
+ type: "number",
313
+ onChange: function onChange(evt) {
314
+ return setVal(evt.target.value);
315
+ }
316
+ });
317
+ });
318
+ var booleanEditor = (0, _mobxReact.observer)(function (_ref12) {
319
+ var slot = _ref12.slot;
320
+ return /*#__PURE__*/_react["default"].createElement(_core.FormControl, null, /*#__PURE__*/_react["default"].createElement(_core.FormControlLabel, {
321
+ label: slot.name,
322
+ control: /*#__PURE__*/_react["default"].createElement(_core.Checkbox, {
323
+ checked: slot.value,
324
+ onChange: function onChange(evt) {
325
+ return slot.set(evt.target.checked);
326
+ }
327
+ })
328
+ }), /*#__PURE__*/_react["default"].createElement(_core.FormHelperText, null, slot.description));
329
+ });
330
+ var stringEnumEditor = (0, _mobxReact.observer)(function (_ref13) {
331
+ var slot = _ref13.slot,
332
+ slotSchema = _ref13.slotSchema;
333
+ var p = (0, _mobxStateTree.getPropertyMembers)((0, _mstReflection.getSubType)(slotSchema));
334
+ var choices = (0, _mstReflection.getUnionSubTypes)((0, _mstReflection.getUnionSubTypes)((0, _mstReflection.getSubType)((0, _mstReflection.getPropertyType)(p, 'value')))[1]).map(function (t) {
335
+ return t.value;
336
+ });
337
+ return /*#__PURE__*/_react["default"].createElement(_core.TextField, {
338
+ value: slot.value,
339
+ label: slot.name,
340
+ select: true // error={filterError}
341
+ ,
342
+ helperText: slot.description,
343
+ fullWidth: true,
344
+ onChange: function onChange(evt) {
345
+ return slot.set(evt.target.value);
346
+ }
347
+ }, choices.map(function (str) {
348
+ return /*#__PURE__*/_react["default"].createElement(_core.MenuItem, {
349
+ key: str,
350
+ value: str
351
+ }, str);
352
+ }));
353
+ });
354
+ var FileSelectorWrapper = (0, _mobxReact.observer)(function (_ref14) {
355
+ var _getEnv$pluginManager;
356
+
357
+ var slot = _ref14.slot;
358
+ return /*#__PURE__*/_react["default"].createElement(_ui.FileSelector, {
359
+ location: slot.value,
360
+ setLocation: function setLocation(location) {
361
+ return slot.set(location);
362
+ },
363
+ name: slot.name,
364
+ description: slot.description,
365
+ rootModel: (_getEnv$pluginManager = (0, _mobxStateTree.getEnv)(slot).pluginManager) === null || _getEnv$pluginManager === void 0 ? void 0 : _getEnv$pluginManager.rootModel
366
+ });
367
+ });
368
+ var valueComponents = {
369
+ string: StringEditor,
370
+ text: TextEditor,
371
+ fileLocation: FileSelectorWrapper,
372
+ stringArray: StringArrayEditor,
373
+ stringArrayMap: StringArrayMapEditor,
374
+ numberMap: NumberMapEditor,
375
+ number: NumberEditor,
376
+ integer: IntegerEditor,
377
+ color: _ColorEditor["default"],
378
+ stringEnum: stringEnumEditor,
379
+ "boolean": booleanEditor,
380
+ frozen: _JsonEditor["default"],
381
+ configRelationships: _JsonEditor["default"]
382
+ };
383
+ var useSlotEditorStyles = (0, _core.makeStyles)(function (theme) {
384
+ return {
385
+ paper: {
386
+ display: 'flex',
387
+ marginBottom: theme.spacing(2),
388
+ position: 'relative'
389
+ },
390
+ paperContent: {
391
+ width: '100%'
392
+ },
393
+ slotModeSwitch: {
394
+ width: 24,
395
+ background: theme.palette.secondary.light,
396
+ display: 'flex',
397
+ justifyContent: 'center',
398
+ alignItems: 'center'
399
+ }
400
+ };
401
+ });
402
+ exports.useSlotEditorStyles = useSlotEditorStyles;
403
+ var SlotEditor = (0, _mobxReact.observer)(function (_ref15) {
404
+ var slot = _ref15.slot,
405
+ slotSchema = _ref15.slotSchema;
406
+ var classes = useSlotEditorStyles();
407
+ var type = slot.type;
408
+ var ValueComponent = slot.isCallback ? _CallbackEditor["default"] : valueComponents[type];
409
+
410
+ if (!ValueComponent) {
411
+ console.warn("no slot editor defined for ".concat(type, ", editing as string"));
412
+ ValueComponent = StringEditor;
413
+ }
414
+
415
+ if (!(type in valueComponents)) {
416
+ console.warn("SlotEditor needs to implement ".concat(type));
417
+ }
418
+
419
+ return /*#__PURE__*/_react["default"].createElement(_core.Paper, {
420
+ className: classes.paper
421
+ }, /*#__PURE__*/_react["default"].createElement("div", {
422
+ className: classes.paperContent
423
+ }, /*#__PURE__*/_react["default"].createElement(ValueComponent, {
424
+ slot: slot,
425
+ slotSchema: slotSchema
426
+ })), /*#__PURE__*/_react["default"].createElement("div", {
427
+ className: classes.slotModeSwitch
428
+ }, slot.contextVariable.length ? /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
429
+ className: classes.slotModeIcon,
430
+ onClick: function onClick() {
431
+ return slot.isCallback ? slot.convertToValue() : slot.convertToCallback();
432
+ },
433
+ title: "convert to ".concat(slot.isCallback ? 'regular value' : 'callback'),
434
+ color: "secondary"
435
+ }, !slot.isCallback ? /*#__PURE__*/_react["default"].createElement(_RadioButtonUnchecked["default"], null) : /*#__PURE__*/_react["default"].createElement(SvgCheckbox, null)) : null));
436
+ });
437
+ var _default = SlotEditor;
438
+ exports["default"] = _default;
@@ -0,0 +1,48 @@
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 _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem"));
11
+
12
+ var _Paper = _interopRequireDefault(require("@material-ui/core/Paper"));
13
+
14
+ var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
15
+
16
+ var _mobxReact = require("mobx-react");
17
+
18
+ var _react = _interopRequireDefault(require("react"));
19
+
20
+ var _SlotEditor = require("./SlotEditor");
21
+
22
+ var TypeSelector = (0, _mobxReact.observer)(function (_ref) {
23
+ var typeNameChoices = _ref.typeNameChoices,
24
+ slot = _ref.slot,
25
+ slotName = _ref.slotName,
26
+ onChange = _ref.onChange;
27
+ var classes = (0, _SlotEditor.useSlotEditorStyles)();
28
+ return /*#__PURE__*/_react["default"].createElement(_Paper["default"], {
29
+ className: classes.paper
30
+ }, /*#__PURE__*/_react["default"].createElement("div", {
31
+ className: classes.paperContent
32
+ }, /*#__PURE__*/_react["default"].createElement(_TextField["default"], {
33
+ value: slot.type,
34
+ label: "Type",
35
+ select: true // error={filterError}
36
+ ,
37
+ helperText: "Type of ".concat(slotName, " to use"),
38
+ fullWidth: true,
39
+ onChange: onChange
40
+ }, typeNameChoices.map(function (str) {
41
+ return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
42
+ key: str,
43
+ value: str
44
+ }, str);
45
+ }))));
46
+ });
47
+ var _default = TypeSelector;
48
+ exports["default"] = _default;