@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.
- package/dist/ConfigurationEditorWidget/components/CallbackEditor.js +123 -0
- package/dist/ConfigurationEditorWidget/components/CodeEditor.js +77 -0
- package/dist/ConfigurationEditorWidget/components/ColorEditor.js +125 -0
- package/dist/ConfigurationEditorWidget/components/ColorEditor.test.js +31 -0
- package/dist/ConfigurationEditorWidget/components/ColorPicker.js +72 -0
- package/dist/ConfigurationEditorWidget/components/ConfigurationEditor.js +176 -0
- package/dist/ConfigurationEditorWidget/components/ConfigurationEditor.test.js +121 -0
- package/dist/ConfigurationEditorWidget/components/JsonEditor.js +82 -0
- package/dist/ConfigurationEditorWidget/components/SlotEditor.js +438 -0
- package/dist/ConfigurationEditorWidget/components/TypeSelector.js +48 -0
- package/dist/ConfigurationEditorWidget/index.js +45 -0
- package/dist/ConfigurationEditorWidget/model.js +28 -0
- package/dist/FromConfigAdapter/FromConfigAdapter.js +215 -0
- package/dist/FromConfigAdapter/FromConfigAdapter.test.js +100 -0
- package/dist/FromConfigAdapter/FromConfigRegionsAdapter.js +154 -0
- package/dist/FromConfigAdapter/FromConfigRegionsAdapter.test.js +200 -0
- package/dist/FromConfigAdapter/FromConfigSequenceAdapter.js +201 -0
- package/dist/FromConfigAdapter/FromConfigSequenceAdapter.test.js +110 -0
- package/dist/FromConfigAdapter/configSchema.js +51 -0
- package/dist/FromConfigAdapter/index.js +51 -0
- package/dist/RefNameAliasAdapter/RefNameAliasAdapter.js +125 -0
- package/dist/RefNameAliasAdapter/RefNameAliasAdapter.test.js +41 -0
- package/dist/RefNameAliasAdapter/configSchema.js +26 -0
- package/dist/RefNameAliasAdapter/index.js +23 -0
- package/dist/index.js +150 -6
- package/dist/index.test.js +41 -0
- package/package.json +3 -6
- package/src/ConfigurationEditorWidget/components/ConfigurationEditor.js +22 -17
- 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;
|