@nolwenture/formik-jsonschema-form 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +88 -86
- package/src/Form.d.ts +4 -0
- package/src/Form.js +52 -0
- package/src/Form.stories.d.ts +11 -0
- package/src/Form.stories.js +135 -0
- package/src/Form.test.d.ts +1 -0
- package/src/Form.test.js +9 -0
- package/src/FormEditor.d.ts +8 -0
- package/src/FormEditor.js +74 -0
- package/src/FormEditor.stories.d.ts +5 -0
- package/src/FormEditor.stories.js +22 -0
- package/src/_sampleData.d.ts +10 -0
- package/src/_sampleData.js +262 -0
- package/src/fields/AnyField.d.ts +3 -0
- package/src/fields/AnyField.js +34 -0
- package/src/fields/ArrayField.d.ts +3 -0
- package/src/fields/ArrayField.js +119 -0
- package/src/fields/BooleanField.d.ts +3 -0
- package/src/fields/BooleanField.js +22 -0
- package/src/fields/DateField.d.ts +3 -0
- package/src/fields/DateField.js +22 -0
- package/src/fields/NullField.d.ts +3 -0
- package/src/fields/NullField.js +19 -0
- package/src/fields/NumberField.d.ts +3 -0
- package/src/fields/NumberField.js +17 -0
- package/src/fields/ObjectField.d.ts +3 -0
- package/src/fields/ObjectField.js +56 -0
- package/src/fields/SchemaField.d.ts +3 -0
- package/src/fields/SchemaField.js +39 -0
- package/src/fields/StringField.d.ts +3 -0
- package/src/fields/StringField.js +60 -0
- package/src/fields/{index.ts → index.d.ts} +0 -0
- package/src/fields/index.js +9 -0
- package/src/fields/types.d.ts +10 -0
- package/src/fields/types.js +10 -0
- package/src/formEditorSchemas.d.ts +3 -0
- package/src/formEditorSchemas.js +36 -0
- package/src/{index.tsx → index.d.ts} +0 -0
- package/src/index.js +5 -0
- package/src/setupTests.d.ts +1 -0
- package/src/{setupTests.ts → setupTests.js} +0 -0
- package/src/styledComponents.d.ts +26 -0
- package/src/styledComponents.js +89 -0
- package/src/templates/ArrayFieldTemplate.d.ts +3 -0
- package/src/templates/ArrayFieldTemplate.js +27 -0
- package/src/templates/FieldTemplate.d.ts +3 -0
- package/src/templates/FieldTemplate.js +27 -0
- package/src/templates/ObjectFieldTemplate.d.ts +3 -0
- package/src/templates/ObjectFieldTemplate.js +11 -0
- package/src/templates/{index.ts → index.d.ts} +0 -0
- package/src/templates/index.js +3 -0
- package/src/types.d.ts +168 -0
- package/src/types.js +14 -0
- package/src/utils.d.ts +22 -0
- package/src/utils.js +108 -0
- package/.storybook/main.js +0 -13
- package/.storybook/preview.js +0 -9
- package/README.md +0 -46
- package/src/Form.stories.tsx +0 -124
- package/src/Form.test.tsx +0 -10
- package/src/Form.tsx +0 -71
- package/src/FormEditor.stories.tsx +0 -17
- package/src/FormEditor.tsx +0 -53
- package/src/_sampleData.ts +0 -273
- package/src/fields/AnyField.tsx +0 -35
- package/src/fields/ArrayField.tsx +0 -177
- package/src/fields/BooleanField.tsx +0 -23
- package/src/fields/DateField.tsx +0 -20
- package/src/fields/NullField.tsx +0 -12
- package/src/fields/NumberField.tsx +0 -14
- package/src/fields/ObjectField.tsx +0 -68
- package/src/fields/SchemaField.tsx +0 -37
- package/src/fields/StringField.tsx +0 -89
- package/src/fields/types.tsx +0 -10
- package/src/formEditorSchemas.ts +0 -40
- package/src/styledComponents.tsx +0 -107
- package/src/templates/ArrayFieldTemplate.tsx +0 -46
- package/src/templates/FieldTemplate.tsx +0 -46
- package/src/templates/ObjectFieldTemplate.tsx +0 -22
- package/src/types.ts +0 -260
- package/src/utils.ts +0 -124
- package/tsconfig.json +0 -26
package/package.json
CHANGED
|
@@ -1,90 +1,92 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"license": "MIT",
|
|
10
|
-
"repository": {
|
|
11
|
-
"type": "git",
|
|
12
|
-
"url": "git+https://github.com/nolwenture/formik-jsonschema-form.git"
|
|
13
|
-
},
|
|
14
|
-
"bugs": {
|
|
15
|
-
"url": "https://github.com/nolwenture/formik-jsonschema-form/issues"
|
|
16
|
-
},
|
|
17
|
-
"homepage": "https://github.com/nolwenture/formik-jsonschema-form#readme",
|
|
18
|
-
"keywords": [
|
|
19
|
-
"formik",
|
|
20
|
-
"jsonschema"
|
|
21
|
-
],
|
|
22
|
-
"dependencies": {
|
|
23
|
-
"@testing-library/jest-dom": "^5.16.4",
|
|
24
|
-
"@testing-library/react": "^13.3.0",
|
|
25
|
-
"@testing-library/user-event": "^13.5.0",
|
|
26
|
-
"@types/jest": "^27.5.2",
|
|
27
|
-
"@types/node": "^16.11.45",
|
|
28
|
-
"@types/react": "^18.0.15",
|
|
29
|
-
"@types/react-dom": "^18.0.6",
|
|
30
|
-
"@types/styled-components": "^5.1.25",
|
|
31
|
-
"formik": "^2.2.9",
|
|
32
|
-
"json-schema": "^0.4.0",
|
|
33
|
-
"react": "^18.2.0",
|
|
34
|
-
"react-dom": "^18.2.0",
|
|
35
|
-
"react-scripts": "5.0.1",
|
|
36
|
-
"styled-components": "^5.3.5",
|
|
37
|
-
"typescript": "^4.7.4",
|
|
38
|
-
"web-vitals": "^2.1.4"
|
|
39
|
-
},
|
|
40
|
-
"scripts": {
|
|
41
|
-
"start": "react-scripts start",
|
|
42
|
-
"build": "react-scripts build",
|
|
43
|
-
"test": "react-scripts test",
|
|
44
|
-
"eject": "react-scripts eject",
|
|
45
|
-
"storybook": "start-storybook -p 6006",
|
|
46
|
-
"build-storybook": "build-storybook"
|
|
47
|
-
},
|
|
48
|
-
"eslintConfig": {
|
|
49
|
-
"extends": [
|
|
50
|
-
"react-app",
|
|
51
|
-
"react-app/jest"
|
|
2
|
+
"name": "@nolwenture/formik-jsonschema-form",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Formik form generation from json schema",
|
|
5
|
+
"author": "Antti Vikman <antti.vikman@nolwenture.com>",
|
|
6
|
+
"contributors": [
|
|
7
|
+
"Antti Vikman <antti.vikman@nolwenture.com>",
|
|
8
|
+
"Niko Lintunen <niko.lintunen@nolwenture.com>"
|
|
52
9
|
],
|
|
53
|
-
"
|
|
54
|
-
|
|
55
|
-
"
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
"production": [
|
|
66
|
-
">0.2%",
|
|
67
|
-
"not dead",
|
|
68
|
-
"not op_mini all"
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/nolwenture/formik-jsonschema-form.git"
|
|
14
|
+
},
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/nolwenture/formik-jsonschema-form/issues"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://github.com/nolwenture/formik-jsonschema-form#readme",
|
|
19
|
+
"keywords": [
|
|
20
|
+
"formik",
|
|
21
|
+
"jsonschema"
|
|
69
22
|
],
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
"
|
|
89
|
-
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@testing-library/jest-dom": "^5.16.4",
|
|
25
|
+
"@testing-library/react": "^13.3.0",
|
|
26
|
+
"@testing-library/user-event": "^13.5.0",
|
|
27
|
+
"@types/jest": "^27.5.2",
|
|
28
|
+
"@types/node": "^16.11.45",
|
|
29
|
+
"@types/react": "^18.0.15",
|
|
30
|
+
"@types/react-dom": "^18.0.6",
|
|
31
|
+
"@types/styled-components": "^5.1.25",
|
|
32
|
+
"formik": "^2.2.9",
|
|
33
|
+
"json-schema": "^0.4.0",
|
|
34
|
+
"react": "^18.2.0",
|
|
35
|
+
"react-dom": "^18.2.0",
|
|
36
|
+
"react-scripts": "5.0.1",
|
|
37
|
+
"styled-components": "^5.3.5",
|
|
38
|
+
"typescript": "^4.7.4",
|
|
39
|
+
"web-vitals": "^2.1.4"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"start": "react-scripts start",
|
|
43
|
+
"build": "tsc --build",
|
|
44
|
+
"clean": "tsc --build --clean",
|
|
45
|
+
"test": "react-scripts test",
|
|
46
|
+
"eject": "react-scripts eject",
|
|
47
|
+
"storybook": "start-storybook -p 6006",
|
|
48
|
+
"build-storybook": "build-storybook"
|
|
49
|
+
},
|
|
50
|
+
"eslintConfig": {
|
|
51
|
+
"extends": [
|
|
52
|
+
"react-app",
|
|
53
|
+
"react-app/jest"
|
|
54
|
+
],
|
|
55
|
+
"overrides": [
|
|
56
|
+
{
|
|
57
|
+
"files": [
|
|
58
|
+
"**/*.stories.*"
|
|
59
|
+
],
|
|
60
|
+
"rules": {
|
|
61
|
+
"import/no-anonymous-default-export": "off"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"browserslist": {
|
|
67
|
+
"production": [
|
|
68
|
+
">0.2%",
|
|
69
|
+
"not dead",
|
|
70
|
+
"not op_mini all"
|
|
71
|
+
],
|
|
72
|
+
"development": [
|
|
73
|
+
"last 1 chrome version",
|
|
74
|
+
"last 1 firefox version",
|
|
75
|
+
"last 1 safari version"
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
"devDependencies": {
|
|
79
|
+
"@storybook/addon-essentials": "^6.5.15",
|
|
80
|
+
"@storybook/addon-interactions": "^6.5.15",
|
|
81
|
+
"@storybook/addon-links": "^6.5.15",
|
|
82
|
+
"@storybook/builder-webpack5": "^6.5.15",
|
|
83
|
+
"@storybook/manager-webpack5": "^6.5.15",
|
|
84
|
+
"@storybook/node-logger": "^6.5.15",
|
|
85
|
+
"@storybook/preset-create-react-app": "^4.1.2",
|
|
86
|
+
"@storybook/react": "^6.5.15",
|
|
87
|
+
"@storybook/testing-library": "^0.0.13",
|
|
88
|
+
"babel-plugin-named-exports-order": "^0.0.2",
|
|
89
|
+
"prop-types": "^15.8.1",
|
|
90
|
+
"webpack": "^5.73.0"
|
|
91
|
+
}
|
|
90
92
|
}
|
package/src/Form.d.ts
ADDED
package/src/Form.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import React from "react";
|
|
14
|
+
import { useFormikContext } from "formik";
|
|
15
|
+
import * as defaultComponents from "./styledComponents";
|
|
16
|
+
import { warnFromUnsupportedKeys } from "./utils";
|
|
17
|
+
import * as defaultFields from "./fields";
|
|
18
|
+
import * as defaultTemplates from "./templates";
|
|
19
|
+
export var FormRegistry = React.createContext({
|
|
20
|
+
fields: defaultFields,
|
|
21
|
+
templates: defaultTemplates,
|
|
22
|
+
components: defaultComponents,
|
|
23
|
+
definitions: {},
|
|
24
|
+
formContext: {},
|
|
25
|
+
useItemsAsAdditionalItems: false,
|
|
26
|
+
});
|
|
27
|
+
export function Form(props) {
|
|
28
|
+
warnFromUnsupportedKeys("Form", props, [
|
|
29
|
+
"schema",
|
|
30
|
+
"onSubmit",
|
|
31
|
+
"uiSchema",
|
|
32
|
+
"className",
|
|
33
|
+
"formData",
|
|
34
|
+
"className",
|
|
35
|
+
"children",
|
|
36
|
+
"fields",
|
|
37
|
+
"formContext",
|
|
38
|
+
]);
|
|
39
|
+
var isSubmitting = useFormikContext().isSubmitting;
|
|
40
|
+
var schema = props.schema, _a = props.uiSchema, uiSchema = _a === void 0 ? {} : _a, className = props.className, children = props.children, _b = props.fields, fields = _b === void 0 ? {} : _b, _c = props.templates, templates = _c === void 0 ? {} : _c, _d = props.components, components = _d === void 0 ? {} : _d, _e = props.formContext, formContext = _e === void 0 ? {} : _e, _f = props.useItemsAsAdditionalItems, useItemsAsAdditionalItems = _f === void 0 ? false : _f;
|
|
41
|
+
var registry = {
|
|
42
|
+
fields: __assign(__assign({}, defaultFields), fields),
|
|
43
|
+
templates: __assign(__assign({}, defaultTemplates), templates),
|
|
44
|
+
components: __assign(__assign({}, defaultComponents), components),
|
|
45
|
+
definitions: {},
|
|
46
|
+
formContext: formContext,
|
|
47
|
+
useItemsAsAdditionalItems: useItemsAsAdditionalItems,
|
|
48
|
+
};
|
|
49
|
+
var _g = registry.components, FormEl = _g.Form, FormButton = _g.FormButton, FormButtonWrapper = _g.FormButtonWrapper;
|
|
50
|
+
var _SchemaField = registry.fields.SchemaField;
|
|
51
|
+
return (_jsx(FormRegistry.Provider, __assign({ value: registry }, { children: _jsxs(FormEl, __assign({ className: className }, { children: [_jsx(_SchemaField, { name: "", schema: schema, uiSchema: uiSchema }), children ? (children) : (_jsx(FormButtonWrapper, { children: _jsx(FormButton, __assign({ type: "submit", disabled: isSubmitting }, { children: "Send" })) }))] })) })));
|
|
52
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ComponentStory, ComponentMeta } from "@storybook/react";
|
|
3
|
+
import { Form } from "./";
|
|
4
|
+
declare const _default: ComponentMeta<typeof Form>;
|
|
5
|
+
export default _default;
|
|
6
|
+
export declare const Simple: ComponentStory<typeof Form>;
|
|
7
|
+
export declare const WithUiSchema: ComponentStory<typeof Form>;
|
|
8
|
+
export declare const CompleteSchema: ComponentStory<typeof Form>;
|
|
9
|
+
export declare const StrictlyTyped: () => JSX.Element;
|
|
10
|
+
export declare const StylesCustomized: () => JSX.Element;
|
|
11
|
+
export declare const WithGeneratedSchema: ComponentStory<typeof Form>;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
2
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
3
|
+
return cooked;
|
|
4
|
+
};
|
|
5
|
+
var __assign = (this && this.__assign) || function () {
|
|
6
|
+
__assign = Object.assign || function(t) {
|
|
7
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
8
|
+
s = arguments[i];
|
|
9
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
10
|
+
t[p] = s[p];
|
|
11
|
+
}
|
|
12
|
+
return t;
|
|
13
|
+
};
|
|
14
|
+
return __assign.apply(this, arguments);
|
|
15
|
+
};
|
|
16
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
17
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
18
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
19
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
20
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
21
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
22
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
26
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
27
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
28
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
29
|
+
function step(op) {
|
|
30
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
31
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
32
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
33
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
34
|
+
switch (op[0]) {
|
|
35
|
+
case 0: case 1: t = op; break;
|
|
36
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
37
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
38
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
39
|
+
default:
|
|
40
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
41
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
42
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
43
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
44
|
+
if (t[2]) _.ops.pop();
|
|
45
|
+
_.trys.pop(); continue;
|
|
46
|
+
}
|
|
47
|
+
op = body.call(thisArg, _);
|
|
48
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
49
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
53
|
+
import { action } from "@storybook/addon-actions";
|
|
54
|
+
import styled from "styled-components";
|
|
55
|
+
import { Formik, useFormikContext } from "formik";
|
|
56
|
+
import { completeSchema, completeUiSchema, simpleSchema, simpleUiSchema, generatedSchema, } from "./_sampleData";
|
|
57
|
+
import { Form, styledComponents } from "./";
|
|
58
|
+
export default {
|
|
59
|
+
title: "Form",
|
|
60
|
+
component: Form,
|
|
61
|
+
// More on argTypes: https://storybook.js.org/docs/react/api/argtypes
|
|
62
|
+
argTypes: {
|
|
63
|
+
schema: { control: { type: "object" } },
|
|
64
|
+
uiSchema: { control: { type: "object" } },
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
var Template = function (args) { return (_jsx(Formik, __assign({ initialValues: {}, onSubmit: function (values, formikHelpers) { return __awaiter(void 0, void 0, void 0, function () {
|
|
68
|
+
return __generator(this, function (_a) {
|
|
69
|
+
action("onSubmit(_, formHelper)")(formikHelpers);
|
|
70
|
+
action("onSubmit(values)")(values);
|
|
71
|
+
formikHelpers.setSubmitting(false);
|
|
72
|
+
return [2 /*return*/];
|
|
73
|
+
});
|
|
74
|
+
}); } }, { children: _jsx(Form, __assign({}, args)) }))); };
|
|
75
|
+
export var Simple = Template.bind({});
|
|
76
|
+
Simple.args = {
|
|
77
|
+
schema: simpleSchema,
|
|
78
|
+
};
|
|
79
|
+
export var WithUiSchema = Template.bind({});
|
|
80
|
+
WithUiSchema.args = {
|
|
81
|
+
schema: simpleSchema,
|
|
82
|
+
uiSchema: simpleUiSchema,
|
|
83
|
+
};
|
|
84
|
+
export var CompleteSchema = Template.bind({});
|
|
85
|
+
CompleteSchema.args = {
|
|
86
|
+
schema: completeSchema,
|
|
87
|
+
uiSchema: completeUiSchema,
|
|
88
|
+
};
|
|
89
|
+
export var StrictlyTyped = function () {
|
|
90
|
+
return (_jsx(Formik, __assign({ initialValues: { firstName: "", lastName: "" }, onSubmit: function (values, formikHelpers) { return __awaiter(void 0, void 0, void 0, function () {
|
|
91
|
+
return __generator(this, function (_a) {
|
|
92
|
+
action("onSubmit(_, formHelper)")(formikHelpers);
|
|
93
|
+
action("onSubmit(values)")(values);
|
|
94
|
+
formikHelpers.setSubmitting(false);
|
|
95
|
+
return [2 /*return*/];
|
|
96
|
+
});
|
|
97
|
+
}); } }, { children: _jsx(Form, { schema: simpleSchema }) })));
|
|
98
|
+
};
|
|
99
|
+
/*** CUSTOMIZATION ***/
|
|
100
|
+
var CustomizedForm = styled(Form)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", " {\n color: red;\n }\n"], ["\n ", " {\n color: red;\n }\n"])), styledComponents.FieldTitle);
|
|
101
|
+
var CustomizedFieldWrapper = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n outline: 2px solid\n ", ";\n"], ["\n outline: 2px solid\n ", ";\n"])), function (props) { return (props.title === "ABC" ? "blue" : "transparent"); });
|
|
102
|
+
var CustomizedErrorMessage = function (props) {
|
|
103
|
+
var name = props.name;
|
|
104
|
+
var errors = useFormikContext().errors;
|
|
105
|
+
var error = errors[name];
|
|
106
|
+
return error ? _jsx("p", { children: error }) : _jsx("p", { children: "Hurray! No errors" });
|
|
107
|
+
};
|
|
108
|
+
export var StylesCustomized = function () {
|
|
109
|
+
return (_jsx(Formik, __assign({ initialValues: {}, onSubmit: function (values, formikHelpers) { return __awaiter(void 0, void 0, void 0, function () {
|
|
110
|
+
return __generator(this, function (_a) {
|
|
111
|
+
action("onSubmit(_, formHelper)")(formikHelpers);
|
|
112
|
+
action("onSubmit(values)")(values);
|
|
113
|
+
formikHelpers.setSubmitting(false);
|
|
114
|
+
return [2 /*return*/];
|
|
115
|
+
});
|
|
116
|
+
}); } }, { children: _jsx(CustomizedForm, { schema: simpleSchema, uiSchema: {
|
|
117
|
+
firstName: {
|
|
118
|
+
props: {
|
|
119
|
+
wrapper: {
|
|
120
|
+
title: "ABC",
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
}, components: {
|
|
125
|
+
FieldWrapper: CustomizedFieldWrapper,
|
|
126
|
+
ErrorMessage: CustomizedErrorMessage,
|
|
127
|
+
} }) })));
|
|
128
|
+
};
|
|
129
|
+
export var WithGeneratedSchema = Template.bind({});
|
|
130
|
+
WithGeneratedSchema.args = {
|
|
131
|
+
schema: generatedSchema,
|
|
132
|
+
uiSchema: {},
|
|
133
|
+
useItemsAsAdditionalItems: true,
|
|
134
|
+
};
|
|
135
|
+
var templateObject_1, templateObject_2;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/src/Form.test.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import { Form } from "./Form";
|
|
4
|
+
import { simpleSchema } from "./_sampleData";
|
|
5
|
+
test("renders title", function () {
|
|
6
|
+
render(_jsx(Form, { schema: simpleSchema }));
|
|
7
|
+
var titleElement = screen.getByText(/TITLE/i);
|
|
8
|
+
expect(titleElement).toBeInTheDocument();
|
|
9
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { Schema, UiSchema } from "./types";
|
|
3
|
+
export type FormEditorProps = {};
|
|
4
|
+
export type FormEditorValues = {
|
|
5
|
+
schema: Schema;
|
|
6
|
+
uiSchema: UiSchema;
|
|
7
|
+
};
|
|
8
|
+
export declare function FormEditor(props: FormEditorProps): JSX.Element;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
23
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
49
|
+
import { Formik } from "formik";
|
|
50
|
+
import { useEffect, useState } from "react";
|
|
51
|
+
import { Form } from "./Form";
|
|
52
|
+
import * as formEditorSchemas from "./formEditorSchemas";
|
|
53
|
+
export function FormEditor(props) {
|
|
54
|
+
var _this = this;
|
|
55
|
+
var _a = useState({
|
|
56
|
+
schema: {},
|
|
57
|
+
uiSchema: {},
|
|
58
|
+
}), editorGeneratedSchemas = _a[0], setEditorGeneratedSchemas = _a[1];
|
|
59
|
+
useEffect(function () { return console.log(editorGeneratedSchemas); }, [editorGeneratedSchemas]);
|
|
60
|
+
return (_jsxs("div", __assign({ style: { display: "flex", justifyContent: "space-between" } }, { children: [_jsxs("div", { children: [_jsx("h1", { children: "Editor" }), _jsx(Formik, __assign({ initialValues: { schema: {}, uiSchema: {} }, onSubmit: function (values, formikHelpers) { return __awaiter(_this, void 0, void 0, function () {
|
|
61
|
+
return __generator(this, function (_a) {
|
|
62
|
+
setEditorGeneratedSchemas(values);
|
|
63
|
+
formikHelpers.setSubmitting(false);
|
|
64
|
+
return [2 /*return*/];
|
|
65
|
+
});
|
|
66
|
+
}); } }, { children: _jsx(Form, __assign({}, formEditorSchemas)) }))] }), _jsxs("div", { children: [_jsx("h1", { children: "Preview" }), _jsx(Formik, __assign({ initialValues: {}, onSubmit: function (values, formikHelpers) { return __awaiter(_this, void 0, void 0, function () {
|
|
67
|
+
return __generator(this, function (_a) {
|
|
68
|
+
// action("onSubmit(_, formHelper)")(formikHelpers);
|
|
69
|
+
// action("onSubmit(values)")(values);
|
|
70
|
+
formikHelpers.setSubmitting(false);
|
|
71
|
+
return [2 /*return*/];
|
|
72
|
+
});
|
|
73
|
+
}); } }, { children: _jsx(Form, __assign({}, editorGeneratedSchemas)) }))] })] })));
|
|
74
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { FormEditor } from "./FormEditor";
|
|
14
|
+
export default {
|
|
15
|
+
title: "FormEditor",
|
|
16
|
+
component: FormEditor,
|
|
17
|
+
// More on argTypes: https://storybook.js.org/docs/react/api/argtypes
|
|
18
|
+
argTypes: {},
|
|
19
|
+
};
|
|
20
|
+
var Template = function (args) { return (_jsx(FormEditor, __assign({}, args))); };
|
|
21
|
+
export var Default = Template.bind({});
|
|
22
|
+
Default.args = {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Schema, UiSchema } from "./types";
|
|
2
|
+
export type SimpleFormDataType = {
|
|
3
|
+
firstName: string;
|
|
4
|
+
lastName: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const simpleSchema: Schema;
|
|
7
|
+
export declare const simpleUiSchema: UiSchema;
|
|
8
|
+
export declare const completeSchema: Schema;
|
|
9
|
+
export declare const completeUiSchema: UiSchema;
|
|
10
|
+
export declare const generatedSchema: Schema;
|