@commercetools-uikit/field-errors 0.0.0-canary-2021830134526
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/LICENSE +21 -0
- package/README.md +99 -0
- package/dist/commercetools-uikit-field-errors.cjs.d.ts +2 -0
- package/dist/commercetools-uikit-field-errors.cjs.dev.js +131 -0
- package/dist/commercetools-uikit-field-errors.cjs.js +7 -0
- package/dist/commercetools-uikit-field-errors.cjs.prod.js +125 -0
- package/dist/commercetools-uikit-field-errors.esm.js +112 -0
- package/dist/declarations/src/export-types.d.ts +3 -0
- package/dist/declarations/src/field-errors.d.ts +19 -0
- package/dist/declarations/src/index.d.ts +3 -0
- package/dist/declarations/src/messages.d.ts +18 -0
- package/dist/declarations/src/version.d.ts +2 -0
- package/package.json +48 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2019 commercetools GmbH
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
<!-- THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -->
|
|
2
|
+
<!-- This file is created by the `yarn generate-readme` script. -->
|
|
3
|
+
|
|
4
|
+
# FieldErrors
|
|
5
|
+
|
|
6
|
+
## Description
|
|
7
|
+
|
|
8
|
+
Renders errors based on configuration.
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
yarn add @commercetools-uikit/field-errors
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
npm --save install @commercetools-uikit/field-errors
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Additionally install the peer dependencies (if not present)
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
yarn add react react-intl
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
npm --save install react react-intl
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
```jsx
|
|
33
|
+
import FieldErrors from '@commercetools-uikit/field-errors';
|
|
34
|
+
|
|
35
|
+
const Example = () => (
|
|
36
|
+
// This example shows how to handle custom errors on top of the
|
|
37
|
+
// predefined errors of FieldErrors which this component and other
|
|
38
|
+
// Field components use under the hood.
|
|
39
|
+
<FieldErrors
|
|
40
|
+
errors={{
|
|
41
|
+
[FieldErrors.errors.MISSING]: true,
|
|
42
|
+
duplicate: true,
|
|
43
|
+
minLength: true,
|
|
44
|
+
}}
|
|
45
|
+
isVisible={true}
|
|
46
|
+
renderError={(key) => {
|
|
47
|
+
switch (key) {
|
|
48
|
+
case 'duplicate':
|
|
49
|
+
return 'This thing is already in use. It must be unique.';
|
|
50
|
+
default:
|
|
51
|
+
// When null is returned then the default error handling from
|
|
52
|
+
// renderDefaultError will kick in for that error.
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}}
|
|
56
|
+
renderDefaultError={(key) => {
|
|
57
|
+
switch (key) {
|
|
58
|
+
case 'minLength':
|
|
59
|
+
return 'This thing is too short.';
|
|
60
|
+
default:
|
|
61
|
+
// When null is returned then the error handling defined in
|
|
62
|
+
// FieldError itself will kick in
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}}
|
|
66
|
+
/>
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
export default Example;
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Properties
|
|
73
|
+
|
|
74
|
+
| Props | Type | Required | Default | Description |
|
|
75
|
+
| -------------------- | -------------------------------------------------------------- | :------: | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
76
|
+
| `errors` | `Record` | | | List of errors. Only entries with truthy values will count as active errors. |
|
|
77
|
+
| `isVisible` | `boolean` | | | `true` when the error messages should be rendered. Usually you'd pass in a `touched` state of fields. |
|
|
78
|
+
| `renderError` | `Function`<br/>[See signature.](#signature-renderError) | | | Function which gets called with each error key (from the `errors` prop) and may render an error message or return `null` to hand the error handling off to `renderDefaultError`. |
|
|
79
|
+
| `renderDefaultError` | `Function`<br/>[See signature.](#signature-renderDefaultError) | | | Function which gets called with each error key (from the `errors` prop) for which `renderError` returned `null`.
It may render an error message or return `null` to hand the error handling off to `FieldError`s built-in error handling. |
|
|
80
|
+
|
|
81
|
+
## Signatures
|
|
82
|
+
|
|
83
|
+
### Signature `renderError`
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
(key: string, error?: boolean) => ReactNode;
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Signature `renderDefaultError`
|
|
90
|
+
|
|
91
|
+
```ts
|
|
92
|
+
(key: string, error?: boolean) => ReactNode;
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Static properties
|
|
96
|
+
|
|
97
|
+
### `FieldErrors.errorTypes`
|
|
98
|
+
|
|
99
|
+
An enum of known errors which `FieldErrors` can handle itself. You might want to use this while constructing the error object you're passing as the `errors` prop.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
|
|
6
|
+
var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
|
|
7
|
+
var _typeof = require('@babel/runtime-corejs3/helpers/typeof');
|
|
8
|
+
var _pt = require('prop-types');
|
|
9
|
+
var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
|
|
10
|
+
var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
|
|
11
|
+
var _Object$entries = require('@babel/runtime-corejs3/core-js-stable/object/entries');
|
|
12
|
+
var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
|
|
13
|
+
var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
|
|
14
|
+
var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
|
|
15
|
+
var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
|
|
16
|
+
var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
|
|
17
|
+
var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
|
|
18
|
+
var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
|
|
19
|
+
require('react');
|
|
20
|
+
var reactIntl = require('react-intl');
|
|
21
|
+
var messages$1 = require('@commercetools-uikit/messages');
|
|
22
|
+
var jsxRuntime = require('@emotion/react/jsx-runtime');
|
|
23
|
+
|
|
24
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
25
|
+
|
|
26
|
+
var _pt__default = /*#__PURE__*/_interopDefault(_pt);
|
|
27
|
+
var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
|
|
28
|
+
var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
|
|
29
|
+
var _Object$entries__default = /*#__PURE__*/_interopDefault(_Object$entries);
|
|
30
|
+
var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
|
|
31
|
+
var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
|
|
32
|
+
var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
|
|
33
|
+
var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
|
|
34
|
+
var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
|
|
35
|
+
var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
|
|
36
|
+
var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
|
|
37
|
+
|
|
38
|
+
var messages = reactIntl.defineMessages({
|
|
39
|
+
missingRequiredField: {
|
|
40
|
+
id: 'UIKit.FieldErrors.missingRequiredField',
|
|
41
|
+
description: 'Error message for missing required value',
|
|
42
|
+
defaultMessage: 'This field is required. Provide a value.'
|
|
43
|
+
},
|
|
44
|
+
invalidNegativeNumber: {
|
|
45
|
+
id: 'UIKit.FieldErrors.invalidNegativeNumber',
|
|
46
|
+
description: 'Error message when negative number is used',
|
|
47
|
+
defaultMessage: 'Negative number is not supported.'
|
|
48
|
+
},
|
|
49
|
+
invalidFractionalNumber: {
|
|
50
|
+
id: 'UIKit.FieldErrors.invalidFractionalNumber',
|
|
51
|
+
description: 'Error message when fractional number is used',
|
|
52
|
+
defaultMessage: 'A whole number is required.'
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) { symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
57
|
+
|
|
58
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context3; _forEachInstanceProperty__default['default'](_context3 = ownKeys(Object(source), true)).call(_context3, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context4; _forEachInstanceProperty__default['default'](_context4 = ownKeys(Object(source))).call(_context4, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
|
|
59
|
+
|
|
60
|
+
var isObject = function isObject(obj) {
|
|
61
|
+
return _typeof(obj) === 'object';
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
var FieldErrors = function FieldErrors(props) {
|
|
65
|
+
var _context, _context2;
|
|
66
|
+
|
|
67
|
+
if (!props.isVisible) return null;
|
|
68
|
+
if (!props.errors || !isObject(props.errors)) return null;
|
|
69
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
70
|
+
children: _mapInstanceProperty__default['default'](_context = _filterInstanceProperty__default['default'](_context2 = _Object$entries__default['default'](props.errors) // Only render errors which have truthy values, to avoid
|
|
71
|
+
// rendering an error for, e.g. { missing: false }
|
|
72
|
+
).call(_context2, function (_ref) {
|
|
73
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
74
|
+
error = _ref2[1];
|
|
75
|
+
|
|
76
|
+
return error;
|
|
77
|
+
})).call(_context, function (_ref3) {
|
|
78
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
79
|
+
key = _ref4[0],
|
|
80
|
+
error = _ref4[1];
|
|
81
|
+
|
|
82
|
+
// We might not use a custom error renderer, so we fall back to null
|
|
83
|
+
// to enable the default errors to kick in
|
|
84
|
+
var errorElement = props.renderError ? props.renderError(key, error) : null; // Render a custom error if one was provided.
|
|
85
|
+
// Custom errors take precedence over the default errors
|
|
86
|
+
|
|
87
|
+
if (errorElement) return jsxRuntime.jsx(messages$1.ErrorMessage, {
|
|
88
|
+
children: errorElement
|
|
89
|
+
}, key);
|
|
90
|
+
var defaultErrorElement = props.renderDefaultError ? props.renderDefaultError(key, error) : null; // Render a default error if one was provided.
|
|
91
|
+
// Default errors take precedence over the known errors
|
|
92
|
+
|
|
93
|
+
if (defaultErrorElement) return jsxRuntime.jsx(messages$1.ErrorMessage, {
|
|
94
|
+
children: defaultErrorElement
|
|
95
|
+
}, key); // Try to see if we know this error and render that error instead then
|
|
96
|
+
|
|
97
|
+
if (key === FieldErrors.errorTypes.MISSING) return jsxRuntime.jsx(messages$1.ErrorMessage, {
|
|
98
|
+
children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.missingRequiredField))
|
|
99
|
+
}, key);
|
|
100
|
+
if (key === FieldErrors.errorTypes.NEGATIVE) return jsxRuntime.jsx(messages$1.ErrorMessage, {
|
|
101
|
+
children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.invalidNegativeNumber))
|
|
102
|
+
}, key);
|
|
103
|
+
if (key === FieldErrors.errorTypes.FRACTIONS) return jsxRuntime.jsx(messages$1.ErrorMessage, {
|
|
104
|
+
children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.invalidFractionalNumber))
|
|
105
|
+
}, key); // Render nothing in case the error is not known and no custom error
|
|
106
|
+
// was returned
|
|
107
|
+
|
|
108
|
+
return null;
|
|
109
|
+
})
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
FieldErrors.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
114
|
+
errors: _pt__default['default'].objectOf(_pt__default['default'].bool),
|
|
115
|
+
isVisible: _pt__default['default'].bool,
|
|
116
|
+
renderError: _pt__default['default'].func,
|
|
117
|
+
renderDefaultError: _pt__default['default'].func
|
|
118
|
+
} : {};
|
|
119
|
+
FieldErrors.displayName = 'FieldErrors';
|
|
120
|
+
FieldErrors.errorTypes = {
|
|
121
|
+
MISSING: 'missing',
|
|
122
|
+
NEGATIVE: 'negative',
|
|
123
|
+
FRACTIONS: 'fractions'
|
|
124
|
+
};
|
|
125
|
+
var FieldErrors$1 = FieldErrors;
|
|
126
|
+
|
|
127
|
+
// NOTE: This string will be replaced in the `prepare` script by the `scripts/version.js` file.
|
|
128
|
+
var version = '0.0.0-canary-2021830134526';
|
|
129
|
+
|
|
130
|
+
exports['default'] = FieldErrors$1;
|
|
131
|
+
exports.version = version;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
|
|
6
|
+
var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
|
|
7
|
+
var _typeof = require('@babel/runtime-corejs3/helpers/typeof');
|
|
8
|
+
require('prop-types');
|
|
9
|
+
var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
|
|
10
|
+
var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
|
|
11
|
+
var _Object$entries = require('@babel/runtime-corejs3/core-js-stable/object/entries');
|
|
12
|
+
var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
|
|
13
|
+
var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
|
|
14
|
+
var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
|
|
15
|
+
var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
|
|
16
|
+
var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
|
|
17
|
+
var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
|
|
18
|
+
var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
|
|
19
|
+
require('react');
|
|
20
|
+
var reactIntl = require('react-intl');
|
|
21
|
+
var messages$1 = require('@commercetools-uikit/messages');
|
|
22
|
+
var jsxRuntime = require('@emotion/react/jsx-runtime');
|
|
23
|
+
|
|
24
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
|
|
25
|
+
|
|
26
|
+
var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
|
|
27
|
+
var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
|
|
28
|
+
var _Object$entries__default = /*#__PURE__*/_interopDefault(_Object$entries);
|
|
29
|
+
var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
|
|
30
|
+
var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
|
|
31
|
+
var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
|
|
32
|
+
var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
|
|
33
|
+
var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
|
|
34
|
+
var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
|
|
35
|
+
var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
|
|
36
|
+
|
|
37
|
+
var messages = reactIntl.defineMessages({
|
|
38
|
+
missingRequiredField: {
|
|
39
|
+
id: 'UIKit.FieldErrors.missingRequiredField',
|
|
40
|
+
description: 'Error message for missing required value',
|
|
41
|
+
defaultMessage: 'This field is required. Provide a value.'
|
|
42
|
+
},
|
|
43
|
+
invalidNegativeNumber: {
|
|
44
|
+
id: 'UIKit.FieldErrors.invalidNegativeNumber',
|
|
45
|
+
description: 'Error message when negative number is used',
|
|
46
|
+
defaultMessage: 'Negative number is not supported.'
|
|
47
|
+
},
|
|
48
|
+
invalidFractionalNumber: {
|
|
49
|
+
id: 'UIKit.FieldErrors.invalidFractionalNumber',
|
|
50
|
+
description: 'Error message when fractional number is used',
|
|
51
|
+
defaultMessage: 'A whole number is required.'
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) { symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
56
|
+
|
|
57
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context3; _forEachInstanceProperty__default['default'](_context3 = ownKeys(Object(source), true)).call(_context3, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context4; _forEachInstanceProperty__default['default'](_context4 = ownKeys(Object(source))).call(_context4, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
|
|
58
|
+
|
|
59
|
+
var isObject = function isObject(obj) {
|
|
60
|
+
return _typeof(obj) === 'object';
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
var FieldErrors = function FieldErrors(props) {
|
|
64
|
+
var _context, _context2;
|
|
65
|
+
|
|
66
|
+
if (!props.isVisible) return null;
|
|
67
|
+
if (!props.errors || !isObject(props.errors)) return null;
|
|
68
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
69
|
+
children: _mapInstanceProperty__default['default'](_context = _filterInstanceProperty__default['default'](_context2 = _Object$entries__default['default'](props.errors) // Only render errors which have truthy values, to avoid
|
|
70
|
+
// rendering an error for, e.g. { missing: false }
|
|
71
|
+
).call(_context2, function (_ref) {
|
|
72
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
73
|
+
error = _ref2[1];
|
|
74
|
+
|
|
75
|
+
return error;
|
|
76
|
+
})).call(_context, function (_ref3) {
|
|
77
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
78
|
+
key = _ref4[0],
|
|
79
|
+
error = _ref4[1];
|
|
80
|
+
|
|
81
|
+
// We might not use a custom error renderer, so we fall back to null
|
|
82
|
+
// to enable the default errors to kick in
|
|
83
|
+
var errorElement = props.renderError ? props.renderError(key, error) : null; // Render a custom error if one was provided.
|
|
84
|
+
// Custom errors take precedence over the default errors
|
|
85
|
+
|
|
86
|
+
if (errorElement) return jsxRuntime.jsx(messages$1.ErrorMessage, {
|
|
87
|
+
children: errorElement
|
|
88
|
+
}, key);
|
|
89
|
+
var defaultErrorElement = props.renderDefaultError ? props.renderDefaultError(key, error) : null; // Render a default error if one was provided.
|
|
90
|
+
// Default errors take precedence over the known errors
|
|
91
|
+
|
|
92
|
+
if (defaultErrorElement) return jsxRuntime.jsx(messages$1.ErrorMessage, {
|
|
93
|
+
children: defaultErrorElement
|
|
94
|
+
}, key); // Try to see if we know this error and render that error instead then
|
|
95
|
+
|
|
96
|
+
if (key === FieldErrors.errorTypes.MISSING) return jsxRuntime.jsx(messages$1.ErrorMessage, {
|
|
97
|
+
children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.missingRequiredField))
|
|
98
|
+
}, key);
|
|
99
|
+
if (key === FieldErrors.errorTypes.NEGATIVE) return jsxRuntime.jsx(messages$1.ErrorMessage, {
|
|
100
|
+
children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.invalidNegativeNumber))
|
|
101
|
+
}, key);
|
|
102
|
+
if (key === FieldErrors.errorTypes.FRACTIONS) return jsxRuntime.jsx(messages$1.ErrorMessage, {
|
|
103
|
+
children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.invalidFractionalNumber))
|
|
104
|
+
}, key); // Render nothing in case the error is not known and no custom error
|
|
105
|
+
// was returned
|
|
106
|
+
|
|
107
|
+
return null;
|
|
108
|
+
})
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
FieldErrors.propTypes = {};
|
|
113
|
+
FieldErrors.displayName = 'FieldErrors';
|
|
114
|
+
FieldErrors.errorTypes = {
|
|
115
|
+
MISSING: 'missing',
|
|
116
|
+
NEGATIVE: 'negative',
|
|
117
|
+
FRACTIONS: 'fractions'
|
|
118
|
+
};
|
|
119
|
+
var FieldErrors$1 = FieldErrors;
|
|
120
|
+
|
|
121
|
+
// NOTE: This string will be replaced in the `prepare` script by the `scripts/version.js` file.
|
|
122
|
+
var version = '0.0.0-canary-2021830134526';
|
|
123
|
+
|
|
124
|
+
exports['default'] = FieldErrors$1;
|
|
125
|
+
exports.version = version;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime-corejs3/helpers/esm/defineProperty';
|
|
2
|
+
import _slicedToArray from '@babel/runtime-corejs3/helpers/esm/slicedToArray';
|
|
3
|
+
import _typeof from '@babel/runtime-corejs3/helpers/esm/typeof';
|
|
4
|
+
import _pt from 'prop-types';
|
|
5
|
+
import _mapInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/map';
|
|
6
|
+
import _filterInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/filter';
|
|
7
|
+
import _Object$entries from '@babel/runtime-corejs3/core-js-stable/object/entries';
|
|
8
|
+
import _Object$keys from '@babel/runtime-corejs3/core-js-stable/object/keys';
|
|
9
|
+
import _Object$getOwnPropertySymbols from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols';
|
|
10
|
+
import _Object$getOwnPropertyDescriptor from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor';
|
|
11
|
+
import _forEachInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/for-each';
|
|
12
|
+
import _Object$getOwnPropertyDescriptors from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors';
|
|
13
|
+
import _Object$defineProperties from '@babel/runtime-corejs3/core-js-stable/object/define-properties';
|
|
14
|
+
import _Object$defineProperty from '@babel/runtime-corejs3/core-js-stable/object/define-property';
|
|
15
|
+
import 'react';
|
|
16
|
+
import { defineMessages, FormattedMessage } from 'react-intl';
|
|
17
|
+
import { ErrorMessage } from '@commercetools-uikit/messages';
|
|
18
|
+
import { jsx, Fragment } from '@emotion/react/jsx-runtime';
|
|
19
|
+
|
|
20
|
+
var messages = defineMessages({
|
|
21
|
+
missingRequiredField: {
|
|
22
|
+
id: 'UIKit.FieldErrors.missingRequiredField',
|
|
23
|
+
description: 'Error message for missing required value',
|
|
24
|
+
defaultMessage: 'This field is required. Provide a value.'
|
|
25
|
+
},
|
|
26
|
+
invalidNegativeNumber: {
|
|
27
|
+
id: 'UIKit.FieldErrors.invalidNegativeNumber',
|
|
28
|
+
description: 'Error message when negative number is used',
|
|
29
|
+
defaultMessage: 'Negative number is not supported.'
|
|
30
|
+
},
|
|
31
|
+
invalidFractionalNumber: {
|
|
32
|
+
id: 'UIKit.FieldErrors.invalidFractionalNumber',
|
|
33
|
+
description: 'Error message when fractional number is used',
|
|
34
|
+
defaultMessage: 'A whole number is required.'
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) { symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
39
|
+
|
|
40
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context3; _forEachInstanceProperty(_context3 = ownKeys(Object(source), true)).call(_context3, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { var _context4; _forEachInstanceProperty(_context4 = ownKeys(Object(source))).call(_context4, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
41
|
+
|
|
42
|
+
var isObject = function isObject(obj) {
|
|
43
|
+
return _typeof(obj) === 'object';
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
var FieldErrors = function FieldErrors(props) {
|
|
47
|
+
var _context, _context2;
|
|
48
|
+
|
|
49
|
+
if (!props.isVisible) return null;
|
|
50
|
+
if (!props.errors || !isObject(props.errors)) return null;
|
|
51
|
+
return jsx(Fragment, {
|
|
52
|
+
children: _mapInstanceProperty(_context = _filterInstanceProperty(_context2 = _Object$entries(props.errors) // Only render errors which have truthy values, to avoid
|
|
53
|
+
// rendering an error for, e.g. { missing: false }
|
|
54
|
+
).call(_context2, function (_ref) {
|
|
55
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
56
|
+
error = _ref2[1];
|
|
57
|
+
|
|
58
|
+
return error;
|
|
59
|
+
})).call(_context, function (_ref3) {
|
|
60
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
61
|
+
key = _ref4[0],
|
|
62
|
+
error = _ref4[1];
|
|
63
|
+
|
|
64
|
+
// We might not use a custom error renderer, so we fall back to null
|
|
65
|
+
// to enable the default errors to kick in
|
|
66
|
+
var errorElement = props.renderError ? props.renderError(key, error) : null; // Render a custom error if one was provided.
|
|
67
|
+
// Custom errors take precedence over the default errors
|
|
68
|
+
|
|
69
|
+
if (errorElement) return jsx(ErrorMessage, {
|
|
70
|
+
children: errorElement
|
|
71
|
+
}, key);
|
|
72
|
+
var defaultErrorElement = props.renderDefaultError ? props.renderDefaultError(key, error) : null; // Render a default error if one was provided.
|
|
73
|
+
// Default errors take precedence over the known errors
|
|
74
|
+
|
|
75
|
+
if (defaultErrorElement) return jsx(ErrorMessage, {
|
|
76
|
+
children: defaultErrorElement
|
|
77
|
+
}, key); // Try to see if we know this error and render that error instead then
|
|
78
|
+
|
|
79
|
+
if (key === FieldErrors.errorTypes.MISSING) return jsx(ErrorMessage, {
|
|
80
|
+
children: jsx(FormattedMessage, _objectSpread({}, messages.missingRequiredField))
|
|
81
|
+
}, key);
|
|
82
|
+
if (key === FieldErrors.errorTypes.NEGATIVE) return jsx(ErrorMessage, {
|
|
83
|
+
children: jsx(FormattedMessage, _objectSpread({}, messages.invalidNegativeNumber))
|
|
84
|
+
}, key);
|
|
85
|
+
if (key === FieldErrors.errorTypes.FRACTIONS) return jsx(ErrorMessage, {
|
|
86
|
+
children: jsx(FormattedMessage, _objectSpread({}, messages.invalidFractionalNumber))
|
|
87
|
+
}, key); // Render nothing in case the error is not known and no custom error
|
|
88
|
+
// was returned
|
|
89
|
+
|
|
90
|
+
return null;
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
FieldErrors.propTypes = process.env.NODE_ENV !== "production" ? {
|
|
96
|
+
errors: _pt.objectOf(_pt.bool),
|
|
97
|
+
isVisible: _pt.bool,
|
|
98
|
+
renderError: _pt.func,
|
|
99
|
+
renderDefaultError: _pt.func
|
|
100
|
+
} : {};
|
|
101
|
+
FieldErrors.displayName = 'FieldErrors';
|
|
102
|
+
FieldErrors.errorTypes = {
|
|
103
|
+
MISSING: 'missing',
|
|
104
|
+
NEGATIVE: 'negative',
|
|
105
|
+
FRACTIONS: 'fractions'
|
|
106
|
+
};
|
|
107
|
+
var FieldErrors$1 = FieldErrors;
|
|
108
|
+
|
|
109
|
+
// NOTE: This string will be replaced in the `prepare` script by the `scripts/version.js` file.
|
|
110
|
+
var version = '0.0.0-canary-2021830134526';
|
|
111
|
+
|
|
112
|
+
export { FieldErrors$1 as default, version };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
declare type TErrorRenderer = (key: string, error?: boolean) => ReactNode;
|
|
3
|
+
export declare type TFieldErrors = Record<string, boolean>;
|
|
4
|
+
export declare type TFieldErrorsProps = {
|
|
5
|
+
errors?: TFieldErrors;
|
|
6
|
+
isVisible?: boolean;
|
|
7
|
+
renderError?: TErrorRenderer;
|
|
8
|
+
renderDefaultError?: TErrorRenderer;
|
|
9
|
+
};
|
|
10
|
+
declare const FieldErrors: {
|
|
11
|
+
(props: TFieldErrorsProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
|
|
12
|
+
displayName: string;
|
|
13
|
+
errorTypes: {
|
|
14
|
+
MISSING: string;
|
|
15
|
+
NEGATIVE: string;
|
|
16
|
+
FRACTIONS: string;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export default FieldErrors;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
missingRequiredField: {
|
|
3
|
+
id: string;
|
|
4
|
+
description: string;
|
|
5
|
+
defaultMessage: string;
|
|
6
|
+
};
|
|
7
|
+
invalidNegativeNumber: {
|
|
8
|
+
id: string;
|
|
9
|
+
description: string;
|
|
10
|
+
defaultMessage: string;
|
|
11
|
+
};
|
|
12
|
+
invalidFractionalNumber: {
|
|
13
|
+
id: string;
|
|
14
|
+
description: string;
|
|
15
|
+
defaultMessage: string;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export default _default;
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@commercetools-uikit/field-errors",
|
|
3
|
+
"description": "Renders errors based on configuration.",
|
|
4
|
+
"version": "0.0.0-canary-2021830134526",
|
|
5
|
+
"bugs": "https://github.com/commercetools/ui-kit/issues",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/commercetools/ui-kit.git",
|
|
9
|
+
"directory": "packages/components/field-errors"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://uikit.commercetools.com",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"javascript",
|
|
14
|
+
"design system",
|
|
15
|
+
"react",
|
|
16
|
+
"uikit"
|
|
17
|
+
],
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"private": false,
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public"
|
|
22
|
+
},
|
|
23
|
+
"sideEffects": false,
|
|
24
|
+
"main": "dist/commercetools-uikit-field-errors.cjs.js",
|
|
25
|
+
"module": "dist/commercetools-uikit-field-errors.esm.js",
|
|
26
|
+
"files": [
|
|
27
|
+
"dist"
|
|
28
|
+
],
|
|
29
|
+
"scripts": {
|
|
30
|
+
"prepare": "../../../scripts/version.js replace"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@babel/runtime": "7.14.8",
|
|
34
|
+
"@babel/runtime-corejs3": "7.14.9",
|
|
35
|
+
"@commercetools-uikit/messages": "0.0.0-canary-2021830134526",
|
|
36
|
+
"@emotion/react": "^11.4.0",
|
|
37
|
+
"@emotion/styled": "^11.3.0",
|
|
38
|
+
"prop-types": "15.7.2"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"react": "17.0.2",
|
|
42
|
+
"react-intl": "5.20.7"
|
|
43
|
+
},
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"react": "17.x",
|
|
46
|
+
"react-intl": "5.x"
|
|
47
|
+
}
|
|
48
|
+
}
|