graphql-form 0.0.14 → 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
package/lib/index.d.ts CHANGED
@@ -4,3 +4,4 @@ export * from "./FormDisplayer";
4
4
  export * from "./createWidget";
5
5
  export * from "./renderer";
6
6
  export * from "./FormToCode";
7
+ export * from "./outsideUse";
package/lib/index.js CHANGED
@@ -20,4 +20,5 @@ __exportStar(require("./FormDisplayer"), exports);
20
20
  __exportStar(require("./createWidget"), exports);
21
21
  __exportStar(require("./renderer"), exports);
22
22
  __exportStar(require("./FormToCode"), exports);
23
+ __exportStar(require("./outsideUse"), exports);
23
24
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,gDAA8B;AAC9B,kDAAgC;AAChC,iDAA+B;AAC/B,6CAA2B;AAC3B,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,gDAA8B;AAC9B,kDAAgC;AAChC,iDAA+B;AAC/B,6CAA2B;AAC3B,+CAA6B;AAC7B,+CAA6B"}
package/lib/models.d.ts CHANGED
@@ -12,6 +12,13 @@ export declare type WidgetSavedData = {
12
12
  export declare type SavedWidgets = {
13
13
  [selector: string]: WidgetSavedData | undefined;
14
14
  };
15
+ export declare const enum Errs {
16
+ REQUIRED = "REQUIRED",
17
+ VALUE_IN_ARRAY_REQUIRED = "VALUE_IN_ARRAY_REQUIRED"
18
+ }
19
+ export declare type Errors = {
20
+ [selector: string]: string;
21
+ };
15
22
  export declare type SavedForms = {
16
23
  [selector: string]: FormObject;
17
24
  };
@@ -75,5 +82,6 @@ export declare type FormValue = {
75
82
  } | string | boolean | number | null | undefined | FormObject | Array<FormValue>;
76
83
  export declare type FormObject = {
77
84
  value?: FormValue;
85
+ errors?: string[];
78
86
  node: ParserField;
79
87
  };
package/lib/models.js CHANGED
@@ -1,3 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Errs = void 0;
4
+ var Errs;
5
+ (function (Errs) {
6
+ Errs["REQUIRED"] = "REQUIRED";
7
+ Errs["VALUE_IN_ARRAY_REQUIRED"] = "VALUE_IN_ARRAY_REQUIRED";
8
+ })(Errs = exports.Errs || (exports.Errs = {}));
3
9
  //# sourceMappingURL=models.js.map
package/lib/models.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":";;;AAgBA,IAAkB,IAGjB;AAHD,WAAkB,IAAI;IAClB,6BAAqB,CAAA;IACrB,2DAAmD,CAAA;AACvD,CAAC,EAHiB,IAAI,GAAJ,YAAI,KAAJ,YAAI,QAGrB"}
@@ -0,0 +1,10 @@
1
+ import { Errs, FormFile, FormObject, PassedFormProps } from "./models";
2
+ import { ParserField } from 'graphql-js-tree';
3
+ export declare const getWidgetFromProps: (props: PassedFormProps) => {
4
+ data: any;
5
+ widget: import("./models").WidgetType;
6
+ } | undefined;
7
+ export declare const validateValue: (f: FormObject, nodes: ParserField[], errors: Record<Errs, string>, pushErrors: (isValid: boolean) => void) => FormObject;
8
+ export declare const validateForm: (v: FormFile, nodes: ParserField[], errors: Record<Errs, string>) => readonly [FormFile, true];
9
+ export declare const eraseValue: (f: FormObject, nodes: ParserField[]) => FormObject;
10
+ export declare const eraseForm: (v: FormFile, nodes: ParserField[]) => FormFile;
@@ -0,0 +1,136 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.eraseForm = exports.eraseValue = exports.validateForm = exports.validateValue = exports.getWidgetFromProps = void 0;
15
+ var models_1 = require("./models");
16
+ var graphql_js_tree_1 = require("graphql-js-tree");
17
+ var getWidgetFromProps = function (props) {
18
+ var _a, _b;
19
+ var w = (_a = props.widgets) === null || _a === void 0 ? void 0 : _a[props.currentPath];
20
+ var FoundBasicWidget = props.widgetComponents.find(function (wc) { return wc.name === (w === null || w === void 0 ? void 0 : w.widget); });
21
+ if (!FoundBasicWidget) {
22
+ var widgetVariant_1 = (_b = props.widgetVariants) === null || _b === void 0 ? void 0 : _b.find(function (wv) { return wv.name === (w === null || w === void 0 ? void 0 : w.widget); });
23
+ if (!widgetVariant_1) {
24
+ return;
25
+ }
26
+ var FoundVariantWidget = props.widgetComponents.find(function (wc) { return wc.name === widgetVariant_1.widget; });
27
+ if (!FoundVariantWidget) {
28
+ return;
29
+ }
30
+ return {
31
+ data: __assign({ widget: widgetVariant_1.widget }, widgetVariant_1.data),
32
+ widget: FoundVariantWidget,
33
+ };
34
+ }
35
+ return {
36
+ data: w,
37
+ widget: FoundBasicWidget,
38
+ };
39
+ };
40
+ exports.getWidgetFromProps = getWidgetFromProps;
41
+ var validateValue = function (f, nodes, errors, pushErrors) {
42
+ var value = f.value, node = f.node;
43
+ var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(node.type.fieldType); });
44
+ var errs;
45
+ if ((!seekNode && node.data.type !== graphql_js_tree_1.TypeSystemDefinition.FieldDefinition) ||
46
+ (seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.EnumTypeDefinition ||
47
+ (seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.ScalarTypeDefinition) {
48
+ console.log(f);
49
+ if (node.type.fieldType.type === graphql_js_tree_1.Options.required) {
50
+ if (!value) {
51
+ errs = [errors[models_1.Errs.REQUIRED]];
52
+ }
53
+ if (node.type.fieldType.nest.type === graphql_js_tree_1.Options.array &&
54
+ node.type.fieldType.nest.nest.type === graphql_js_tree_1.Options.required) {
55
+ if (Array.isArray(value)) {
56
+ for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {
57
+ var v = value_1[_i];
58
+ if (!v) {
59
+ errs = [errors[models_1.Errs.VALUE_IN_ARRAY_REQUIRED]];
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }
66
+ pushErrors(!(errs === null || errs === void 0 ? void 0 : errs.length));
67
+ if ((seekNode || node.data.type === graphql_js_tree_1.TypeSystemDefinition.FieldDefinition) && value) {
68
+ return __assign(__assign({}, f), { value: Object.fromEntries(Object.entries(value).map(function (_a) {
69
+ var k = _a[0], v = _a[1];
70
+ return [k, (0, exports.validateValue)(v, nodes, errors, pushErrors)];
71
+ })), errors: errs });
72
+ }
73
+ return __assign(__assign({}, f), { errors: errs });
74
+ };
75
+ exports.validateValue = validateValue;
76
+ var validateForm = function (v, nodes, errors) {
77
+ var isValid = true;
78
+ if (!v.forms)
79
+ return [v, isValid];
80
+ var forms = Object.entries(v.forms)
81
+ .map(function (_a) {
82
+ var k = _a[0], val = _a[1];
83
+ return [
84
+ k,
85
+ (0, exports.validateValue)(val, nodes, errors, function (valid) {
86
+ if (!valid) {
87
+ isValid = valid;
88
+ }
89
+ }),
90
+ ];
91
+ })
92
+ .reduce(function (a, _a) {
93
+ var _b;
94
+ var k = _a[0], val = _a[1];
95
+ return (__assign(__assign({}, a), (_b = {}, _b[k] = val, _b)));
96
+ }, {});
97
+ return [
98
+ __assign(__assign({}, v), { forms: forms }),
99
+ isValid,
100
+ ];
101
+ };
102
+ exports.validateForm = validateForm;
103
+ var eraseValue = function (f, nodes) {
104
+ var value = f.value, node = f.node;
105
+ var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(node.type.fieldType); });
106
+ if (!seekNode ||
107
+ (seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.EnumTypeDefinition ||
108
+ (seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.ScalarTypeDefinition) {
109
+ return __assign(__assign({}, f), { value: undefined });
110
+ }
111
+ if ((seekNode || node.data.type === graphql_js_tree_1.TypeSystemDefinition.FieldDefinition) && value) {
112
+ return __assign(__assign({}, f), { value: Object.fromEntries(Object.entries(value).map(function (_a) {
113
+ var k = _a[0], v = _a[1];
114
+ return [k, (0, exports.eraseValue)(v, nodes)];
115
+ })) });
116
+ }
117
+ return __assign(__assign({}, f), { value: undefined });
118
+ };
119
+ exports.eraseValue = eraseValue;
120
+ var eraseForm = function (v, nodes) {
121
+ if (!v.forms)
122
+ return v;
123
+ var forms = Object.entries(v.forms)
124
+ .map(function (_a) {
125
+ var k = _a[0], val = _a[1];
126
+ return [k, (0, exports.eraseValue)(val, nodes)];
127
+ })
128
+ .reduce(function (a, _a) {
129
+ var _b;
130
+ var k = _a[0], val = _a[1];
131
+ return (__assign(__assign({}, a), (_b = {}, _b[k] = val, _b)));
132
+ }, {});
133
+ return __assign(__assign({}, v), { forms: forms });
134
+ };
135
+ exports.eraseForm = eraseForm;
136
+ //# sourceMappingURL=outsideUse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outsideUse.js","sourceRoot":"","sources":["../src/outsideUse.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,mCAAuE;AACvE,mDAA0G;AAEnG,IAAM,kBAAkB,GAAG,UAAC,KAAsB;;IACrD,IAAM,CAAC,GAAG,MAAA,KAAK,CAAC,OAAO,0CAAG,KAAK,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,IAAI,MAAK,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAA,EAArB,CAAqB,CAAC,CAAC;IACpF,IAAI,CAAC,gBAAgB,EAAE;QACnB,IAAM,eAAa,GAAG,MAAA,KAAK,CAAC,cAAc,0CAAE,IAAI,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,IAAI,MAAK,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAA,EAArB,CAAqB,CAAC,CAAC;QAChF,IAAI,CAAC,eAAa,EAAE;YAChB,OAAO;SACV;QACD,IAAM,kBAAkB,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,IAAI,KAAK,eAAa,CAAC,MAAM,EAAhC,CAAgC,CAAC,CAAC;QACjG,IAAI,CAAC,kBAAkB,EAAE;YACrB,OAAO;SACV;QACD,OAAO;YACH,IAAI,aACA,MAAM,EAAE,eAAa,CAAC,MAAM,IACzB,eAAa,CAAC,IAAI,CACxB;YACD,MAAM,EAAE,kBAAkB;SAC7B,CAAC;KACL;IACD,OAAO;QACH,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,gBAAgB;KAC3B,CAAC;AACN,CAAC,CAAC;AAxBW,QAAA,kBAAkB,sBAwB7B;AAEK,IAAM,aAAa,GAAG,UACzB,CAAa,EACb,KAAoB,EACpB,MAA4B,EAC5B,UAAsC;IAE9B,IAAA,KAAK,GAAW,CAAC,MAAZ,EAAE,IAAI,GAAK,CAAC,KAAN,CAAO;IAE1B,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,KAAK,IAAA,6BAAW,EAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAA3C,CAA2C,CAAC,CAAC;IAChF,IAAI,IAA0B,CAAC;IAC/B,IACI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,sCAAoB,CAAC,eAAe,CAAC;QACtE,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,IAAI,MAAK,gCAAc,CAAC,kBAAkB;QACzD,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,IAAI,MAAK,gCAAc,CAAC,oBAAoB,EAC7D;QACE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,yBAAO,CAAC,QAAQ,EAAE;YAC/C,IAAI,CAAC,KAAK,EAAE;gBACR,IAAI,GAAG,CAAC,MAAM,CAAC,aAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;aAClC;YACD,IACI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,yBAAO,CAAC,KAAK;gBAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,yBAAO,CAAC,QAAQ,EACzD;gBACE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACtB,KAAgB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;wBAAlB,IAAM,CAAC,cAAA;wBACR,IAAI,CAAC,CAAC,EAAE;4BACJ,IAAI,GAAG,CAAC,MAAM,CAAC,aAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;yBACjD;qBACJ;iBACJ;aACJ;SACJ;KACJ;IACD,UAAU,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,CAAC,CAAC;IAC1B,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,sCAAoB,CAAC,eAAe,CAAC,IAAI,KAAK,EAAE;QAChF,6BACO,CAAC,KACJ,KAAK,EAAE,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAC,EAAM;oBAAL,CAAC,QAAA,EAAE,CAAC,QAAA;gBAAM,OAAA,CAAC,CAAC,EAAE,IAAA,qBAAa,EAAC,CAAe,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAA9D,CAA8D,CAAC,CACxG,EACD,MAAM,EAAE,IAAI,IACd;KACL;IACD,6BACO,CAAC,KACJ,MAAM,EAAE,IAAI,IACd;AACN,CAAC,CAAC;AAhDW,QAAA,aAAa,iBAgDxB;AAEK,IAAM,YAAY,GAAG,UAAC,CAAW,EAAE,KAAoB,EAAE,MAA4B;IACxF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,CAAC,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAU,CAAC;IAC3C,IAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;SAChC,GAAG,CAAC,UAAC,EAAQ;YAAP,CAAC,QAAA,EAAE,GAAG,QAAA;QACT,OAAO;YACH,CAAC;YACD,IAAA,qBAAa,EAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAC,KAAK;gBACpC,IAAI,CAAC,KAAK,EAAE;oBACR,OAAO,GAAG,KAAK,CAAC;iBACnB;YACL,CAAC,CAAC;SACI,CAAC;IACf,CAAC,CAAC;SACD,MAAM,CACH,UAAC,CAAC,EAAE,EAAQ;;YAAP,CAAC,QAAA,EAAE,GAAG,QAAA;QAAM,OAAA,uBACV,CAAC,gBACH,CAAC,IAAG,GAAG,OACV;IAHe,CAGf,EACF,EAAuB,CAC1B,CAAC;IACN,OAAO;QACH,sBACO,CAAC,KACJ,KAAK,OAAA,GACI;QACb,OAAO;KACD,CAAC;AACf,CAAC,CAAC;AA5BW,QAAA,YAAY,gBA4BvB;AAEK,IAAM,UAAU,GAAG,UAAC,CAAa,EAAE,KAAoB;IAClD,IAAA,KAAK,GAAW,CAAC,MAAZ,EAAE,IAAI,GAAK,CAAC,KAAN,CAAO;IAE1B,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,KAAK,IAAA,6BAAW,EAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAA3C,CAA2C,CAAC,CAAC;IAChF,IACI,CAAC,QAAQ;QACT,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,IAAI,MAAK,gCAAc,CAAC,kBAAkB;QACzD,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,IAAI,MAAK,gCAAc,CAAC,oBAAoB,EAC7D;QACE,6BACO,CAAC,KACJ,KAAK,EAAE,SAAS,IAClB;KACL;IACD,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,sCAAoB,CAAC,eAAe,CAAC,IAAI,KAAK,EAAE;QAChF,6BACO,CAAC,KACJ,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAC,EAAM;oBAAL,CAAC,QAAA,EAAE,CAAC,QAAA;gBAAM,OAAA,CAAC,CAAC,EAAE,IAAA,kBAAU,EAAC,CAAe,EAAE,KAAK,CAAC,CAAC;YAAvC,CAAuC,CAAC,CAAC,IAC3G;KACL;IACD,6BACO,CAAC,KACJ,KAAK,EAAE,SAAS,IAClB;AACN,CAAC,CAAC;AAxBW,QAAA,UAAU,cAwBrB;AAEK,IAAM,SAAS,GAAG,UAAC,CAAW,EAAE,KAAoB;IACvD,IAAI,CAAC,CAAC,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IACvB,IAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;SAChC,GAAG,CAAC,UAAC,EAAQ;YAAP,CAAC,QAAA,EAAE,GAAG,QAAA;QACT,OAAO,CAAC,CAAC,EAAE,IAAA,kBAAU,EAAC,GAAG,EAAE,KAAK,CAAC,CAAU,CAAC;IAChD,CAAC,CAAC;SACD,MAAM,CACH,UAAC,CAAC,EAAE,EAAQ;;YAAP,CAAC,QAAA,EAAE,GAAG,QAAA;QAAM,OAAA,uBACV,CAAC,gBACH,CAAC,IAAG,GAAG,OACV;IAHe,CAGf,EACF,EAAuB,CAC1B,CAAC;IACN,6BACO,CAAC,KACJ,KAAK,OAAA,IACP;AACN,CAAC,CAAC;AAjBW,QAAA,SAAS,aAiBpB"}
@@ -15,11 +15,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.Fields = void 0;
18
+ var outsideUse_1 = require("../outsideUse");
18
19
  var graphql_js_tree_1 = require("graphql-js-tree");
19
20
  var react_1 = __importDefault(require("react"));
20
21
  var Fields = function (props) {
21
- var _a, _b;
22
- var nodes = props.nodes, widgetComponents = props.widgetComponents, f = props.f, widgets = props.widgets, widgetVariants = props.widgetVariants, _c = props.components, ArrayField = _c.ArrayField, ObjectField = _c.ObjectField;
22
+ var nodes = props.nodes, f = props.f, _a = props.components, ArrayField = _a.ArrayField, ObjectField = _a.ObjectField;
23
23
  var seekNode = nodes.find(function (n) { return n.name === (0, graphql_js_tree_1.getTypeName)(f.type.fieldType); });
24
24
  var isInput = (seekNode === null || seekNode === void 0 ? void 0 : seekNode.data.type) === graphql_js_tree_1.TypeDefinition.InputObjectTypeDefinition;
25
25
  if (f.data.type === graphql_js_tree_1.TypeSystemDefinition.FieldDefinition) {
@@ -31,21 +31,10 @@ var Fields = function (props) {
31
31
  if (isInput) {
32
32
  return react_1.default.createElement(ObjectField, __assign({}, props, { f: seekNode }));
33
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
- var widgetVariant_1 = widgetVariants === null || widgetVariants === void 0 ? void 0 : widgetVariants.find(function (wv) { return wv.name === widget.widget; });
39
- if (!widgetVariant_1) {
40
- return react_1.default.createElement(react_1.default.Fragment, null);
41
- }
42
- var WidgetComponent_1 = (_b = widgetComponents.find(function (wc) { return wc.name === widgetVariant_1.widget; })) === null || _b === void 0 ? void 0 : _b.Component;
43
- if (!WidgetComponent_1) {
44
- return react_1.default.createElement(react_1.default.Fragment, null);
45
- }
46
- return (react_1.default.createElement(WidgetComponent_1, __assign({}, props, { widgetData: __assign({ widget: widgetVariant_1.widget }, widgetVariant_1.data) })));
47
- }
48
- return react_1.default.createElement(WidgetComponent, __assign({}, props, { widgetData: widget }));
34
+ var w = (0, outsideUse_1.getWidgetFromProps)(props);
35
+ if (w) {
36
+ var data = w.data, Component = w.widget.Component;
37
+ return react_1.default.createElement(Component, __assign({}, props, { widgetData: data }));
49
38
  }
50
39
  return react_1.default.createElement(ScalarField, __assign({}, props));
51
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/renderer/fields.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/renderer/fields.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "graphql-form",
3
- "version": "0.0.14",
3
+ "version": "0.0.17",
4
4
  "description": "Easy form creation with GraphQL Editor and React",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
package/src/index.tsx CHANGED
@@ -4,3 +4,4 @@ export * from '@/FormDisplayer';
4
4
  export * from '@/createWidget';
5
5
  export * from '@/renderer';
6
6
  export * from '@/FormToCode';
7
+ export * from '@/outsideUse';
package/src/models.ts CHANGED
@@ -13,6 +13,16 @@ export type WidgetSavedData = {
13
13
  export type SavedWidgets = {
14
14
  [selector: string]: WidgetSavedData | undefined;
15
15
  };
16
+
17
+ export const enum Errs {
18
+ REQUIRED = 'REQUIRED',
19
+ VALUE_IN_ARRAY_REQUIRED = 'VALUE_IN_ARRAY_REQUIRED',
20
+ }
21
+
22
+ export type Errors = {
23
+ [selector: string]: string;
24
+ };
25
+
16
26
  export type SavedForms = {
17
27
  [selector: string]: FormObject;
18
28
  };
@@ -102,5 +112,6 @@ export type FormValue =
102
112
 
103
113
  export type FormObject = {
104
114
  value?: FormValue;
115
+ errors?: string[];
105
116
  node: ParserField;
106
117
  };
@@ -0,0 +1,153 @@
1
+ import { Errs, FormFile, FormObject, PassedFormProps } from '@/models';
2
+ import { getTypeName, Options, ParserField, TypeDefinition, TypeSystemDefinition } from 'graphql-js-tree';
3
+
4
+ export const getWidgetFromProps = (props: PassedFormProps) => {
5
+ const w = props.widgets?.[props.currentPath];
6
+ const FoundBasicWidget = props.widgetComponents.find((wc) => wc.name === w?.widget);
7
+ if (!FoundBasicWidget) {
8
+ const widgetVariant = props.widgetVariants?.find((wv) => wv.name === w?.widget);
9
+ if (!widgetVariant) {
10
+ return;
11
+ }
12
+ const FoundVariantWidget = props.widgetComponents.find((wc) => wc.name === widgetVariant.widget);
13
+ if (!FoundVariantWidget) {
14
+ return;
15
+ }
16
+ return {
17
+ data: {
18
+ widget: widgetVariant.widget,
19
+ ...widgetVariant.data,
20
+ },
21
+ widget: FoundVariantWidget,
22
+ };
23
+ }
24
+ return {
25
+ data: w,
26
+ widget: FoundBasicWidget,
27
+ };
28
+ };
29
+
30
+ export const validateValue = (
31
+ f: FormObject,
32
+ nodes: ParserField[],
33
+ errors: Record<Errs, string>,
34
+ pushErrors: (isValid: boolean) => void,
35
+ ): FormObject => {
36
+ const { value, node } = f;
37
+
38
+ const seekNode = nodes.find((n) => n.name === getTypeName(node.type.fieldType));
39
+ let errs: string[] | undefined;
40
+ if (
41
+ (!seekNode && node.data.type !== TypeSystemDefinition.FieldDefinition) ||
42
+ seekNode?.data.type === TypeDefinition.EnumTypeDefinition ||
43
+ seekNode?.data.type === TypeDefinition.ScalarTypeDefinition
44
+ ) {
45
+ console.log(f);
46
+ if (node.type.fieldType.type === Options.required) {
47
+ if (!value) {
48
+ errs = [errors[Errs.REQUIRED]];
49
+ }
50
+ if (
51
+ node.type.fieldType.nest.type === Options.array &&
52
+ node.type.fieldType.nest.nest.type === Options.required
53
+ ) {
54
+ if (Array.isArray(value)) {
55
+ for (const v of value) {
56
+ if (!v) {
57
+ errs = [errors[Errs.VALUE_IN_ARRAY_REQUIRED]];
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
64
+ pushErrors(!errs?.length);
65
+ if ((seekNode || node.data.type === TypeSystemDefinition.FieldDefinition) && value) {
66
+ return {
67
+ ...f,
68
+ value: Object.fromEntries(
69
+ Object.entries(value).map(([k, v]) => [k, validateValue(v as FormObject, nodes, errors, pushErrors)]),
70
+ ),
71
+ errors: errs,
72
+ };
73
+ }
74
+ return {
75
+ ...f,
76
+ errors: errs,
77
+ };
78
+ };
79
+
80
+ export const validateForm = (v: FormFile, nodes: ParserField[], errors: Record<Errs, string>) => {
81
+ let isValid = true;
82
+ if (!v.forms) return [v, isValid] as const;
83
+ const forms = Object.entries(v.forms)
84
+ .map(([k, val]) => {
85
+ return [
86
+ k,
87
+ validateValue(val, nodes, errors, (valid) => {
88
+ if (!valid) {
89
+ isValid = valid;
90
+ }
91
+ }),
92
+ ] as const;
93
+ })
94
+ .reduce(
95
+ (a, [k, val]) => ({
96
+ ...a,
97
+ [k]: val,
98
+ }),
99
+ {} as FormFile['forms'],
100
+ );
101
+ return [
102
+ {
103
+ ...v,
104
+ forms,
105
+ } as FormFile,
106
+ isValid,
107
+ ] as const;
108
+ };
109
+
110
+ export const eraseValue = (f: FormObject, nodes: ParserField[]): FormObject => {
111
+ const { value, node } = f;
112
+
113
+ const seekNode = nodes.find((n) => n.name === getTypeName(node.type.fieldType));
114
+ if (
115
+ !seekNode ||
116
+ seekNode?.data.type === TypeDefinition.EnumTypeDefinition ||
117
+ seekNode?.data.type === TypeDefinition.ScalarTypeDefinition
118
+ ) {
119
+ return {
120
+ ...f,
121
+ value: undefined,
122
+ };
123
+ }
124
+ if ((seekNode || node.data.type === TypeSystemDefinition.FieldDefinition) && value) {
125
+ return {
126
+ ...f,
127
+ value: Object.fromEntries(Object.entries(value).map(([k, v]) => [k, eraseValue(v as FormObject, nodes)])),
128
+ };
129
+ }
130
+ return {
131
+ ...f,
132
+ value: undefined,
133
+ };
134
+ };
135
+
136
+ export const eraseForm = (v: FormFile, nodes: ParserField[]) => {
137
+ if (!v.forms) return v;
138
+ const forms = Object.entries(v.forms)
139
+ .map(([k, val]) => {
140
+ return [k, eraseValue(val, nodes)] as const;
141
+ })
142
+ .reduce(
143
+ (a, [k, val]) => ({
144
+ ...a,
145
+ [k]: val,
146
+ }),
147
+ {} as FormFile['forms'],
148
+ );
149
+ return {
150
+ ...v,
151
+ forms,
152
+ };
153
+ };
@@ -1,14 +1,12 @@
1
1
  import { PassedFormProps } from '@/models';
2
+ import { getWidgetFromProps } from '@/outsideUse';
2
3
  import { getTypeName, Options, ScalarTypes, TypeDefinition, TypeSystemDefinition } from 'graphql-js-tree';
3
4
  import React from 'react';
4
5
 
5
6
  export const Fields: React.FC<PassedFormProps> = (props) => {
6
7
  const {
7
8
  nodes,
8
- widgetComponents,
9
9
  f,
10
- widgets,
11
- widgetVariants,
12
10
  components: { ArrayField, ObjectField },
13
11
  } = props;
14
12
  const seekNode = nodes.find((n) => n.name === getTypeName(f.type.fieldType));
@@ -22,29 +20,13 @@ export const Fields: React.FC<PassedFormProps> = (props) => {
22
20
  if (isInput) {
23
21
  return <ObjectField {...props} f={seekNode} />;
24
22
  }
25
- const widget = widgets?.[props.currentPath];
26
- if (widget) {
27
- const WidgetComponent = widgetComponents.find((wc) => wc.name === widget.widget)?.Component;
28
- if (!WidgetComponent) {
29
- const widgetVariant = widgetVariants?.find((wv) => wv.name === widget.widget);
30
- if (!widgetVariant) {
31
- return <></>;
32
- }
33
- const WidgetComponent = widgetComponents.find((wc) => wc.name === widgetVariant.widget)?.Component;
34
- if (!WidgetComponent) {
35
- return <></>;
36
- }
37
- return (
38
- <WidgetComponent
39
- {...props}
40
- widgetData={{
41
- widget: widgetVariant.widget,
42
- ...widgetVariant.data,
43
- }}
44
- />
45
- );
46
- }
47
- return <WidgetComponent {...props} widgetData={widget} />;
23
+ const w = getWidgetFromProps(props);
24
+ if (w) {
25
+ const {
26
+ data,
27
+ widget: { Component },
28
+ } = w;
29
+ return <Component {...props} widgetData={data} />;
48
30
  }
49
31
  return <ScalarField {...props} />;
50
32
  };