@danderson00/react-forms 0.0.29 → 0.0.32
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/dist/Form.js +3 -1
- package/dist/submit.js +22 -17
- package/package.json +4 -4
- package/src/Form.js +4 -2
- package/src/submit.js +7 -7
- package/dist/fields.js +0 -70
- package/dist/keyPath.js +0 -36
- package/src/fields.js +0 -26
package/dist/Form.js
CHANGED
|
@@ -101,11 +101,13 @@ var Form = function Form(ContextProvider) {
|
|
|
101
101
|
};
|
|
102
102
|
|
|
103
103
|
var onSubmit = function onSubmit(e, additionalValues) {
|
|
104
|
+
var submitOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
105
|
+
var validate = submitOptions.validate;
|
|
104
106
|
fieldValidators.forEach(function (setFieldValidated) {
|
|
105
107
|
return setFieldValidated();
|
|
106
108
|
});
|
|
107
109
|
|
|
108
|
-
if (form.current.checkValidity() && props.onSubmit) {
|
|
110
|
+
if ((validate === false || form.current.checkValidity()) && props.onSubmit) {
|
|
109
111
|
setError(undefined);
|
|
110
112
|
var interactiveElements = form.current.querySelectorAll('input,button,textarea,select');
|
|
111
113
|
|
package/dist/submit.js
CHANGED
|
@@ -9,7 +9,7 @@ exports["default"] = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
|
|
12
|
-
var _excluded = ["onSubmit", "registerFieldValidator", "setFieldValue", "getFieldValue", "getFieldValues", "valid", "disableInvalid"];
|
|
12
|
+
var _excluded = ["onSubmit", "registerFieldValidator", "setFieldValue", "getFieldValue", "getFieldValues", "valid", "validate", "disableInvalid", "values"];
|
|
13
13
|
|
|
14
14
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
15
|
|
|
@@ -21,10 +21,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
21
21
|
|
|
22
22
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
23
23
|
|
|
24
|
-
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
25
|
-
|
|
26
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
27
|
-
|
|
28
24
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
29
25
|
|
|
30
26
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
@@ -37,9 +33,25 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
|
|
|
37
33
|
|
|
38
34
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
39
35
|
|
|
36
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
37
|
+
|
|
38
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
39
|
+
|
|
40
40
|
var _default = function _default(render) {
|
|
41
41
|
return function Submit(props) {
|
|
42
|
-
if (!props.onSubmit) throw new Error('Button components must be contained within a Form component');
|
|
42
|
+
if (!props.onSubmit) throw new Error('Button components must be contained within a Form component');
|
|
43
|
+
|
|
44
|
+
var onSubmit = props.onSubmit,
|
|
45
|
+
registerFieldValidator = props.registerFieldValidator,
|
|
46
|
+
setFieldValue = props.setFieldValue,
|
|
47
|
+
getFieldValue = props.getFieldValue,
|
|
48
|
+
getFieldValues = props.getFieldValues,
|
|
49
|
+
valid = props.valid,
|
|
50
|
+
validate = props.validate,
|
|
51
|
+
disableInvalid = props.disableInvalid,
|
|
52
|
+
values = props.values,
|
|
53
|
+
propsToPass = _objectWithoutProperties(props, _excluded); // TODO: set executing when form is triggered by enter key
|
|
54
|
+
|
|
43
55
|
|
|
44
56
|
var _useState = (0, _react.useState)(false),
|
|
45
57
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -47,7 +59,9 @@ var _default = function _default(render) {
|
|
|
47
59
|
setExecuting = _useState2[1];
|
|
48
60
|
|
|
49
61
|
var onClick = function onClick(e) {
|
|
50
|
-
var result =
|
|
62
|
+
var result = onSubmit(e, values, {
|
|
63
|
+
validate: validate
|
|
64
|
+
});
|
|
51
65
|
|
|
52
66
|
if (result && result["finally"] && typeof result["finally"] === 'function') {
|
|
53
67
|
setExecuting(true);
|
|
@@ -57,18 +71,9 @@ var _default = function _default(render) {
|
|
|
57
71
|
}
|
|
58
72
|
};
|
|
59
73
|
|
|
60
|
-
var onSubmit = props.onSubmit,
|
|
61
|
-
registerFieldValidator = props.registerFieldValidator,
|
|
62
|
-
setFieldValue = props.setFieldValue,
|
|
63
|
-
getFieldValue = props.getFieldValue,
|
|
64
|
-
getFieldValues = props.getFieldValues,
|
|
65
|
-
valid = props.valid,
|
|
66
|
-
disableInvalid = props.disableInvalid,
|
|
67
|
-
propsToPass = _objectWithoutProperties(props, _excluded);
|
|
68
|
-
|
|
69
74
|
var finalProps = _objectSpread(_objectSpread({}, propsToPass), {}, {
|
|
70
75
|
onClick: onClick,
|
|
71
|
-
disabled: props.disabled || executing ||
|
|
76
|
+
disabled: props.disabled || executing || disableInvalid && !valid
|
|
72
77
|
});
|
|
73
78
|
|
|
74
79
|
return render(finalProps);
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danderson00/react-forms",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.32",
|
|
4
4
|
"description": "Ultra simple, stateless, validated forms for use in React function components",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "src/index.js",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"test": "jest",
|
|
9
9
|
"build": "babel src --out-dir dist",
|
|
10
|
-
"prepare": "babel src --
|
|
10
|
+
"prepare": "babel src --out-dir dist"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"object-path-immutable": "^4.1.1"
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"@babel/preset-env": "^7.4.4",
|
|
22
22
|
"@babel/preset-react": "^7.0.0",
|
|
23
23
|
"@wojtekmaj/enzyme-adapter-react-17": "^0.6.1",
|
|
24
|
-
"babel-jest": "26.6.
|
|
24
|
+
"babel-jest": "26.6.3",
|
|
25
25
|
"enzyme": "^3.9.0",
|
|
26
|
-
"jest": "26.6.
|
|
26
|
+
"jest": "26.6.3",
|
|
27
27
|
"react": "^17.0.2",
|
|
28
28
|
"react-dom": "^17.0.2"
|
|
29
29
|
},
|
package/src/Form.js
CHANGED
|
@@ -27,10 +27,12 @@ const Form = (ContextProvider, additionalContext = {}, ErrorMessage) => (
|
|
|
27
27
|
setValid(form.current.checkValidity())
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
const onSubmit = (e, additionalValues) => {
|
|
30
|
+
const onSubmit = (e, additionalValues, submitOptions = {}) => {
|
|
31
|
+
const { validate } = submitOptions
|
|
32
|
+
|
|
31
33
|
fieldValidators.forEach(setFieldValidated => setFieldValidated())
|
|
32
34
|
|
|
33
|
-
if(form.current.checkValidity() && props.onSubmit) {
|
|
35
|
+
if((validate === false || form.current.checkValidity()) && props.onSubmit) {
|
|
34
36
|
setError(undefined)
|
|
35
37
|
|
|
36
38
|
const interactiveElements = form.current.querySelectorAll('input,button,textarea,select')
|
package/src/submit.js
CHANGED
|
@@ -3,26 +3,26 @@ import React, { useState } from 'react'
|
|
|
3
3
|
export default render => function Submit(props) {
|
|
4
4
|
if(!props.onSubmit) throw new Error('Button components must be contained within a Form component')
|
|
5
5
|
|
|
6
|
+
const {
|
|
7
|
+
onSubmit, registerFieldValidator, setFieldValue, getFieldValue, getFieldValues,
|
|
8
|
+
valid, validate, disableInvalid, values, ...propsToPass
|
|
9
|
+
} = props
|
|
10
|
+
|
|
6
11
|
// TODO: set executing when form is triggered by enter key
|
|
7
12
|
const [executing, setExecuting] = useState(false)
|
|
8
13
|
|
|
9
14
|
const onClick = e => {
|
|
10
|
-
const result =
|
|
15
|
+
const result = onSubmit(e, values, { validate })
|
|
11
16
|
if(result && result.finally && typeof result.finally === 'function') {
|
|
12
17
|
setExecuting(true)
|
|
13
18
|
result.finally(() => setExecuting(false))
|
|
14
19
|
}
|
|
15
20
|
}
|
|
16
21
|
|
|
17
|
-
const {
|
|
18
|
-
onSubmit, registerFieldValidator, setFieldValue, getFieldValue, getFieldValues,
|
|
19
|
-
valid, disableInvalid, ...propsToPass
|
|
20
|
-
} = props
|
|
21
|
-
|
|
22
22
|
const finalProps = {
|
|
23
23
|
...propsToPass,
|
|
24
24
|
onClick,
|
|
25
|
-
disabled: props.disabled || executing || (
|
|
25
|
+
disabled: props.disabled || executing || (disableInvalid && !valid)
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
return render(finalProps)
|
package/dist/fields.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.Text = exports.RadioButton = exports.Radio = exports.Checkbox = void 0;
|
|
7
|
-
|
|
8
|
-
var _react = _interopRequireDefault(require("react"));
|
|
9
|
-
|
|
10
|
-
var _index = require("./index");
|
|
11
|
-
|
|
12
|
-
var _excluded = ["label", "className"],
|
|
13
|
-
_excluded2 = ["values", "labels"];
|
|
14
|
-
|
|
15
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
16
|
-
|
|
17
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
18
|
-
|
|
19
|
-
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
20
|
-
|
|
21
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
22
|
-
|
|
23
|
-
var base = function base(type, render) {
|
|
24
|
-
return function (_ref) {
|
|
25
|
-
var label = _ref.label,
|
|
26
|
-
className = _ref.className,
|
|
27
|
-
inputProps = _objectWithoutProperties(_ref, _excluded);
|
|
28
|
-
|
|
29
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
30
|
-
className: "".concat(type, " ").concat(className)
|
|
31
|
-
}, /*#__PURE__*/_react["default"].createElement("label", null, label), render(inputProps));
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
var Text = base('Text', function (props) {
|
|
36
|
-
return props.multiline ? /*#__PURE__*/_react["default"].createElement(_index.Textarea, props) : /*#__PURE__*/_react["default"].createElement(_index.Input, props);
|
|
37
|
-
});
|
|
38
|
-
exports.Text = Text;
|
|
39
|
-
var Checkbox = base('Checkbox', function (props) {
|
|
40
|
-
return /*#__PURE__*/_react["default"].createElement(_index.Input, _extends({}, props, {
|
|
41
|
-
type: "checkbox"
|
|
42
|
-
}));
|
|
43
|
-
});
|
|
44
|
-
exports.Checkbox = Checkbox;
|
|
45
|
-
var RadioButton = base('RadioButton', function (props) {
|
|
46
|
-
return /*#__PURE__*/_react["default"].createElement(_index.Input, _extends({}, props, {
|
|
47
|
-
type: "radio"
|
|
48
|
-
}));
|
|
49
|
-
});
|
|
50
|
-
exports.RadioButton = RadioButton;
|
|
51
|
-
var Radio = base('Radio', function (_ref2) {
|
|
52
|
-
var values = _ref2.values,
|
|
53
|
-
labels = _ref2.labels,
|
|
54
|
-
props = _objectWithoutProperties(_ref2, _excluded2);
|
|
55
|
-
|
|
56
|
-
return values.map(function (value, index) {
|
|
57
|
-
return /*#__PURE__*/_react["default"].createElement(RadioButton, _extends({}, props, {
|
|
58
|
-
value: value,
|
|
59
|
-
label: labels && labels[index] || value
|
|
60
|
-
}));
|
|
61
|
-
});
|
|
62
|
-
}); //
|
|
63
|
-
// export const Select = base('Select', ({ values, labels, ...props }) =>
|
|
64
|
-
// <Select {...props}>
|
|
65
|
-
// {values.map((value, index) => <option value={value}>{(labels && labels[index]) || value}</option>)}
|
|
66
|
-
// </Select>
|
|
67
|
-
// )
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
exports.Radio = Radio;
|
package/dist/keyPath.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.keyPath = keyPath;
|
|
7
|
-
|
|
8
|
-
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
9
|
-
|
|
10
|
-
function keyPath(path, target) {
|
|
11
|
-
if (!target) return;
|
|
12
|
-
var index = path.indexOf('.');
|
|
13
|
-
return index === -1 ? target[path] : keyPath(path.substring(index + 1), target[path.substring(0, index)]);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
keyPath.set = function (path, target, value) {
|
|
17
|
-
if (!target) return;
|
|
18
|
-
var index = path.indexOf('.');
|
|
19
|
-
|
|
20
|
-
if (index === -1) {
|
|
21
|
-
target[path] = value;
|
|
22
|
-
} else {
|
|
23
|
-
var targetProperty = path.substring(0, index);
|
|
24
|
-
var remainder = path.substring(index + 1);
|
|
25
|
-
var targetObject = target[targetProperty];
|
|
26
|
-
|
|
27
|
-
if (!targetObject || _typeof(targetObject) !== 'object') {
|
|
28
|
-
targetObject = {};
|
|
29
|
-
target[targetProperty] = targetObject;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
keyPath.set(remainder, targetObject, value);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return target;
|
|
36
|
-
};
|
package/src/fields.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { Input, Select, Textarea } from './index'
|
|
3
|
-
|
|
4
|
-
const base = (type, render) => ({ label, className, ...inputProps }) => (
|
|
5
|
-
<div className={`${type} ${className}`}>
|
|
6
|
-
<label>{label}</label>
|
|
7
|
-
{render(inputProps)}
|
|
8
|
-
</div>
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
export const Text = base('Text', props => props.multiline ? <Textarea {...props} /> : <Input {...props} />)
|
|
12
|
-
export const Checkbox = base('Checkbox', props => <Input {...props} type="checkbox" />)
|
|
13
|
-
export const RadioButton = base('RadioButton', props => <Input {...props} type="radio" />)
|
|
14
|
-
|
|
15
|
-
export const Radio = base('Radio', ({ values, labels, ...props }) =>
|
|
16
|
-
values.map((value, index) =>
|
|
17
|
-
<RadioButton {...props} value={value} label={(labels && labels[index]) || value} />
|
|
18
|
-
)
|
|
19
|
-
)
|
|
20
|
-
//
|
|
21
|
-
// export const Select = base('Select', ({ values, labels, ...props }) =>
|
|
22
|
-
// <Select {...props}>
|
|
23
|
-
// {values.map((value, index) => <option value={value}>{(labels && labels[index]) || value}</option>)}
|
|
24
|
-
// </Select>
|
|
25
|
-
// )
|
|
26
|
-
//
|