@pingux/astro 2.8.1-alpha.1 → 2.8.1-alpha.3
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/lib/cjs/components/NumberField/NumberField.js +10 -2
- package/lib/cjs/hooks/useHiddenNumberFieldValue/index.js +14 -0
- package/lib/cjs/hooks/useHiddenNumberFieldValue/useHiddenNumberFieldValue.js +23 -0
- package/lib/cjs/hooks/useHiddenNumberFieldValue/useHiddenNumberFieldValue.test.js +35 -0
- package/lib/components/NumberField/NumberField.js +11 -3
- package/lib/hooks/useHiddenNumberFieldValue/index.js +1 -0
- package/lib/hooks/useHiddenNumberFieldValue/useHiddenNumberFieldValue.js +16 -0
- package/lib/hooks/useHiddenNumberFieldValue/useHiddenNumberFieldValue.test.js +32 -0
- package/package.json +1 -1
@@ -29,6 +29,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
29
29
|
var _uuid = require("uuid");
|
30
30
|
var _ = require("../..");
|
31
31
|
var _hooks = require("../../hooks");
|
32
|
+
var _useHiddenNumberFieldValue = _interopRequireDefault(require("../../hooks/useHiddenNumberFieldValue"));
|
32
33
|
var _ariaAttributes = require("../../utils/docUtils/ariaAttributes");
|
33
34
|
var _fieldAttributes = require("../../utils/docUtils/fieldAttributes");
|
34
35
|
var _statusProp = require("../../utils/docUtils/statusProp");
|
@@ -48,7 +49,8 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
48
49
|
|
49
50
|
var NumberField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
50
51
|
var helperText = props.helperText,
|
51
|
-
status = props.status
|
52
|
+
status = props.status,
|
53
|
+
formatOptions = props.formatOptions;
|
52
54
|
var _useLocale = (0, _i18n.useLocale)(),
|
53
55
|
locale = _useLocale.locale;
|
54
56
|
var state = (0, _reactStately.useNumberFieldState)(_objectSpread(_objectSpread({}, props), {}, {
|
@@ -135,6 +137,10 @@ var NumberField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
135
137
|
inputProps.onChange(trimmedValueEvent);
|
136
138
|
}
|
137
139
|
};
|
140
|
+
var hiddenInputValue = (0, _useHiddenNumberFieldValue["default"])({
|
141
|
+
numberValue: state.numberValue,
|
142
|
+
isCurrency: formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.currency
|
143
|
+
});
|
138
144
|
inputProps['aria-roledescription'] = null;
|
139
145
|
var helperTextId = (0, _react.useMemo)(function () {
|
140
146
|
return (0, _uuid.v4)();
|
@@ -152,7 +158,9 @@ var NumberField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
152
158
|
onChange: onInputChange,
|
153
159
|
"aria-describedby": helperText && helperTextId,
|
154
160
|
role: "textbox"
|
155
|
-
})), ControlArrows),
|
161
|
+
})), ControlArrows), (0, _react2.jsx)(_reactAria.VisuallyHidden, {
|
162
|
+
"aria-live": "assertive"
|
163
|
+
}, hiddenInputValue), helperText && (0, _react2.jsx)(_.FieldHelperText, {
|
156
164
|
status: status,
|
157
165
|
id: helperTextId
|
158
166
|
}, helperText)));
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
_Object$defineProperty(exports, "default", {
|
9
|
+
enumerable: true,
|
10
|
+
get: function get() {
|
11
|
+
return _useHiddenNumberFieldValue["default"];
|
12
|
+
}
|
13
|
+
});
|
14
|
+
var _useHiddenNumberFieldValue = _interopRequireDefault(require("./useHiddenNumberFieldValue"));
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports["default"] = void 0;
|
8
|
+
var _react = require("react");
|
9
|
+
/**
|
10
|
+
* Returns integer or absolute value for screen reader announcement.
|
11
|
+
*/
|
12
|
+
|
13
|
+
var useHiddenNumberFieldValue = function useHiddenNumberFieldValue(_ref) {
|
14
|
+
var numberValue = _ref.numberValue,
|
15
|
+
isCurrency = _ref.isCurrency;
|
16
|
+
return (0, _react.useMemo)(function () {
|
17
|
+
if (!numberValue) return '';
|
18
|
+
if (!isCurrency) return numberValue;
|
19
|
+
return Math.abs(numberValue);
|
20
|
+
}, [numberValue, isCurrency]);
|
21
|
+
};
|
22
|
+
var _default = useHiddenNumberFieldValue;
|
23
|
+
exports["default"] = _default;
|
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
|
+
var _reactHooks = require("@testing-library/react-hooks");
|
5
|
+
var _useHiddenNumberFieldValue = _interopRequireDefault(require("./useHiddenNumberFieldValue"));
|
6
|
+
test('When number is not currency, negative values return negative values', function () {
|
7
|
+
var _renderHook = (0, _reactHooks.renderHook)(function () {
|
8
|
+
return (0, _useHiddenNumberFieldValue["default"])({
|
9
|
+
isCurrency: false,
|
10
|
+
numberValue: -1
|
11
|
+
});
|
12
|
+
}),
|
13
|
+
result = _renderHook.result;
|
14
|
+
expect(result.current).toBe(-1);
|
15
|
+
});
|
16
|
+
test('When number is currency, it always returns the absolute value', function () {
|
17
|
+
var _renderHook2 = (0, _reactHooks.renderHook)(function () {
|
18
|
+
return (0, _useHiddenNumberFieldValue["default"])({
|
19
|
+
isCurrency: true,
|
20
|
+
numberValue: -1
|
21
|
+
});
|
22
|
+
}),
|
23
|
+
result = _renderHook2.result;
|
24
|
+
expect(result.current).toBe(1);
|
25
|
+
});
|
26
|
+
test('When number is not currency, positive values return positive numbers', function () {
|
27
|
+
var _renderHook3 = (0, _reactHooks.renderHook)(function () {
|
28
|
+
return (0, _useHiddenNumberFieldValue["default"])({
|
29
|
+
isCurrency: false,
|
30
|
+
numberValue: 2
|
31
|
+
});
|
32
|
+
}),
|
33
|
+
result = _renderHook3.result;
|
34
|
+
expect(result.current).toBe(2);
|
35
|
+
});
|
@@ -12,7 +12,7 @@ import _trimInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instanc
|
|
12
12
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
13
13
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context2, _context3; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(source), !0)).call(_context2, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context3 = ownKeys(Object(source))).call(_context3, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
14
14
|
import React, { forwardRef, useCallback, useImperativeHandle, useMemo } from 'react';
|
15
|
-
import { mergeProps, useNumberField } from 'react-aria';
|
15
|
+
import { mergeProps, useNumberField, VisuallyHidden } from 'react-aria';
|
16
16
|
import { useNumberFieldState } from 'react-stately';
|
17
17
|
import MenuDown from '@pingux/mdi-react/MenuDownIcon';
|
18
18
|
import MenuUp from '@pingux/mdi-react/MenuUpIcon';
|
@@ -22,6 +22,7 @@ import PropTypes from 'prop-types';
|
|
22
22
|
import { v4 as uuid } from 'uuid';
|
23
23
|
import { Box, FieldHelperText, Icon, IconButton, Input, Label } from '../..';
|
24
24
|
import { useField, usePropWarning } from '../../hooks';
|
25
|
+
import useHiddenNumberFieldValue from '../../hooks/useHiddenNumberFieldValue';
|
25
26
|
import { ariaAttributesBasePropTypes } from '../../utils/docUtils/ariaAttributes';
|
26
27
|
import { inputFieldAttributesBasePropTypes } from '../../utils/docUtils/fieldAttributes';
|
27
28
|
import { statusPropTypes } from '../../utils/docUtils/statusProp';
|
@@ -37,7 +38,8 @@ import { statusPropTypes } from '../../utils/docUtils/statusProp';
|
|
37
38
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
38
39
|
var NumberField = /*#__PURE__*/forwardRef(function (props, ref) {
|
39
40
|
var helperText = props.helperText,
|
40
|
-
status = props.status
|
41
|
+
status = props.status,
|
42
|
+
formatOptions = props.formatOptions;
|
41
43
|
var _useLocale = useLocale(),
|
42
44
|
locale = _useLocale.locale;
|
43
45
|
var state = useNumberFieldState(_objectSpread(_objectSpread({}, props), {}, {
|
@@ -124,6 +126,10 @@ var NumberField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
124
126
|
inputProps.onChange(trimmedValueEvent);
|
125
127
|
}
|
126
128
|
};
|
129
|
+
var hiddenInputValue = useHiddenNumberFieldValue({
|
130
|
+
numberValue: state.numberValue,
|
131
|
+
isCurrency: formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.currency
|
132
|
+
});
|
127
133
|
inputProps['aria-roledescription'] = null;
|
128
134
|
var helperTextId = useMemo(function () {
|
129
135
|
return uuid();
|
@@ -141,7 +147,9 @@ var NumberField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
141
147
|
onChange: onInputChange,
|
142
148
|
"aria-describedby": helperText && helperTextId,
|
143
149
|
role: "textbox"
|
144
|
-
})), ControlArrows),
|
150
|
+
})), ControlArrows), ___EmotionJSX(VisuallyHidden, {
|
151
|
+
"aria-live": "assertive"
|
152
|
+
}, hiddenInputValue), helperText && ___EmotionJSX(FieldHelperText, {
|
145
153
|
status: status,
|
146
154
|
id: helperTextId
|
147
155
|
}, helperText)));
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default } from './useHiddenNumberFieldValue';
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { useMemo } from 'react';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Returns integer or absolute value for screen reader announcement.
|
5
|
+
*/
|
6
|
+
|
7
|
+
var useHiddenNumberFieldValue = function useHiddenNumberFieldValue(_ref) {
|
8
|
+
var numberValue = _ref.numberValue,
|
9
|
+
isCurrency = _ref.isCurrency;
|
10
|
+
return useMemo(function () {
|
11
|
+
if (!numberValue) return '';
|
12
|
+
if (!isCurrency) return numberValue;
|
13
|
+
return Math.abs(numberValue);
|
14
|
+
}, [numberValue, isCurrency]);
|
15
|
+
};
|
16
|
+
export default useHiddenNumberFieldValue;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import { renderHook } from '@testing-library/react-hooks';
|
2
|
+
import useHiddenNumberFieldValue from './useHiddenNumberFieldValue';
|
3
|
+
test('When number is not currency, negative values return negative values', function () {
|
4
|
+
var _renderHook = renderHook(function () {
|
5
|
+
return useHiddenNumberFieldValue({
|
6
|
+
isCurrency: false,
|
7
|
+
numberValue: -1
|
8
|
+
});
|
9
|
+
}),
|
10
|
+
result = _renderHook.result;
|
11
|
+
expect(result.current).toBe(-1);
|
12
|
+
});
|
13
|
+
test('When number is currency, it always returns the absolute value', function () {
|
14
|
+
var _renderHook2 = renderHook(function () {
|
15
|
+
return useHiddenNumberFieldValue({
|
16
|
+
isCurrency: true,
|
17
|
+
numberValue: -1
|
18
|
+
});
|
19
|
+
}),
|
20
|
+
result = _renderHook2.result;
|
21
|
+
expect(result.current).toBe(1);
|
22
|
+
});
|
23
|
+
test('When number is not currency, positive values return positive numbers', function () {
|
24
|
+
var _renderHook3 = renderHook(function () {
|
25
|
+
return useHiddenNumberFieldValue({
|
26
|
+
isCurrency: false,
|
27
|
+
numberValue: 2
|
28
|
+
});
|
29
|
+
}),
|
30
|
+
result = _renderHook3.result;
|
31
|
+
expect(result.current).toBe(2);
|
32
|
+
});
|