@jbrowse/plugin-config 1.7.9 → 1.7.10
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/ConfigurationEditorWidget/components/SlotEditor.js +46 -97
- package/dist/ConfigurationEditorWidget/components/StringArrayEditor.d.ts +12 -0
- package/dist/ConfigurationEditorWidget/components/StringArrayEditor.js +110 -0
- package/dist/ConfigurationEditorWidget/index.js +2 -2
- package/package.json +2 -2
- package/src/ConfigurationEditorWidget/components/SlotEditor.js +1 -58
- package/src/ConfigurationEditorWidget/components/StringArrayEditor.tsx +115 -0
- package/src/ConfigurationEditorWidget/components/__snapshots__/ConfigurationEditor.test.js.snap +26 -86
- package/src/ConfigurationEditorWidget/index.js +2 -2
|
@@ -31,6 +31,8 @@ var _Add = _interopRequireDefault(require("@material-ui/icons/Add"));
|
|
|
31
31
|
|
|
32
32
|
var _RadioButtonUnchecked = _interopRequireDefault(require("@material-ui/icons/RadioButtonUnchecked"));
|
|
33
33
|
|
|
34
|
+
var _StringArrayEditor = _interopRequireDefault(require("./StringArrayEditor"));
|
|
35
|
+
|
|
34
36
|
var _CallbackEditor = _interopRequireDefault(require("./CallbackEditor"));
|
|
35
37
|
|
|
36
38
|
var _ColorEditor = _interopRequireDefault(require("./ColorEditor"));
|
|
@@ -89,59 +91,6 @@ var SvgCheckbox = function SvgCheckbox() {
|
|
|
89
91
|
}));
|
|
90
92
|
};
|
|
91
93
|
|
|
92
|
-
var StringArrayEditor = (0, _mobxReact.observer)(function (_ref3) {
|
|
93
|
-
var slot = _ref3.slot;
|
|
94
|
-
|
|
95
|
-
var _useState = (0, _react.useState)(''),
|
|
96
|
-
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
97
|
-
value = _useState2[0],
|
|
98
|
-
setValue = _useState2[1];
|
|
99
|
-
|
|
100
|
-
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, {
|
|
101
|
-
disablePadding: true
|
|
102
|
-
}, slot.value.map(function (val, idx) {
|
|
103
|
-
return /*#__PURE__*/_react.default.createElement(_core.ListItem, {
|
|
104
|
-
key: idx,
|
|
105
|
-
disableGutters: true
|
|
106
|
-
}, /*#__PURE__*/_react.default.createElement(_core.TextField, {
|
|
107
|
-
value: val,
|
|
108
|
-
onChange: function onChange(evt) {
|
|
109
|
-
return slot.setAtIndex(idx, evt.target.value);
|
|
110
|
-
},
|
|
111
|
-
InputProps: {
|
|
112
|
-
endAdornment: /*#__PURE__*/_react.default.createElement(_core.InputAdornment, {
|
|
113
|
-
position: "end"
|
|
114
|
-
}, /*#__PURE__*/_react.default.createElement(_core.IconButton, {
|
|
115
|
-
color: "secondary",
|
|
116
|
-
onClick: function onClick() {
|
|
117
|
-
return slot.removeAtIndex(idx);
|
|
118
|
-
}
|
|
119
|
-
}, /*#__PURE__*/_react.default.createElement(_Delete.default, null)))
|
|
120
|
-
}
|
|
121
|
-
}));
|
|
122
|
-
}), /*#__PURE__*/_react.default.createElement(_core.ListItem, {
|
|
123
|
-
disableGutters: true
|
|
124
|
-
}, /*#__PURE__*/_react.default.createElement(_core.TextField, {
|
|
125
|
-
value: value,
|
|
126
|
-
placeholder: "add new",
|
|
127
|
-
onChange: function onChange(event) {
|
|
128
|
-
return setValue(event.target.value);
|
|
129
|
-
},
|
|
130
|
-
InputProps: {
|
|
131
|
-
endAdornment: /*#__PURE__*/_react.default.createElement(_core.InputAdornment, {
|
|
132
|
-
position: "end"
|
|
133
|
-
}, /*#__PURE__*/_react.default.createElement(_core.IconButton, {
|
|
134
|
-
onClick: function onClick() {
|
|
135
|
-
slot.add(value);
|
|
136
|
-
setValue('');
|
|
137
|
-
},
|
|
138
|
-
disabled: value === '',
|
|
139
|
-
color: "secondary",
|
|
140
|
-
"data-testid": "stringArrayAdd-".concat(slot.name)
|
|
141
|
-
}, /*#__PURE__*/_react.default.createElement(_Add.default, null)))
|
|
142
|
-
}
|
|
143
|
-
}))), /*#__PURE__*/_react.default.createElement(_core.FormHelperText, null, slot.description));
|
|
144
|
-
});
|
|
145
94
|
var useMapEditorStyles = (0, _core.makeStyles)(function (theme) {
|
|
146
95
|
return {
|
|
147
96
|
card: {
|
|
@@ -149,19 +98,19 @@ var useMapEditorStyles = (0, _core.makeStyles)(function (theme) {
|
|
|
149
98
|
}
|
|
150
99
|
};
|
|
151
100
|
});
|
|
152
|
-
var StringArrayMapEditor = (0, _mobxReact.observer)(function (
|
|
153
|
-
var slot =
|
|
101
|
+
var StringArrayMapEditor = (0, _mobxReact.observer)(function (_ref3) {
|
|
102
|
+
var slot = _ref3.slot;
|
|
154
103
|
var classes = useMapEditorStyles();
|
|
155
104
|
|
|
156
|
-
var
|
|
157
|
-
|
|
158
|
-
value =
|
|
159
|
-
setValue =
|
|
105
|
+
var _useState = (0, _react.useState)(''),
|
|
106
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
107
|
+
value = _useState2[0],
|
|
108
|
+
setValue = _useState2[1];
|
|
160
109
|
|
|
161
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_core.InputLabel, null, slot.name), Array.from(slot.value, function (
|
|
162
|
-
var
|
|
163
|
-
key =
|
|
164
|
-
val =
|
|
110
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_core.InputLabel, null, slot.name), Array.from(slot.value, function (_ref4) {
|
|
111
|
+
var _ref5 = (0, _slicedToArray2.default)(_ref4, 2),
|
|
112
|
+
key = _ref5[0],
|
|
113
|
+
val = _ref5[1];
|
|
165
114
|
|
|
166
115
|
return /*#__PURE__*/_react.default.createElement(_core.Card, {
|
|
167
116
|
raised: true,
|
|
@@ -175,7 +124,7 @@ var StringArrayMapEditor = (0, _mobxReact.observer)(function (_ref4) {
|
|
|
175
124
|
return slot.remove(key);
|
|
176
125
|
}
|
|
177
126
|
}, /*#__PURE__*/_react.default.createElement(_Delete.default, null))
|
|
178
|
-
}), /*#__PURE__*/_react.default.createElement(_core.CardContent, null, /*#__PURE__*/_react.default.createElement(
|
|
127
|
+
}), /*#__PURE__*/_react.default.createElement(_core.CardContent, null, /*#__PURE__*/_react.default.createElement(_StringArrayEditor.default, {
|
|
179
128
|
slot: {
|
|
180
129
|
value: val,
|
|
181
130
|
description: "Values associated with entry ".concat(key),
|
|
@@ -217,19 +166,19 @@ var StringArrayMapEditor = (0, _mobxReact.observer)(function (_ref4) {
|
|
|
217
166
|
})
|
|
218
167
|
})), /*#__PURE__*/_react.default.createElement(_core.FormHelperText, null, slot.description));
|
|
219
168
|
});
|
|
220
|
-
var NumberMapEditor = (0, _mobxReact.observer)(function (
|
|
221
|
-
var slot =
|
|
169
|
+
var NumberMapEditor = (0, _mobxReact.observer)(function (_ref6) {
|
|
170
|
+
var slot = _ref6.slot;
|
|
222
171
|
var classes = useMapEditorStyles();
|
|
223
172
|
|
|
224
|
-
var
|
|
225
|
-
|
|
226
|
-
value =
|
|
227
|
-
setValue =
|
|
173
|
+
var _useState3 = (0, _react.useState)(''),
|
|
174
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
175
|
+
value = _useState4[0],
|
|
176
|
+
setValue = _useState4[1];
|
|
228
177
|
|
|
229
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_core.InputLabel, null, slot.name), Array.from(slot.value, function (
|
|
230
|
-
var
|
|
231
|
-
key =
|
|
232
|
-
val =
|
|
178
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_core.InputLabel, null, slot.name), Array.from(slot.value, function (_ref7) {
|
|
179
|
+
var _ref8 = (0, _slicedToArray2.default)(_ref7, 2),
|
|
180
|
+
key = _ref8[0],
|
|
181
|
+
val = _ref8[1];
|
|
233
182
|
|
|
234
183
|
return /*#__PURE__*/_react.default.createElement(_core.Card, {
|
|
235
184
|
raised: true,
|
|
@@ -278,13 +227,13 @@ var NumberMapEditor = (0, _mobxReact.observer)(function (_ref7) {
|
|
|
278
227
|
})
|
|
279
228
|
})), /*#__PURE__*/_react.default.createElement(_core.FormHelperText, null, slot.description));
|
|
280
229
|
});
|
|
281
|
-
var NumberEditor = (0, _mobxReact.observer)(function (
|
|
282
|
-
var slot =
|
|
230
|
+
var NumberEditor = (0, _mobxReact.observer)(function (_ref9) {
|
|
231
|
+
var slot = _ref9.slot;
|
|
283
232
|
|
|
284
|
-
var
|
|
285
|
-
|
|
286
|
-
val =
|
|
287
|
-
setVal =
|
|
233
|
+
var _useState5 = (0, _react.useState)(slot.value),
|
|
234
|
+
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
235
|
+
val = _useState6[0],
|
|
236
|
+
setVal = _useState6[1];
|
|
288
237
|
|
|
289
238
|
(0, _react.useEffect)(function () {
|
|
290
239
|
var num = parseFloat(val, 10);
|
|
@@ -305,13 +254,13 @@ var NumberEditor = (0, _mobxReact.observer)(function (_ref10) {
|
|
|
305
254
|
}
|
|
306
255
|
});
|
|
307
256
|
});
|
|
308
|
-
var IntegerEditor = (0, _mobxReact.observer)(function (
|
|
309
|
-
var slot =
|
|
257
|
+
var IntegerEditor = (0, _mobxReact.observer)(function (_ref10) {
|
|
258
|
+
var slot = _ref10.slot;
|
|
310
259
|
|
|
311
|
-
var
|
|
312
|
-
|
|
313
|
-
val =
|
|
314
|
-
setVal =
|
|
260
|
+
var _useState7 = (0, _react.useState)(slot.value),
|
|
261
|
+
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
262
|
+
val = _useState8[0],
|
|
263
|
+
setVal = _useState8[1];
|
|
315
264
|
|
|
316
265
|
(0, _react.useEffect)(function () {
|
|
317
266
|
var num = parseInt(val, 10);
|
|
@@ -330,8 +279,8 @@ var IntegerEditor = (0, _mobxReact.observer)(function (_ref11) {
|
|
|
330
279
|
}
|
|
331
280
|
});
|
|
332
281
|
});
|
|
333
|
-
var BooleanEditor = (0, _mobxReact.observer)(function (
|
|
334
|
-
var slot =
|
|
282
|
+
var BooleanEditor = (0, _mobxReact.observer)(function (_ref11) {
|
|
283
|
+
var slot = _ref11.slot;
|
|
335
284
|
return /*#__PURE__*/_react.default.createElement(_core.FormControl, null, /*#__PURE__*/_react.default.createElement(_core.FormControlLabel, {
|
|
336
285
|
label: slot.name,
|
|
337
286
|
control: /*#__PURE__*/_react.default.createElement(_core.Checkbox, {
|
|
@@ -342,9 +291,9 @@ var BooleanEditor = (0, _mobxReact.observer)(function (_ref12) {
|
|
|
342
291
|
})
|
|
343
292
|
}), /*#__PURE__*/_react.default.createElement(_core.FormHelperText, null, slot.description));
|
|
344
293
|
});
|
|
345
|
-
var StringEnumEditor = (0, _mobxReact.observer)(function (
|
|
346
|
-
var slot =
|
|
347
|
-
slotSchema =
|
|
294
|
+
var StringEnumEditor = (0, _mobxReact.observer)(function (_ref12) {
|
|
295
|
+
var slot = _ref12.slot,
|
|
296
|
+
slotSchema = _ref12.slotSchema;
|
|
348
297
|
var p = (0, _mobxStateTree.getPropertyMembers)((0, _mstReflection.getSubType)(slotSchema));
|
|
349
298
|
var choices = (0, _mstReflection.getUnionSubTypes)((0, _mstReflection.getUnionSubTypes)((0, _mstReflection.getSubType)((0, _mstReflection.getPropertyType)(p, 'value')))[1]).map(function (t) {
|
|
350
299
|
return t.value;
|
|
@@ -364,10 +313,10 @@ var StringEnumEditor = (0, _mobxReact.observer)(function (_ref13) {
|
|
|
364
313
|
}, str);
|
|
365
314
|
}));
|
|
366
315
|
});
|
|
367
|
-
var FileSelectorWrapper = (0, _mobxReact.observer)(function (
|
|
316
|
+
var FileSelectorWrapper = (0, _mobxReact.observer)(function (_ref13) {
|
|
368
317
|
var _getEnv$pluginManager;
|
|
369
318
|
|
|
370
|
-
var slot =
|
|
319
|
+
var slot = _ref13.slot;
|
|
371
320
|
return /*#__PURE__*/_react.default.createElement(_ui.FileSelector, {
|
|
372
321
|
location: slot.value,
|
|
373
322
|
setLocation: function setLocation(location) {
|
|
@@ -382,7 +331,7 @@ var valueComponents = {
|
|
|
382
331
|
string: StringEditor,
|
|
383
332
|
text: TextEditor,
|
|
384
333
|
fileLocation: FileSelectorWrapper,
|
|
385
|
-
stringArray:
|
|
334
|
+
stringArray: _StringArrayEditor.default,
|
|
386
335
|
stringArrayMap: StringArrayMapEditor,
|
|
387
336
|
numberMap: NumberMapEditor,
|
|
388
337
|
number: NumberEditor,
|
|
@@ -413,9 +362,9 @@ var useSlotEditorStyles = (0, _core.makeStyles)(function (theme) {
|
|
|
413
362
|
};
|
|
414
363
|
});
|
|
415
364
|
exports.useSlotEditorStyles = useSlotEditorStyles;
|
|
416
|
-
var SlotEditor = (0, _mobxReact.observer)(function (
|
|
417
|
-
var slot =
|
|
418
|
-
slotSchema =
|
|
365
|
+
var SlotEditor = (0, _mobxReact.observer)(function (_ref14) {
|
|
366
|
+
var slot = _ref14.slot,
|
|
367
|
+
slotSchema = _ref14.slotSchema;
|
|
419
368
|
var classes = useSlotEditorStyles();
|
|
420
369
|
var type = slot.type;
|
|
421
370
|
var ValueComponent = slot.isCallback ? _CallbackEditor.default : valueComponents[type];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
declare const StringArrayEditor: ({ slot, }: {
|
|
3
|
+
slot: {
|
|
4
|
+
name: string;
|
|
5
|
+
value: string[];
|
|
6
|
+
setAtIndex: Function;
|
|
7
|
+
removeAtIndex: Function;
|
|
8
|
+
add: Function;
|
|
9
|
+
description: string;
|
|
10
|
+
};
|
|
11
|
+
}) => JSX.Element;
|
|
12
|
+
export default StringArrayEditor;
|
|
@@ -0,0 +1,110 @@
|
|
|
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.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 _core = require("@material-ui/core");
|
|
19
|
+
|
|
20
|
+
var _Delete = _interopRequireDefault(require("@material-ui/icons/Delete"));
|
|
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 || _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; }
|
|
25
|
+
|
|
26
|
+
// icons
|
|
27
|
+
var StringArrayEditor = (0, _mobxReact.observer)(function (_ref) {
|
|
28
|
+
var slot = _ref.slot;
|
|
29
|
+
|
|
30
|
+
var _useState = (0, _react.useState)(''),
|
|
31
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
32
|
+
value = _useState2[0],
|
|
33
|
+
setValue = _useState2[1];
|
|
34
|
+
|
|
35
|
+
var _useState3 = (0, _react.useState)(false),
|
|
36
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
37
|
+
addNew = _useState4[0],
|
|
38
|
+
setAddNew = _useState4[1];
|
|
39
|
+
|
|
40
|
+
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, {
|
|
41
|
+
disablePadding: true
|
|
42
|
+
}, slot.value.map(function (val, idx) {
|
|
43
|
+
return /*#__PURE__*/_react.default.createElement(_core.ListItem, {
|
|
44
|
+
key: idx,
|
|
45
|
+
disableGutters: true
|
|
46
|
+
}, /*#__PURE__*/_react.default.createElement(_core.TextField, {
|
|
47
|
+
value: val,
|
|
48
|
+
onChange: function onChange(evt) {
|
|
49
|
+
return slot.setAtIndex(idx, evt.target.value);
|
|
50
|
+
},
|
|
51
|
+
InputProps: {
|
|
52
|
+
endAdornment: /*#__PURE__*/_react.default.createElement(_core.InputAdornment, {
|
|
53
|
+
position: "end"
|
|
54
|
+
}, /*#__PURE__*/_react.default.createElement(_core.IconButton, {
|
|
55
|
+
color: "secondary",
|
|
56
|
+
onClick: function onClick() {
|
|
57
|
+
return slot.removeAtIndex(idx);
|
|
58
|
+
}
|
|
59
|
+
}, /*#__PURE__*/_react.default.createElement(_Delete.default, null)))
|
|
60
|
+
}
|
|
61
|
+
}));
|
|
62
|
+
}), addNew ? /*#__PURE__*/_react.default.createElement(_core.ListItem, {
|
|
63
|
+
disableGutters: true
|
|
64
|
+
}, /*#__PURE__*/_react.default.createElement(_core.TextField, {
|
|
65
|
+
value: value,
|
|
66
|
+
placeholder: "add new",
|
|
67
|
+
onChange: function onChange(event) {
|
|
68
|
+
return setValue(event.target.value);
|
|
69
|
+
},
|
|
70
|
+
InputProps: {
|
|
71
|
+
endAdornment: /*#__PURE__*/_react.default.createElement(_core.InputAdornment, {
|
|
72
|
+
position: "end"
|
|
73
|
+
}, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_core.Button, {
|
|
74
|
+
color: "primary",
|
|
75
|
+
variant: "contained",
|
|
76
|
+
style: {
|
|
77
|
+
margin: 2
|
|
78
|
+
},
|
|
79
|
+
"data-testid": "stringArrayAdd-".concat(slot.name),
|
|
80
|
+
onClick: function onClick() {
|
|
81
|
+
setAddNew(false);
|
|
82
|
+
slot.add(value);
|
|
83
|
+
setValue('');
|
|
84
|
+
}
|
|
85
|
+
}, "OK"), /*#__PURE__*/_react.default.createElement(_core.Button, {
|
|
86
|
+
color: "primary",
|
|
87
|
+
variant: "contained",
|
|
88
|
+
style: {
|
|
89
|
+
margin: 2
|
|
90
|
+
},
|
|
91
|
+
onClick: function onClick() {
|
|
92
|
+
setAddNew(false);
|
|
93
|
+
setValue('');
|
|
94
|
+
}
|
|
95
|
+
}, "Cancel")))
|
|
96
|
+
}
|
|
97
|
+
})) : null, /*#__PURE__*/_react.default.createElement(_core.Button, {
|
|
98
|
+
color: "primary",
|
|
99
|
+
variant: "contained",
|
|
100
|
+
style: {
|
|
101
|
+
margin: 4
|
|
102
|
+
},
|
|
103
|
+
disabled: addNew,
|
|
104
|
+
onClick: function onClick() {
|
|
105
|
+
return setAddNew(true);
|
|
106
|
+
}
|
|
107
|
+
}, "Add item")), /*#__PURE__*/_react.default.createElement(_core.FormHelperText, null, slot.description));
|
|
108
|
+
});
|
|
109
|
+
var _default = StringArrayEditor;
|
|
110
|
+
exports.default = _default;
|
|
@@ -26,7 +26,7 @@ exports.configSchema = configSchema;
|
|
|
26
26
|
var HeadingComponent = (0, _mobxReact.observer)(function (_ref) {
|
|
27
27
|
var model = _ref.model;
|
|
28
28
|
|
|
29
|
-
if (model && model.target) {
|
|
29
|
+
if (model !== null && model !== void 0 && model.target) {
|
|
30
30
|
if (model.target.type) {
|
|
31
31
|
return "".concat(model.target.type, " settings");
|
|
32
32
|
}
|
|
@@ -34,7 +34,7 @@ var HeadingComponent = (0, _mobxReact.observer)(function (_ref) {
|
|
|
34
34
|
if ((0, _mobxStateTree.isStateTreeNode)(model.target)) {
|
|
35
35
|
var type = (0, _mobxStateTree.getType)(model.target);
|
|
36
36
|
|
|
37
|
-
if (type && type.name) {
|
|
37
|
+
if (type !== null && type !== void 0 && type.name) {
|
|
38
38
|
return "".concat(type.name.replace('ConfigurationSchema', ''), " settings");
|
|
39
39
|
}
|
|
40
40
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-config",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.10",
|
|
4
4
|
"description": "JBrowse 2 config utilities",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"publishConfig": {
|
|
54
54
|
"access": "public"
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "02d8c1e88e5603ea5855faed4ccb814e28071b32"
|
|
57
57
|
}
|
|
@@ -18,8 +18,6 @@ import {
|
|
|
18
18
|
IconButton,
|
|
19
19
|
InputAdornment,
|
|
20
20
|
InputLabel,
|
|
21
|
-
List,
|
|
22
|
-
ListItem,
|
|
23
21
|
MenuItem,
|
|
24
22
|
Paper,
|
|
25
23
|
SvgIcon,
|
|
@@ -33,6 +31,7 @@ import AddIcon from '@material-ui/icons/Add'
|
|
|
33
31
|
import RadioButtonUncheckedIcon from '@material-ui/icons/RadioButtonUnchecked'
|
|
34
32
|
|
|
35
33
|
// locals
|
|
34
|
+
import StringArrayEditor from './StringArrayEditor'
|
|
36
35
|
import CallbackEditor from './CallbackEditor'
|
|
37
36
|
import ColorEditor from './ColorEditor'
|
|
38
37
|
import JsonEditor from './JsonEditor'
|
|
@@ -80,62 +79,6 @@ const SvgCheckbox = () => (
|
|
|
80
79
|
</SvgIcon>
|
|
81
80
|
)
|
|
82
81
|
|
|
83
|
-
const StringArrayEditor = observer(({ slot }) => {
|
|
84
|
-
const [value, setValue] = useState('')
|
|
85
|
-
return (
|
|
86
|
-
<>
|
|
87
|
-
{slot.name ? <InputLabel>{slot.name}</InputLabel> : null}
|
|
88
|
-
<List disablePadding>
|
|
89
|
-
{slot.value.map((val, idx) => (
|
|
90
|
-
<ListItem key={idx} disableGutters>
|
|
91
|
-
<TextField
|
|
92
|
-
value={val}
|
|
93
|
-
onChange={evt => slot.setAtIndex(idx, evt.target.value)}
|
|
94
|
-
InputProps={{
|
|
95
|
-
endAdornment: (
|
|
96
|
-
<InputAdornment position="end">
|
|
97
|
-
<IconButton
|
|
98
|
-
color="secondary"
|
|
99
|
-
onClick={() => slot.removeAtIndex(idx)}
|
|
100
|
-
>
|
|
101
|
-
<DeleteIcon />
|
|
102
|
-
</IconButton>
|
|
103
|
-
</InputAdornment>
|
|
104
|
-
),
|
|
105
|
-
}}
|
|
106
|
-
/>
|
|
107
|
-
</ListItem>
|
|
108
|
-
))}
|
|
109
|
-
<ListItem disableGutters>
|
|
110
|
-
<TextField
|
|
111
|
-
value={value}
|
|
112
|
-
placeholder="add new"
|
|
113
|
-
onChange={event => setValue(event.target.value)}
|
|
114
|
-
InputProps={{
|
|
115
|
-
endAdornment: (
|
|
116
|
-
<InputAdornment position="end">
|
|
117
|
-
<IconButton
|
|
118
|
-
onClick={() => {
|
|
119
|
-
slot.add(value)
|
|
120
|
-
setValue('')
|
|
121
|
-
}}
|
|
122
|
-
disabled={value === ''}
|
|
123
|
-
color="secondary"
|
|
124
|
-
data-testid={`stringArrayAdd-${slot.name}`}
|
|
125
|
-
>
|
|
126
|
-
<AddIcon />
|
|
127
|
-
</IconButton>
|
|
128
|
-
</InputAdornment>
|
|
129
|
-
),
|
|
130
|
-
}}
|
|
131
|
-
/>
|
|
132
|
-
</ListItem>
|
|
133
|
-
</List>
|
|
134
|
-
<FormHelperText>{slot.description}</FormHelperText>
|
|
135
|
-
</>
|
|
136
|
-
)
|
|
137
|
-
})
|
|
138
|
-
|
|
139
82
|
const useMapEditorStyles = makeStyles(theme => ({
|
|
140
83
|
card: {
|
|
141
84
|
marginTop: theme.spacing(1),
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import React, { useState } from 'react'
|
|
2
|
+
import { observer } from 'mobx-react'
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
Button,
|
|
6
|
+
FormHelperText,
|
|
7
|
+
IconButton,
|
|
8
|
+
InputAdornment,
|
|
9
|
+
InputLabel,
|
|
10
|
+
List,
|
|
11
|
+
ListItem,
|
|
12
|
+
TextField,
|
|
13
|
+
} from '@material-ui/core'
|
|
14
|
+
|
|
15
|
+
// icons
|
|
16
|
+
import DeleteIcon from '@material-ui/icons/Delete'
|
|
17
|
+
|
|
18
|
+
const StringArrayEditor = observer(
|
|
19
|
+
({
|
|
20
|
+
slot,
|
|
21
|
+
}: {
|
|
22
|
+
slot: {
|
|
23
|
+
name: string
|
|
24
|
+
value: string[]
|
|
25
|
+
setAtIndex: Function
|
|
26
|
+
removeAtIndex: Function
|
|
27
|
+
add: Function
|
|
28
|
+
description: string
|
|
29
|
+
}
|
|
30
|
+
}) => {
|
|
31
|
+
const [value, setValue] = useState('')
|
|
32
|
+
const [addNew, setAddNew] = useState(false)
|
|
33
|
+
return (
|
|
34
|
+
<>
|
|
35
|
+
{slot.name ? <InputLabel>{slot.name}</InputLabel> : null}
|
|
36
|
+
<List disablePadding>
|
|
37
|
+
{slot.value.map((val, idx) => (
|
|
38
|
+
<ListItem key={idx} disableGutters>
|
|
39
|
+
<TextField
|
|
40
|
+
value={val}
|
|
41
|
+
onChange={evt => slot.setAtIndex(idx, evt.target.value)}
|
|
42
|
+
InputProps={{
|
|
43
|
+
endAdornment: (
|
|
44
|
+
<InputAdornment position="end">
|
|
45
|
+
<IconButton
|
|
46
|
+
color="secondary"
|
|
47
|
+
onClick={() => slot.removeAtIndex(idx)}
|
|
48
|
+
>
|
|
49
|
+
<DeleteIcon />
|
|
50
|
+
</IconButton>
|
|
51
|
+
</InputAdornment>
|
|
52
|
+
),
|
|
53
|
+
}}
|
|
54
|
+
/>
|
|
55
|
+
</ListItem>
|
|
56
|
+
))}
|
|
57
|
+
|
|
58
|
+
{addNew ? (
|
|
59
|
+
<ListItem disableGutters>
|
|
60
|
+
<TextField
|
|
61
|
+
value={value}
|
|
62
|
+
placeholder="add new"
|
|
63
|
+
onChange={event => setValue(event.target.value)}
|
|
64
|
+
InputProps={{
|
|
65
|
+
endAdornment: (
|
|
66
|
+
<InputAdornment position="end">
|
|
67
|
+
<>
|
|
68
|
+
<Button
|
|
69
|
+
color="primary"
|
|
70
|
+
variant="contained"
|
|
71
|
+
style={{ margin: 2 }}
|
|
72
|
+
data-testid={`stringArrayAdd-${slot.name}`}
|
|
73
|
+
onClick={() => {
|
|
74
|
+
setAddNew(false)
|
|
75
|
+
slot.add(value)
|
|
76
|
+
setValue('')
|
|
77
|
+
}}
|
|
78
|
+
>
|
|
79
|
+
OK
|
|
80
|
+
</Button>
|
|
81
|
+
<Button
|
|
82
|
+
color="primary"
|
|
83
|
+
variant="contained"
|
|
84
|
+
style={{ margin: 2 }}
|
|
85
|
+
onClick={() => {
|
|
86
|
+
setAddNew(false)
|
|
87
|
+
setValue('')
|
|
88
|
+
}}
|
|
89
|
+
>
|
|
90
|
+
Cancel
|
|
91
|
+
</Button>
|
|
92
|
+
</>
|
|
93
|
+
</InputAdornment>
|
|
94
|
+
),
|
|
95
|
+
}}
|
|
96
|
+
/>
|
|
97
|
+
</ListItem>
|
|
98
|
+
) : null}
|
|
99
|
+
<Button
|
|
100
|
+
color="primary"
|
|
101
|
+
variant="contained"
|
|
102
|
+
style={{ margin: 4 }}
|
|
103
|
+
disabled={addNew}
|
|
104
|
+
onClick={() => setAddNew(true)}
|
|
105
|
+
>
|
|
106
|
+
Add item
|
|
107
|
+
</Button>
|
|
108
|
+
</List>
|
|
109
|
+
<FormHelperText>{slot.description}</FormHelperText>
|
|
110
|
+
</>
|
|
111
|
+
)
|
|
112
|
+
},
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
export default StringArrayEditor
|
package/src/ConfigurationEditorWidget/components/__snapshots__/ConfigurationEditor.test.js.snap
CHANGED
|
@@ -310,51 +310,21 @@ exports[`ConfigurationEditor widget renders all the different types of built-in
|
|
|
310
310
|
</div>
|
|
311
311
|
</div>
|
|
312
312
|
</li>
|
|
313
|
-
<
|
|
314
|
-
class="
|
|
313
|
+
<button
|
|
314
|
+
class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary"
|
|
315
|
+
style="margin: 4px;"
|
|
316
|
+
tabindex="0"
|
|
317
|
+
type="button"
|
|
315
318
|
>
|
|
316
|
-
<
|
|
317
|
-
class="
|
|
319
|
+
<span
|
|
320
|
+
class="MuiButton-label"
|
|
318
321
|
>
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
placeholder="add new"
|
|
326
|
-
type="text"
|
|
327
|
-
value=""
|
|
328
|
-
/>
|
|
329
|
-
<div
|
|
330
|
-
class="MuiInputAdornment-root MuiInputAdornment-positionEnd"
|
|
331
|
-
>
|
|
332
|
-
<button
|
|
333
|
-
class="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-disabled MuiButtonBase-disabled"
|
|
334
|
-
data-testid="stringArrayAdd-stringArrayTest"
|
|
335
|
-
disabled=""
|
|
336
|
-
tabindex="-1"
|
|
337
|
-
type="button"
|
|
338
|
-
>
|
|
339
|
-
<span
|
|
340
|
-
class="MuiIconButton-label"
|
|
341
|
-
>
|
|
342
|
-
<svg
|
|
343
|
-
aria-hidden="true"
|
|
344
|
-
class="MuiSvgIcon-root"
|
|
345
|
-
focusable="false"
|
|
346
|
-
viewBox="0 0 24 24"
|
|
347
|
-
>
|
|
348
|
-
<path
|
|
349
|
-
d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"
|
|
350
|
-
/>
|
|
351
|
-
</svg>
|
|
352
|
-
</span>
|
|
353
|
-
</button>
|
|
354
|
-
</div>
|
|
355
|
-
</div>
|
|
356
|
-
</div>
|
|
357
|
-
</li>
|
|
322
|
+
Add item
|
|
323
|
+
</span>
|
|
324
|
+
<span
|
|
325
|
+
class="MuiTouchRipple-root"
|
|
326
|
+
/>
|
|
327
|
+
</button>
|
|
358
328
|
</ul>
|
|
359
329
|
<p
|
|
360
330
|
class="MuiFormHelperText-root"
|
|
@@ -516,51 +486,21 @@ exports[`ConfigurationEditor widget renders all the different types of built-in
|
|
|
516
486
|
</div>
|
|
517
487
|
</div>
|
|
518
488
|
</li>
|
|
519
|
-
<
|
|
520
|
-
class="
|
|
489
|
+
<button
|
|
490
|
+
class="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary"
|
|
491
|
+
style="margin: 4px;"
|
|
492
|
+
tabindex="0"
|
|
493
|
+
type="button"
|
|
521
494
|
>
|
|
522
|
-
<
|
|
523
|
-
class="
|
|
495
|
+
<span
|
|
496
|
+
class="MuiButton-label"
|
|
524
497
|
>
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
placeholder="add new"
|
|
532
|
-
type="text"
|
|
533
|
-
value=""
|
|
534
|
-
/>
|
|
535
|
-
<div
|
|
536
|
-
class="MuiInputAdornment-root MuiInputAdornment-positionEnd"
|
|
537
|
-
>
|
|
538
|
-
<button
|
|
539
|
-
class="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-disabled MuiButtonBase-disabled"
|
|
540
|
-
data-testid="stringArrayAdd-undefined"
|
|
541
|
-
disabled=""
|
|
542
|
-
tabindex="-1"
|
|
543
|
-
type="button"
|
|
544
|
-
>
|
|
545
|
-
<span
|
|
546
|
-
class="MuiIconButton-label"
|
|
547
|
-
>
|
|
548
|
-
<svg
|
|
549
|
-
aria-hidden="true"
|
|
550
|
-
class="MuiSvgIcon-root"
|
|
551
|
-
focusable="false"
|
|
552
|
-
viewBox="0 0 24 24"
|
|
553
|
-
>
|
|
554
|
-
<path
|
|
555
|
-
d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"
|
|
556
|
-
/>
|
|
557
|
-
</svg>
|
|
558
|
-
</span>
|
|
559
|
-
</button>
|
|
560
|
-
</div>
|
|
561
|
-
</div>
|
|
562
|
-
</div>
|
|
563
|
-
</li>
|
|
498
|
+
Add item
|
|
499
|
+
</span>
|
|
500
|
+
<span
|
|
501
|
+
class="MuiTouchRipple-root"
|
|
502
|
+
/>
|
|
503
|
+
</button>
|
|
564
504
|
</ul>
|
|
565
505
|
<p
|
|
566
506
|
class="MuiFormHelperText-root"
|
|
@@ -5,13 +5,13 @@ import { ConfigurationSchema } from '@jbrowse/core/configuration'
|
|
|
5
5
|
export { default as stateModelFactory } from './model'
|
|
6
6
|
export const configSchema = ConfigurationSchema('ConfigurationEditorWidget', {})
|
|
7
7
|
export const HeadingComponent = observer(({ model }) => {
|
|
8
|
-
if (model
|
|
8
|
+
if (model?.target) {
|
|
9
9
|
if (model.target.type) {
|
|
10
10
|
return `${model.target.type} settings`
|
|
11
11
|
}
|
|
12
12
|
if (isStateTreeNode(model.target)) {
|
|
13
13
|
const type = getType(model.target)
|
|
14
|
-
if (type
|
|
14
|
+
if (type?.name) {
|
|
15
15
|
return `${type.name.replace('ConfigurationSchema', '')} settings`
|
|
16
16
|
}
|
|
17
17
|
}
|