envoc-form 4.1.0 → 4.2.0
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 +5266 -940
- package/es/DatePicker/DatePickerGroup.d.ts +1 -1
- package/es/DatePicker/DatePickerGroup.js +4 -3
- package/es/DateTimePicker/DateTimePickerGroup.d.ts +13 -0
- package/es/DateTimePicker/DateTimePickerGroup.js +87 -0
- package/es/DateTimePicker/DateTimePickerHelper.d.ts +3 -0
- package/es/DateTimePicker/DateTimePickerHelper.js +1 -0
- package/es/DateTimePicker/StringDateTimePickerGroup.d.ts +10 -0
- package/es/DateTimePicker/StringDateTimePickerGroup.js +53 -0
- package/es/Input/PhoneNumberInputGroup.d.ts +10 -0
- package/es/Input/PhoneNumberInputGroup.js +47 -0
- package/es/hooks/index.d.ts +2 -0
- package/es/hooks/index.js +2 -0
- package/es/hooks/useFormValue.d.ts +2 -0
- package/es/hooks/useFormValue.js +7 -0
- package/es/index.d.ts +6 -0
- package/es/index.js +4 -0
- package/lib/DatePicker/DatePickerGroup.d.ts +1 -1
- package/lib/DatePicker/DatePickerGroup.js +4 -3
- package/lib/DateTimePicker/DateTimePickerGroup.d.ts +13 -0
- package/lib/DateTimePicker/DateTimePickerGroup.js +93 -0
- package/lib/DateTimePicker/DateTimePickerHelper.d.ts +3 -0
- package/lib/DateTimePicker/DateTimePickerHelper.js +2 -0
- package/lib/DateTimePicker/StringDateTimePickerGroup.d.ts +10 -0
- package/lib/DateTimePicker/StringDateTimePickerGroup.js +59 -0
- package/lib/Input/PhoneNumberInputGroup.d.ts +10 -0
- package/lib/Input/PhoneNumberInputGroup.js +52 -0
- package/lib/hooks/index.d.ts +2 -0
- package/lib/hooks/index.js +8 -0
- package/lib/hooks/useFormValue.d.ts +2 -0
- package/lib/hooks/useFormValue.js +10 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +8 -1
- package/package.json +5 -4
- package/src/DatePicker/DatePickerGroup.tsx +5 -0
- package/src/DateTimePicker/DateTimePicker.test.tsx +243 -0
- package/src/DateTimePicker/DateTimePickerGroup.tsx +116 -0
- package/src/DateTimePicker/DateTimePickerHelper.ts +4 -0
- package/src/DateTimePicker/StringDateTimePickerGroup.tsx +61 -0
- package/src/DateTimePicker/__snapshots__/DateTimePicker.test.tsx.snap +216 -0
- package/src/Input/PhoneNumberInputGroup.tsx +49 -0
- package/src/Input/__Tests__/PhoneNumberInputGroup.test.tsx +37 -0
- package/src/Input/__Tests__/__snapshots__/PhoneNumberInputGroup.test.tsx.snap +33 -0
- package/src/__Tests__/FormTestBase.tsx +1 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useFormValue.ts +16 -0
- package/src/index.ts +10 -0
@@ -10,5 +10,5 @@ export interface DatePickerGroupProps<T> extends InjectedFieldProps<T | undefine
|
|
10
10
|
*
|
11
11
|
* Uses [react-date-picker](https://www.npmjs.com/package/react-date-picker)
|
12
12
|
*/
|
13
|
-
export default function DatePickerGroup<T>({ input, meta, label, helpText, className, required, disabled, convert, ...rest }: DatePickerGroupProps<T>): JSX.Element;
|
13
|
+
export default function DatePickerGroup<T>({ input, meta, label, helpText, className, required, disabled, convert, maxDate, minDate, ...rest }: DatePickerGroupProps<T>): JSX.Element;
|
14
14
|
export declare function convertToTimeZoneInsensitiveISOString(date: Date): string;
|
@@ -33,8 +33,8 @@ import Group from '../Group';
|
|
33
33
|
* Uses [react-date-picker](https://www.npmjs.com/package/react-date-picker)
|
34
34
|
*/
|
35
35
|
export default function DatePickerGroup(_a) {
|
36
|
-
var input = _a.input, meta = _a.meta, label = _a.label, helpText = _a.helpText, className = _a.className, required = _a.required, disabled = _a.disabled, convert = _a.convert, rest = __rest(_a, ["input", "meta", "label", "helpText", "className", "required", "disabled", "convert"]);
|
37
|
-
var
|
36
|
+
var input = _a.input, meta = _a.meta, label = _a.label, helpText = _a.helpText, className = _a.className, required = _a.required, disabled = _a.disabled, convert = _a.convert, _b = _a.maxDate, maxDate = _b === void 0 ? new Date(9999, 11, 31) : _b, _c = _a.minDate, minDate = _c === void 0 ? new Date(1000, 0, 1) : _c, rest = __rest(_a, ["input", "meta", "label", "helpText", "className", "required", "disabled", "convert", "maxDate", "minDate"]);
|
37
|
+
var _d = useState(null), displayDate = _d[0], setDisplayDate = _d[1];
|
38
38
|
useEffect(function () {
|
39
39
|
if (!input.value) {
|
40
40
|
setDisplayDate(null);
|
@@ -48,7 +48,7 @@ export default function DatePickerGroup(_a) {
|
|
48
48
|
}
|
49
49
|
}
|
50
50
|
}, [setDisplayDate, input.value]);
|
51
|
-
return (_jsx(Group, __assign({ input: input, meta: meta, label: label, helpText: helpText, className: classnames(className, FormDefaults.cssClassPrefix + 'date-picker'), required: required, disabled: disabled }, { children: _jsx(DatePicker, __assign({}, rest, { className: classnames(FormDefaults.cssClassPrefix + 'date-picker', className), value: displayDate, onChange: handleChange })) })));
|
51
|
+
return (_jsx(Group, __assign({ input: input, meta: meta, label: label, helpText: helpText, className: classnames(className, FormDefaults.cssClassPrefix + 'date-picker'), required: required, disabled: disabled }, { children: _jsx(DatePicker, __assign({}, rest, { className: classnames(FormDefaults.cssClassPrefix + 'date-picker', className), value: displayDate, onChange: handleChange, maxDate: maxDate, minDate: minDate })) })));
|
52
52
|
function handleChange(e) {
|
53
53
|
var onChange = input.onChange;
|
54
54
|
if (onChange === null) {
|
@@ -80,6 +80,7 @@ export default function DatePickerGroup(_a) {
|
|
80
80
|
export function convertToTimeZoneInsensitiveISOString(date) {
|
81
81
|
var year = new Intl.DateTimeFormat('en', { year: 'numeric' })
|
82
82
|
.format(date)
|
83
|
+
.substring(0, 4)
|
83
84
|
.padStart(4, '0');
|
84
85
|
var month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(date);
|
85
86
|
var day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date);
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/// <reference types="react" />
|
2
|
+
import { DateTimePickerProps } from 'react-datetime-picker';
|
3
|
+
import { InjectedFieldProps } from '../Field/InjectedFieldProps';
|
4
|
+
import { GroupProps } from '../Group';
|
5
|
+
export interface DateTimePickerGroupProps<T> extends InjectedFieldProps<T | undefined | null>, Omit<DateTimePickerProps, keyof InjectedFieldProps<T> | 'name' | 'value' | 'className'>, Omit<GroupProps, keyof InjectedFieldProps<T> | 'children'> {
|
6
|
+
convert: (date: Date) => T;
|
7
|
+
}
|
8
|
+
/**
|
9
|
+
* Field for inputting date and time. Uses `<Group/>` and `<DateTimePicker/>`.
|
10
|
+
*
|
11
|
+
* Uses [react-datetime-picker](https://www.npmjs.com/package/react-datetime-picker)
|
12
|
+
*/
|
13
|
+
export default function DateTimePickerGroup<T>({ input, meta, label, helpText, className, required, disabled, convert, ...rest }: DateTimePickerGroupProps<T>): JSX.Element;
|
@@ -0,0 +1,87 @@
|
|
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 { useEffect, useState } from 'react';
|
25
|
+
import { DateTimePicker } from 'react-datetime-picker';
|
26
|
+
import classnames from 'classnames';
|
27
|
+
import parseISO from 'date-fns/parseISO';
|
28
|
+
import { FormDefaults } from '../FormDefaults';
|
29
|
+
import Group from '../Group';
|
30
|
+
/**
|
31
|
+
* Field for inputting date and time. Uses `<Group/>` and `<DateTimePicker/>`.
|
32
|
+
*
|
33
|
+
* Uses [react-datetime-picker](https://www.npmjs.com/package/react-datetime-picker)
|
34
|
+
*/
|
35
|
+
export default function DateTimePickerGroup(_a) {
|
36
|
+
var input = _a.input, meta = _a.meta, label = _a.label, helpText = _a.helpText, className = _a.className, required = _a.required, disabled = _a.disabled, convert = _a.convert, rest = __rest(_a, ["input", "meta", "label", "helpText", "className", "required", "disabled", "convert"]);
|
37
|
+
var _b = useState(null), displayDateTime = _b[0], setDisplayDateTime = _b[1];
|
38
|
+
useEffect(function () {
|
39
|
+
var inputValue = input.value;
|
40
|
+
if (!inputValue) {
|
41
|
+
setDisplayDateTime(null);
|
42
|
+
}
|
43
|
+
else if (typeof inputValue === 'string') {
|
44
|
+
var parsedDateTime = convertISODateTimeStringToDate(inputValue);
|
45
|
+
setDisplayDateTime(parsedDateTime);
|
46
|
+
}
|
47
|
+
else if (inputValue instanceof Date) {
|
48
|
+
setDisplayDateTime(inputValue);
|
49
|
+
}
|
50
|
+
}, [setDisplayDateTime, input.value]);
|
51
|
+
return (_jsx(Group, __assign({ input: input, meta: meta, label: label, helpText: helpText, className: classnames(className, FormDefaults.cssClassPrefix + 'date-time-picker'), required: required, disabled: disabled }, { children: _jsx(DateTimePicker, __assign({}, rest, { className: classnames(FormDefaults.cssClassPrefix + 'date-time-picker', className), value: displayDateTime, onChange: handleChange })) })));
|
52
|
+
function handleChange(newDateTime) {
|
53
|
+
var onChange = input.onChange;
|
54
|
+
if (onChange === null) {
|
55
|
+
return;
|
56
|
+
}
|
57
|
+
if (!newDateTime) {
|
58
|
+
onChange(undefined);
|
59
|
+
setDisplayDateTime(null);
|
60
|
+
return;
|
61
|
+
}
|
62
|
+
else if (typeof newDateTime === 'string') {
|
63
|
+
var parsedDateTime = parseISO(newDateTime);
|
64
|
+
setDisplayDateTime(parsedDateTime);
|
65
|
+
onChange(convert(parsedDateTime));
|
66
|
+
}
|
67
|
+
else if (newDateTime instanceof Date) {
|
68
|
+
setDisplayDateTime(newDateTime);
|
69
|
+
onChange(convert(newDateTime));
|
70
|
+
}
|
71
|
+
}
|
72
|
+
}
|
73
|
+
function convertISODateTimeStringToDate(isoDateTimeString) {
|
74
|
+
var isoDateTimeRegex = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?)([+-]\d{2}:\d{2}|Z)?$/;
|
75
|
+
var isValidIsoDateTimeString = isoDateTimeRegex.test(isoDateTimeString);
|
76
|
+
if (isValidIsoDateTimeString) {
|
77
|
+
return new Date(isoDateTimeString);
|
78
|
+
}
|
79
|
+
var errorMessage = "Invalid \"date time\" value of ".concat(isoDateTimeString, " provided to DateTimePickerGroup component. Please provide ISO 8601 string that includes the time zone designator. Sample strings: 2022-09-24T:08:54:12+00:00, 2022-09-24T:08:54:12Z, 2022-09-24T:08:54:12.123-05:00");
|
80
|
+
if (process.env.NODE_ENV !== 'production') {
|
81
|
+
throw new Error(errorMessage);
|
82
|
+
}
|
83
|
+
else {
|
84
|
+
console.error(errorMessage);
|
85
|
+
}
|
86
|
+
return null;
|
87
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,10 @@
|
|
1
|
+
/// <reference types="react" />
|
2
|
+
import { DateTimePickerHelper } from './DateTimePickerHelper';
|
3
|
+
export interface StringDateTimePickerGroupProps extends DateTimePickerHelper<string | undefined | null> {
|
4
|
+
}
|
5
|
+
/**
|
6
|
+
* Date Time picker input that consumes JS Date object and outputs as a date time offset string in ISO format `YYYY-MM-DDTHH:mm:ss.sss±hh:mm`.
|
7
|
+
*
|
8
|
+
* Default display to the user is in `MM/DD/YYYY HH:mm:ss AM/PM` format.
|
9
|
+
*/
|
10
|
+
export default function StringDateTimePickerGroup(props: StringDateTimePickerGroupProps): JSX.Element;
|
@@ -0,0 +1,53 @@
|
|
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
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
13
|
+
import DateTimePickerGroup from './DateTimePickerGroup';
|
14
|
+
/**
|
15
|
+
* Date Time picker input that consumes JS Date object and outputs as a date time offset string in ISO format `YYYY-MM-DDTHH:mm:ss.sss±hh:mm`.
|
16
|
+
*
|
17
|
+
* Default display to the user is in `MM/DD/YYYY HH:mm:ss AM/PM` format.
|
18
|
+
*/
|
19
|
+
export default function StringDateTimePickerGroup(props) {
|
20
|
+
return _jsx(DateTimePickerGroup, __assign({}, props, { convert: convertToISOString }));
|
21
|
+
}
|
22
|
+
function convertToISOString(date) {
|
23
|
+
// Get the offset in minutes
|
24
|
+
var offsetMinutes = date.getTimezoneOffset();
|
25
|
+
// Calculate the offset in hours and minutes
|
26
|
+
var offsetHours = Math.floor(Math.abs(offsetMinutes) / 60);
|
27
|
+
var offsetMinutesPart = Math.abs(offsetMinutes) % 60;
|
28
|
+
// Format the offset in the required format (+/-hh:mm)
|
29
|
+
var offsetString = (offsetMinutes >= 0 ? '-' : '+') +
|
30
|
+
String(offsetHours).padStart(2, '0') +
|
31
|
+
':' +
|
32
|
+
String(offsetMinutesPart).padStart(2, '0');
|
33
|
+
// Format the date in the required format using `intl.DateTimeFormat`
|
34
|
+
var year = new Intl.DateTimeFormat('en', { year: 'numeric' })
|
35
|
+
.format(date)
|
36
|
+
.padStart(4, '0');
|
37
|
+
var month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(date);
|
38
|
+
var day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date);
|
39
|
+
var hour = new Intl.DateTimeFormat('en', {
|
40
|
+
hour: '2-digit',
|
41
|
+
hourCycle: 'h23',
|
42
|
+
}).format(date);
|
43
|
+
var minute = new Intl.DateTimeFormat('en', { minute: '2-digit' })
|
44
|
+
.format(date)
|
45
|
+
.padStart(2, '0');
|
46
|
+
var second = new Intl.DateTimeFormat('en', {
|
47
|
+
second: '2-digit',
|
48
|
+
fractionalSecondDigits: 3,
|
49
|
+
})
|
50
|
+
.format(date)
|
51
|
+
.padStart(6, '0');
|
52
|
+
return "".concat(year, "-").concat(month, "-").concat(day, "T").concat(hour, ":").concat(minute, ":").concat(second).concat(offsetString);
|
53
|
+
}
|
@@ -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;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { useCallback } from 'react';
|
2
|
+
import { useFormikContext } from 'formik';
|
3
|
+
export default function useFormValue(formBuilder, fieldName) {
|
4
|
+
var _a = useFormikContext(), values = _a.values, setFieldValue = _a.setFieldValue;
|
5
|
+
var setValue = useCallback(function (value) { return setFieldValue(fieldName, value); }, [fieldName, setFieldValue]);
|
6
|
+
return [values[fieldName], setValue];
|
7
|
+
}
|
package/es/index.d.ts
CHANGED
@@ -14,6 +14,10 @@ export { default as StringDatePickerGroup } from './DatePicker/StringDatePickerG
|
|
14
14
|
export type { StringDatePickerGroupProps } from './DatePicker/StringDatePickerGroup';
|
15
15
|
export { default as StringDateOnlyPickerGroup } from './DatePicker/StringDateOnlyPickerGroup';
|
16
16
|
export type { StringDateOnlyPickerGroupProps } from './DatePicker/StringDateOnlyPickerGroup';
|
17
|
+
export { default as DateTimePickerGroup } from './DateTimePicker/DateTimePickerGroup';
|
18
|
+
export type { DateTimePickerGroupProps } from './DateTimePicker/DateTimePickerGroup';
|
19
|
+
export { default as StringDateTimePickerGroup } from './DateTimePicker/StringDateTimePickerGroup';
|
20
|
+
export type { StringDateTimePickerGroupProps } from './DateTimePicker/StringDateTimePickerGroup';
|
17
21
|
export { default as Field } from './Field/Field';
|
18
22
|
export type { FieldProps } from './Field/Field';
|
19
23
|
export type { RenderComponent } from './Field/Field';
|
@@ -48,6 +52,8 @@ export { default as MoneyInputGroup } from './Input/MoneyInputGroup';
|
|
48
52
|
export type { MoneyInputGroupProps } from './Input/MoneyInputGroup';
|
49
53
|
export { default as NumberInputGroup } from './Input/NumberInputGroup';
|
50
54
|
export type { NumberInputGroupProps } from './Input/NumberInputGroup';
|
55
|
+
export { default as PhoneNumberInputGroup } from './Input/PhoneNumberInputGroup';
|
56
|
+
export type { PhoneNumberInputGroupProps } from './Input/PhoneNumberInputGroup';
|
51
57
|
export { default as StringInputGroup } from './Input/StringInputGroup';
|
52
58
|
export type { StringInputGroupProps } from './Input/StringInputGroup';
|
53
59
|
export type { NormalizationFunction } from './Normalization/NormalizationFunction';
|
package/es/index.js
CHANGED
@@ -11,6 +11,9 @@ export { default as DatePickerGroup } from './DatePicker/DatePickerGroup';
|
|
11
11
|
export { convertToTimeZoneInsensitiveISOString } from './DatePicker/DatePickerGroup';
|
12
12
|
export { default as StringDatePickerGroup } from './DatePicker/StringDatePickerGroup';
|
13
13
|
export { default as StringDateOnlyPickerGroup } from './DatePicker/StringDateOnlyPickerGroup';
|
14
|
+
// DateTime
|
15
|
+
export { default as DateTimePickerGroup } from './DateTimePicker/DateTimePickerGroup';
|
16
|
+
export { default as StringDateTimePickerGroup } from './DateTimePicker/StringDateTimePickerGroup';
|
14
17
|
// Field
|
15
18
|
export { default as Field } from './Field/Field';
|
16
19
|
export { default as FieldErrorScrollTarget } from './Field/FieldErrorScrollTarget';
|
@@ -34,6 +37,7 @@ export { default as IconInputGroup } from './Input/IconInputGroup';
|
|
34
37
|
export { default as InputGroup } from './Input/InputGroup';
|
35
38
|
export { default as MoneyInputGroup } from './Input/MoneyInputGroup';
|
36
39
|
export { default as NumberInputGroup } from './Input/NumberInputGroup';
|
40
|
+
export { default as PhoneNumberInputGroup } from './Input/PhoneNumberInputGroup';
|
37
41
|
export { default as StringInputGroup } from './Input/StringInputGroup';
|
38
42
|
export * as normalizers from './Normalization/normalizers';
|
39
43
|
// Select
|
@@ -10,5 +10,5 @@ export interface DatePickerGroupProps<T> extends InjectedFieldProps<T | undefine
|
|
10
10
|
*
|
11
11
|
* Uses [react-date-picker](https://www.npmjs.com/package/react-date-picker)
|
12
12
|
*/
|
13
|
-
export default function DatePickerGroup<T>({ input, meta, label, helpText, className, required, disabled, convert, ...rest }: DatePickerGroupProps<T>): JSX.Element;
|
13
|
+
export default function DatePickerGroup<T>({ input, meta, label, helpText, className, required, disabled, convert, maxDate, minDate, ...rest }: DatePickerGroupProps<T>): JSX.Element;
|
14
14
|
export declare function convertToTimeZoneInsensitiveISOString(date: Date): string;
|
@@ -39,8 +39,8 @@ var Group_1 = __importDefault(require("../Group"));
|
|
39
39
|
* Uses [react-date-picker](https://www.npmjs.com/package/react-date-picker)
|
40
40
|
*/
|
41
41
|
function DatePickerGroup(_a) {
|
42
|
-
var input = _a.input, meta = _a.meta, label = _a.label, helpText = _a.helpText, className = _a.className, required = _a.required, disabled = _a.disabled, convert = _a.convert, rest = __rest(_a, ["input", "meta", "label", "helpText", "className", "required", "disabled", "convert"]);
|
43
|
-
var
|
42
|
+
var input = _a.input, meta = _a.meta, label = _a.label, helpText = _a.helpText, className = _a.className, required = _a.required, disabled = _a.disabled, convert = _a.convert, _b = _a.maxDate, maxDate = _b === void 0 ? new Date(9999, 11, 31) : _b, _c = _a.minDate, minDate = _c === void 0 ? new Date(1000, 0, 1) : _c, rest = __rest(_a, ["input", "meta", "label", "helpText", "className", "required", "disabled", "convert", "maxDate", "minDate"]);
|
43
|
+
var _d = (0, react_1.useState)(null), displayDate = _d[0], setDisplayDate = _d[1];
|
44
44
|
(0, react_1.useEffect)(function () {
|
45
45
|
if (!input.value) {
|
46
46
|
setDisplayDate(null);
|
@@ -54,7 +54,7 @@ function DatePickerGroup(_a) {
|
|
54
54
|
}
|
55
55
|
}
|
56
56
|
}, [setDisplayDate, input.value]);
|
57
|
-
return ((0, jsx_runtime_1.jsx)(Group_1.default, __assign({ input: input, meta: meta, label: label, helpText: helpText, className: (0, classnames_1.default)(className, FormDefaults_1.FormDefaults.cssClassPrefix + 'date-picker'), required: required, disabled: disabled }, { children: (0, jsx_runtime_1.jsx)(entry_nostyle_1.default, __assign({}, rest, { className: (0, classnames_1.default)(FormDefaults_1.FormDefaults.cssClassPrefix + 'date-picker', className), value: displayDate, onChange: handleChange })) })));
|
57
|
+
return ((0, jsx_runtime_1.jsx)(Group_1.default, __assign({ input: input, meta: meta, label: label, helpText: helpText, className: (0, classnames_1.default)(className, FormDefaults_1.FormDefaults.cssClassPrefix + 'date-picker'), required: required, disabled: disabled }, { children: (0, jsx_runtime_1.jsx)(entry_nostyle_1.default, __assign({}, rest, { className: (0, classnames_1.default)(FormDefaults_1.FormDefaults.cssClassPrefix + 'date-picker', className), value: displayDate, onChange: handleChange, maxDate: maxDate, minDate: minDate })) })));
|
58
58
|
function handleChange(e) {
|
59
59
|
var onChange = input.onChange;
|
60
60
|
if (onChange === null) {
|
@@ -87,6 +87,7 @@ exports.default = DatePickerGroup;
|
|
87
87
|
function convertToTimeZoneInsensitiveISOString(date) {
|
88
88
|
var year = new Intl.DateTimeFormat('en', { year: 'numeric' })
|
89
89
|
.format(date)
|
90
|
+
.substring(0, 4)
|
90
91
|
.padStart(4, '0');
|
91
92
|
var month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(date);
|
92
93
|
var day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date);
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/// <reference types="react" />
|
2
|
+
import { DateTimePickerProps } from 'react-datetime-picker';
|
3
|
+
import { InjectedFieldProps } from '../Field/InjectedFieldProps';
|
4
|
+
import { GroupProps } from '../Group';
|
5
|
+
export interface DateTimePickerGroupProps<T> extends InjectedFieldProps<T | undefined | null>, Omit<DateTimePickerProps, keyof InjectedFieldProps<T> | 'name' | 'value' | 'className'>, Omit<GroupProps, keyof InjectedFieldProps<T> | 'children'> {
|
6
|
+
convert: (date: Date) => T;
|
7
|
+
}
|
8
|
+
/**
|
9
|
+
* Field for inputting date and time. Uses `<Group/>` and `<DateTimePicker/>`.
|
10
|
+
*
|
11
|
+
* Uses [react-datetime-picker](https://www.npmjs.com/package/react-datetime-picker)
|
12
|
+
*/
|
13
|
+
export default function DateTimePickerGroup<T>({ input, meta, label, helpText, className, required, disabled, convert, ...rest }: DateTimePickerGroupProps<T>): JSX.Element;
|
@@ -0,0 +1,93 @@
|
|
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 = require("react");
|
30
|
+
var react_datetime_picker_1 = require("react-datetime-picker");
|
31
|
+
var classnames_1 = __importDefault(require("classnames"));
|
32
|
+
var parseISO_1 = __importDefault(require("date-fns/parseISO"));
|
33
|
+
var FormDefaults_1 = require("../FormDefaults");
|
34
|
+
var Group_1 = __importDefault(require("../Group"));
|
35
|
+
/**
|
36
|
+
* Field for inputting date and time. Uses `<Group/>` and `<DateTimePicker/>`.
|
37
|
+
*
|
38
|
+
* Uses [react-datetime-picker](https://www.npmjs.com/package/react-datetime-picker)
|
39
|
+
*/
|
40
|
+
function DateTimePickerGroup(_a) {
|
41
|
+
var input = _a.input, meta = _a.meta, label = _a.label, helpText = _a.helpText, className = _a.className, required = _a.required, disabled = _a.disabled, convert = _a.convert, rest = __rest(_a, ["input", "meta", "label", "helpText", "className", "required", "disabled", "convert"]);
|
42
|
+
var _b = (0, react_1.useState)(null), displayDateTime = _b[0], setDisplayDateTime = _b[1];
|
43
|
+
(0, react_1.useEffect)(function () {
|
44
|
+
var inputValue = input.value;
|
45
|
+
if (!inputValue) {
|
46
|
+
setDisplayDateTime(null);
|
47
|
+
}
|
48
|
+
else if (typeof inputValue === 'string') {
|
49
|
+
var parsedDateTime = convertISODateTimeStringToDate(inputValue);
|
50
|
+
setDisplayDateTime(parsedDateTime);
|
51
|
+
}
|
52
|
+
else if (inputValue instanceof Date) {
|
53
|
+
setDisplayDateTime(inputValue);
|
54
|
+
}
|
55
|
+
}, [setDisplayDateTime, input.value]);
|
56
|
+
return ((0, jsx_runtime_1.jsx)(Group_1.default, __assign({ input: input, meta: meta, label: label, helpText: helpText, className: (0, classnames_1.default)(className, FormDefaults_1.FormDefaults.cssClassPrefix + 'date-time-picker'), required: required, disabled: disabled }, { children: (0, jsx_runtime_1.jsx)(react_datetime_picker_1.DateTimePicker, __assign({}, rest, { className: (0, classnames_1.default)(FormDefaults_1.FormDefaults.cssClassPrefix + 'date-time-picker', className), value: displayDateTime, onChange: handleChange })) })));
|
57
|
+
function handleChange(newDateTime) {
|
58
|
+
var onChange = input.onChange;
|
59
|
+
if (onChange === null) {
|
60
|
+
return;
|
61
|
+
}
|
62
|
+
if (!newDateTime) {
|
63
|
+
onChange(undefined);
|
64
|
+
setDisplayDateTime(null);
|
65
|
+
return;
|
66
|
+
}
|
67
|
+
else if (typeof newDateTime === 'string') {
|
68
|
+
var parsedDateTime = (0, parseISO_1.default)(newDateTime);
|
69
|
+
setDisplayDateTime(parsedDateTime);
|
70
|
+
onChange(convert(parsedDateTime));
|
71
|
+
}
|
72
|
+
else if (newDateTime instanceof Date) {
|
73
|
+
setDisplayDateTime(newDateTime);
|
74
|
+
onChange(convert(newDateTime));
|
75
|
+
}
|
76
|
+
}
|
77
|
+
}
|
78
|
+
exports.default = DateTimePickerGroup;
|
79
|
+
function convertISODateTimeStringToDate(isoDateTimeString) {
|
80
|
+
var isoDateTimeRegex = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?)([+-]\d{2}:\d{2}|Z)?$/;
|
81
|
+
var isValidIsoDateTimeString = isoDateTimeRegex.test(isoDateTimeString);
|
82
|
+
if (isValidIsoDateTimeString) {
|
83
|
+
return new Date(isoDateTimeString);
|
84
|
+
}
|
85
|
+
var errorMessage = "Invalid \"date time\" value of ".concat(isoDateTimeString, " provided to DateTimePickerGroup component. Please provide ISO 8601 string that includes the time zone designator. Sample strings: 2022-09-24T:08:54:12+00:00, 2022-09-24T:08:54:12Z, 2022-09-24T:08:54:12.123-05:00");
|
86
|
+
if (process.env.NODE_ENV !== 'production') {
|
87
|
+
throw new Error(errorMessage);
|
88
|
+
}
|
89
|
+
else {
|
90
|
+
console.error(errorMessage);
|
91
|
+
}
|
92
|
+
return null;
|
93
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
/// <reference types="react" />
|
2
|
+
import { DateTimePickerHelper } from './DateTimePickerHelper';
|
3
|
+
export interface StringDateTimePickerGroupProps extends DateTimePickerHelper<string | undefined | null> {
|
4
|
+
}
|
5
|
+
/**
|
6
|
+
* Date Time picker input that consumes JS Date object and outputs as a date time offset string in ISO format `YYYY-MM-DDTHH:mm:ss.sss±hh:mm`.
|
7
|
+
*
|
8
|
+
* Default display to the user is in `MM/DD/YYYY HH:mm:ss AM/PM` format.
|
9
|
+
*/
|
10
|
+
export default function StringDateTimePickerGroup(props: StringDateTimePickerGroupProps): JSX.Element;
|
@@ -0,0 +1,59 @@
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
18
|
+
var DateTimePickerGroup_1 = __importDefault(require("./DateTimePickerGroup"));
|
19
|
+
/**
|
20
|
+
* Date Time picker input that consumes JS Date object and outputs as a date time offset string in ISO format `YYYY-MM-DDTHH:mm:ss.sss±hh:mm`.
|
21
|
+
*
|
22
|
+
* Default display to the user is in `MM/DD/YYYY HH:mm:ss AM/PM` format.
|
23
|
+
*/
|
24
|
+
function StringDateTimePickerGroup(props) {
|
25
|
+
return (0, jsx_runtime_1.jsx)(DateTimePickerGroup_1.default, __assign({}, props, { convert: convertToISOString }));
|
26
|
+
}
|
27
|
+
exports.default = StringDateTimePickerGroup;
|
28
|
+
function convertToISOString(date) {
|
29
|
+
// Get the offset in minutes
|
30
|
+
var offsetMinutes = date.getTimezoneOffset();
|
31
|
+
// Calculate the offset in hours and minutes
|
32
|
+
var offsetHours = Math.floor(Math.abs(offsetMinutes) / 60);
|
33
|
+
var offsetMinutesPart = Math.abs(offsetMinutes) % 60;
|
34
|
+
// Format the offset in the required format (+/-hh:mm)
|
35
|
+
var offsetString = (offsetMinutes >= 0 ? '-' : '+') +
|
36
|
+
String(offsetHours).padStart(2, '0') +
|
37
|
+
':' +
|
38
|
+
String(offsetMinutesPart).padStart(2, '0');
|
39
|
+
// Format the date in the required format using `intl.DateTimeFormat`
|
40
|
+
var year = new Intl.DateTimeFormat('en', { year: 'numeric' })
|
41
|
+
.format(date)
|
42
|
+
.padStart(4, '0');
|
43
|
+
var month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(date);
|
44
|
+
var day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date);
|
45
|
+
var hour = new Intl.DateTimeFormat('en', {
|
46
|
+
hour: '2-digit',
|
47
|
+
hourCycle: 'h23',
|
48
|
+
}).format(date);
|
49
|
+
var minute = new Intl.DateTimeFormat('en', { minute: '2-digit' })
|
50
|
+
.format(date)
|
51
|
+
.padStart(2, '0');
|
52
|
+
var second = new Intl.DateTimeFormat('en', {
|
53
|
+
second: '2-digit',
|
54
|
+
fractionalSecondDigits: 3,
|
55
|
+
})
|
56
|
+
.format(date)
|
57
|
+
.padStart(6, '0');
|
58
|
+
return "".concat(year, "-").concat(month, "-").concat(day, "T").concat(hour, ":").concat(minute, ":").concat(second).concat(offsetString);
|
59
|
+
}
|
@@ -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;
|