zeus-form-mui 0.1.1
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/Readme.md +3 -0
- package/lib/components/ArrayField.d.ts +6 -0
- package/lib/components/ArrayField.js +67 -0
- package/lib/components/ArrayField.js.map +1 -0
- package/lib/components/BooleanField.d.ts +4 -0
- package/lib/components/BooleanField.js +27 -0
- package/lib/components/BooleanField.js.map +1 -0
- package/lib/components/EnumField.d.ts +4 -0
- package/lib/components/EnumField.js +38 -0
- package/lib/components/EnumField.js.map +1 -0
- package/lib/components/FormField.d.ts +4 -0
- package/lib/components/FormField.js +17 -0
- package/lib/components/FormField.js.map +1 -0
- package/lib/components/FormLabel.d.ts +7 -0
- package/lib/components/FormLabel.js +28 -0
- package/lib/components/FormLabel.js.map +1 -0
- package/lib/components/NullField.d.ts +3 -0
- package/lib/components/NullField.js +8 -0
- package/lib/components/NullField.js.map +1 -0
- package/lib/components/NumberField.d.ts +4 -0
- package/lib/components/NumberField.js +22 -0
- package/lib/components/NumberField.js.map +1 -0
- package/lib/components/ObjectField.d.ts +4 -0
- package/lib/components/ObjectField.js +37 -0
- package/lib/components/ObjectField.js.map +1 -0
- package/lib/components/UniversalField.d.ts +4 -0
- package/lib/components/UniversalField.js +27 -0
- package/lib/components/UniversalField.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +42 -0
- package/lib/index.js.map +1 -0
- package/package.json +34 -0
- package/src/components/ArrayField.tsx +114 -0
- package/src/components/BooleanField.tsx +24 -0
- package/src/components/EnumField.tsx +33 -0
- package/src/components/FormField.tsx +15 -0
- package/src/components/FormLabel.tsx +34 -0
- package/src/components/NullField.tsx +2 -0
- package/src/components/NumberField.tsx +15 -0
- package/src/components/ObjectField.tsx +41 -0
- package/src/components/UniversalField.tsx +20 -0
- package/src/index.tsx +32 -0
- package/tsconfig.build.json +36 -0
- package/tsconfig.json +20 -0
package/Readme.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
var material_1 = require("@mui/material");
|
18
|
+
var zeus_form_1 = require("zeus-form");
|
19
|
+
var graphql_js_tree_1 = require("graphql-js-tree");
|
20
|
+
var react_1 = __importDefault(require("react"));
|
21
|
+
var icons_material_1 = require("@mui/icons-material");
|
22
|
+
var ArrayField = function (props) {
|
23
|
+
var formObject = props.formObject, onChange = props.onChange, f = props.f;
|
24
|
+
formObject.__form__value || (formObject.__form__value = []);
|
25
|
+
if (f.type.fieldType.type !== graphql_js_tree_1.Options.array) {
|
26
|
+
throw new Error('Invalid Array node');
|
27
|
+
}
|
28
|
+
var nodeWithoutArray = __assign(__assign({}, f), { type: __assign(__assign({}, f.type), { fieldType: __assign({}, f.type.fieldType.nest) }) });
|
29
|
+
var formValuePointer = formObject.__form__value;
|
30
|
+
return (react_1.default.createElement(material_1.Stack, null,
|
31
|
+
formValuePointer.map(function (v, i, all) {
|
32
|
+
formValuePointer[i] || (formValuePointer[i] = { __form__node: nodeWithoutArray });
|
33
|
+
return (react_1.default.createElement(material_1.Stack, { key: f.name + i },
|
34
|
+
react_1.default.createElement(zeus_form_1.Renderer, __assign({ key: i }, props, { f: __assign(__assign({}, nodeWithoutArray), { name: "".concat(nodeWithoutArray.name, "[").concat(i, "]") }), onChange: function (e) {
|
35
|
+
formValuePointer[i] = e;
|
36
|
+
onChange(__assign(__assign({}, formObject), { __form__value: formValuePointer }));
|
37
|
+
}, formObject: v }),
|
38
|
+
react_1.default.createElement(material_1.Stack, { direction: "row" },
|
39
|
+
react_1.default.createElement(material_1.IconButton, { onClick: function () {
|
40
|
+
onChange(__assign(__assign({}, formObject), { __form__value: formValuePointer.filter(function (_, index) { return i !== index; }) }));
|
41
|
+
} },
|
42
|
+
react_1.default.createElement(icons_material_1.Close, null)),
|
43
|
+
i !== 0 && (react_1.default.createElement(material_1.IconButton, { onClick: function () {
|
44
|
+
var switched = v;
|
45
|
+
formValuePointer[i] = formValuePointer[i - 1];
|
46
|
+
formValuePointer[i - 1] = switched;
|
47
|
+
onChange(__assign(__assign({}, formObject), { __form__value: formValuePointer }));
|
48
|
+
} },
|
49
|
+
react_1.default.createElement(icons_material_1.ArrowUpward, null))),
|
50
|
+
i !== all.length - 1 && (react_1.default.createElement(material_1.IconButton, { onClick: function () {
|
51
|
+
var switched = v;
|
52
|
+
formValuePointer[i] = formValuePointer[i + 1];
|
53
|
+
formValuePointer[i + 1] = switched;
|
54
|
+
onChange(__assign(__assign({}, formObject), { __form__value: formValuePointer }));
|
55
|
+
} },
|
56
|
+
react_1.default.createElement(icons_material_1.ArrowDownward, null)))))));
|
57
|
+
}),
|
58
|
+
react_1.default.createElement(material_1.Button, { onClick: function () {
|
59
|
+
formValuePointer.push({
|
60
|
+
__form__node: nodeWithoutArray,
|
61
|
+
__form__value: undefined,
|
62
|
+
});
|
63
|
+
onChange(__assign(__assign({}, formObject), { __form__value: formValuePointer }));
|
64
|
+
}, endIcon: react_1.default.createElement(icons_material_1.Add, null) }, "Add ".concat(f.name))));
|
65
|
+
};
|
66
|
+
exports.default = ArrayField;
|
67
|
+
//# sourceMappingURL=ArrayField.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ArrayField.js","sourceRoot":"","sources":["../../src/components/ArrayField.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
var material_1 = require("@mui/material");
|
18
|
+
var react_1 = __importDefault(require("react"));
|
19
|
+
exports.default = (function (_a) {
|
20
|
+
var f = _a.f, formObject = _a.formObject, onChange = _a.onChange;
|
21
|
+
var value = formObject.__form__value;
|
22
|
+
return (react_1.default.createElement(material_1.FormGroup, null,
|
23
|
+
react_1.default.createElement(material_1.FormControlLabel, { control: react_1.default.createElement(material_1.Checkbox, { value: value, onChange: function () {
|
24
|
+
return onChange(__assign(__assign({}, formObject), { __form__value: value === true ? undefined : true }));
|
25
|
+
} }), label: f.name })));
|
26
|
+
});
|
27
|
+
//# sourceMappingURL=BooleanField.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"BooleanField.js","sourceRoot":"","sources":["../../src/components/BooleanField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAsE;AAEtE,gDAA0B;AAC1B,mBAAe,UAAC,EAA4C;QAA1C,CAAC,OAAA,EAAE,UAAU,gBAAA,EAAE,QAAQ,cAAA;IACrC,IAAM,KAAK,GAAG,UAAU,CAAC,aAAoC,CAAC;IAC9D,OAAO,CACH,8BAAC,oBAAS;QACN,8BAAC,2BAAgB,IACb,OAAO,EACH,8BAAC,mBAAQ,IACL,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE;oBACN,OAAA,QAAQ,uBACD,UAAU,KACb,aAAa,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAClD;gBAHF,CAGE,GAER,EAEN,KAAK,EAAE,CAAC,CAAC,IAAI,GACf,CACM,CACf,CAAC;AACN,CAAC,EAAC"}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
var material_1 = require("@mui/material");
|
18
|
+
var graphql_js_tree_1 = require("graphql-js-tree");
|
19
|
+
var react_1 = __importDefault(require("react"));
|
20
|
+
exports.default = (function (_a) {
|
21
|
+
var _b;
|
22
|
+
var nodes = _a.nodes, onChange = _a.onChange, formObject = _a.formObject, f = _a.f;
|
23
|
+
var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(f.type.fieldType); });
|
24
|
+
if (!seekNode) {
|
25
|
+
throw new Error('Invalid enum field');
|
26
|
+
}
|
27
|
+
var options = ((_b = seekNode.args) === null || _b === void 0 ? void 0 : _b.map(function (_a) {
|
28
|
+
var label = _a.name;
|
29
|
+
return ({
|
30
|
+
label: label,
|
31
|
+
value: label,
|
32
|
+
});
|
33
|
+
})) || [];
|
34
|
+
return (react_1.default.createElement(material_1.Select, { placeholder: f.name, value: formObject.__form__value, onChange: function (e) {
|
35
|
+
onChange(__assign(__assign({}, formObject), { __form__value: e.target.value }));
|
36
|
+
} }, options.map(function (o) { return (react_1.default.createElement(material_1.MenuItem, { key: o.value, value: o.value }, o.label)); })));
|
37
|
+
});
|
38
|
+
//# sourceMappingURL=EnumField.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EnumField.js","sourceRoot":"","sources":["../../src/components/EnumField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAiD;AAEjD,mDAA8C;AAC9C,gDAA0B;AAC1B,mBAAe,UAAC,EAAmD;;QAAjD,KAAK,WAAA,EAAE,QAAQ,cAAA,EAAE,UAAU,gBAAA,EAAE,CAAC,OAAA;IAC5C,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,KAAK,IAAA,6BAAW,EAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAxC,CAAwC,CAAC,CAAC;IAC7E,IAAI,CAAC,QAAQ,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;KACzC;IACD,IAAM,OAAO,GACT,CAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,GAAG,CAAC,UAAC,EAAe;YAAP,KAAK,UAAA;QAAO,OAAA,CAAC;YACrC,KAAK,OAAA;YACL,KAAK,EAAE,KAAK;SACf,CAAC;IAHsC,CAGtC,CAAC,KAAI,EAAE,CAAC;IACd,OAAO,CACH,8BAAC,iBAAM,IACH,WAAW,EAAE,CAAC,CAAC,IAAI,EACnB,KAAK,EAAE,UAAU,CAAC,aAAmC,EACrD,QAAQ,EAAE,UAAC,CAAC;YACR,QAAQ,uBACD,UAAU,KACb,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAC/B,CAAC;QACP,CAAC,IAEA,OAAO,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAChB,8BAAC,mBAAQ,IAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IACjC,CAAC,CAAC,KAAK,CACD,CACd,EAJmB,CAInB,CAAC,CACG,CACZ,CAAC;AACN,CAAC,EAAC"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
var material_1 = require("@mui/material");
|
7
|
+
var zeus_form_1 = require("zeus-form");
|
8
|
+
var react_1 = __importDefault(require("react"));
|
9
|
+
var FormField = function (props) {
|
10
|
+
var children = props.children;
|
11
|
+
var errors = (0, zeus_form_1.getErrorFromProps)(props);
|
12
|
+
return (react_1.default.createElement(material_1.FormControl, { fullWidth: true, error: !!errors },
|
13
|
+
children,
|
14
|
+
errors && react_1.default.createElement(material_1.FormHelperText, null, errors)));
|
15
|
+
};
|
16
|
+
exports.default = FormField;
|
17
|
+
//# sourceMappingURL=FormField.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"FormField.js","sourceRoot":"","sources":["../../src/components/FormField.tsx"],"names":[],"mappings":";;;;;AAAA,0CAA4D;AAC5D,uCAA+D;AAC/D,gDAA0B;AAC1B,IAAM,SAAS,GAA8B,UAAC,KAAK;IACvC,IAAA,QAAQ,GAAK,KAAK,SAAV,CAAW;IAC3B,IAAM,MAAM,GAAG,IAAA,6BAAiB,EAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CACH,8BAAC,sBAAW,IAAC,SAAS,QAAC,KAAK,EAAE,CAAC,CAAC,MAAM;QACjC,QAAQ;QACR,MAAM,IAAI,8BAAC,yBAAc,QAAE,MAAM,CAAkB,CAC1C,CACjB,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC"}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
var material_1 = require("@mui/material");
|
7
|
+
var icons_material_1 = require("@mui/icons-material");
|
8
|
+
var graphql_js_tree_1 = require("graphql-js-tree");
|
9
|
+
var react_1 = __importDefault(require("react"));
|
10
|
+
var FormLabel = function (props) {
|
11
|
+
var f = props.f, open = props.open, setOpen = props.setOpen, nodes = props.nodes;
|
12
|
+
var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(f.type.fieldType); });
|
13
|
+
var isInput = (seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.InputObjectTypeDefinition;
|
14
|
+
return (react_1.default.createElement(material_1.Stack, { direction: 'row', alignItems: "center", spacing: 1 },
|
15
|
+
react_1.default.createElement(material_1.Stack, { direction: "row", alignItems: "center" },
|
16
|
+
react_1.default.createElement(material_1.Typography, null, props.f.name.replace(/([A-Z])/g, ' $1').replace(/^./, function (str) {
|
17
|
+
return str.toUpperCase();
|
18
|
+
})),
|
19
|
+
props.required && react_1.default.createElement(material_1.Typography, { color: 'red' }, "*"),
|
20
|
+
props.children),
|
21
|
+
(f.data.type === graphql_js_tree_1.TypeSystemDefinition.FieldDefinition ||
|
22
|
+
isInput ||
|
23
|
+
f.type.fieldType.type === graphql_js_tree_1.Options.array) && (react_1.default.createElement(material_1.IconButton, { onClick: function () { return setOpen(!open); } },
|
24
|
+
open && react_1.default.createElement(icons_material_1.ExpandLess, null),
|
25
|
+
!open && react_1.default.createElement(icons_material_1.ExpandMore, null)))));
|
26
|
+
};
|
27
|
+
exports.default = FormLabel;
|
28
|
+
//# sourceMappingURL=FormLabel.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"FormLabel.js","sourceRoot":"","sources":["../../src/components/FormLabel.tsx"],"names":[],"mappings":";;;;;AAAA,0CAA8D;AAC9D,sDAA6D;AAE7D,mDAA6F;AAC7F,gDAA0B;AAC1B,IAAM,SAAS,GAAkF,UAAC,KAAK;IAC3F,IAAA,CAAC,GAA2B,KAAK,EAAhC,EAAE,IAAI,GAAqB,KAAK,KAA1B,EAAE,OAAO,GAAY,KAAK,QAAjB,EAAE,KAAK,GAAK,KAAK,MAAV,CAAW;IAE1C,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,KAAK,IAAA,6BAAW,EAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAxC,CAAwC,CAAC,CAAC;IAC7E,IAAM,OAAO,GAAG,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,IAAI,MAAK,gCAAc,CAAC,yBAAyB,CAAC;IAEjF,OAAO,CACH,8BAAC,gBAAK,IAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC;QACnD,8BAAC,gBAAK,IAAC,SAAS,EAAC,KAAK,EAAC,UAAU,EAAC,QAAQ;YACtC,8BAAC,qBAAU,QACN,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG;gBAChE,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;YAC7B,CAAC,CAAC,CACO;YACZ,KAAK,CAAC,QAAQ,IAAI,8BAAC,qBAAU,IAAC,KAAK,EAAE,KAAK,QAAgB;YAC1D,KAAK,CAAC,QAAQ,CACX;QACP,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,sCAAoB,CAAC,eAAe;YAClD,OAAO;YACP,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,yBAAO,CAAC,KAAK,CAAC,IAAI,CAC5C,8BAAC,qBAAU,IAAC,OAAO,EAAE,cAAM,OAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAd,CAAc;YACpC,IAAI,IAAI,8BAAC,2BAAU,OAAG;YACtB,CAAC,IAAI,IAAI,8BAAC,2BAAU,OAAG,CACf,CAChB,CACG,CACX,CAAC;AACN,CAAC,CAAC;AACF,kBAAe,SAAS,CAAC"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
var react_1 = __importDefault(require("react"));
|
7
|
+
exports.default = (function () { return react_1.default.createElement("div", null, "No value"); });
|
8
|
+
//# sourceMappingURL=NullField.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"NullField.js","sourceRoot":"","sources":["../../src/components/NullField.tsx"],"names":[],"mappings":";;;;;AAAA,gDAA0B;AAC1B,mBAAe,cAAM,OAAA,sDAAmB,EAAnB,CAAmB,EAAC"}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
var material_1 = require("@mui/material");
|
18
|
+
var react_1 = __importDefault(require("react"));
|
19
|
+
exports.default = (function (props) { return (react_1.default.createElement(material_1.TextField, { type: "number", value: props.formObject.__form__value || '', onChange: function (e) {
|
20
|
+
props.onChange(__assign(__assign({}, props.formObject), { __form__value: e.target.value }));
|
21
|
+
} })); });
|
22
|
+
//# sourceMappingURL=NumberField.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"NumberField.js","sourceRoot":"","sources":["../../src/components/NumberField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAA0C;AAE1C,gDAA0B;AAC1B,mBAAe,UAAC,KAAsB,IAAK,OAAA,CACvC,8BAAC,oBAAS,IACN,IAAI,EAAC,QAAQ,EACb,KAAK,EAAG,KAAK,CAAC,UAAU,CAAC,aAAoC,IAAI,EAAE,EACnE,QAAQ,EAAE,UAAC,CAAC;QACR,KAAK,CAAC,QAAQ,uBACP,KAAK,CAAC,UAAU,KACnB,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAC/B,CAAC;IACP,CAAC,GACH,CACL,EAX0C,CAW1C,EAAC"}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
var material_1 = require("@mui/material");
|
18
|
+
var zeus_form_1 = require("zeus-form");
|
19
|
+
var react_1 = __importDefault(require("react"));
|
20
|
+
var ObjectField = function (props) {
|
21
|
+
var _a;
|
22
|
+
var formObject = props.formObject, f = props.f;
|
23
|
+
formObject.__form__value || (formObject.__form__value = {});
|
24
|
+
var fV = formObject.__form__value;
|
25
|
+
return (react_1.default.createElement(material_1.Stack, { pl: 2, spacing: 2 }, (_a = f.args) === null || _a === void 0 ? void 0 : _a.sort(function (a, b) {
|
26
|
+
return b.name > a.name ? -1 : 1;
|
27
|
+
}).map(function (a) {
|
28
|
+
var _a;
|
29
|
+
fV[_a = a.name] || (fV[_a] = { __form__node: a });
|
30
|
+
return (react_1.default.createElement(zeus_form_1.Renderer, __assign({}, props, { currentPath: "".concat(props.currentPath, ".").concat(a.name), key: a.name, formObject: fV[a.name], required: false, onChange: function (fv) {
|
31
|
+
var _a;
|
32
|
+
props.onChange(__assign(__assign({}, formObject), { __form__value: __assign(__assign({}, fV), (_a = {}, _a[a.name] = fv, _a)) }));
|
33
|
+
}, f: a, children: undefined })));
|
34
|
+
})));
|
35
|
+
};
|
36
|
+
exports.default = ObjectField;
|
37
|
+
//# sourceMappingURL=ObjectField.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ObjectField.js","sourceRoot":"","sources":["../../src/components/ObjectField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAsC;AACtC,uCAAkE;AAClE,gDAA0B;AAE1B,IAAM,WAAW,GAA8B,UAAC,KAAK;;IACzC,IAAA,UAAU,GAAQ,KAAK,WAAb,EAAE,CAAC,GAAK,KAAK,EAAV,CAAW;IAChC,UAAU,CAAC,aAAa,KAAxB,UAAU,CAAC,aAAa,GAAK,EAAE,EAAC;IAChC,IAAM,EAAE,GAAG,UAAU,CAAC,aAA4C,CAAC;IACnE,OAAO,CACH,8BAAC,gBAAK,IAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IACnB,MAAA,CAAC,CAAC,IAAI,0CACD,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;QACR,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,EACA,GAAG,CAAC,UAAC,CAAC;;QACH,EAAE,MAAC,CAAC,CAAC,IAAI,MAAT,EAAE,OAAa,EAAE,YAAY,EAAE,CAAC,EAAE,EAAC;QACnC,OAAO,CACH,8BAAC,oBAAQ,eACD,KAAK,IACT,WAAW,EAAE,UAAG,KAAK,CAAC,WAAW,cAAI,CAAC,CAAC,IAAI,CAAE,EAC7C,GAAG,EAAE,CAAC,CAAC,IAAI,EACX,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EACtB,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,UAAC,EAAE;;gBACT,KAAK,CAAC,QAAQ,uBACP,UAAU,KACb,aAAa,wBACN,EAAE,gBACJ,CAAC,CAAC,IAAI,IAAG,EAAE,UAElB,CAAC;YACP,CAAC,EACD,CAAC,EAAE,CAAC,EACJ,QAAQ,EAAE,SAAS,IACrB,CACL,CAAC;IACN,CAAC,CAAC,CACF,CACX,CAAC;AACN,CAAC,CAAC;AACF,kBAAe,WAAW,CAAC"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
var material_1 = require("@mui/material");
|
18
|
+
var react_1 = __importDefault(require("react"));
|
19
|
+
exports.default = (function (props) {
|
20
|
+
console.log(props.f.name, props.formObject);
|
21
|
+
return (react_1.default.createElement(material_1.TextField, { value: props.formObject.__form__value || '', placeholder: props.f.name.replace(/([A-Z])/g, ' $1').replace(/^./, function (str) {
|
22
|
+
return str.toUpperCase();
|
23
|
+
}), onChange: function (e) {
|
24
|
+
props.onChange(__assign(__assign({}, props.formObject), { __form__value: e.target.value }));
|
25
|
+
} }));
|
26
|
+
});
|
27
|
+
//# sourceMappingURL=UniversalField.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"UniversalField.js","sourceRoot":"","sources":["../../src/components/UniversalField.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAA0C;AAE1C,gDAA0B;AAC1B,mBAAe,UAAC,KAAsB;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5C,OAAO,CACH,8BAAC,oBAAS,IACN,KAAK,EAAG,KAAK,CAAC,UAAU,CAAC,aAAoC,IAAI,EAAE,EACnE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG;YAC5E,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC,CAAC,EACF,QAAQ,EAAE,UAAC,CAAC;YACR,KAAK,CAAC,QAAQ,uBACP,KAAK,CAAC,UAAU,KACnB,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAC/B,CAAC;QACP,CAAC,GACH,CACL,CAAC;AACN,CAAC,EAAC"}
|
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
var ArrayField_1 = __importDefault(require("./components/ArrayField"));
|
18
|
+
var BooleanField_1 = __importDefault(require("./components/BooleanField"));
|
19
|
+
var EnumField_1 = __importDefault(require("./components/EnumField"));
|
20
|
+
var FormField_1 = __importDefault(require("./components/FormField"));
|
21
|
+
var FormLabel_1 = __importDefault(require("./components/FormLabel"));
|
22
|
+
var NullField_1 = __importDefault(require("./components/NullField"));
|
23
|
+
var NumberField_1 = __importDefault(require("./components/NumberField"));
|
24
|
+
var ObjectField_1 = __importDefault(require("./components/ObjectField"));
|
25
|
+
var UniversalField_1 = __importDefault(require("./components/UniversalField"));
|
26
|
+
var zeus_form_1 = require("zeus-form");
|
27
|
+
var react_1 = __importDefault(require("react"));
|
28
|
+
function MuiInputForm(props) {
|
29
|
+
return (react_1.default.createElement(zeus_form_1.InputForm, __assign({}, props, { components: {
|
30
|
+
ArrayField: ArrayField_1.default,
|
31
|
+
BooleanField: BooleanField_1.default,
|
32
|
+
EnumField: EnumField_1.default,
|
33
|
+
FormField: FormField_1.default,
|
34
|
+
FormLabel: FormLabel_1.default,
|
35
|
+
NullField: NullField_1.default,
|
36
|
+
NumberField: NumberField_1.default,
|
37
|
+
ObjectField: ObjectField_1.default,
|
38
|
+
UniversalField: UniversalField_1.default,
|
39
|
+
} })));
|
40
|
+
}
|
41
|
+
exports.default = MuiInputForm;
|
42
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uEAAiD;AACjD,2EAAqD;AACrD,qEAA+C;AAC/C,qEAA+C;AAC/C,qEAA+C;AAC/C,qEAA+C;AAC/C,yEAAmD;AACnD,yEAAmD;AACnD,+EAAyD;AACzD,uCAA6D;AAC7D,gDAA0B;AAE1B,SAAS,YAAY,CAAI,KAA+B;IACpD,OAAO,CACH,8BAAC,qBAAS,eACF,KAAK,IACT,UAAU,EAAE;YACR,UAAU,EAAE,oBAAU;YACtB,YAAY,EAAE,sBAAY;YAC1B,SAAS,EAAE,mBAAS;YACpB,SAAS,EAAE,mBAAS;YACpB,SAAS,EAAE,mBAAS;YACpB,SAAS,EAAE,mBAAS;YACpB,WAAW,EAAE,qBAAW;YACxB,WAAW,EAAE,qBAAW;YACxB,cAAc,EAAE,wBAAc;SACjC,IACH,CACL,CAAC;AACN,CAAC;AAED,kBAAe,YAAY,CAAC"}
|
package/package.json
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
{
|
2
|
+
"name": "zeus-form-mui",
|
3
|
+
"version": "0.1.1",
|
4
|
+
"description": "Easy form creation with GraphQL Editor and React",
|
5
|
+
"main": "lib/index.js",
|
6
|
+
"scripts": {
|
7
|
+
"build": "ttsc --build tsconfig.build.json",
|
8
|
+
"start": "ttsc --build tsconfig.build.json --watch",
|
9
|
+
"lint": "eslint '*/**/*.{js,ts,tsx}' --quiet --fix"
|
10
|
+
},
|
11
|
+
"types": "lib/index.d.ts",
|
12
|
+
"private": false,
|
13
|
+
"publishConfig": {
|
14
|
+
"access": "public"
|
15
|
+
},
|
16
|
+
"repository": {
|
17
|
+
"type": "git",
|
18
|
+
"url": "git+https://github.com/graphql-editor/graphql-form.git"
|
19
|
+
},
|
20
|
+
"author": "Aexol <aexol@aexol.com> (http://aexol.com)",
|
21
|
+
"license": "MIT",
|
22
|
+
"homepage": "https://form.graphqleditor.com",
|
23
|
+
"peerDependencies": {
|
24
|
+
"graphql-form": "*",
|
25
|
+
"react": ">=16.8.0",
|
26
|
+
"react-dom": ">=16.8.0"
|
27
|
+
},
|
28
|
+
"dependencies": {
|
29
|
+
"@emotion/react": "^11.9.0",
|
30
|
+
"@emotion/styled": "^11.8.1",
|
31
|
+
"@mui/icons-material": "^5.8.0",
|
32
|
+
"@mui/material": "^5.8.0"
|
33
|
+
}
|
34
|
+
}
|
@@ -0,0 +1,114 @@
|
|
1
|
+
import { Button, IconButton, Stack } from '@mui/material';
|
2
|
+
import { FormObject, FormValue, PassedFormProps, Renderer } from 'zeus-form';
|
3
|
+
import { Options, ParserField } from 'graphql-js-tree';
|
4
|
+
import React from 'react';
|
5
|
+
import { Add, ArrowDownward, ArrowUpward, Close } from '@mui/icons-material';
|
6
|
+
|
7
|
+
const ArrayField: React.FC<
|
8
|
+
PassedFormProps & {
|
9
|
+
open?: boolean;
|
10
|
+
}
|
11
|
+
> = (props) => {
|
12
|
+
const { formObject, onChange, f } = props;
|
13
|
+
formObject.__form__value ||= [];
|
14
|
+
if (f.type.fieldType.type !== Options.array) {
|
15
|
+
throw new Error('Invalid Array node');
|
16
|
+
}
|
17
|
+
const nodeWithoutArray: ParserField = {
|
18
|
+
...f,
|
19
|
+
type: {
|
20
|
+
...f.type,
|
21
|
+
fieldType: {
|
22
|
+
...f.type.fieldType.nest,
|
23
|
+
},
|
24
|
+
},
|
25
|
+
};
|
26
|
+
const formValuePointer = formObject.__form__value as Array<FormValue>;
|
27
|
+
return (
|
28
|
+
<Stack>
|
29
|
+
{formValuePointer.map((v, i: number, all) => {
|
30
|
+
formValuePointer[i] ||= { __form__node: nodeWithoutArray };
|
31
|
+
return (
|
32
|
+
<Stack key={f.name + i}>
|
33
|
+
<Renderer
|
34
|
+
key={i}
|
35
|
+
{...props}
|
36
|
+
f={{
|
37
|
+
...nodeWithoutArray,
|
38
|
+
name: `${nodeWithoutArray.name}[${i}]`,
|
39
|
+
}}
|
40
|
+
onChange={(e) => {
|
41
|
+
formValuePointer[i] = e;
|
42
|
+
onChange({
|
43
|
+
...formObject,
|
44
|
+
__form__value: formValuePointer,
|
45
|
+
});
|
46
|
+
}}
|
47
|
+
formObject={v as FormObject}
|
48
|
+
>
|
49
|
+
<Stack direction="row">
|
50
|
+
<IconButton
|
51
|
+
onClick={() => {
|
52
|
+
onChange({
|
53
|
+
...formObject,
|
54
|
+
__form__value: formValuePointer.filter((_, index) => i !== index),
|
55
|
+
});
|
56
|
+
}}
|
57
|
+
>
|
58
|
+
<Close />
|
59
|
+
</IconButton>
|
60
|
+
{i !== 0 && (
|
61
|
+
<IconButton
|
62
|
+
onClick={() => {
|
63
|
+
const switched = v;
|
64
|
+
formValuePointer[i] = formValuePointer[i - 1];
|
65
|
+
formValuePointer[i - 1] = switched;
|
66
|
+
onChange({
|
67
|
+
...formObject,
|
68
|
+
__form__value: formValuePointer,
|
69
|
+
});
|
70
|
+
}}
|
71
|
+
>
|
72
|
+
<ArrowUpward />
|
73
|
+
</IconButton>
|
74
|
+
)}
|
75
|
+
{i !== all.length - 1 && (
|
76
|
+
<IconButton
|
77
|
+
onClick={() => {
|
78
|
+
const switched = v;
|
79
|
+
formValuePointer[i] = formValuePointer[i + 1];
|
80
|
+
formValuePointer[i + 1] = switched;
|
81
|
+
onChange({
|
82
|
+
...formObject,
|
83
|
+
__form__value: formValuePointer,
|
84
|
+
});
|
85
|
+
}}
|
86
|
+
>
|
87
|
+
<ArrowDownward />
|
88
|
+
</IconButton>
|
89
|
+
)}
|
90
|
+
</Stack>
|
91
|
+
</Renderer>
|
92
|
+
</Stack>
|
93
|
+
);
|
94
|
+
})}
|
95
|
+
|
96
|
+
<Button
|
97
|
+
onClick={() => {
|
98
|
+
formValuePointer.push({
|
99
|
+
__form__node: nodeWithoutArray,
|
100
|
+
__form__value: undefined,
|
101
|
+
});
|
102
|
+
onChange({
|
103
|
+
...formObject,
|
104
|
+
__form__value: formValuePointer,
|
105
|
+
});
|
106
|
+
}}
|
107
|
+
endIcon={<Add />}
|
108
|
+
>
|
109
|
+
{`Add ${f.name}`}
|
110
|
+
</Button>
|
111
|
+
</Stack>
|
112
|
+
);
|
113
|
+
};
|
114
|
+
export default ArrayField;
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { Checkbox, FormControlLabel, FormGroup } from '@mui/material';
|
2
|
+
import { PassedFormProps } from 'zeus-form';
|
3
|
+
import React from 'react';
|
4
|
+
export default ({ f, formObject, onChange }: PassedFormProps) => {
|
5
|
+
const value = formObject.__form__value as boolean | undefined;
|
6
|
+
return (
|
7
|
+
<FormGroup>
|
8
|
+
<FormControlLabel
|
9
|
+
control={
|
10
|
+
<Checkbox
|
11
|
+
value={value}
|
12
|
+
onChange={() =>
|
13
|
+
onChange({
|
14
|
+
...formObject,
|
15
|
+
__form__value: value === true ? undefined : true,
|
16
|
+
})
|
17
|
+
}
|
18
|
+
/>
|
19
|
+
}
|
20
|
+
label={f.name}
|
21
|
+
/>
|
22
|
+
</FormGroup>
|
23
|
+
);
|
24
|
+
};
|
@@ -0,0 +1,33 @@
|
|
1
|
+
import { MenuItem, Select } from '@mui/material';
|
2
|
+
import { PassedFormProps } from 'zeus-form';
|
3
|
+
import { getTypeName } from 'graphql-js-tree';
|
4
|
+
import React from 'react';
|
5
|
+
export default ({ nodes, onChange, formObject, f }: PassedFormProps) => {
|
6
|
+
const seekNode = nodes.find((n) => n.name === getTypeName(f.type.fieldType));
|
7
|
+
if (!seekNode) {
|
8
|
+
throw new Error('Invalid enum field');
|
9
|
+
}
|
10
|
+
const options =
|
11
|
+
seekNode.args?.map(({ name: label }) => ({
|
12
|
+
label,
|
13
|
+
value: label,
|
14
|
+
})) || [];
|
15
|
+
return (
|
16
|
+
<Select
|
17
|
+
placeholder={f.name}
|
18
|
+
value={formObject.__form__value as string | undefined}
|
19
|
+
onChange={(e) => {
|
20
|
+
onChange({
|
21
|
+
...formObject,
|
22
|
+
__form__value: e.target.value,
|
23
|
+
});
|
24
|
+
}}
|
25
|
+
>
|
26
|
+
{options.map((o) => (
|
27
|
+
<MenuItem key={o.value} value={o.value}>
|
28
|
+
{o.label}
|
29
|
+
</MenuItem>
|
30
|
+
))}
|
31
|
+
</Select>
|
32
|
+
);
|
33
|
+
};
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { FormControl, FormHelperText } from '@mui/material';
|
2
|
+
import { getErrorFromProps, PassedFormProps } from 'zeus-form';
|
3
|
+
import React from 'react';
|
4
|
+
const FormField: React.FC<PassedFormProps> = (props) => {
|
5
|
+
const { children } = props;
|
6
|
+
const errors = getErrorFromProps(props);
|
7
|
+
return (
|
8
|
+
<FormControl fullWidth error={!!errors}>
|
9
|
+
{children}
|
10
|
+
{errors && <FormHelperText>{errors}</FormHelperText>}
|
11
|
+
</FormControl>
|
12
|
+
);
|
13
|
+
};
|
14
|
+
|
15
|
+
export default FormField;
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import { IconButton, Stack, Typography } from '@mui/material';
|
2
|
+
import { ExpandLess, ExpandMore } from '@mui/icons-material';
|
3
|
+
import { PassedFormProps } from 'zeus-form';
|
4
|
+
import { TypeSystemDefinition, Options, getTypeName, TypeDefinition } from 'graphql-js-tree';
|
5
|
+
import React from 'react';
|
6
|
+
const FormLabel: React.FC<PassedFormProps & { open?: boolean; setOpen: (b: boolean) => void }> = (props) => {
|
7
|
+
const { f, open, setOpen, nodes } = props;
|
8
|
+
|
9
|
+
const seekNode = nodes.find((n) => n.name === getTypeName(f.type.fieldType));
|
10
|
+
const isInput = seekNode?.data.type === TypeDefinition.InputObjectTypeDefinition;
|
11
|
+
|
12
|
+
return (
|
13
|
+
<Stack direction={'row'} alignItems="center" spacing={1}>
|
14
|
+
<Stack direction="row" alignItems="center">
|
15
|
+
<Typography>
|
16
|
+
{props.f.name.replace(/([A-Z])/g, ' $1').replace(/^./, function (str) {
|
17
|
+
return str.toUpperCase();
|
18
|
+
})}
|
19
|
+
</Typography>
|
20
|
+
{props.required && <Typography color={'red'}>*</Typography>}
|
21
|
+
{props.children}
|
22
|
+
</Stack>
|
23
|
+
{(f.data.type === TypeSystemDefinition.FieldDefinition ||
|
24
|
+
isInput ||
|
25
|
+
f.type.fieldType.type === Options.array) && (
|
26
|
+
<IconButton onClick={() => setOpen(!open)}>
|
27
|
+
{open && <ExpandLess />}
|
28
|
+
{!open && <ExpandMore />}
|
29
|
+
</IconButton>
|
30
|
+
)}
|
31
|
+
</Stack>
|
32
|
+
);
|
33
|
+
};
|
34
|
+
export default FormLabel;
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { TextField } from '@mui/material';
|
2
|
+
import { PassedFormProps } from 'zeus-form';
|
3
|
+
import React from 'react';
|
4
|
+
export default (props: PassedFormProps) => (
|
5
|
+
<TextField
|
6
|
+
type="number"
|
7
|
+
value={(props.formObject.__form__value as string | undefined) || ''}
|
8
|
+
onChange={(e) => {
|
9
|
+
props.onChange({
|
10
|
+
...props.formObject,
|
11
|
+
__form__value: e.target.value,
|
12
|
+
});
|
13
|
+
}}
|
14
|
+
/>
|
15
|
+
);
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import { Stack } from '@mui/material';
|
2
|
+
import { PassedFormProps, FormObject, Renderer } from 'zeus-form';
|
3
|
+
import React from 'react';
|
4
|
+
|
5
|
+
const ObjectField: React.FC<PassedFormProps> = (props) => {
|
6
|
+
const { formObject, f } = props;
|
7
|
+
formObject.__form__value ||= {};
|
8
|
+
const fV = formObject.__form__value as { [x: string]: FormObject };
|
9
|
+
return (
|
10
|
+
<Stack pl={2} spacing={2}>
|
11
|
+
{f.args
|
12
|
+
?.sort((a, b) => {
|
13
|
+
return b.name > a.name ? -1 : 1;
|
14
|
+
})
|
15
|
+
.map((a) => {
|
16
|
+
fV[a.name] ||= { __form__node: a };
|
17
|
+
return (
|
18
|
+
<Renderer
|
19
|
+
{...props}
|
20
|
+
currentPath={`${props.currentPath}.${a.name}`}
|
21
|
+
key={a.name}
|
22
|
+
formObject={fV[a.name]}
|
23
|
+
required={false}
|
24
|
+
onChange={(fv) => {
|
25
|
+
props.onChange({
|
26
|
+
...formObject,
|
27
|
+
__form__value: {
|
28
|
+
...fV,
|
29
|
+
[a.name]: fv,
|
30
|
+
},
|
31
|
+
});
|
32
|
+
}}
|
33
|
+
f={a}
|
34
|
+
children={undefined}
|
35
|
+
/>
|
36
|
+
);
|
37
|
+
})}
|
38
|
+
</Stack>
|
39
|
+
);
|
40
|
+
};
|
41
|
+
export default ObjectField;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import { TextField } from '@mui/material';
|
2
|
+
import { PassedFormProps } from 'zeus-form';
|
3
|
+
import React from 'react';
|
4
|
+
export default (props: PassedFormProps) => {
|
5
|
+
console.log(props.f.name, props.formObject);
|
6
|
+
return (
|
7
|
+
<TextField
|
8
|
+
value={(props.formObject.__form__value as string | undefined) || ''}
|
9
|
+
placeholder={props.f.name.replace(/([A-Z])/g, ' $1').replace(/^./, function (str) {
|
10
|
+
return str.toUpperCase();
|
11
|
+
})}
|
12
|
+
onChange={(e) => {
|
13
|
+
props.onChange({
|
14
|
+
...props.formObject,
|
15
|
+
__form__value: e.target.value,
|
16
|
+
});
|
17
|
+
}}
|
18
|
+
/>
|
19
|
+
);
|
20
|
+
};
|
package/src/index.tsx
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
import ArrayField from '@/components/ArrayField';
|
2
|
+
import BooleanField from '@/components/BooleanField';
|
3
|
+
import EnumField from '@/components/EnumField';
|
4
|
+
import FormField from '@/components/FormField';
|
5
|
+
import FormLabel from '@/components/FormLabel';
|
6
|
+
import NullField from '@/components/NullField';
|
7
|
+
import NumberField from '@/components/NumberField';
|
8
|
+
import ObjectField from '@/components/ObjectField';
|
9
|
+
import UniversalField from '@/components/UniversalField';
|
10
|
+
import { InputForm, InputFormLibraryProps } from 'zeus-form';
|
11
|
+
import React from 'react';
|
12
|
+
|
13
|
+
function MuiInputForm<T>(props: InputFormLibraryProps<T>) {
|
14
|
+
return (
|
15
|
+
<InputForm
|
16
|
+
{...props}
|
17
|
+
components={{
|
18
|
+
ArrayField: ArrayField,
|
19
|
+
BooleanField: BooleanField,
|
20
|
+
EnumField: EnumField,
|
21
|
+
FormField: FormField,
|
22
|
+
FormLabel: FormLabel,
|
23
|
+
NullField: NullField,
|
24
|
+
NumberField: NumberField,
|
25
|
+
ObjectField: ObjectField,
|
26
|
+
UniversalField: UniversalField,
|
27
|
+
}}
|
28
|
+
/>
|
29
|
+
);
|
30
|
+
}
|
31
|
+
|
32
|
+
export default MuiInputForm;
|
@@ -0,0 +1,36 @@
|
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,
|
4
|
+
"module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
|
5
|
+
"jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */,
|
6
|
+
"declaration": true /* Generates corresponding '.d.ts' file. */,
|
7
|
+
|
8
|
+
"sourceMap": true /* Generates corresponding '.map' file. */,
|
9
|
+
|
10
|
+
"outDir": "./lib" /* Redirect output structure to the directory. */,
|
11
|
+
"rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
|
12
|
+
|
13
|
+
"isolatedModules": true /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */,
|
14
|
+
|
15
|
+
"strict": true /* Enable all strict type-checking options. */,
|
16
|
+
|
17
|
+
"baseUrl": "./src" /* Base directory to resolve non-absolute module names. */,
|
18
|
+
"paths": {
|
19
|
+
"@/*": ["./*"]
|
20
|
+
} /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */,
|
21
|
+
|
22
|
+
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
|
23
|
+
"skipLibCheck": true /* Skip type checking of declaration files. */,
|
24
|
+
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */,
|
25
|
+
"plugins": [
|
26
|
+
{
|
27
|
+
"transform": "typescript-transform-paths"
|
28
|
+
},
|
29
|
+
{
|
30
|
+
"transform": "typescript-transform-paths",
|
31
|
+
"afterDeclarations": true
|
32
|
+
}
|
33
|
+
]
|
34
|
+
},
|
35
|
+
"exclude": ["**/__tests__/*", "**/__sandbox__/*", "./lib", "node_modules"]
|
36
|
+
}
|
package/tsconfig.json
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,
|
4
|
+
"module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
|
5
|
+
"jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */,
|
6
|
+
"sourceMap": true /* Generates corresponding '.map' file. */,
|
7
|
+
"rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
|
8
|
+
"isolatedModules": true /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */,
|
9
|
+
"strict": true /* Enable all strict type-checking options. */,
|
10
|
+
"baseUrl": "./src" /* Base directory to resolve non-absolute module names. */,
|
11
|
+
"outDir": "./lib",
|
12
|
+
"paths": {
|
13
|
+
"@/*": ["./*"]
|
14
|
+
} /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */,
|
15
|
+
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
|
16
|
+
"skipLibCheck": true /* Skip type checking of declaration files. */,
|
17
|
+
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */,
|
18
|
+
"composite": true
|
19
|
+
}
|
20
|
+
}
|