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.
Files changed (47) hide show
  1. package/README.md +5266 -940
  2. package/es/DatePicker/DatePickerGroup.d.ts +1 -1
  3. package/es/DatePicker/DatePickerGroup.js +4 -3
  4. package/es/DateTimePicker/DateTimePickerGroup.d.ts +13 -0
  5. package/es/DateTimePicker/DateTimePickerGroup.js +87 -0
  6. package/es/DateTimePicker/DateTimePickerHelper.d.ts +3 -0
  7. package/es/DateTimePicker/DateTimePickerHelper.js +1 -0
  8. package/es/DateTimePicker/StringDateTimePickerGroup.d.ts +10 -0
  9. package/es/DateTimePicker/StringDateTimePickerGroup.js +53 -0
  10. package/es/Input/PhoneNumberInputGroup.d.ts +10 -0
  11. package/es/Input/PhoneNumberInputGroup.js +47 -0
  12. package/es/hooks/index.d.ts +2 -0
  13. package/es/hooks/index.js +2 -0
  14. package/es/hooks/useFormValue.d.ts +2 -0
  15. package/es/hooks/useFormValue.js +7 -0
  16. package/es/index.d.ts +6 -0
  17. package/es/index.js +4 -0
  18. package/lib/DatePicker/DatePickerGroup.d.ts +1 -1
  19. package/lib/DatePicker/DatePickerGroup.js +4 -3
  20. package/lib/DateTimePicker/DateTimePickerGroup.d.ts +13 -0
  21. package/lib/DateTimePicker/DateTimePickerGroup.js +93 -0
  22. package/lib/DateTimePicker/DateTimePickerHelper.d.ts +3 -0
  23. package/lib/DateTimePicker/DateTimePickerHelper.js +2 -0
  24. package/lib/DateTimePicker/StringDateTimePickerGroup.d.ts +10 -0
  25. package/lib/DateTimePicker/StringDateTimePickerGroup.js +59 -0
  26. package/lib/Input/PhoneNumberInputGroup.d.ts +10 -0
  27. package/lib/Input/PhoneNumberInputGroup.js +52 -0
  28. package/lib/hooks/index.d.ts +2 -0
  29. package/lib/hooks/index.js +8 -0
  30. package/lib/hooks/useFormValue.d.ts +2 -0
  31. package/lib/hooks/useFormValue.js +10 -0
  32. package/lib/index.d.ts +6 -0
  33. package/lib/index.js +8 -1
  34. package/package.json +5 -4
  35. package/src/DatePicker/DatePickerGroup.tsx +5 -0
  36. package/src/DateTimePicker/DateTimePicker.test.tsx +243 -0
  37. package/src/DateTimePicker/DateTimePickerGroup.tsx +116 -0
  38. package/src/DateTimePicker/DateTimePickerHelper.ts +4 -0
  39. package/src/DateTimePicker/StringDateTimePickerGroup.tsx +61 -0
  40. package/src/DateTimePicker/__snapshots__/DateTimePicker.test.tsx.snap +216 -0
  41. package/src/Input/PhoneNumberInputGroup.tsx +49 -0
  42. package/src/Input/__Tests__/PhoneNumberInputGroup.test.tsx +37 -0
  43. package/src/Input/__Tests__/__snapshots__/PhoneNumberInputGroup.test.tsx.snap +33 -0
  44. package/src/__Tests__/FormTestBase.tsx +1 -0
  45. package/src/hooks/index.ts +3 -0
  46. package/src/hooks/useFormValue.ts +16 -0
  47. package/src/index.ts +10 -0
