graphql-form 0.0.2

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.
@@ -0,0 +1,12 @@
1
+ import { FormObject, FormValue } from "../models";
2
+ import { ParserField } from 'graphql-js-tree';
3
+ export declare const fieldsToReductor: (toggledFields: Record<string, FormObject>) => Reductor;
4
+ export declare const reduceQl: (o: Reductor, nodes: ParserField[], tabs?: string) => string;
5
+ declare type ReductorValue = {
6
+ node: Reductor;
7
+ value?: FormValue;
8
+ };
9
+ declare type Reductor = {
10
+ [key: string]: ReductorValue;
11
+ };
12
+ export {};
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reduceQl = exports.fieldsToReductor = void 0;
4
+ var graphql_js_tree_1 = require("graphql-js-tree");
5
+ var fieldsToReductor = function (toggledFields) {
6
+ return Object.entries(toggledFields).reduce(function (a, _a) {
7
+ var key = _a[0], value = _a[1];
8
+ var pathElements = key.split('.');
9
+ var start = a;
10
+ pathElements.forEach(function (el, index) {
11
+ var _a;
12
+ if (index === 0 && !!((_a = value.node.type.operations) === null || _a === void 0 ? void 0 : _a.length)) {
13
+ el = value.node.type.operations[0];
14
+ }
15
+ start[el] = start[el] || {};
16
+ start[el].node = start[el].node || {};
17
+ if (index === pathElements.length - 1) {
18
+ if (value.value && Object.keys(value.value).length > 0) {
19
+ start[el].value = value.value;
20
+ }
21
+ }
22
+ start = start[el].node;
23
+ });
24
+ return a;
25
+ }, {});
26
+ };
27
+ exports.fieldsToReductor = fieldsToReductor;
28
+ var reduceQl = function (o, nodes, tabs) {
29
+ if (tabs === void 0) { tabs = ''; }
30
+ return Object.entries(o)
31
+ .map(function (_a) {
32
+ var k = _a[0], v = _a[1];
33
+ var kName = v.value && Object.keys(v.value).length > 0
34
+ ? "".concat(k, "(").concat(resolveQlValue(v.value, nodes, tabs), "\n").concat(tabs, ")")
35
+ : k;
36
+ var kObject = Object.keys(v.node).length > 0
37
+ ? "".concat(tabs).concat(kName, "{\n").concat((0, exports.reduceQl)(v.node, nodes, tabs + '\t')).concat(tabs, "}\n")
38
+ : "".concat(tabs).concat(kName, "\n");
39
+ return kObject;
40
+ })
41
+ .join('');
42
+ };
43
+ exports.reduceQl = reduceQl;
44
+ var resolveSingularValue = function (v, nodes, tabs) {
45
+ if (tabs === void 0) { tabs = ''; }
46
+ if (v.value === null) {
47
+ return 'null';
48
+ }
49
+ if (Array.isArray(v.value)) {
50
+ return "[".concat(v.value
51
+ .map(function (subVal) { return resolveSingularValue({ node: v.node, value: subVal.value }, nodes, tabs); })
52
+ .join(', '), "]");
53
+ }
54
+ var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(v.node.type.fieldType); });
55
+ if ((seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.EnumTypeDefinition) {
56
+ return v.value;
57
+ }
58
+ if ((seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.ScalarTypeDefinition) {
59
+ return v.value;
60
+ }
61
+ if (seekNode) {
62
+ return "{".concat(resolveQlValue(v.value, nodes, tabs + '\t'), "\n").concat(tabs, "\t}");
63
+ }
64
+ return (0, graphql_js_tree_1.getTypeName)(v.node.type.fieldType) === graphql_js_tree_1.ScalarTypes.String ? "\"".concat(v.value, "\"") : "".concat(v.value);
65
+ };
66
+ var resolveQlValue = function (v, nodes, tabs) {
67
+ if (tabs === void 0) { tabs = ''; }
68
+ if (typeof v === 'undefined' || v === null) {
69
+ return '';
70
+ }
71
+ return Object.entries(v).reduce(function (a, _a) {
72
+ var key = _a[0], v = _a[1];
73
+ if (typeof v.value === 'undefined' || v.value === '') {
74
+ return a;
75
+ }
76
+ if (Array.isArray(v.value) && v.value.length === 0) {
77
+ return a;
78
+ }
79
+ if (typeof v.value === 'object' &&
80
+ v.value !== null &&
81
+ !Object.values(v.value).some(function (val) {
82
+ return typeof val === 'object' && val !== null && 'value' in val && (!!val.value || val.value === false);
83
+ })) {
84
+ return a;
85
+ }
86
+ var resolvedValue = resolveSingularValue(v, nodes, tabs);
87
+ a = "".concat(a, "\n\t").concat(tabs).concat(key, ": ").concat(resolvedValue);
88
+ return a;
89
+ }, '');
90
+ };
91
+ //# sourceMappingURL=gql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gql.js","sourceRoot":"","sources":["../../src/FormToCode/gql.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { FormObject, FormValue } from "../models";
2
+ import { ParserField } from 'graphql-js-tree';
3
+ export declare const zeusFieldsToReductor: (toggledFields: Record<string, FormObject>) => Reductor;
4
+ export declare const zeusReduceQl: (o: Reductor, nodes: ParserField[], tabs?: string, level?: number) => string;
5
+ declare type ReductorValue = {
6
+ node: Reductor;
7
+ value?: FormValue;
8
+ };
9
+ declare type Reductor = {
10
+ [key: string]: ReductorValue;
11
+ };
12
+ export {};
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.zeusReduceQl = exports.zeusFieldsToReductor = void 0;
4
+ var graphql_js_tree_1 = require("graphql-js-tree");
5
+ var zeusFieldsToReductor = function (toggledFields) {
6
+ var r = Object.entries(toggledFields).reduce(function (a, _a) {
7
+ var key = _a[0], value = _a[1];
8
+ var pathElements = key.split('.');
9
+ var start = a;
10
+ pathElements.forEach(function (el, index) {
11
+ var _a;
12
+ if (index === 0 && !!((_a = value.node.type.operations) === null || _a === void 0 ? void 0 : _a.length)) {
13
+ el = value.node.type.operations[0];
14
+ return;
15
+ }
16
+ start[el] = start[el] || {};
17
+ start[el].node = start[el].node || {};
18
+ if (index === pathElements.length - 1) {
19
+ if (value.value && Object.keys(value.value).length > 0) {
20
+ start[el].value = value.value;
21
+ }
22
+ }
23
+ start = start[el].node;
24
+ });
25
+ return a;
26
+ }, {});
27
+ return r;
28
+ };
29
+ exports.zeusFieldsToReductor = zeusFieldsToReductor;
30
+ var zeusReduceQl = function (o, nodes, tabs, level) {
31
+ if (tabs === void 0) { tabs = ''; }
32
+ if (level === void 0) { level = 0; }
33
+ var lUP = level + 1;
34
+ return Object.entries(o)
35
+ .map(function (_a) {
36
+ var _b, _c;
37
+ var k = _a[0], v = _a[1];
38
+ if (v.value && Object.keys(v.value).length > 0) {
39
+ return Object.keys(v.node).length > 0
40
+ ? "".concat(tabs).concat(k, ":[{").concat(resolveQlValue(v.value, nodes, tabs), "\n").concat(tabs, "}, {\n").concat((0, exports.zeusReduceQl)(v.node, nodes, tabs + '\t', lUP)).concat(tabs, "}]\n")
41
+ : "".concat(tabs).concat(k, ":[{").concat(resolveQlValue(v.value, nodes, tabs), "\n").concat(tabs, "}, true]");
42
+ }
43
+ if (level === 0) {
44
+ return "const result = await api(\"".concat((_c = (_b = nodes.find(function (n) { return n.name === k; })) === null || _b === void 0 ? void 0 : _b.type.operations) === null || _c === void 0 ? void 0 : _c[0], "\")({\n").concat((0, exports.zeusReduceQl)(v.node, nodes, tabs + '\t', lUP), "})");
45
+ }
46
+ var kObject = Object.keys(v.node).length > 0
47
+ ? "".concat(tabs).concat(k, ":{\n").concat((0, exports.zeusReduceQl)(v.node, nodes, tabs + '\t', lUP)).concat(tabs, "}\n")
48
+ : "".concat(tabs).concat(k, ": true\n");
49
+ return kObject;
50
+ })
51
+ .join('');
52
+ };
53
+ exports.zeusReduceQl = zeusReduceQl;
54
+ var resolveSingularValue = function (v, nodes, tabs) {
55
+ if (tabs === void 0) { tabs = ''; }
56
+ if (v.value === null) {
57
+ return 'null';
58
+ }
59
+ if (Array.isArray(v.value)) {
60
+ return "[".concat(v.value
61
+ .map(function (subVal) { return resolveSingularValue({ node: v.node, value: subVal.value }, nodes, tabs); })
62
+ .join(', '), "]");
63
+ }
64
+ var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(v.node.type.fieldType); });
65
+ if ((seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.EnumTypeDefinition) {
66
+ return v.value;
67
+ }
68
+ if ((seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.ScalarTypeDefinition) {
69
+ return v.value;
70
+ }
71
+ if (seekNode) {
72
+ return "{".concat(resolveQlValue(v.value, nodes, tabs + '\t'), "\n").concat(tabs, "\t}");
73
+ }
74
+ return (0, graphql_js_tree_1.getTypeName)(v.node.type.fieldType) === graphql_js_tree_1.ScalarTypes.String ? "\"".concat(v.value, "\"") : "".concat(v.value);
75
+ };
76
+ var resolveQlValue = function (v, nodes, tabs) {
77
+ if (tabs === void 0) { tabs = ''; }
78
+ if (typeof v === 'undefined' || v === null) {
79
+ return '';
80
+ }
81
+ return Object.entries(v).reduce(function (a, _a) {
82
+ var key = _a[0], v = _a[1];
83
+ if (typeof v.value === 'undefined' || v.value === '') {
84
+ return a;
85
+ }
86
+ if (Array.isArray(v.value) && v.value.length === 0) {
87
+ return a;
88
+ }
89
+ if (typeof v.value === 'object' &&
90
+ v.value !== null &&
91
+ !Object.values(v.value).some(function (val) {
92
+ return typeof val === 'object' && val !== null && 'value' in val && (!!val.value || val.value === false);
93
+ })) {
94
+ return a;
95
+ }
96
+ var resolvedValue = resolveSingularValue(v, nodes, tabs);
97
+ a = "".concat(a, "\n\t").concat(tabs).concat(key, ": ").concat(resolvedValue);
98
+ return a;
99
+ }, '');
100
+ };
101
+ //# sourceMappingURL=zeus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zeus.js","sourceRoot":"","sources":["../../src/FormToCode/zeus.tsx"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { FormDisplayerProps, MainRendererProps } from "./models";
2
+ import { Renderer } from "./renderer";
3
+ import React from 'react';
4
+ export * from "./models";
5
+ export { Renderer };
6
+ export declare const FormRenderer: React.FC<MainRendererProps>;
7
+ export declare const FormDisplayer: React.FC<FormDisplayerProps>;
package/lib/index.js ADDED
@@ -0,0 +1,71 @@
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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
25
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
26
+ };
27
+ var __rest = (this && this.__rest) || function (s, e) {
28
+ var t = {};
29
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
30
+ t[p] = s[p];
31
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
32
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
33
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
34
+ t[p[i]] = s[p[i]];
35
+ }
36
+ return t;
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.FormDisplayer = exports.FormRenderer = exports.Renderer = void 0;
43
+ var renderer_1 = require("./renderer");
44
+ Object.defineProperty(exports, "Renderer", { enumerable: true, get: function () { return renderer_1.Renderer; } });
45
+ var react_1 = __importDefault(require("react"));
46
+ __exportStar(require("./models"), exports);
47
+ var FormRenderer = function (_a) {
48
+ var formFields = _a.formFields, onChange = _a.onChange, widgetsOnChange = _a.widgetsOnChange, props = __rest(_a, ["formFields", "onChange", "widgetsOnChange"]);
49
+ return (react_1.default.createElement(react_1.default.Fragment, null, Object.keys(formFields).map(function (key) {
50
+ return (react_1.default.createElement(renderer_1.Renderer, __assign({}, props, { changeWidget: function (props, path) {
51
+ widgetsOnChange(path, props);
52
+ }, currentPath: '', formObject: formFields[key], onChange: function (changedForm) {
53
+ var _a;
54
+ onChange(__assign(__assign({}, formFields), (_a = {}, _a[key] = changedForm, _a)));
55
+ }, f: formFields[key].node })));
56
+ })));
57
+ };
58
+ exports.FormRenderer = FormRenderer;
59
+ var FormDisplayer = function (_a) {
60
+ var formFields = _a.formFields, onChange = _a.onChange, props = __rest(_a, ["formFields", "onChange"]);
61
+ return (react_1.default.createElement(react_1.default.Fragment, null, Object.keys(formFields).map(function (key) {
62
+ return (react_1.default.createElement(renderer_1.Renderer, __assign({}, props, { changeWidget: function () {
63
+ return;
64
+ }, currentPath: '', formObject: formFields[key], onChange: function (changedForm) {
65
+ var _a;
66
+ onChange(__assign(__assign({}, formFields), (_a = {}, _a[key] = changedForm, _a)));
67
+ }, f: formFields[key].node })));
68
+ })));
69
+ };
70
+ exports.FormDisplayer = FormDisplayer;
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,uCAAsC;AAI7B,yFAJA,mBAAQ,OAIA;AAHjB,gDAA0B;AAE1B,2CAAyB;AAGlB,IAAM,YAAY,GAAgC,UAAC,EAAmD;IAAjD,IAAA,UAAU,gBAAA,EAAE,QAAQ,cAAA,EAAE,eAAe,qBAAA,EAAK,KAAK,cAAjD,6CAAmD,CAAF;IACvG,OAAO,CACH,8DACK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG;QAC7B,OAAO,CACH,8BAAC,mBAAQ,eACD,KAAK,IACT,YAAY,EAAE,UAAC,KAAK,EAAE,IAAI;gBACtB,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC,EACD,WAAW,EAAE,EAAE,EACf,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAC3B,QAAQ,EAAE,UAAC,WAAuB;;gBAC9B,QAAQ,uBACD,UAAU,gBACZ,GAAG,IAAG,WAAW,OACpB,CAAC;YACP,CAAC,EACD,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,IACzB,CACL,CAAC;IACN,CAAC,CAAC,CACH,CACN,CAAC;AACN,CAAC,CAAC;AAxBW,QAAA,YAAY,gBAwBvB;AAEK,IAAM,aAAa,GAAiC,UAAC,EAAkC;IAAhC,IAAA,UAAU,gBAAA,EAAE,QAAQ,cAAA,EAAK,KAAK,cAAhC,0BAAkC,CAAF;IACxF,OAAO,CACH,8DACK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG;QAC7B,OAAO,CACH,8BAAC,mBAAQ,eACD,KAAK,IACT,YAAY,EAAE;gBACV,OAAO;YACX,CAAC,EACD,WAAW,EAAE,EAAE,EACf,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAC3B,QAAQ,EAAE,UAAC,WAAuB;;gBAC9B,QAAQ,uBACD,UAAU,gBACZ,GAAG,IAAG,WAAW,OACpB,CAAC;YACP,CAAC,EACD,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,IACzB,CACL,CAAC;IACN,CAAC,CAAC,CACH,CACN,CAAC;AACN,CAAC,CAAC;AAxBW,QAAA,aAAa,iBAwBxB"}
@@ -0,0 +1,69 @@
1
+ import { ParserField } from 'graphql-js-tree';
2
+ import React from 'react';
3
+ export declare type FieldComponent = React.FC<PassedFormProps>;
4
+ export declare type FormLabelProps = React.FC<PassedFormProps & {
5
+ open?: boolean;
6
+ setOpen: (b: boolean) => void;
7
+ }>;
8
+ export declare type SavedWidgets = {
9
+ [selector: string]: {
10
+ widget: string;
11
+ [x: string]: any;
12
+ };
13
+ };
14
+ export declare type PassedFormProps<WidgetData = any> = {
15
+ f: ParserField;
16
+ nodes: ParserField[];
17
+ formObject: FormObject;
18
+ onChange: (formObject: FormObject) => void;
19
+ changeWidget: (widgetData: Record<string, any> | undefined, path: string) => void;
20
+ required?: boolean;
21
+ runQuery: (q: string) => Promise<any>;
22
+ widgetComponents: WidgetType[];
23
+ currentPath: string;
24
+ widgets?: SavedWidgets;
25
+ widgetData?: WidgetData;
26
+ components: {
27
+ ArrayField: FieldComponent;
28
+ ObjectField: FieldComponent;
29
+ BooleanField: FieldComponent;
30
+ UniversalField: FieldComponent;
31
+ NumberField: FieldComponent;
32
+ EnumField: FieldComponent;
33
+ NullField: FieldComponent;
34
+ FormLabel: FormLabelProps;
35
+ FormField: FieldComponent;
36
+ };
37
+ };
38
+ export declare type MainRendererProps = Omit<PassedFormProps, 'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget'> & {
39
+ formFields: Record<string, FormObject>;
40
+ widgetsOnChange: (key: string, value?: Omit<FormObject, 'node' | 'value'>) => void;
41
+ onChange: (o: Record<string, FormObject>) => void;
42
+ };
43
+ export declare type FormDisplayerProps = Omit<PassedFormProps, 'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget'> & {
44
+ formFields: Record<string, FormObject>;
45
+ onChange: (o: Record<string, FormObject>) => void;
46
+ };
47
+ export declare type FormLibraryProps = Omit<FormDisplayerProps, 'required' | 'components'>;
48
+ export declare type CastToWidgetSettingsPassedForm<WidgetData> = PassedFormProps<Partial<WidgetData>> & {
49
+ close: () => void;
50
+ };
51
+ export declare type WidgetType = {
52
+ Component: React.FC<PassedFormProps>;
53
+ Settings: React.FC<CastToWidgetSettingsPassedForm<any>> | undefined;
54
+ requirements: (props: PassedFormProps) => boolean;
55
+ props?: Record<string, any>;
56
+ name: string;
57
+ };
58
+ export declare type FormValue = {
59
+ [x: string]: FormValue;
60
+ } | string | boolean | number | null | undefined | FormObject | Array<FormValue>;
61
+ export declare type FormObject = {
62
+ value?: FormValue;
63
+ node: ParserField;
64
+ };
65
+ export declare type FormDataType = Record<string, FormObject | Record<string, FormObject | undefined>>;
66
+ export declare type FormFile = {
67
+ forms: Record<string, FormObject>;
68
+ widgets: Record<string, Omit<FormObject, 'node' | 'value'>>;
69
+ };
package/lib/models.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { PassedFormProps } from "../models";
2
+ import React from 'react';
3
+ export declare const Fields: React.FC<PassedFormProps>;
@@ -0,0 +1,65 @@
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
+ exports.Fields = void 0;
18
+ var graphql_js_tree_1 = require("graphql-js-tree");
19
+ var react_1 = __importDefault(require("react"));
20
+ var Fields = function (props) {
21
+ var _a;
22
+ var nodes = props.nodes, widgetComponents = props.widgetComponents, f = props.f, widgets = props.widgets, _b = props.components, ArrayField = _b.ArrayField, ObjectField = _b.ObjectField;
23
+ var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(f.type.fieldType); });
24
+ var isInput = (seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.InputObjectTypeDefinition;
25
+ if (f.data.type === graphql_js_tree_1.TypeSystemDefinition.FieldDefinition) {
26
+ return react_1.default.createElement(ObjectField, __assign({}, props));
27
+ }
28
+ if (f.type.fieldType.type === graphql_js_tree_1.Options.array) {
29
+ return react_1.default.createElement(ArrayField, __assign({}, props));
30
+ }
31
+ if (isInput) {
32
+ return react_1.default.createElement(ObjectField, __assign({}, props, { f: seekNode }));
33
+ }
34
+ var widget = widgets === null || widgets === void 0 ? void 0 : widgets[props.currentPath];
35
+ if (widget) {
36
+ var WidgetComponent = (_a = widgetComponents.find(function (wc) { return wc.name === widget.widget; })) === null || _a === void 0 ? void 0 : _a.Component;
37
+ if (!WidgetComponent) {
38
+ return react_1.default.createElement(react_1.default.Fragment, null);
39
+ }
40
+ return react_1.default.createElement(WidgetComponent, __assign({}, props, { widgetData: widget }));
41
+ }
42
+ return react_1.default.createElement(ScalarField, __assign({}, props));
43
+ };
44
+ exports.Fields = Fields;
45
+ var ScalarField = function (props) {
46
+ var f = props.f, nodes = props.nodes, children = props.children, _a = props.components, BooleanField = _a.BooleanField, NumberField = _a.NumberField, EnumField = _a.EnumField, UniversalField = _a.UniversalField;
47
+ var typeName = (0, graphql_js_tree_1.getTypeName)(f.type.fieldType);
48
+ var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(f.type.fieldType); });
49
+ if (typeName === graphql_js_tree_1.ScalarTypes.String ||
50
+ typeName === graphql_js_tree_1.ScalarTypes.ID ||
51
+ (seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.ScalarTypeDefinition) {
52
+ return react_1.default.createElement(UniversalField, __assign({}, props));
53
+ }
54
+ if (typeName === graphql_js_tree_1.ScalarTypes.Float || typeName === graphql_js_tree_1.ScalarTypes.Int) {
55
+ return react_1.default.createElement(NumberField, __assign({}, props));
56
+ }
57
+ if (typeName === graphql_js_tree_1.ScalarTypes.Boolean) {
58
+ return react_1.default.createElement(BooleanField, __assign({}, props));
59
+ }
60
+ if ((seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.EnumTypeDefinition) {
61
+ return react_1.default.createElement(EnumField, __assign({}, props));
62
+ }
63
+ return react_1.default.createElement(react_1.default.Fragment, null, children);
64
+ };
65
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/renderer/fields.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { PassedFormProps } from "../models";
2
+ import React from 'react';
3
+ export declare const Renderer: React.FC<PassedFormProps>;
@@ -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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __rest = (this && this.__rest) || function (s, e) {
37
+ var t = {};
38
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
39
+ t[p] = s[p];
40
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
41
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
42
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
43
+ t[p[i]] = s[p[i]];
44
+ }
45
+ return t;
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.Renderer = void 0;
49
+ var fields_1 = require("./fields");
50
+ var graphql_js_tree_1 = require("graphql-js-tree");
51
+ var react_1 = __importStar(require("react"));
52
+ var Renderer = function (props) {
53
+ var formObject = props.formObject, f = props.f, nodes = props.nodes, _a = props.components, NullField = _a.NullField, FormLabel = _a.FormLabel, FormField = _a.FormField;
54
+ var children = props.children, allProps = __rest(props, ["children"]);
55
+ var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(f.type.fieldType); });
56
+ var isInput = (seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.InputObjectTypeDefinition;
57
+ var canBeOpened = props.f.data.type === graphql_js_tree_1.TypeSystemDefinition.FieldDefinition || isInput;
58
+ var _b = (0, react_1.useState)(props.f.data.type === graphql_js_tree_1.TypeSystemDefinition.FieldDefinition || props.required), open = _b[0], setOpen = _b[1];
59
+ if (f.type.fieldType.type === graphql_js_tree_1.Options.required) {
60
+ return (react_1.default.createElement(exports.Renderer, __assign({}, props, { f: __assign(__assign({}, f), { type: __assign(__assign({}, f.type), { fieldType: __assign({}, f.type.fieldType.nest) }) }), required: true })));
61
+ }
62
+ return (react_1.default.createElement(FormField, __assign({}, allProps),
63
+ react_1.default.createElement(FormLabel, __assign({}, allProps, { open: open, setOpen: setOpen, children: children })),
64
+ formObject.value === null ? (react_1.default.createElement(NullField, __assign({}, allProps))) : (react_1.default.createElement(react_1.default.Fragment, null, (!canBeOpened || open) && react_1.default.createElement(fields_1.Fields, __assign({}, allProps))))));
65
+ };
66
+ exports.Renderer = Renderer;
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mCAA2C;AAC3C,mDAA6F;AAC7F,6CAAwC;AAEjC,IAAM,QAAQ,GAA8B,UAAC,KAAK;IAEjD,IAAA,UAAU,GAIV,KAAK,WAJK,EACV,CAAC,GAGD,KAAK,EAHJ,EACD,KAAK,GAEL,KAAK,MAFA,EACL,KACA,KAAK,WAD0C,EAAjC,SAAS,eAAA,EAAE,SAAS,eAAA,EAAE,SAAS,eAAE,CACzC;IACF,IAAA,QAAQ,GAAkB,KAAK,SAAvB,EAAK,QAAQ,UAAK,KAAK,EAAjC,YAAyB,CAAF,CAAW;IACxC,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;IACjF,IAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,sCAAoB,CAAC,eAAe,IAAI,OAAO,CAAC;IACpF,IAAA,KAAkB,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,sCAAoB,CAAC,eAAe,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAvG,IAAI,QAAA,EAAE,OAAO,QAA0F,CAAC;IAC/G,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,yBAAO,CAAC,QAAQ,EAAE;QAC5C,OAAO,CACH,8BAAC,gBAAQ,eACD,KAAK,IACT,CAAC,wBACM,CAAC,KACJ,IAAI,wBAAO,CAAC,CAAC,IAAI,KAAE,SAAS,eAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAE5D,QAAQ,EAAE,IAAI,IAChB,CACL,CAAC;KACL;IACD,OAAO,CACH,8BAAC,SAAS,eAAK,QAAQ;QACnB,8BAAC,SAAS,eAAK,QAAQ,IAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI;QAC5E,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CACzB,8BAAC,SAAS,eAAK,QAAQ,EAAI,CAC9B,CAAC,CAAC,CAAC,CACA,8DAAG,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,8BAAC,eAAM,eAAK,QAAQ,EAAI,CAAI,CAC5D,CACO,CACf,CAAC;AACN,CAAC,CAAC;AAlCW,QAAA,QAAQ,YAkCnB"}
@@ -0,0 +1,14 @@
1
+ import { PassedFormProps, CastToWidgetSettingsPassedForm } from "../../models";
2
+ import React from 'react';
3
+ export declare function createWidget<Props>({ name, Component, Settings, requirements, }: {
4
+ name: string;
5
+ Component: React.FC<PassedFormProps<Props>>;
6
+ Settings?: React.FC<CastToWidgetSettingsPassedForm<Props>>;
7
+ requirements: (props: PassedFormProps) => boolean;
8
+ }): {
9
+ Component: React.FC<PassedFormProps<Props>>;
10
+ Settings: React.FC<CastToWidgetSettingsPassedForm<Props>> | undefined;
11
+ requirements: (props: PassedFormProps) => boolean;
12
+ props: Props;
13
+ name: string;
14
+ };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createWidget = void 0;
4
+ function createWidget(_a) {
5
+ var name = _a.name, Component = _a.Component, Settings = _a.Settings, requirements = _a.requirements;
6
+ return {
7
+ Component: Component,
8
+ Settings: Settings,
9
+ requirements: requirements,
10
+ props: {},
11
+ name: name,
12
+ };
13
+ }
14
+ exports.createWidget = createWidget;
15
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/renderer/widgets/models.ts"],"names":[],"mappings":";;;AAGA,SAAgB,YAAY,CAAQ,EAUnC;QATG,IAAI,UAAA,EACJ,SAAS,eAAA,EACT,QAAQ,cAAA,EACR,YAAY,kBAAA;IAOZ,OAAO;QACH,SAAS,WAAA;QACT,QAAQ,UAAA;QACR,YAAY,cAAA;QACZ,KAAK,EAAE,EAAW;QAClB,IAAI,MAAA;KACP,CAAC;AACN,CAAC;AAlBD,oCAkBC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "graphql-form",
3
+ "version": "0.0.2",
4
+ "description": "Easy form creation with GraphQL Editor and React",
5
+ "main": "lib/index.js",
6
+ "scripts": {
7
+ "test": "jest",
8
+ "test:watch": "jest --watch",
9
+ "build": "ttsc --build tsconfig.build.json",
10
+ "start": "ttsc --build tsconfig.build.json --watch",
11
+ "lint": "eslint '*/**/*.{js,ts,tsx}' --quiet --fix"
12
+ },
13
+ "types": "lib/index.d.ts",
14
+ "private": false,
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/graphql-editor/graphql-form.git"
21
+ },
22
+ "author": "Aexol <aexol@aexol.com> (http://aexol.com)",
23
+ "license": "MIT",
24
+ "homepage": "https://form.graphqleditor.com",
25
+ "devDependencies": {},
26
+ "peerDependencies": {
27
+ "react": ">=16.8.0",
28
+ "react-dom": ">=16.8.0"
29
+ },
30
+ "dependencies": {
31
+ "graphql-js-tree": "^0.1.1"
32
+ }
33
+ }
@@ -0,0 +1,95 @@
1
+ import { FormObject, FormValue } from '@/models';
2
+ import { ParserField, TypeDefinition, ScalarTypes, getTypeName } from 'graphql-js-tree';
3
+
4
+ export const fieldsToReductor = (toggledFields: Record<string, FormObject>): Reductor =>
5
+ Object.entries(toggledFields).reduce((a, [key, value]) => {
6
+ const pathElements = key.split('.');
7
+ let start = a;
8
+ pathElements.forEach((el, index) => {
9
+ if (index === 0 && !!value.node.type.operations?.length) {
10
+ el = value.node.type.operations[0];
11
+ }
12
+ start[el] = start[el] || {};
13
+ start[el].node = start[el].node || {};
14
+ if (index === pathElements.length - 1) {
15
+ if (value.value && Object.keys(value.value).length > 0) {
16
+ start[el].value = value.value;
17
+ }
18
+ }
19
+ start = start[el].node;
20
+ });
21
+ return a;
22
+ }, {} as Reductor);
23
+
24
+ export const reduceQl = (o: Reductor, nodes: ParserField[], tabs = ''): string => {
25
+ return Object.entries(o)
26
+ .map(([k, v]) => {
27
+ const kName =
28
+ v.value && Object.keys(v.value).length > 0
29
+ ? `${k}(${resolveQlValue(v.value, nodes, tabs)}\n${tabs})`
30
+ : k;
31
+ const kObject =
32
+ Object.keys(v.node).length > 0
33
+ ? `${tabs}${kName}{\n${reduceQl(v.node, nodes, tabs + '\t')}${tabs}}\n`
34
+ : `${tabs}${kName}\n`;
35
+ return kObject;
36
+ })
37
+ .join('');
38
+ };
39
+
40
+ const resolveSingularValue = (v: FormObject, nodes: ParserField[], tabs = ''): string => {
41
+ if (v.value === null) {
42
+ return 'null';
43
+ }
44
+ if (Array.isArray(v.value)) {
45
+ return `[${v.value
46
+ .map((subVal) => resolveSingularValue({ node: v.node, value: (subVal as FormObject).value }, nodes, tabs))
47
+ .join(', ')}]`;
48
+ }
49
+ const seekNode = nodes.find((n) => n.name === getTypeName(v.node.type.fieldType));
50
+ if (seekNode?.data.type === TypeDefinition.EnumTypeDefinition) {
51
+ return v.value as string;
52
+ }
53
+ if (seekNode?.data.type === TypeDefinition.ScalarTypeDefinition) {
54
+ return v.value as string;
55
+ }
56
+ if (seekNode) {
57
+ return `{${resolveQlValue(v.value, nodes, tabs + '\t')}\n${tabs}\t}`;
58
+ }
59
+ return getTypeName(v.node.type.fieldType) === ScalarTypes.String ? `"${v.value}"` : `${v.value}`;
60
+ };
61
+
62
+ const resolveQlValue = (v: FormValue | undefined, nodes: ParserField[], tabs = '') => {
63
+ if (typeof v === 'undefined' || v === null) {
64
+ return '';
65
+ }
66
+ return Object.entries(v).reduce((a, [key, v]: [key: string, value: FormObject]) => {
67
+ if (typeof v.value === 'undefined' || v.value === '') {
68
+ return a;
69
+ }
70
+ if (Array.isArray(v.value) && v.value.length === 0) {
71
+ return a;
72
+ }
73
+ if (
74
+ typeof v.value === 'object' &&
75
+ v.value !== null &&
76
+ !Object.values(v.value).some(
77
+ (val) =>
78
+ typeof val === 'object' && val !== null && 'value' in val && (!!val.value || val.value === false),
79
+ )
80
+ ) {
81
+ return a;
82
+ }
83
+ const resolvedValue = resolveSingularValue(v, nodes, tabs);
84
+ a = `${a}\n\t${tabs}${key}: ${resolvedValue}`;
85
+ return a;
86
+ }, '');
87
+ };
88
+
89
+ type ReductorValue = {
90
+ node: Reductor;
91
+ value?: FormValue;
92
+ };
93
+ type Reductor = {
94
+ [key: string]: ReductorValue;
95
+ };
@@ -0,0 +1,110 @@
1
+ import { FormObject, FormValue } from '@/models';
2
+ import { ParserField, TypeDefinition, ScalarTypes, getTypeName } from 'graphql-js-tree';
3
+
4
+ export const zeusFieldsToReductor = (toggledFields: Record<string, FormObject>): Reductor => {
5
+ const r = Object.entries(toggledFields).reduce((a, [key, value]) => {
6
+ const pathElements = key.split('.');
7
+ let start = a;
8
+ pathElements.forEach((el, index) => {
9
+ if (index === 0 && !!value.node.type.operations?.length) {
10
+ el = value.node.type.operations[0];
11
+ return;
12
+ }
13
+ start[el] = start[el] || {};
14
+ start[el].node = start[el].node || {};
15
+ if (index === pathElements.length - 1) {
16
+ if (value.value && Object.keys(value.value).length > 0) {
17
+ start[el].value = value.value;
18
+ }
19
+ }
20
+ start = start[el].node;
21
+ });
22
+ return a;
23
+ }, {} as Reductor);
24
+ return r;
25
+ };
26
+
27
+ export const zeusReduceQl = (o: Reductor, nodes: ParserField[], tabs = '', level = 0): string => {
28
+ const lUP = level + 1;
29
+ return Object.entries(o)
30
+ .map(([k, v]) => {
31
+ if (v.value && Object.keys(v.value).length > 0) {
32
+ return Object.keys(v.node).length > 0
33
+ ? `${tabs}${k}:[{${resolveQlValue(v.value, nodes, tabs)}\n${tabs}}, {\n${zeusReduceQl(
34
+ v.node,
35
+ nodes,
36
+ tabs + '\t',
37
+ lUP,
38
+ )}${tabs}}]\n`
39
+ : `${tabs}${k}:[{${resolveQlValue(v.value, nodes, tabs)}\n${tabs}}, true]`;
40
+ }
41
+ if (level === 0) {
42
+ return `const result = await api("${
43
+ nodes.find((n) => n.name === k)?.type.operations?.[0]
44
+ }")({\n${zeusReduceQl(v.node, nodes, tabs + '\t', lUP)}})`;
45
+ }
46
+ const kObject =
47
+ Object.keys(v.node).length > 0
48
+ ? `${tabs}${k}:{\n${zeusReduceQl(v.node, nodes, tabs + '\t', lUP)}${tabs}}\n`
49
+ : `${tabs}${k}: true\n`;
50
+ return kObject;
51
+ })
52
+ .join('');
53
+ };
54
+
55
+ const resolveSingularValue = (v: FormObject, nodes: ParserField[], tabs = ''): string => {
56
+ if (v.value === null) {
57
+ return 'null';
58
+ }
59
+ if (Array.isArray(v.value)) {
60
+ return `[${v.value
61
+ .map((subVal) => resolveSingularValue({ node: v.node, value: (subVal as FormObject).value }, nodes, tabs))
62
+ .join(', ')}]`;
63
+ }
64
+ const seekNode = nodes.find((n) => n.name === getTypeName(v.node.type.fieldType));
65
+ if (seekNode?.data.type === TypeDefinition.EnumTypeDefinition) {
66
+ return v.value as string;
67
+ }
68
+ if (seekNode?.data.type === TypeDefinition.ScalarTypeDefinition) {
69
+ return v.value as string;
70
+ }
71
+ if (seekNode) {
72
+ return `{${resolveQlValue(v.value, nodes, tabs + '\t')}\n${tabs}\t}`;
73
+ }
74
+ return getTypeName(v.node.type.fieldType) === ScalarTypes.String ? `"${v.value}"` : `${v.value}`;
75
+ };
76
+
77
+ const resolveQlValue = (v: FormValue | undefined, nodes: ParserField[], tabs = '') => {
78
+ if (typeof v === 'undefined' || v === null) {
79
+ return '';
80
+ }
81
+ return Object.entries(v).reduce((a, [key, v]: [key: string, value: FormObject]) => {
82
+ if (typeof v.value === 'undefined' || v.value === '') {
83
+ return a;
84
+ }
85
+ if (Array.isArray(v.value) && v.value.length === 0) {
86
+ return a;
87
+ }
88
+ if (
89
+ typeof v.value === 'object' &&
90
+ v.value !== null &&
91
+ !Object.values(v.value).some(
92
+ (val) =>
93
+ typeof val === 'object' && val !== null && 'value' in val && (!!val.value || val.value === false),
94
+ )
95
+ ) {
96
+ return a;
97
+ }
98
+ const resolvedValue = resolveSingularValue(v, nodes, tabs);
99
+ a = `${a}\n\t${tabs}${key}: ${resolvedValue}`;
100
+ return a;
101
+ }, '');
102
+ };
103
+
104
+ type ReductorValue = {
105
+ node: Reductor;
106
+ value?: FormValue;
107
+ };
108
+ type Reductor = {
109
+ [key: string]: ReductorValue;
110
+ };
package/src/index.tsx ADDED
@@ -0,0 +1,58 @@
1
+ import { FormObject, FormDisplayerProps, MainRendererProps } from '@/models';
2
+ import { Renderer } from '@/renderer';
3
+ import React from 'react';
4
+
5
+ export * from '@/models';
6
+ export { Renderer };
7
+
8
+ export const FormRenderer: React.FC<MainRendererProps> = ({ formFields, onChange, widgetsOnChange, ...props }) => {
9
+ return (
10
+ <>
11
+ {Object.keys(formFields).map((key) => {
12
+ return (
13
+ <Renderer
14
+ {...props}
15
+ changeWidget={(props, path) => {
16
+ widgetsOnChange(path, props);
17
+ }}
18
+ currentPath={''}
19
+ formObject={formFields[key]}
20
+ onChange={(changedForm: FormObject) => {
21
+ onChange({
22
+ ...formFields,
23
+ [key]: changedForm,
24
+ });
25
+ }}
26
+ f={formFields[key].node}
27
+ />
28
+ );
29
+ })}
30
+ </>
31
+ );
32
+ };
33
+
34
+ export const FormDisplayer: React.FC<FormDisplayerProps> = ({ formFields, onChange, ...props }) => {
35
+ return (
36
+ <>
37
+ {Object.keys(formFields).map((key) => {
38
+ return (
39
+ <Renderer
40
+ {...props}
41
+ changeWidget={() => {
42
+ return;
43
+ }}
44
+ currentPath={''}
45
+ formObject={formFields[key]}
46
+ onChange={(changedForm: FormObject) => {
47
+ onChange({
48
+ ...formFields,
49
+ [key]: changedForm,
50
+ });
51
+ }}
52
+ f={formFields[key].node}
53
+ />
54
+ );
55
+ })}
56
+ </>
57
+ );
58
+ };
package/src/models.ts ADDED
@@ -0,0 +1,93 @@
1
+ import { ParserField } from 'graphql-js-tree';
2
+ import React from 'react';
3
+
4
+ export type FieldComponent = React.FC<PassedFormProps>;
5
+
6
+ export type FormLabelProps = React.FC<PassedFormProps & { open?: boolean; setOpen: (b: boolean) => void }>;
7
+
8
+ export type SavedWidgets = {
9
+ [selector: string]: {
10
+ widget: string;
11
+ [x: string]: any;
12
+ };
13
+ };
14
+
15
+ export type PassedFormProps<WidgetData = any> = {
16
+ f: ParserField;
17
+ nodes: ParserField[];
18
+ formObject: FormObject;
19
+ onChange: (formObject: FormObject) => void;
20
+ changeWidget: (widgetData: Record<string, any> | undefined, path: string) => void;
21
+ required?: boolean;
22
+ runQuery: (q: string) => Promise<any>;
23
+ widgetComponents: WidgetType[];
24
+ currentPath: string;
25
+ widgets?: SavedWidgets;
26
+ widgetData?: WidgetData;
27
+ components: {
28
+ ArrayField: FieldComponent;
29
+ ObjectField: FieldComponent;
30
+ BooleanField: FieldComponent;
31
+ UniversalField: FieldComponent;
32
+ NumberField: FieldComponent;
33
+ EnumField: FieldComponent;
34
+ NullField: FieldComponent;
35
+ FormLabel: FormLabelProps;
36
+ FormField: FieldComponent;
37
+ };
38
+ };
39
+
40
+ export type MainRendererProps = Omit<
41
+ PassedFormProps,
42
+ 'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget'
43
+ > & {
44
+ formFields: Record<string, FormObject>;
45
+ widgetsOnChange: (key: string, value?: Omit<FormObject, 'node' | 'value'>) => void;
46
+ onChange: (o: Record<string, FormObject>) => void;
47
+ };
48
+
49
+ export type FormDisplayerProps = Omit<
50
+ PassedFormProps,
51
+ 'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget'
52
+ > & {
53
+ formFields: Record<string, FormObject>;
54
+ onChange: (o: Record<string, FormObject>) => void;
55
+ };
56
+
57
+ export type FormLibraryProps = Omit<FormDisplayerProps, 'required' | 'components'>;
58
+
59
+ export type CastToWidgetSettingsPassedForm<WidgetData> = PassedFormProps<Partial<WidgetData>> & {
60
+ close: () => void;
61
+ };
62
+
63
+ export type WidgetType = {
64
+ Component: React.FC<PassedFormProps>;
65
+ Settings: React.FC<CastToWidgetSettingsPassedForm<any>> | undefined;
66
+ requirements: (props: PassedFormProps) => boolean;
67
+ props?: Record<string, any>;
68
+ name: string;
69
+ };
70
+
71
+ export type FormValue =
72
+ | {
73
+ [x: string]: FormValue;
74
+ }
75
+ | string
76
+ | boolean
77
+ | number
78
+ | null
79
+ | undefined
80
+ | FormObject
81
+ | Array<FormValue>;
82
+
83
+ export type FormObject = {
84
+ value?: FormValue;
85
+ node: ParserField;
86
+ };
87
+
88
+ export type FormDataType = Record<string, FormObject | Record<string, FormObject | undefined>>;
89
+
90
+ export type FormFile = {
91
+ forms: Record<string, FormObject>;
92
+ widgets: Record<string, Omit<FormObject, 'node' | 'value'>>;
93
+ };
@@ -0,0 +1,61 @@
1
+ import { PassedFormProps } from '@/models';
2
+ import { getTypeName, Options, ScalarTypes, TypeDefinition, TypeSystemDefinition } from 'graphql-js-tree';
3
+ import React from 'react';
4
+
5
+ export const Fields: React.FC<PassedFormProps> = (props) => {
6
+ const {
7
+ nodes,
8
+ widgetComponents,
9
+ f,
10
+ widgets,
11
+ components: { ArrayField, ObjectField },
12
+ } = props;
13
+ const seekNode = nodes.find((n) => n.name === getTypeName(f.type.fieldType));
14
+ const isInput = seekNode?.data.type === TypeDefinition.InputObjectTypeDefinition;
15
+ if (f.data.type === TypeSystemDefinition.FieldDefinition) {
16
+ return <ObjectField {...props} />;
17
+ }
18
+ if (f.type.fieldType.type === Options.array) {
19
+ return <ArrayField {...props} />;
20
+ }
21
+ if (isInput) {
22
+ return <ObjectField {...props} f={seekNode} />;
23
+ }
24
+ const widget = widgets?.[props.currentPath];
25
+ if (widget) {
26
+ const WidgetComponent = widgetComponents.find((wc) => wc.name === widget.widget)?.Component;
27
+ if (!WidgetComponent) {
28
+ return <></>;
29
+ }
30
+ return <WidgetComponent {...props} widgetData={widget} />;
31
+ }
32
+ return <ScalarField {...props} />;
33
+ };
34
+ const ScalarField: React.FC<PassedFormProps> = (props) => {
35
+ const {
36
+ f,
37
+ nodes,
38
+ children,
39
+ components: { BooleanField, NumberField, EnumField, UniversalField },
40
+ } = props;
41
+ const typeName = getTypeName(f.type.fieldType);
42
+ const seekNode = nodes.find((n) => n.name === getTypeName(f.type.fieldType));
43
+ if (
44
+ typeName === ScalarTypes.String ||
45
+ typeName === ScalarTypes.ID ||
46
+ seekNode?.data.type === TypeDefinition.ScalarTypeDefinition
47
+ ) {
48
+ return <UniversalField {...props} />;
49
+ }
50
+
51
+ if (typeName === ScalarTypes.Float || typeName === ScalarTypes.Int) {
52
+ return <NumberField {...props} />;
53
+ }
54
+ if (typeName === ScalarTypes.Boolean) {
55
+ return <BooleanField {...props} />;
56
+ }
57
+ if (seekNode?.data.type === TypeDefinition.EnumTypeDefinition) {
58
+ return <EnumField {...props} />;
59
+ }
60
+ return <>{children}</>;
61
+ };
@@ -0,0 +1,40 @@
1
+ import { PassedFormProps } from '@/models';
2
+ import { Fields } from '@/renderer/fields';
3
+ import { TypeSystemDefinition, Options, getTypeName, TypeDefinition } from 'graphql-js-tree';
4
+ import React, { useState } from 'react';
5
+
6
+ export const Renderer: React.FC<PassedFormProps> = (props) => {
7
+ const {
8
+ formObject,
9
+ f,
10
+ nodes,
11
+ components: { NullField, FormLabel, FormField },
12
+ } = props;
13
+ const { children, ...allProps } = props;
14
+ const seekNode = nodes.find((n) => n.name === getTypeName(f.type.fieldType));
15
+ const isInput = seekNode?.data.type === TypeDefinition.InputObjectTypeDefinition;
16
+ const canBeOpened = props.f.data.type === TypeSystemDefinition.FieldDefinition || isInput;
17
+ const [open, setOpen] = useState(props.f.data.type === TypeSystemDefinition.FieldDefinition || props.required);
18
+ if (f.type.fieldType.type === Options.required) {
19
+ return (
20
+ <Renderer
21
+ {...props}
22
+ f={{
23
+ ...f,
24
+ type: { ...f.type, fieldType: { ...f.type.fieldType.nest } },
25
+ }}
26
+ required={true}
27
+ />
28
+ );
29
+ }
30
+ return (
31
+ <FormField {...allProps}>
32
+ <FormLabel {...allProps} open={open} setOpen={setOpen} children={children} />
33
+ {formObject.value === null ? (
34
+ <NullField {...allProps} />
35
+ ) : (
36
+ <>{(!canBeOpened || open) && <Fields {...allProps} />}</>
37
+ )}
38
+ </FormField>
39
+ );
40
+ };
@@ -0,0 +1,22 @@
1
+ import { PassedFormProps, CastToWidgetSettingsPassedForm } from '@/models';
2
+ import React from 'react';
3
+
4
+ export function createWidget<Props>({
5
+ name,
6
+ Component,
7
+ Settings,
8
+ requirements,
9
+ }: {
10
+ name: string;
11
+ Component: React.FC<PassedFormProps<Props>>;
12
+ Settings?: React.FC<CastToWidgetSettingsPassedForm<Props>>;
13
+ requirements: (props: PassedFormProps) => boolean;
14
+ }) {
15
+ return {
16
+ Component,
17
+ Settings,
18
+ requirements,
19
+ props: {} as Props,
20
+ name,
21
+ };
22
+ }
@@ -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"]
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
+ }