envoc-form 5.0.1 → 5.0.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/README.md +135 -0
- package/es/Input/PhoneNumberInputGroup.d.ts +10 -0
- package/es/Input/PhoneNumberInputGroup.js +47 -0
- package/es/index.d.ts +2 -0
- package/es/index.js +1 -0
- package/lib/Input/PhoneNumberInputGroup.d.ts +10 -0
- package/lib/Input/PhoneNumberInputGroup.js +52 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/package.json +2 -2
- package/src/Input/PhoneNumberInputGroup.tsx +45 -0
- package/src/Input/__Tests__/PhoneNumberInputGroup.test.tsx +36 -0
- package/src/Input/__Tests__/__snapshots__/PhoneNumberInputGroup.test.tsx.snap +33 -0
- package/src/index.ts +3 -0
package/README.md
CHANGED
@@ -2052,6 +2052,120 @@ ___
|
|
2052
2052
|
packages/envoc-form/src/utils/objectToFormData.ts:20
|
2053
2053
|
|
2054
2054
|
|
2055
|
+
<a name="interfacesphonenumberinputgrouppropsmd"></a>
|
2056
|
+
|
2057
|
+
[envoc-form](#readmemd) / [Exports](#modulesmd) / PhoneNumberInputGroupProps
|
2058
|
+
|
2059
|
+
## Interface: PhoneNumberInputGroupProps
|
2060
|
+
|
2061
|
+
### Hierarchy
|
2062
|
+
|
2063
|
+
- `Omit`<[`InputGroupProps`](#interfacesinputgrouppropsmd)<`string` \| `undefined` \| ``null``\>, ``"onChange"`` \| ``"type"`` \| ``"value"``\>
|
2064
|
+
|
2065
|
+
↳ **`PhoneNumberInputGroupProps`**
|
2066
|
+
|
2067
|
+
### Table of contents
|
2068
|
+
|
2069
|
+
#### Properties
|
2070
|
+
|
2071
|
+
- [className](#classname)
|
2072
|
+
- [helpText](#helptext)
|
2073
|
+
- [icon](#icon)
|
2074
|
+
- [input](#input)
|
2075
|
+
- [label](#label)
|
2076
|
+
- [meta](#meta)
|
2077
|
+
|
2078
|
+
### Properties
|
2079
|
+
|
2080
|
+
#### className
|
2081
|
+
|
2082
|
+
• `Optional` **className**: `string`
|
2083
|
+
|
2084
|
+
Extra class names to apply.
|
2085
|
+
|
2086
|
+
##### Inherited from
|
2087
|
+
|
2088
|
+
Omit.className
|
2089
|
+
|
2090
|
+
##### Defined in
|
2091
|
+
|
2092
|
+
packages/envoc-form/src/Group.tsx:8
|
2093
|
+
|
2094
|
+
___
|
2095
|
+
|
2096
|
+
#### helpText
|
2097
|
+
|
2098
|
+
• `Optional` **helpText**: `ReactNode`
|
2099
|
+
|
2100
|
+
Simple helper text after the input.
|
2101
|
+
|
2102
|
+
##### Inherited from
|
2103
|
+
|
2104
|
+
Omit.helpText
|
2105
|
+
|
2106
|
+
##### Defined in
|
2107
|
+
|
2108
|
+
packages/envoc-form/src/Group.tsx:16
|
2109
|
+
|
2110
|
+
___
|
2111
|
+
|
2112
|
+
#### icon
|
2113
|
+
|
2114
|
+
• `Optional` **icon**: `ReactNode`
|
2115
|
+
|
2116
|
+
##### Inherited from
|
2117
|
+
|
2118
|
+
Omit.icon
|
2119
|
+
|
2120
|
+
##### Defined in
|
2121
|
+
|
2122
|
+
packages/envoc-form/src/Input/InputGroup.tsx:20
|
2123
|
+
|
2124
|
+
___
|
2125
|
+
|
2126
|
+
#### input
|
2127
|
+
|
2128
|
+
• **input**: `CustomFieldInputProps`<`undefined` \| ``null`` \| `string`\>
|
2129
|
+
|
2130
|
+
##### Inherited from
|
2131
|
+
|
2132
|
+
Omit.input
|
2133
|
+
|
2134
|
+
##### Defined in
|
2135
|
+
|
2136
|
+
packages/envoc-form/src/Field/InjectedFieldProps.ts:6
|
2137
|
+
|
2138
|
+
___
|
2139
|
+
|
2140
|
+
#### label
|
2141
|
+
|
2142
|
+
• `Optional` **label**: `string`
|
2143
|
+
|
2144
|
+
Simple text label before the input.
|
2145
|
+
|
2146
|
+
##### Inherited from
|
2147
|
+
|
2148
|
+
Omit.label
|
2149
|
+
|
2150
|
+
##### Defined in
|
2151
|
+
|
2152
|
+
packages/envoc-form/src/Group.tsx:13
|
2153
|
+
|
2154
|
+
___
|
2155
|
+
|
2156
|
+
#### meta
|
2157
|
+
|
2158
|
+
• **meta**: `CustomFieldMetaProps`<`undefined` \| ``null`` \| `string`\>
|
2159
|
+
|
2160
|
+
##### Inherited from
|
2161
|
+
|
2162
|
+
Omit.meta
|
2163
|
+
|
2164
|
+
##### Defined in
|
2165
|
+
|
2166
|
+
packages/envoc-form/src/Field/InjectedFieldProps.ts:7
|
2167
|
+
|
2168
|
+
|
2055
2169
|
<a name="interfacesselectgrouppropsmd"></a>
|
2056
2170
|
|
2057
2171
|
[envoc-form](#readmemd) / [Exports](#modulesmd) / SelectGroupProps
|
@@ -3623,6 +3737,7 @@ packages/envoc-form/src/Field/useStandardField.ts:18
|
|
3623
3737
|
- [NormalizationFunction](#interfacesnormalizationfunctionmd)
|
3624
3738
|
- [NumberInputGroupProps](#interfacesnumberinputgrouppropsmd)
|
3625
3739
|
- [ObjectToFormDataCfgProps](#interfacesobjecttoformdatacfgpropsmd)
|
3740
|
+
- [PhoneNumberInputGroupProps](#interfacesphonenumberinputgrouppropsmd)
|
3626
3741
|
- [SelectGroupProps](#interfacesselectgrouppropsmd)
|
3627
3742
|
- [SelectGroupPropsHelper](#interfacesselectgrouppropshelpermd)
|
3628
3743
|
- [SelectOption](#interfacesselectoptionmd)
|
@@ -3659,6 +3774,7 @@ packages/envoc-form/src/Field/useStandardField.ts:18
|
|
3659
3774
|
- [FormDefaults](#formdefaults)
|
3660
3775
|
- [IconInputGroup](#iconinputgroup)
|
3661
3776
|
- [NumberInputGroup](#numberinputgroup)
|
3777
|
+
- [PhoneNumberInputGroup](#phonenumberinputgroup)
|
3662
3778
|
- [ServerErrorContext](#servererrorcontext)
|
3663
3779
|
- [StringInputGroup](#stringinputgroup)
|
3664
3780
|
- [TextAreaGroup](#textareagroup)
|
@@ -3912,6 +4028,25 @@ packages/envoc-form/src/Input/NumberInputGroup.tsx:44
|
|
3912
4028
|
|
3913
4029
|
___
|
3914
4030
|
|
4031
|
+
### PhoneNumberInputGroup
|
4032
|
+
|
4033
|
+
• `Const` **PhoneNumberInputGroup**: `ComponentType`<[`PhoneNumberInputGroupProps`](#interfacesphonenumberinputgrouppropsmd)\>
|
4034
|
+
|
4035
|
+
A standard phone number input. Will display to the user in `+XXX XXX-XXX-XXXX` format as the number is being inputted.
|
4036
|
+
The data will get sent in the same format as displayed. Uses `normalizers.phoneNumber`.
|
4037
|
+
|
4038
|
+
**`Default`**
|
4039
|
+
|
4040
|
+
```ts
|
4041
|
+
autoComplete="tel-national"
|
4042
|
+
```
|
4043
|
+
|
4044
|
+
#### Defined in
|
4045
|
+
|
4046
|
+
packages/envoc-form/src/Input/PhoneNumberInputGroup.tsx:42
|
4047
|
+
|
4048
|
+
___
|
4049
|
+
|
3915
4050
|
### ServerErrorContext
|
3916
4051
|
|
3917
4052
|
• `Const` **ServerErrorContext**: `Context`<[`ServerErrorContextProps`](#interfacesservererrorcontextpropsmd)\>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { InputGroupProps } from './InputGroup';
|
3
|
+
export interface PhoneNumberInputGroupProps extends Omit<InputGroupProps<string | undefined | null>, 'onChange' | 'type' | 'value'> {
|
4
|
+
}
|
5
|
+
/**A standard phone number input. Will display to the user in `+XXX XXX-XXX-XXXX` format as the number is being inputted.
|
6
|
+
* The data will get sent in the same format as displayed. Uses `normalizers.phoneNumber`.
|
7
|
+
* @default autoComplete="tel-national"
|
8
|
+
*/
|
9
|
+
declare const PhoneNumberInputGroupWithRef: React.ComponentType<PhoneNumberInputGroupProps>;
|
10
|
+
export default PhoneNumberInputGroupWithRef;
|
@@ -0,0 +1,47 @@
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
2
|
+
__assign = Object.assign || function(t) {
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
4
|
+
s = arguments[i];
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
6
|
+
t[p] = s[p];
|
7
|
+
}
|
8
|
+
return t;
|
9
|
+
};
|
10
|
+
return __assign.apply(this, arguments);
|
11
|
+
};
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
13
|
+
var t = {};
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
15
|
+
t[p] = s[p];
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
19
|
+
t[p[i]] = s[p[i]];
|
20
|
+
}
|
21
|
+
return t;
|
22
|
+
};
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
24
|
+
import React from 'react';
|
25
|
+
import classNames from 'classnames';
|
26
|
+
import InputGroup from './InputGroup';
|
27
|
+
import { FormDefaults } from '../FormDefaults';
|
28
|
+
import { phoneNumber } from '../Normalization/normalizers';
|
29
|
+
function PhoneNumberInputGroup(_a, ref) {
|
30
|
+
var _b;
|
31
|
+
var className = _a.className, rest = __rest(_a, ["className"]);
|
32
|
+
var input = rest.input;
|
33
|
+
return (_jsx(InputGroup, __assign({ ref: ref, autoComplete: "tel-national" }, rest, { type: "text", className: classNames(className, FormDefaults.cssClassPrefix + 'phone-number-group'), value: (_b = input.value) !== null && _b !== void 0 ? _b : '', onChange: function (e) {
|
34
|
+
if (!e.target.value) {
|
35
|
+
input.onChange(undefined);
|
36
|
+
}
|
37
|
+
else {
|
38
|
+
input.onChange(phoneNumber(e.target.value));
|
39
|
+
}
|
40
|
+
} })));
|
41
|
+
}
|
42
|
+
/**A standard phone number input. Will display to the user in `+XXX XXX-XXX-XXXX` format as the number is being inputted.
|
43
|
+
* The data will get sent in the same format as displayed. Uses `normalizers.phoneNumber`.
|
44
|
+
* @default autoComplete="tel-national"
|
45
|
+
*/
|
46
|
+
var PhoneNumberInputGroupWithRef = React.forwardRef(PhoneNumberInputGroup);
|
47
|
+
export default PhoneNumberInputGroupWithRef;
|
package/es/index.d.ts
CHANGED
@@ -48,6 +48,8 @@ export { default as MoneyInputGroup } from './Input/MoneyInputGroup';
|
|
48
48
|
export type { MoneyInputGroupProps } from './Input/MoneyInputGroup';
|
49
49
|
export { default as NumberInputGroup } from './Input/NumberInputGroup';
|
50
50
|
export type { NumberInputGroupProps } from './Input/NumberInputGroup';
|
51
|
+
export { default as PhoneNumberInputGroup } from './Input/PhoneNumberInputGroup';
|
52
|
+
export type { PhoneNumberInputGroupProps } from './Input/PhoneNumberInputGroup';
|
51
53
|
export { default as StringInputGroup } from './Input/StringInputGroup';
|
52
54
|
export type { StringInputGroupProps } from './Input/StringInputGroup';
|
53
55
|
export type { NormalizationFunction } from './Normalization/NormalizationFunction';
|
package/es/index.js
CHANGED
@@ -34,6 +34,7 @@ export { default as IconInputGroup } from './Input/IconInputGroup';
|
|
34
34
|
export { default as InputGroup } from './Input/InputGroup';
|
35
35
|
export { default as MoneyInputGroup } from './Input/MoneyInputGroup';
|
36
36
|
export { default as NumberInputGroup } from './Input/NumberInputGroup';
|
37
|
+
export { default as PhoneNumberInputGroup } from './Input/PhoneNumberInputGroup';
|
37
38
|
export { default as StringInputGroup } from './Input/StringInputGroup';
|
38
39
|
export * as normalizers from './Normalization/normalizers';
|
39
40
|
// Select
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { InputGroupProps } from './InputGroup';
|
3
|
+
export interface PhoneNumberInputGroupProps extends Omit<InputGroupProps<string | undefined | null>, 'onChange' | 'type' | 'value'> {
|
4
|
+
}
|
5
|
+
/**A standard phone number input. Will display to the user in `+XXX XXX-XXX-XXXX` format as the number is being inputted.
|
6
|
+
* The data will get sent in the same format as displayed. Uses `normalizers.phoneNumber`.
|
7
|
+
* @default autoComplete="tel-national"
|
8
|
+
*/
|
9
|
+
declare const PhoneNumberInputGroupWithRef: React.ComponentType<PhoneNumberInputGroupProps>;
|
10
|
+
export default PhoneNumberInputGroupWithRef;
|
@@ -0,0 +1,52 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
14
|
+
var t = {};
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
16
|
+
t[p] = s[p];
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
20
|
+
t[p[i]] = s[p[i]];
|
21
|
+
}
|
22
|
+
return t;
|
23
|
+
};
|
24
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
25
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
26
|
+
};
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
28
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
29
|
+
var react_1 = __importDefault(require("react"));
|
30
|
+
var classnames_1 = __importDefault(require("classnames"));
|
31
|
+
var InputGroup_1 = __importDefault(require("./InputGroup"));
|
32
|
+
var FormDefaults_1 = require("../FormDefaults");
|
33
|
+
var normalizers_1 = require("../Normalization/normalizers");
|
34
|
+
function PhoneNumberInputGroup(_a, ref) {
|
35
|
+
var _b;
|
36
|
+
var className = _a.className, rest = __rest(_a, ["className"]);
|
37
|
+
var input = rest.input;
|
38
|
+
return ((0, jsx_runtime_1.jsx)(InputGroup_1.default, __assign({ ref: ref, autoComplete: "tel-national" }, rest, { type: "text", className: (0, classnames_1.default)(className, FormDefaults_1.FormDefaults.cssClassPrefix + 'phone-number-group'), value: (_b = input.value) !== null && _b !== void 0 ? _b : '', onChange: function (e) {
|
39
|
+
if (!e.target.value) {
|
40
|
+
input.onChange(undefined);
|
41
|
+
}
|
42
|
+
else {
|
43
|
+
input.onChange((0, normalizers_1.phoneNumber)(e.target.value));
|
44
|
+
}
|
45
|
+
} })));
|
46
|
+
}
|
47
|
+
/**A standard phone number input. Will display to the user in `+XXX XXX-XXX-XXXX` format as the number is being inputted.
|
48
|
+
* The data will get sent in the same format as displayed. Uses `normalizers.phoneNumber`.
|
49
|
+
* @default autoComplete="tel-national"
|
50
|
+
*/
|
51
|
+
var PhoneNumberInputGroupWithRef = react_1.default.forwardRef(PhoneNumberInputGroup);
|
52
|
+
exports.default = PhoneNumberInputGroupWithRef;
|
package/lib/index.d.ts
CHANGED
@@ -48,6 +48,8 @@ export { default as MoneyInputGroup } from './Input/MoneyInputGroup';
|
|
48
48
|
export type { MoneyInputGroupProps } from './Input/MoneyInputGroup';
|
49
49
|
export { default as NumberInputGroup } from './Input/NumberInputGroup';
|
50
50
|
export type { NumberInputGroupProps } from './Input/NumberInputGroup';
|
51
|
+
export { default as PhoneNumberInputGroup } from './Input/PhoneNumberInputGroup';
|
52
|
+
export type { PhoneNumberInputGroupProps } from './Input/PhoneNumberInputGroup';
|
51
53
|
export { default as StringInputGroup } from './Input/StringInputGroup';
|
52
54
|
export type { StringInputGroupProps } from './Input/StringInputGroup';
|
53
55
|
export type { NormalizationFunction } from './Normalization/NormalizationFunction';
|
package/lib/index.js
CHANGED
@@ -29,7 +29,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
29
29
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
30
30
|
};
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
32
|
-
exports.validators = exports.serialize = exports.objectContainsNonSerializableProperty = exports.TextAreaGroup = exports.SingleStringSelectGroup = exports.MultiStringSelectGroup = exports.SingleNumberSelectGroup = exports.MultiNumberSelectGroup = exports.BooleanSelectGroup = exports.SelectGroup = exports.normalizers = exports.StringInputGroup = exports.NumberInputGroup = exports.MoneyInputGroup = exports.InputGroup = exports.IconInputGroup = exports.Group = exports.FormDefaults = exports.StandardFormActions = exports.FormActions = exports.ServerErrorContext = exports.Form = exports.FileGroup = exports.FieldArray = exports.useStandardField = exports.StandAloneInput = exports.FieldNameContext = exports.FieldErrorScrollTarget = exports.Field = exports.StringDateOnlyPickerGroup = exports.StringDatePickerGroup = exports.convertToTimeZoneInsensitiveISOString = exports.DatePickerGroup = exports.ConfirmDeleteForm = exports.ConfirmBaseForm = exports.SubmitFormButton = exports.AddressInput = void 0;
|
32
|
+
exports.validators = exports.serialize = exports.objectContainsNonSerializableProperty = exports.TextAreaGroup = exports.SingleStringSelectGroup = exports.MultiStringSelectGroup = exports.SingleNumberSelectGroup = exports.MultiNumberSelectGroup = exports.BooleanSelectGroup = exports.SelectGroup = exports.normalizers = exports.StringInputGroup = exports.PhoneNumberInputGroup = exports.NumberInputGroup = exports.MoneyInputGroup = exports.InputGroup = exports.IconInputGroup = exports.Group = exports.FormDefaults = exports.StandardFormActions = exports.FormActions = exports.ServerErrorContext = exports.Form = exports.FileGroup = exports.FieldArray = exports.useStandardField = exports.StandAloneInput = exports.FieldNameContext = exports.FieldErrorScrollTarget = exports.Field = exports.StringDateOnlyPickerGroup = exports.StringDatePickerGroup = exports.convertToTimeZoneInsensitiveISOString = exports.DatePickerGroup = exports.ConfirmDeleteForm = exports.ConfirmBaseForm = exports.SubmitFormButton = exports.AddressInput = void 0;
|
33
33
|
// Address
|
34
34
|
var AddressInput_1 = require("./AddressInput/AddressInput");
|
35
35
|
Object.defineProperty(exports, "AddressInput", { enumerable: true, get: function () { return __importDefault(AddressInput_1).default; } });
|
@@ -91,6 +91,8 @@ var MoneyInputGroup_1 = require("./Input/MoneyInputGroup");
|
|
91
91
|
Object.defineProperty(exports, "MoneyInputGroup", { enumerable: true, get: function () { return __importDefault(MoneyInputGroup_1).default; } });
|
92
92
|
var NumberInputGroup_1 = require("./Input/NumberInputGroup");
|
93
93
|
Object.defineProperty(exports, "NumberInputGroup", { enumerable: true, get: function () { return __importDefault(NumberInputGroup_1).default; } });
|
94
|
+
var PhoneNumberInputGroup_1 = require("./Input/PhoneNumberInputGroup");
|
95
|
+
Object.defineProperty(exports, "PhoneNumberInputGroup", { enumerable: true, get: function () { return __importDefault(PhoneNumberInputGroup_1).default; } });
|
94
96
|
var StringInputGroup_1 = require("./Input/StringInputGroup");
|
95
97
|
Object.defineProperty(exports, "StringInputGroup", { enumerable: true, get: function () { return __importDefault(StringInputGroup_1).default; } });
|
96
98
|
exports.normalizers = __importStar(require("./Normalization/normalizers"));
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "envoc-form",
|
3
|
-
"version": "5.0.
|
3
|
+
"version": "5.0.3",
|
4
4
|
"description": "Envoc form components",
|
5
5
|
"keywords": [
|
6
6
|
"react-component",
|
@@ -38,7 +38,7 @@
|
|
38
38
|
"axios": "^0.21.1",
|
39
39
|
"classnames": "^2.3.1",
|
40
40
|
"date-fns": "^2.22.1",
|
41
|
-
"envoc-request": "^5.0.
|
41
|
+
"envoc-request": "^5.0.3",
|
42
42
|
"lru-cache": "^6.0.0",
|
43
43
|
"prop-types": "^15.7.2",
|
44
44
|
"react-date-picker": "^8.2.0",
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import React, { LegacyRef } from 'react';
|
2
|
+
import classNames from 'classnames';
|
3
|
+
import InputGroup, { InputGroupProps } from './InputGroup';
|
4
|
+
import { FormDefaults } from '../FormDefaults';
|
5
|
+
import { phoneNumber } from '../Normalization/normalizers';
|
6
|
+
|
7
|
+
export interface PhoneNumberInputGroupProps
|
8
|
+
extends Omit<
|
9
|
+
InputGroupProps<string | undefined | null>,
|
10
|
+
'onChange' | 'type' | 'value'
|
11
|
+
> {}
|
12
|
+
function PhoneNumberInputGroup(
|
13
|
+
{ className, ...rest }: PhoneNumberInputGroupProps,
|
14
|
+
ref: LegacyRef<HTMLInputElement>
|
15
|
+
) {
|
16
|
+
const { input } = rest;
|
17
|
+
return (
|
18
|
+
<InputGroup
|
19
|
+
ref={ref}
|
20
|
+
autoComplete="tel-national"
|
21
|
+
{...rest}
|
22
|
+
type="text"
|
23
|
+
className={classNames(
|
24
|
+
className,
|
25
|
+
FormDefaults.cssClassPrefix + 'phone-number-group'
|
26
|
+
)}
|
27
|
+
value={input.value ?? ''}
|
28
|
+
onChange={(e) => {
|
29
|
+
if (!e.target.value) {
|
30
|
+
input.onChange(undefined);
|
31
|
+
} else {
|
32
|
+
input.onChange(phoneNumber(e.target.value));
|
33
|
+
}
|
34
|
+
}}
|
35
|
+
/>
|
36
|
+
);
|
37
|
+
}
|
38
|
+
/**A standard phone number input. Will display to the user in `+XXX XXX-XXX-XXXX` format as the number is being inputted.
|
39
|
+
* The data will get sent in the same format as displayed. Uses `normalizers.phoneNumber`.
|
40
|
+
* @default autoComplete="tel-national"
|
41
|
+
*/
|
42
|
+
const PhoneNumberInputGroupWithRef = React.forwardRef(
|
43
|
+
PhoneNumberInputGroup
|
44
|
+
) as React.ComponentType<PhoneNumberInputGroupProps>;
|
45
|
+
export default PhoneNumberInputGroupWithRef;
|
@@ -0,0 +1,36 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { render } from '@testing-library/react';
|
3
|
+
import FormTestBase from '../../__Tests__/FormTestBase';
|
4
|
+
import PhoneNumberInputGroup from '../PhoneNumberInputGroup';
|
5
|
+
|
6
|
+
describe('PhoneNumberInputGroup', () => {
|
7
|
+
it('renders without crashing', () => {
|
8
|
+
render(
|
9
|
+
<FormTestBase>
|
10
|
+
{({ Field }) => (
|
11
|
+
<Field
|
12
|
+
name="phoneNumber"
|
13
|
+
Component={PhoneNumberInputGroup}
|
14
|
+
label="Phone Number"
|
15
|
+
className="something-here"
|
16
|
+
/>
|
17
|
+
)}
|
18
|
+
</FormTestBase>
|
19
|
+
);
|
20
|
+
});
|
21
|
+
it('has matching snapshot', () => {
|
22
|
+
const renderResult = render(
|
23
|
+
<FormTestBase>
|
24
|
+
{({ Field }) => (
|
25
|
+
<Field
|
26
|
+
name="phoneNumber"
|
27
|
+
Component={PhoneNumberInputGroup}
|
28
|
+
label="Phone Number"
|
29
|
+
className="something-here"
|
30
|
+
/>
|
31
|
+
)}
|
32
|
+
</FormTestBase>
|
33
|
+
);
|
34
|
+
expect(renderResult.asFragment()).toMatchSnapshot();
|
35
|
+
});
|
36
|
+
});
|
@@ -0,0 +1,33 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`PhoneNumberInputGroup has matching snapshot 1`] = `
|
4
|
+
<DocumentFragment>
|
5
|
+
<form
|
6
|
+
action="#"
|
7
|
+
class="envoc-form-form"
|
8
|
+
>
|
9
|
+
<div
|
10
|
+
class="something-here envoc-form-phone-number-group envoc-form-input-group envoc-form-group"
|
11
|
+
>
|
12
|
+
<div
|
13
|
+
id="phonenumber-error-scroll-target"
|
14
|
+
style="display: none;"
|
15
|
+
/>
|
16
|
+
<label
|
17
|
+
for="phoneNumber"
|
18
|
+
>
|
19
|
+
Phone Number
|
20
|
+
</label>
|
21
|
+
<input
|
22
|
+
aria-invalid="false"
|
23
|
+
autocomplete="tel-national"
|
24
|
+
class="something-here envoc-form-phone-number-group envoc-form-input-group"
|
25
|
+
id="phoneNumber"
|
26
|
+
name="phoneNumber"
|
27
|
+
type="text"
|
28
|
+
value=""
|
29
|
+
/>
|
30
|
+
</div>
|
31
|
+
</form>
|
32
|
+
</DocumentFragment>
|
33
|
+
`;
|
package/src/index.ts
CHANGED
@@ -92,6 +92,9 @@ export type { MoneyInputGroupProps } from './Input/MoneyInputGroup';
|
|
92
92
|
export { default as NumberInputGroup } from './Input/NumberInputGroup';
|
93
93
|
export type { NumberInputGroupProps } from './Input/NumberInputGroup';
|
94
94
|
|
95
|
+
export { default as PhoneNumberInputGroup } from './Input/PhoneNumberInputGroup';
|
96
|
+
export type { PhoneNumberInputGroupProps } from './Input/PhoneNumberInputGroup';
|
97
|
+
|
95
98
|
export { default as StringInputGroup } from './Input/StringInputGroup';
|
96
99
|
export type { StringInputGroupProps } from './Input/StringInputGroup';
|
97
100
|
|