@@ -0,0 +1,216 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`StringDateTimePickerGroup has matching snapshot 1`] = `
4
+ <DocumentFragment>
5
+ <form
6
+ action="#"
7
+ class="envoc-form-form"
8
+ >
9
+ <div
10
+ class="envoc-form-date-time-picker envoc-form-group"
11
+ >
12
+ <div
13
+ id="createddatetime-error-scroll-target"
14
+ style="display: none;"
15
+ />
16
+ <label
17
+ for="createdDateTime"
18
+ >
19
+ Created Date Time
20
+ </label>
21
+ <div
22
+ class="react-datetime-picker react-datetime-picker--closed react-datetime-picker--enabled envoc-form-date-time-picker"
23
+ id="createdDateTime"
24
+ >
25
+ <div
26
+ class="react-datetime-picker__wrapper"
27
+ >
28
+ <div
29
+ class="react-datetime-picker__inputGroup"
30
+ >
31
+ <input
32
+ hidden=""
33
+ max="2023-09-23T00:00"
34
+ min="2022-06-22T00:00"
35
+ name="datetime"
36
+ step="60"
37
+ style="visibility: hidden; position: absolute; z-index: -999;"
38
+ type="datetime-local"
39
+ value=""
40
+ />
41
+ <input
42
+ autocomplete="off"
43
+ class="react-datetime-picker__inputGroup__input react-datetime-picker__inputGroup__month"
44
+ data-input="true"
45
+ inputmode="numeric"
46
+ max="12"
47
+ min="1"
48
+ name="month"
49
+ placeholder="mm"
50
+ type="number"
51
+ value=""
52
+ />
53
+ <span
54
+ class="react-datetime-picker__inputGroup__divider"
55
+ >
56
+ /
57
+ </span>
58
+ <input
59
+ autocomplete="off"
60
+ class="react-datetime-picker__inputGroup__input react-datetime-picker__inputGroup__day"
61
+ data-input="true"
62
+ inputmode="numeric"
63
+ max="31"
64
+ min="1"
65
+ name="day"
66
+ placeholder="dd"
67
+ type="number"
68
+ value=""
69
+ />
70
+ <span
71
+ class="react-datetime-picker__inputGroup__divider"
72
+ >
73
+ /
74
+ </span>
75
+ <input
76
+ autocomplete="off"
77
+ class="react-datetime-picker__inputGroup__input react-datetime-picker__inputGroup__year"
78
+ data-input="true"
79
+ inputmode="numeric"
80
+ max="2023"
81
+ min="2022"
82
+ name="year"
83
+ placeholder="yyyy"
84
+ step="1"
85
+ type="number"
86
+ value=""
87
+ />
88
+ <span
89
+ class="react-datetime-picker__inputGroup__divider"
90
+ >
91
+  
92
+ </span>
93
+ <input
94
+ autocomplete="off"
95
+ class="react-datetime-picker__inputGroup__input react-datetime-picker__inputGroup__hour"
96
+ data-input="true"
97
+ inputmode="numeric"
98
+ max="12"
99
+ min="1"
100
+ name="hour12"
101
+ placeholder="--"
102
+ type="number"
103
+ value=""
104
+ />
105
+ <span
106
+ class="react-datetime-picker__inputGroup__divider"
107
+ >
108
+ :
109
+ </span>
110
+ <input
111
+ autocomplete="off"
112
+ class="react-datetime-picker__inputGroup__input react-datetime-picker__inputGroup__minute"
113
+ data-input="true"
114
+ inputmode="numeric"
115
+ max="59"
116
+ min="0"
117
+ name="minute"
118
+ placeholder="--"
119
+ type="number"
120
+ value=""
121
+ />
122
+ <span
123
+ class="react-datetime-picker__inputGroup__divider"
124
+ >
125
+
126
+ </span>
127
+ <select
128
+ class="react-datetime-picker__inputGroup__input react-datetime-picker__inputGroup__amPm"
129
+ data-input="true"
130
+ data-select="true"
131
+ name="amPm"
132
+ >
133
+ <option
134
+ value=""
135
+ >
136
+ --
137
+ </option>
138
+ <option
139
+ value="am"
140
+ >
141
+ AM
142
+ </option>
143
+ <option
144
+ value="pm"
145
+ >
146
+ PM
147
+ </option>
148
+ </select>
149
+ </div>
150
+ <button
151
+ class="react-datetime-picker__clear-button react-datetime-picker__button"
152
+ type="button"
153
+ >
154
+ <svg
155
+ class="react-datetime-picker__clear-button__icon react-datetime-picker__button__icon"
156
+ height="19"
157
+ stroke="black"
158
+ stroke-width="2"
159
+ viewBox="0 0 19 19"
160
+ width="19"
161
+ xmlns="http://www.w3.org/2000/svg"
162
+ >
163
+ <line
164
+ x1="4"
165
+ x2="15"
166
+ y1="4"
167
+ y2="15"
168
+ />
169
+ <line
170
+ x1="15"
171
+ x2="4"
172
+ y1="4"
173
+ y2="15"
174
+ />
175
+ </svg>
176
+ </button>
177
+ <button
178
+ class="react-datetime-picker__calendar-button react-datetime-picker__button"
179
+ type="button"
180
+ >
181
+ <svg
182
+ class="react-datetime-picker__calendar-button__icon react-datetime-picker__button__icon"
183
+ height="19"
184
+ stroke="black"
185
+ stroke-width="2"
186
+ viewBox="0 0 19 19"
187
+ width="19"
188
+ xmlns="http://www.w3.org/2000/svg"
189
+ >
190
+ <rect
191
+ fill="none"
192
+ height="15"
193
+ width="15"
194
+ x="2"
195
+ y="2"
196
+ />
197
+ <line
198
+ x1="6"
199
+ x2="6"
200
+ y1="0"
201
+ y2="4"
202
+ />
203
+ <line
204
+ x1="13"
205
+ x2="13"
206
+ y1="0"
207
+ y2="4"
208
+ />
209
+ </svg>
210
+ </button>
211
+ </div>
212
+ </div>
213
+ </div>
214
+ </form>
215
+ </DocumentFragment>
216
+ `;
@@ -0,0 +1,49 @@
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
+
13
+ function PhoneNumberInputGroup(
14
+ { className, ...rest }: PhoneNumberInputGroupProps,
15
+ ref: LegacyRef<HTMLInputElement>
16
+ ) {
17
+ const { input } = rest;
18
+
19
+ return (
20
+ <InputGroup
21
+ ref={ref}
22
+ autoComplete="tel-national"
23
+ {...rest}
24
+ type="text"
25
+ className={classNames(
26
+ className,
27
+ FormDefaults.cssClassPrefix + 'phone-number-group'
28
+ )}
29
+ value={input.value ?? ''}
30
+ onChange={(e) => {
31
+ if (!e.target.value) {
32
+ input.onChange(undefined);
33
+ } else {
34
+ input.onChange(phoneNumber(e.target.value));
35
+ }
36
+ }}
37
+ />
38
+ );
39
+ }
40
+
41
+ /**A standard phone number input. Will display to the user in `+XXX XXX-XXX-XXXX` format as the number is being inputted.
42
+ * The data will get sent in the same format as displayed. Uses `normalizers.phoneNumber`.
43
+ * @default autoComplete="tel-national"
44
+ */
45
+ const PhoneNumberInputGroupWithRef = React.forwardRef(
46
+ PhoneNumberInputGroup
47
+ ) as React.ComponentType<PhoneNumberInputGroupProps>;
48
+
49
+ export default PhoneNumberInputGroupWithRef;
@@ -0,0 +1,37 @@
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
+
22
+ it('has matching snapshot', () => {
23
+ const renderResult = render(
24
+ <FormTestBase>
25
+ {({ Field }) => (
26
+ <Field
27
+ name="phoneNumber"
28
+ Component={PhoneNumberInputGroup}
29
+ label="Phone Number"
30
+ className="something-here"
31
+ />
32
+ )}
33
+ </FormTestBase>
34
+ );
35
+ expect(renderResult.asFragment()).toMatchSnapshot();
36
+ });
37
+ });
@@ -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
+ `;
@@ -57,6 +57,7 @@ export interface PersonDto {
57
57
  favoriteColor?: string;
58
58
  favoriteColors?: string[];
59
59
  favoriteNames?: string[];
60
+ createdDateTime?: string;
60
61
  allowLogin?: boolean;
61
62
  userRoles?: number[];
62
63
  profileImage?: any;
@@ -0,0 +1,3 @@
1
+ import useFormValue from './useFormValue';
2
+
3
+ export { useFormValue };
@@ -0,0 +1,16 @@
1
+ import { useCallback } from 'react';
2
+ import { FormBuilderProp } from 'Form/Form';
3
+ import { useFormikContext } from 'formik';
4
+
5
+ export default function useFormValue<
6
+ TForm extends object,
7
+ TPropKey extends keyof TForm
8
+ >(formBuilder: FormBuilderProp<TForm>, fieldName: TPropKey) {
9
+ const { values, setFieldValue } = useFormikContext<TForm>();
10
+ const setValue = useCallback(
11
+ (value: TForm[TPropKey]) => setFieldValue(fieldName as string, value),
12
+ [fieldName, setFieldValue]
13
+ );
14
+
15
+ return [values[fieldName], setValue] as const;
16
+ }
package/src/index.ts CHANGED
@@ -27,6 +27,13 @@ export type { StringDatePickerGroupProps } from './DatePicker/StringDatePickerGr
27
27
  export { default as StringDateOnlyPickerGroup } from './DatePicker/StringDateOnlyPickerGroup';
28
28
  export type { StringDateOnlyPickerGroupProps } from './DatePicker/StringDateOnlyPickerGroup';
29
29
 
30
+ // DateTime
31
+ export { default as DateTimePickerGroup } from './DateTimePicker/DateTimePickerGroup';
32
+ export type { DateTimePickerGroupProps } from './DateTimePicker/DateTimePickerGroup';
33
+
34
+ export { default as StringDateTimePickerGroup } from './DateTimePicker/StringDateTimePickerGroup';
35
+ export type { StringDateTimePickerGroupProps } from './DateTimePicker/StringDateTimePickerGroup';
36
+
30
37
  // Field
31
38
  export { default as Field } from './Field/Field';
32
39
  export type { FieldProps } from './Field/Field';
@@ -92,6 +99,9 @@ export type { MoneyInputGroupProps } from './Input/MoneyInputGroup';
92
99
  export { default as NumberInputGroup } from './Input/NumberInputGroup';
93
100
  export type { NumberInputGroupProps } from './Input/NumberInputGroup';
94
101
 
102
+ export { default as PhoneNumberInputGroup } from './Input/PhoneNumberInputGroup';
103
+ export type { PhoneNumberInputGroupProps } from './Input/PhoneNumberInputGroup';
104
+
95
105
  export { default as StringInputGroup } from './Input/StringInputGroup';
96
106
  export type { StringInputGroupProps } from './Input/StringInputGroup';
97
107