graphql-form 0.0.25 → 0.0.27
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/FormBuilder.js +31 -8
- package/lib/FormBuilder.js.map +1 -1
- package/lib/FormDisplayer.js +30 -7
- package/lib/FormDisplayer.js.map +1 -1
- package/lib/models.d.ts +4 -2
- package/lib/outsideUse.d.ts +6 -6
- package/lib/outsideUse.js +91 -88
- package/lib/outsideUse.js.map +1 -1
- package/package.json +1 -1
- package/src/FormBuilder.tsx +9 -5
- package/src/FormDisplayer.tsx +8 -4
- package/src/models.ts +4 -2
- package/src/outsideUse.tsx +96 -95
package/lib/FormBuilder.js
CHANGED
@@ -10,6 +10,29 @@ var __assign = (this && this.__assign) || function () {
|
|
10
10
|
};
|
11
11
|
return __assign.apply(this, arguments);
|
12
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
|
+
};
|
13
36
|
var __rest = (this && this.__rest) || function (s, e) {
|
14
37
|
var t = {};
|
15
38
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
@@ -21,32 +44,32 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
21
44
|
}
|
22
45
|
return t;
|
23
46
|
};
|
24
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
25
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
26
|
-
};
|
27
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
28
48
|
exports.FormBuilder = void 0;
|
29
49
|
var FormToCode_1 = require("./FormToCode");
|
30
50
|
var renderer_1 = require("./renderer");
|
31
51
|
var graphql_js_tree_1 = require("graphql-js-tree");
|
32
|
-
var react_1 =
|
52
|
+
var react_1 = __importStar(require("react"));
|
33
53
|
var FormBuilder = function (_a) {
|
34
|
-
var formFile = _a.formFile, onChange = _a.onChange, props = __rest(_a, ["formFile", "onChange"]);
|
54
|
+
var formFile = _a.formFile, onChange = _a.onChange, schema = _a.schema, props = __rest(_a, ["formFile", "onChange", "schema"]);
|
35
55
|
var _b = formFile.widgets, widgets = _b === void 0 ? {} : _b, _c = formFile.forms, forms = _c === void 0 ? {} : _c;
|
36
56
|
var formFields = Object.fromEntries(Object.entries(forms).filter(function (_a) {
|
37
57
|
var _b;
|
38
58
|
var v = _a[1];
|
39
59
|
return !!((_b = v.node.args) === null || _b === void 0 ? void 0 : _b.length) && v.node.data.type === graphql_js_tree_1.TypeSystemDefinition.FieldDefinition;
|
40
60
|
}));
|
61
|
+
var nodes = (0, react_1.useMemo)(function () {
|
62
|
+
return graphql_js_tree_1.Parser.parse(schema).nodes;
|
63
|
+
}, [schema]);
|
41
64
|
return (react_1.default.createElement(react_1.default.Fragment, null, Object.keys(formFields).map(function (key) {
|
42
|
-
return (react_1.default.createElement(renderer_1.Renderer, __assign({}, props, { key: key, changeWidget: function (widgetData, path) {
|
65
|
+
return (react_1.default.createElement(renderer_1.Renderer, __assign({}, props, { key: key, nodes: nodes, changeWidget: function (widgetData, path) {
|
43
66
|
var _a;
|
44
|
-
var query = (0, FormToCode_1.formToGql)({ fields: forms, nodes:
|
67
|
+
var query = (0, FormToCode_1.formToGql)({ fields: forms, nodes: nodes });
|
45
68
|
onChange(__assign(__assign({}, formFile), { widgets: __assign(__assign({}, widgets), (_a = {}, _a[path] = widgetData, _a)) }), query);
|
46
69
|
}, widgets: widgets, currentPath: key, formObject: formFields[key], onChange: function (changedForm) {
|
47
70
|
var _a;
|
48
71
|
var updatedFile = __assign(__assign({}, formFile), { forms: __assign(__assign({}, forms), (_a = {}, _a[key] = changedForm, _a)) });
|
49
|
-
var query = (0, FormToCode_1.formToGql)({ fields: updatedFile.forms, nodes:
|
72
|
+
var query = (0, FormToCode_1.formToGql)({ fields: updatedFile.forms, nodes: nodes });
|
50
73
|
onChange(updatedFile, query);
|
51
74
|
}, f: formFields[key].node })));
|
52
75
|
})));
|
package/lib/FormBuilder.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FormBuilder.js","sourceRoot":"","sources":["../src/FormBuilder.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"FormBuilder.js","sourceRoot":"","sources":["../src/FormBuilder.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAyC;AAEzC,uCAAsC;AACtC,mDAA+D;AAC/D,6CAAuC;AAEhC,IAAM,WAAW,GAA+B,UAAC,EAAwC;IAAtC,IAAA,QAAQ,cAAA,EAAE,QAAQ,cAAA,EAAE,MAAM,YAAA,EAAK,KAAK,cAAtC,kCAAwC,CAAF;IAClF,IAAA,KAA6B,QAAQ,QAAzB,EAAZ,OAAO,mBAAG,EAAE,KAAA,EAAE,KAAe,QAAQ,MAAb,EAAV,KAAK,mBAAG,EAAE,KAAA,CAAc;IAC9C,IAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CACjC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CACxB,UAAC,EAAK;;YAAF,CAAC,QAAA;QAAM,OAAA,CAAC,CAAC,CAAA,MAAA,CAAC,CAAC,IAAI,CAAC,IAAI,0CAAE,MAAM,CAAA,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,sCAAoB,CAAC,eAAe,CAAA;KAAA,CAChG,CACJ,CAAC;IACF,IAAM,KAAK,GAAG,IAAA,eAAO,EAAC;QAClB,OAAO,wBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;IACtC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACb,OAAO,CACH,8DACK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG;QAC7B,OAAO,CACH,8BAAC,mBAAQ,eACD,KAAK,IACT,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,UAAC,UAAU,EAAE,IAAI;;gBAC3B,IAAM,KAAK,GAAG,IAAA,sBAAS,EAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC;gBAClD,QAAQ,uBAEG,QAAQ,KACX,OAAO,wBACA,OAAO,gBACT,IAAI,IAAG,UAAU,WAG1B,KAAK,CACR,CAAC;YACN,CAAC,EACD,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,GAAG,EAChB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAC3B,QAAQ,EAAE,UAAC,WAAuB;;gBAC9B,IAAM,WAAW,yBACV,QAAQ,KACX,KAAK,wBACE,KAAK,gBACP,GAAG,IAAG,WAAW,SAEzB,CAAC;gBACF,IAAM,KAAK,GAAG,IAAA,sBAAS,EAAC,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC;gBAC9D,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC,EACD,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,IACzB,CACL,CAAC;IACN,CAAC,CAAC,CACH,CACN,CAAC;AACN,CAAC,CAAC;AAnDW,QAAA,WAAW,eAmDtB"}
|
package/lib/FormDisplayer.js
CHANGED
@@ -10,6 +10,29 @@ var __assign = (this && this.__assign) || function () {
|
|
10
10
|
};
|
11
11
|
return __assign.apply(this, arguments);
|
12
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
|
+
};
|
13
36
|
var __rest = (this && this.__rest) || function (s, e) {
|
14
37
|
var t = {};
|
15
38
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
@@ -21,30 +44,30 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
21
44
|
}
|
22
45
|
return t;
|
23
46
|
};
|
24
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
25
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
26
|
-
};
|
27
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
28
48
|
exports.FormDisplayer = void 0;
|
29
49
|
var FormToCode_1 = require("./FormToCode");
|
30
50
|
var renderer_1 = require("./renderer");
|
31
51
|
var graphql_js_tree_1 = require("graphql-js-tree");
|
32
|
-
var react_1 =
|
52
|
+
var react_1 = __importStar(require("react"));
|
33
53
|
var FormDisplayer = function (_a) {
|
34
|
-
var formFile = _a.formFile, onChange = _a.onChange, props = __rest(_a, ["formFile", "onChange"]);
|
54
|
+
var formFile = _a.formFile, onChange = _a.onChange, schema = _a.schema, props = __rest(_a, ["formFile", "onChange", "schema"]);
|
35
55
|
var _b = formFile.widgets, widgets = _b === void 0 ? {} : _b, _c = formFile.forms, forms = _c === void 0 ? {} : _c;
|
36
56
|
var formFields = Object.fromEntries(Object.entries(forms).filter(function (_a) {
|
37
57
|
var _b;
|
38
58
|
var v = _a[1];
|
39
59
|
return !!((_b = v.node.args) === null || _b === void 0 ? void 0 : _b.length) && v.node.data.type === graphql_js_tree_1.TypeSystemDefinition.FieldDefinition;
|
40
60
|
}));
|
61
|
+
var nodes = (0, react_1.useMemo)(function () {
|
62
|
+
return graphql_js_tree_1.Parser.parse(schema).nodes;
|
63
|
+
}, [schema]);
|
41
64
|
return (react_1.default.createElement(react_1.default.Fragment, null, Object.keys(formFields).map(function (key) {
|
42
|
-
return (react_1.default.createElement(renderer_1.Renderer, __assign({}, props, { key: key, widgets: widgets, changeWidget: function () {
|
65
|
+
return (react_1.default.createElement(renderer_1.Renderer, __assign({}, props, { nodes: nodes, key: key, widgets: widgets, changeWidget: function () {
|
43
66
|
return;
|
44
67
|
}, currentPath: key, formObject: formFields[key], onChange: function (changedForm) {
|
45
68
|
var _a;
|
46
69
|
var updatedFile = __assign(__assign({}, formFile), { forms: __assign(__assign({}, forms), (_a = {}, _a[key] = changedForm, _a)) });
|
47
|
-
var query = (0, FormToCode_1.formToGql)({ fields: updatedFile.forms, nodes:
|
70
|
+
var query = (0, FormToCode_1.formToGql)({ fields: updatedFile.forms, nodes: nodes });
|
48
71
|
onChange(updatedFile, query);
|
49
72
|
}, f: formFields[key].node })));
|
50
73
|
})));
|
package/lib/FormDisplayer.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FormDisplayer.js","sourceRoot":"","sources":["../src/FormDisplayer.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"FormDisplayer.js","sourceRoot":"","sources":["../src/FormDisplayer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAyC;AAEzC,uCAAsC;AACtC,mDAA+D;AAC/D,6CAAuC;AAEhC,IAAM,aAAa,GAAiC,UAAC,EAAwC;IAAtC,IAAA,QAAQ,cAAA,EAAE,QAAQ,cAAA,EAAE,MAAM,YAAA,EAAK,KAAK,cAAtC,kCAAwC,CAAF;IACtF,IAAA,KAA6B,QAAQ,QAAzB,EAAZ,OAAO,mBAAG,EAAE,KAAA,EAAE,KAAe,QAAQ,MAAb,EAAV,KAAK,mBAAG,EAAE,KAAA,CAAc;IAC9C,IAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CACjC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CACxB,UAAC,EAAK;;YAAF,CAAC,QAAA;QAAM,OAAA,CAAC,CAAC,CAAA,MAAA,CAAC,CAAC,IAAI,CAAC,IAAI,0CAAE,MAAM,CAAA,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,sCAAoB,CAAC,eAAe,CAAA;KAAA,CAChG,CACJ,CAAC;IACF,IAAM,KAAK,GAAG,IAAA,eAAO,EAAC;QAClB,OAAO,wBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;IACtC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACb,OAAO,CACH,8DACK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG;QAC7B,OAAO,CACH,8BAAC,mBAAQ,eACD,KAAK,IACT,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE;gBACV,OAAO;YACX,CAAC,EACD,WAAW,EAAE,GAAG,EAChB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAC3B,QAAQ,EAAE,UAAC,WAAuB;;gBAC9B,IAAM,WAAW,yBACV,QAAQ,KACX,KAAK,wBACE,KAAK,gBACP,GAAG,IAAG,WAAW,SAEzB,CAAC;gBACF,IAAM,KAAK,GAAG,IAAA,sBAAS,EAAC,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC;gBAC9D,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC,EACD,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,IACzB,CACL,CAAC;IACN,CAAC,CAAC,CACH,CACN,CAAC;AACN,CAAC,CAAC;AAzCW,QAAA,aAAa,iBAyCxB"}
|
package/lib/models.d.ts
CHANGED
@@ -58,12 +58,14 @@ export declare type FormFile = {
|
|
58
58
|
widgets?: SavedWidgets;
|
59
59
|
forms?: SavedForms;
|
60
60
|
};
|
61
|
-
export declare type FormBuilderProps = Omit<PassedFormProps, 'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget' | 'widgets'> & {
|
61
|
+
export declare type FormBuilderProps = Omit<PassedFormProps, 'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget' | 'widgets' | 'nodes'> & {
|
62
62
|
formFile: FormFile;
|
63
|
+
schema: string;
|
63
64
|
onChange: (o: FormFile, query: string) => void;
|
64
65
|
};
|
65
|
-
export declare type FormDisplayerProps = Omit<PassedFormProps, 'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget' | 'widgets'> & {
|
66
|
+
export declare type FormDisplayerProps = Omit<PassedFormProps, 'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget' | 'widgets' | 'nodes'> & {
|
66
67
|
formFile: FormFile;
|
68
|
+
schema: string;
|
67
69
|
onChange: (o: FormFile, query: string) => void;
|
68
70
|
};
|
69
71
|
export declare type FormLibraryProps = Omit<FormDisplayerProps, 'required' | 'components'>;
|
package/lib/outsideUse.d.ts
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
import { Errs, FormFile,
|
2
|
-
import { ParserField } from 'graphql-js-tree';
|
1
|
+
import { Errs, FormFile, FormValue, PassedFormProps } from "./models";
|
3
2
|
export declare const getWidgetFromProps: (props: PassedFormProps) => {
|
4
3
|
data: any;
|
5
4
|
widget: import("./models").WidgetType;
|
6
5
|
} | undefined;
|
7
6
|
export declare const getErrorFromProps: (props: PassedFormProps) => string | undefined;
|
8
|
-
export declare const
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
export declare const graphqlFormUtils: (schema: string) => {
|
8
|
+
eraseForm: (v: FormFile) => FormFile;
|
9
|
+
validateForm: (v: FormFile, errors: Record<Errs, string>) => Record<string, string>;
|
10
|
+
validateValue: (f: FormValue, path: string, pushErrors: (path: string, value: Errs) => void) => void;
|
11
|
+
};
|
package/lib/outsideUse.js
CHANGED
@@ -11,7 +11,7 @@ var __assign = (this && this.__assign) || function () {
|
|
11
11
|
return __assign.apply(this, arguments);
|
12
12
|
};
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
14
|
-
exports.
|
14
|
+
exports.graphqlFormUtils = exports.getErrorFromProps = exports.getWidgetFromProps = void 0;
|
15
15
|
var models_1 = require("./models");
|
16
16
|
var graphql_js_tree_1 = require("graphql-js-tree");
|
17
17
|
var getWidgetFromProps = function (props) {
|
@@ -43,104 +43,107 @@ var getErrorFromProps = function (props) {
|
|
43
43
|
return (_a = props.errors) === null || _a === void 0 ? void 0 : _a[props.currentPath];
|
44
44
|
};
|
45
45
|
exports.getErrorFromProps = getErrorFromProps;
|
46
|
-
var
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
46
|
+
var graphqlFormUtils = function (schema) {
|
47
|
+
var nodes = graphql_js_tree_1.Parser.parse(schema).nodes;
|
48
|
+
var validateValue = function (f, path, pushErrors) {
|
49
|
+
if (f === null ||
|
50
|
+
typeof f === 'string' ||
|
51
|
+
typeof f === 'boolean' ||
|
52
|
+
typeof f === 'number' ||
|
53
|
+
typeof f === 'undefined') {
|
54
|
+
return;
|
55
|
+
}
|
56
|
+
if ('node' in f &&
|
57
|
+
typeof f.node === 'object' &&
|
58
|
+
f.node !== null &&
|
59
|
+
'args' in f.node &&
|
60
|
+
'data' in f.node &&
|
61
|
+
typeof f.node.data === 'object' &&
|
62
|
+
!!f.node.data &&
|
63
|
+
'type' in f.node.data &&
|
64
|
+
'directives' in f.node) {
|
65
|
+
var _a = f, node = _a.node, value = _a.value;
|
66
|
+
console.log("Validating ".concat(node.name), node);
|
67
|
+
if (node.data.type === graphql_js_tree_1.ValueDefinition.InputValueDefinition) {
|
68
|
+
if (node.type.fieldType.type === graphql_js_tree_1.Options.required &&
|
69
|
+
(0, graphql_js_tree_1.getTypeName)(node.type.fieldType) !== graphql_js_tree_1.ScalarTypes.Boolean) {
|
70
|
+
if (typeof value === 'undefined' || value === '') {
|
71
|
+
pushErrors(path, models_1.Errs.REQUIRED);
|
72
|
+
}
|
71
73
|
if (Array.isArray(value)) {
|
72
74
|
for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {
|
73
75
|
var v = value_1[_i];
|
74
|
-
|
75
|
-
|
76
|
-
}
|
76
|
+
console.log(v);
|
77
|
+
validateValue(v, path, pushErrors);
|
77
78
|
}
|
78
79
|
}
|
79
80
|
}
|
80
81
|
}
|
81
82
|
}
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
83
|
+
if ('value' in f && !!f.value) {
|
84
|
+
var value = f.value;
|
85
|
+
if (Array.isArray(value)) {
|
86
|
+
value.map(function (vv) { return validateValue(vv, path, pushErrors); });
|
87
|
+
return;
|
88
|
+
}
|
89
|
+
if (typeof value === 'object' && !!value) {
|
90
|
+
Object.entries(value).forEach(function (_a) {
|
91
|
+
var k = _a[0], v = _a[1];
|
92
|
+
return validateValue(v, "".concat(path, ".").concat(k), pushErrors);
|
93
|
+
});
|
94
|
+
return;
|
95
|
+
}
|
88
96
|
}
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
97
|
+
return;
|
98
|
+
};
|
99
|
+
var validateForm = function (v, errors) {
|
100
|
+
var errorDict = {};
|
101
|
+
if (!v.forms)
|
102
|
+
return errorDict;
|
103
|
+
Object.entries(v.forms).forEach(function (_a) {
|
104
|
+
var k = _a[0], val = _a[1];
|
105
|
+
validateValue(val, k, function (p, err) {
|
106
|
+
errorDict[p] = errors[err];
|
93
107
|
});
|
94
|
-
return;
|
95
|
-
}
|
96
|
-
}
|
97
|
-
return;
|
98
|
-
};
|
99
|
-
exports.validateValue = validateValue;
|
100
|
-
var validateForm = function (v, nodes, errors) {
|
101
|
-
var errorDict = {};
|
102
|
-
if (!v.forms)
|
103
|
-
return errorDict;
|
104
|
-
Object.entries(v.forms).forEach(function (_a) {
|
105
|
-
var k = _a[0], val = _a[1];
|
106
|
-
(0, exports.validateValue)(val, nodes, k, function (p, err) {
|
107
|
-
errorDict[p] = errors[err];
|
108
108
|
});
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
var
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
109
|
+
return errorDict;
|
110
|
+
};
|
111
|
+
var eraseValue = function (f) {
|
112
|
+
var value = f.value, node = f.node;
|
113
|
+
var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(node.type.fieldType); });
|
114
|
+
if (!seekNode ||
|
115
|
+
(seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.EnumTypeDefinition ||
|
116
|
+
(seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.ScalarTypeDefinition) {
|
117
|
+
return __assign(__assign({}, f), { value: undefined });
|
118
|
+
}
|
119
|
+
if ((seekNode || node.data.type === graphql_js_tree_1.TypeSystemDefinition.FieldDefinition) && value) {
|
120
|
+
return __assign(__assign({}, f), { value: Object.fromEntries(Object.entries(value).map(function (_a) {
|
121
|
+
var k = _a[0], v = _a[1];
|
122
|
+
return [k, eraseValue(v)];
|
123
|
+
})) });
|
124
|
+
}
|
119
125
|
return __assign(__assign({}, f), { value: undefined });
|
120
|
-
}
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
}
|
129
|
-
|
130
|
-
var
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
return (__assign(__assign({}, a), (_b = {}, _b[k] = val, _b)));
|
142
|
-
}, {});
|
143
|
-
return __assign(__assign({}, v), { forms: forms });
|
126
|
+
};
|
127
|
+
var eraseForm = function (v) {
|
128
|
+
if (!v.forms)
|
129
|
+
return v;
|
130
|
+
var forms = Object.entries(v.forms)
|
131
|
+
.map(function (_a) {
|
132
|
+
var k = _a[0], val = _a[1];
|
133
|
+
return [k, eraseValue(val)];
|
134
|
+
})
|
135
|
+
.reduce(function (a, _a) {
|
136
|
+
var _b;
|
137
|
+
var k = _a[0], val = _a[1];
|
138
|
+
return (__assign(__assign({}, a), (_b = {}, _b[k] = val, _b)));
|
139
|
+
}, {});
|
140
|
+
return __assign(__assign({}, v), { forms: forms });
|
141
|
+
};
|
142
|
+
return {
|
143
|
+
eraseForm: eraseForm,
|
144
|
+
validateForm: validateForm,
|
145
|
+
validateValue: validateValue,
|
146
|
+
};
|
144
147
|
};
|
145
|
-
exports.
|
148
|
+
exports.graphqlFormUtils = graphqlFormUtils;
|
146
149
|
//# sourceMappingURL=outsideUse.js.map
|
package/lib/outsideUse.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"outsideUse.js","sourceRoot":"","sources":["../src/outsideUse.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,mCAAkF;AAClF,
|
1
|
+
{"version":3,"file":"outsideUse.js","sourceRoot":"","sources":["../src/outsideUse.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/FormBuilder.tsx
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
import { formToGql } from '@/FormToCode';
|
2
2
|
import { FormBuilderProps, FormObject } from '@/models';
|
3
3
|
import { Renderer } from '@/renderer';
|
4
|
-
import { TypeSystemDefinition } from 'graphql-js-tree';
|
5
|
-
import React from 'react';
|
4
|
+
import { Parser, TypeSystemDefinition } from 'graphql-js-tree';
|
5
|
+
import React, { useMemo } from 'react';
|
6
6
|
|
7
|
-
export const FormBuilder: React.FC<FormBuilderProps> = ({ formFile, onChange, ...props }) => {
|
7
|
+
export const FormBuilder: React.FC<FormBuilderProps> = ({ formFile, onChange, schema, ...props }) => {
|
8
8
|
const { widgets = {}, forms = {} } = formFile;
|
9
9
|
const formFields = Object.fromEntries(
|
10
10
|
Object.entries(forms).filter(
|
11
11
|
([, v]) => !!v.node.args?.length && v.node.data.type === TypeSystemDefinition.FieldDefinition,
|
12
12
|
),
|
13
13
|
);
|
14
|
+
const nodes = useMemo(() => {
|
15
|
+
return Parser.parse(schema).nodes;
|
16
|
+
}, [schema]);
|
14
17
|
return (
|
15
18
|
<>
|
16
19
|
{Object.keys(formFields).map((key) => {
|
@@ -18,8 +21,9 @@ export const FormBuilder: React.FC<FormBuilderProps> = ({ formFile, onChange, ..
|
|
18
21
|
<Renderer
|
19
22
|
{...props}
|
20
23
|
key={key}
|
24
|
+
nodes={nodes}
|
21
25
|
changeWidget={(widgetData, path) => {
|
22
|
-
const query = formToGql({ fields: forms, nodes
|
26
|
+
const query = formToGql({ fields: forms, nodes });
|
23
27
|
onChange(
|
24
28
|
{
|
25
29
|
...formFile,
|
@@ -42,7 +46,7 @@ export const FormBuilder: React.FC<FormBuilderProps> = ({ formFile, onChange, ..
|
|
42
46
|
[key]: changedForm,
|
43
47
|
},
|
44
48
|
};
|
45
|
-
const query = formToGql({ fields: updatedFile.forms, nodes
|
49
|
+
const query = formToGql({ fields: updatedFile.forms, nodes });
|
46
50
|
onChange(updatedFile, query);
|
47
51
|
}}
|
48
52
|
f={formFields[key].node}
|
package/src/FormDisplayer.tsx
CHANGED
@@ -1,22 +1,26 @@
|
|
1
1
|
import { formToGql } from '@/FormToCode';
|
2
2
|
import { FormDisplayerProps, FormObject } from '@/models';
|
3
3
|
import { Renderer } from '@/renderer';
|
4
|
-
import { TypeSystemDefinition } from 'graphql-js-tree';
|
5
|
-
import React from 'react';
|
4
|
+
import { Parser, TypeSystemDefinition } from 'graphql-js-tree';
|
5
|
+
import React, { useMemo } from 'react';
|
6
6
|
|
7
|
-
export const FormDisplayer: React.FC<FormDisplayerProps> = ({ formFile, onChange, ...props }) => {
|
7
|
+
export const FormDisplayer: React.FC<FormDisplayerProps> = ({ formFile, onChange, schema, ...props }) => {
|
8
8
|
const { widgets = {}, forms = {} } = formFile;
|
9
9
|
const formFields = Object.fromEntries(
|
10
10
|
Object.entries(forms).filter(
|
11
11
|
([, v]) => !!v.node.args?.length && v.node.data.type === TypeSystemDefinition.FieldDefinition,
|
12
12
|
),
|
13
13
|
);
|
14
|
+
const nodes = useMemo(() => {
|
15
|
+
return Parser.parse(schema).nodes;
|
16
|
+
}, [schema]);
|
14
17
|
return (
|
15
18
|
<>
|
16
19
|
{Object.keys(formFields).map((key) => {
|
17
20
|
return (
|
18
21
|
<Renderer
|
19
22
|
{...props}
|
23
|
+
nodes={nodes}
|
20
24
|
key={key}
|
21
25
|
widgets={widgets}
|
22
26
|
changeWidget={() => {
|
@@ -32,7 +36,7 @@ export const FormDisplayer: React.FC<FormDisplayerProps> = ({ formFile, onChange
|
|
32
36
|
[key]: changedForm,
|
33
37
|
},
|
34
38
|
};
|
35
|
-
const query = formToGql({ fields: updatedFile.forms, nodes
|
39
|
+
const query = formToGql({ fields: updatedFile.forms, nodes });
|
36
40
|
onChange(updatedFile, query);
|
37
41
|
}}
|
38
42
|
f={formFields[key].node}
|
package/src/models.ts
CHANGED
@@ -68,17 +68,19 @@ export type FormFile = {
|
|
68
68
|
|
69
69
|
export type FormBuilderProps = Omit<
|
70
70
|
PassedFormProps,
|
71
|
-
'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget' | 'widgets'
|
71
|
+
'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget' | 'widgets' | 'nodes'
|
72
72
|
> & {
|
73
73
|
formFile: FormFile;
|
74
|
+
schema: string;
|
74
75
|
onChange: (o: FormFile, query: string) => void;
|
75
76
|
};
|
76
77
|
|
77
78
|
export type FormDisplayerProps = Omit<
|
78
79
|
PassedFormProps,
|
79
|
-
'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget' | 'widgets'
|
80
|
+
'formObject' | 'onChange' | 'f' | 'currentPath' | 'changeWidget' | 'widgets' | 'nodes'
|
80
81
|
> & {
|
81
82
|
formFile: FormFile;
|
83
|
+
schema: string;
|
82
84
|
onChange: (o: FormFile, query: string) => void;
|
83
85
|
};
|
84
86
|
|
package/src/outsideUse.tsx
CHANGED
@@ -2,7 +2,8 @@ import { Errs, FormFile, FormObject, FormValue, PassedFormProps } from '@/models
|
|
2
2
|
import {
|
3
3
|
getTypeName,
|
4
4
|
Options,
|
5
|
-
|
5
|
+
Parser,
|
6
|
+
ScalarTypes,
|
6
7
|
TypeDefinition,
|
7
8
|
TypeSystemDefinition,
|
8
9
|
ValueDefinition,
|
@@ -37,121 +38,121 @@ export const getErrorFromProps = (props: PassedFormProps) => {
|
|
37
38
|
return props.errors?.[props.currentPath];
|
38
39
|
};
|
39
40
|
|
40
|
-
export const
|
41
|
-
|
42
|
-
|
43
|
-
path: string,
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
if (node.data.type === ValueDefinition.InputValueDefinition) {
|
68
|
-
if (node.type.fieldType.type === Options.required) {
|
69
|
-
if (!value) {
|
70
|
-
pushErrors(path, Errs.REQUIRED);
|
71
|
-
}
|
41
|
+
export const graphqlFormUtils = (schema: string) => {
|
42
|
+
const nodes = Parser.parse(schema).nodes;
|
43
|
+
|
44
|
+
const validateValue = (f: FormValue, path: string, pushErrors: (path: string, value: Errs) => void) => {
|
45
|
+
if (
|
46
|
+
f === null ||
|
47
|
+
typeof f === 'string' ||
|
48
|
+
typeof f === 'boolean' ||
|
49
|
+
typeof f === 'number' ||
|
50
|
+
typeof f === 'undefined'
|
51
|
+
) {
|
52
|
+
return;
|
53
|
+
}
|
54
|
+
if (
|
55
|
+
'node' in f &&
|
56
|
+
typeof f.node === 'object' &&
|
57
|
+
f.node !== null &&
|
58
|
+
'args' in f.node &&
|
59
|
+
'data' in f.node &&
|
60
|
+
typeof f.node.data === 'object' &&
|
61
|
+
!!f.node.data &&
|
62
|
+
'type' in f.node.data &&
|
63
|
+
'directives' in f.node
|
64
|
+
) {
|
65
|
+
const { node, value } = f as FormObject;
|
66
|
+
console.log(`Validating ${node.name}`, node);
|
67
|
+
if (node.data.type === ValueDefinition.InputValueDefinition) {
|
72
68
|
if (
|
73
|
-
node.type.fieldType.
|
74
|
-
node.type.fieldType
|
69
|
+
node.type.fieldType.type === Options.required &&
|
70
|
+
getTypeName(node.type.fieldType) !== ScalarTypes.Boolean
|
75
71
|
) {
|
72
|
+
if (typeof value === 'undefined' || value === '') {
|
73
|
+
pushErrors(path, Errs.REQUIRED);
|
74
|
+
}
|
76
75
|
if (Array.isArray(value)) {
|
77
76
|
for (const v of value) {
|
78
|
-
|
79
|
-
|
80
|
-
}
|
77
|
+
console.log(v);
|
78
|
+
validateValue(v, path, pushErrors);
|
81
79
|
}
|
82
80
|
}
|
83
81
|
}
|
84
82
|
}
|
85
83
|
}
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
);
|
97
|
-
return;
|
84
|
+
if ('value' in f && !!f.value) {
|
85
|
+
const { value } = f;
|
86
|
+
if (Array.isArray(value)) {
|
87
|
+
value.map((vv) => validateValue(vv, path, pushErrors));
|
88
|
+
return;
|
89
|
+
}
|
90
|
+
if (typeof value === 'object' && !!value) {
|
91
|
+
Object.entries(value).forEach(([k, v]) => validateValue(v as FormObject, `${path}.${k}`, pushErrors));
|
92
|
+
return;
|
93
|
+
}
|
98
94
|
}
|
99
|
-
|
100
|
-
|
101
|
-
};
|
95
|
+
return;
|
96
|
+
};
|
102
97
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
98
|
+
const validateForm = (v: FormFile, errors: Record<Errs, string>) => {
|
99
|
+
const errorDict: Record<string, string> = {};
|
100
|
+
if (!v.forms) return errorDict;
|
101
|
+
Object.entries(v.forms).forEach(([k, val]) => {
|
102
|
+
validateValue(val, k, (p, err) => {
|
103
|
+
errorDict[p] = errors[err];
|
104
|
+
});
|
109
105
|
});
|
110
|
-
|
111
|
-
|
112
|
-
};
|
106
|
+
return errorDict;
|
107
|
+
};
|
113
108
|
|
114
|
-
|
115
|
-
|
109
|
+
const eraseValue = (f: FormObject): FormObject => {
|
110
|
+
const { value, node } = f;
|
116
111
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
112
|
+
const seekNode = nodes.find((n) => n.name === getTypeName(node.type.fieldType));
|
113
|
+
if (
|
114
|
+
!seekNode ||
|
115
|
+
seekNode?.data.type === TypeDefinition.EnumTypeDefinition ||
|
116
|
+
seekNode?.data.type === TypeDefinition.ScalarTypeDefinition
|
117
|
+
) {
|
118
|
+
return {
|
119
|
+
...f,
|
120
|
+
value: undefined,
|
121
|
+
};
|
122
|
+
}
|
123
|
+
if ((seekNode || node.data.type === TypeSystemDefinition.FieldDefinition) && value) {
|
124
|
+
return {
|
125
|
+
...f,
|
126
|
+
value: Object.fromEntries(Object.entries(value).map(([k, v]) => [k, eraseValue(v as FormObject)])),
|
127
|
+
};
|
128
|
+
}
|
123
129
|
return {
|
124
130
|
...f,
|
125
131
|
value: undefined,
|
126
132
|
};
|
127
|
-
}
|
128
|
-
|
133
|
+
};
|
134
|
+
|
135
|
+
const eraseForm = (v: FormFile) => {
|
136
|
+
if (!v.forms) return v;
|
137
|
+
const forms = Object.entries(v.forms)
|
138
|
+
.map(([k, val]) => {
|
139
|
+
return [k, eraseValue(val)] as const;
|
140
|
+
})
|
141
|
+
.reduce(
|
142
|
+
(a, [k, val]) => ({
|
143
|
+
...a,
|
144
|
+
[k]: val,
|
145
|
+
}),
|
146
|
+
{} as FormFile['forms'],
|
147
|
+
);
|
129
148
|
return {
|
130
|
-
...
|
131
|
-
|
149
|
+
...v,
|
150
|
+
forms,
|
132
151
|
};
|
133
|
-
}
|
134
|
-
return {
|
135
|
-
...f,
|
136
|
-
value: undefined,
|
137
152
|
};
|
138
|
-
};
|
139
|
-
|
140
|
-
export const eraseForm = (v: FormFile, nodes: ParserField[]) => {
|
141
|
-
if (!v.forms) return v;
|
142
|
-
const forms = Object.entries(v.forms)
|
143
|
-
.map(([k, val]) => {
|
144
|
-
return [k, eraseValue(val, nodes)] as const;
|
145
|
-
})
|
146
|
-
.reduce(
|
147
|
-
(a, [k, val]) => ({
|
148
|
-
...a,
|
149
|
-
[k]: val,
|
150
|
-
}),
|
151
|
-
{} as FormFile['forms'],
|
152
|
-
);
|
153
153
|
return {
|
154
|
-
|
155
|
-
|
154
|
+
eraseForm,
|
155
|
+
validateForm,
|
156
|
+
validateValue,
|
156
157
|
};
|
157
158
|
};
|