@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 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`.&#xA;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,2 @@
1
+ export * from "./declarations/src/index";
2
+ export { default } from "./declarations/src/index";
@@ -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,7 @@
1
+ 'use strict';
2
+
3
+ if (process.env.NODE_ENV === "production") {
4
+ module.exports = require("./commercetools-uikit-field-errors.cjs.prod.js");
5
+ } else {
6
+ module.exports = require("./commercetools-uikit-field-errors.cjs.dev.js");
7
+ }
@@ -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,3 @@
1
+ import type { TFieldErrorsProps as FieldErrorsProps, TFieldErrors as FieldErrors } from './field-errors';
2
+ export declare type TFieldErrorsProps = FieldErrorsProps;
3
+ export declare type TFieldErrors = FieldErrors;
@@ -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,3 @@
1
+ export { default } from './field-errors';
2
+ export { default as version } from './version';
3
+ export * from './export-types';
@@ -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;
@@ -0,0 +1,2 @@
1
+ declare const _default: "0.0.0-canary-2021830134526";
2
+ 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
+ }