graphql-form 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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":";;;;;;;;;;;;;;;;;AACA,mDAA0G;AAC1G,gDAA0B;AAEnB,IAAM,MAAM,GAA8B,UAAC,KAAK;;IAE/C,IAAA,KAAK,GAKL,KAAK,MALA,EACL,gBAAgB,GAIhB,KAAK,iBAJW,EAChB,CAAC,GAGD,KAAK,EAHJ,EACD,OAAO,GAEP,KAAK,QAFE,EACP,KACA,KAAK,WADkC,EAAzB,UAAU,gBAAA,EAAE,WAAW,iBAAE,CACjC;IACV,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,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,sCAAoB,CAAC,eAAe,EAAE;QACtD,OAAO,8BAAC,WAAW,eAAK,KAAK,EAAI,CAAC;KACrC;IACD,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,yBAAO,CAAC,KAAK,EAAE;QACzC,OAAO,8BAAC,UAAU,eAAK,KAAK,EAAI,CAAC;KACpC;IACD,IAAI,OAAO,EAAE;QACT,OAAO,8BAAC,WAAW,eAAK,KAAK,IAAE,CAAC,EAAE,QAAQ,IAAI,CAAC;KAClD;IACD,IAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,MAAM,EAAE;QACR,IAAM,eAAe,GAAG,MAAA,gBAAgB,CAAC,IAAI,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAzB,CAAyB,CAAC,0CAAE,SAAS,CAAC;QAC5F,IAAI,CAAC,eAAe,EAAE;YAClB,OAAO,6DAAK,CAAC;SAChB;QACD,OAAO,8BAAC,eAAe,eAAK,KAAK,IAAE,UAAU,EAAE,MAAM,IAAI,CAAC;KAC7D;IACD,OAAO,8BAAC,WAAW,eAAK,KAAK,EAAI,CAAC;AACtC,CAAC,CAAC;AA5BW,QAAA,MAAM,UA4BjB;AACF,IAAM,WAAW,GAA8B,UAAC,KAAK;IAE7C,IAAA,CAAC,GAID,KAAK,EAJJ,EACD,KAAK,GAGL,KAAK,MAHA,EACL,QAAQ,GAER,KAAK,SAFG,EACR,KACA,KAAK,WAD+D,EAAtD,YAAY,kBAAA,EAAE,WAAW,iBAAA,EAAE,SAAS,eAAA,EAAE,cAAc,oBAAE,CAC9D;IACV,IAAM,QAAQ,GAAG,IAAA,6BAAW,EAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,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,IACI,QAAQ,KAAK,6BAAW,CAAC,MAAM;QAC/B,QAAQ,KAAK,6BAAW,CAAC,EAAE;QAC3B,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,IAAI,MAAK,gCAAc,CAAC,oBAAoB,EAC7D;QACE,OAAO,8BAAC,cAAc,eAAK,KAAK,EAAI,CAAC;KACxC;IAED,IAAI,QAAQ,KAAK,6BAAW,CAAC,KAAK,IAAI,QAAQ,KAAK,6BAAW,CAAC,GAAG,EAAE;QAChE,OAAO,8BAAC,WAAW,eAAK,KAAK,EAAI,CAAC;KACrC;IACD,IAAI,QAAQ,KAAK,6BAAW,CAAC,OAAO,EAAE;QAClC,OAAO,8BAAC,YAAY,eAAK,KAAK,EAAI,CAAC;KACtC;IACD,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,IAAI,MAAK,gCAAc,CAAC,kBAAkB,EAAE;QAC3D,OAAO,8BAAC,SAAS,eAAK,KAAK,EAAI,CAAC;KACnC;IACD,OAAO,8DAAG,QAAQ,CAAI,CAAC;AAC3B,CAAC,CAAC"}
@@ -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
+ }