envoc-form 2.0.1-7 → 2.0.1

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 (143) hide show
  1. package/README.md +7 -7
  2. package/dist/css/envoc-form-styles.css +43 -5
  3. package/dist/css/envoc-form-styles.css.map +1 -1
  4. package/es/AddressInput/AddressInput.js +7 -6
  5. package/es/ConfirmBaseForm/ConfirmBaseForm.js +3 -2
  6. package/es/ConfirmDeleteForm/ConfirmDeleteForm.js +2 -1
  7. package/es/DatePickerInput/DatePickerInput.js +22 -5
  8. package/es/FileInput/DefaultFileList.js +12 -8
  9. package/es/FileInput/DropzoneFileInput.js +24 -23
  10. package/es/FileInput/FileInput.js +31 -9
  11. package/es/Form/Form.js +4 -2
  12. package/es/FormGroupWrapper.js +2 -1
  13. package/es/FormInput/FormInput.js +12 -6
  14. package/es/FormInputArray/FormInputArray.js +39 -24
  15. package/es/IconInput.js +2 -1
  16. package/es/ReactSelectField/ReactSelectField.js +6 -3
  17. package/es/SubmitFormButton.js +2 -1
  18. package/es/__Tests__/FormTestBase.js +5 -2
  19. package/es/normalizers.js +10 -5
  20. package/es/useStandardFormInput.js +4 -2
  21. package/es/utils/objectToFormData.js +10 -2
  22. package/lib/AddressInput/AddressInput.js +14 -8
  23. package/lib/ConfirmBaseForm/ConfirmBaseForm.js +4 -2
  24. package/lib/ConfirmDeleteForm/ConfirmDeleteForm.js +3 -1
  25. package/lib/DatePickerInput/DatePickerInput.js +25 -5
  26. package/lib/FileInput/DefaultFileList.js +20 -13
  27. package/lib/FileInput/DropzoneFileInput.js +25 -25
  28. package/lib/FileInput/FileInput.js +39 -10
  29. package/lib/Form/Form.js +11 -4
  30. package/lib/Form/FormBasedPreventNavigation.js +5 -1
  31. package/lib/FormGroupWrapper.js +3 -1
  32. package/lib/FormInput/FormInput.js +13 -6
  33. package/lib/FormInputArray/FormInputArray.js +47 -26
  34. package/lib/FormSection.js +5 -1
  35. package/lib/IconInput.js +3 -1
  36. package/lib/ReactSelectField/ReactSelectField.js +13 -5
  37. package/lib/ReactSelectField/index.js +6 -2
  38. package/lib/SubmitFormButton.js +3 -1
  39. package/lib/__Tests__/FormTestBase.js +6 -2
  40. package/lib/index.js +7 -3
  41. package/lib/normalizers.js +10 -5
  42. package/lib/useStandardFormInput.js +5 -2
  43. package/lib/utils/objectToFormData.js +10 -2
  44. package/lib/validators/index.js +5 -1
  45. package/package.json +99 -93
  46. package/src/AddressInput/AddesssInput.test.js +23 -23
  47. package/src/AddressInput/AddressInput.js +73 -73
  48. package/src/AddressInput/UsStates.js +53 -53
  49. package/src/AddressInput/__snapshots__/AddesssInput.test.js.snap +207 -207
  50. package/src/AddressInput/index.js +2 -2
  51. package/src/BoolInput/BoolInput.js +7 -7
  52. package/src/BoolInput/BoolInput.test.js +23 -23
  53. package/src/BoolInput/InlineBoolInput.js +7 -7
  54. package/src/BoolInput/__snapshots__/BoolInput.test.js.snap +89 -89
  55. package/src/BoolInput/boolOptions.js +6 -6
  56. package/src/BoolInput/index.js +4 -4
  57. package/src/ConfirmBaseForm/ConfirmBaseForm.js +37 -37
  58. package/src/ConfirmBaseForm/ConfirmBaseForm.test.js +14 -14
  59. package/src/ConfirmBaseForm/__snapshots__/ConfirmBaseForm.test.js.snap +23 -23
  60. package/src/ConfirmBaseForm/index.js +1 -1
  61. package/src/ConfirmDeleteForm/ConfirmDeleteForm.js +39 -39
  62. package/src/ConfirmDeleteForm/ConfirmDeleteForm.test.js +24 -24
  63. package/src/ConfirmDeleteForm/__snapshots__/ConfirmDeleteForm.test.js.snap +25 -25
  64. package/src/ConfirmDeleteForm/index.js +1 -1
  65. package/src/DatePickerInput/DatePickerInput.js +58 -46
  66. package/src/DatePickerInput/DatePickerInput.test.js +74 -74
  67. package/src/DatePickerInput/__snapshots__/DatePickerInput.test.js.snap +134 -134
  68. package/src/DatePickerInput/date-picker-input.scss +42 -42
  69. package/src/DatePickerInput/index.js +3 -3
  70. package/src/ErrorScrollTarget.js +6 -6
  71. package/src/FileInput/DefaultFileList.js +39 -39
  72. package/src/FileInput/DropzoneFileInput.js +56 -59
  73. package/src/FileInput/DropzoneFileInput.test.js +24 -0
  74. package/src/FileInput/FileInput.js +77 -49
  75. package/src/FileInput/FileInput.test.js +24 -15
  76. package/src/FileInput/__snapshots__/DropzoneFileInput.test.js.snap +57 -0
  77. package/src/FileInput/__snapshots__/FileInput.test.js.snap +58 -22
  78. package/src/FileInput/file-input.scss +58 -17
  79. package/src/FileInput/index.js +4 -4
  80. package/src/Form/FocusError.js +48 -48
  81. package/src/Form/Form.js +139 -138
  82. package/src/Form/Form.test.js +23 -23
  83. package/src/Form/FormBasedPreventNavigation.js +25 -25
  84. package/src/Form/ServerErrorContext.js +7 -7
  85. package/src/Form/__snapshots__/Form.test.js.snap +9 -9
  86. package/src/Form/index.js +3 -3
  87. package/src/FormGroup.js +30 -30
  88. package/src/FormGroupWrapper.js +28 -28
  89. package/src/FormInput/FormInput.js +144 -144
  90. package/src/FormInput/FormInput.test.js +66 -66
  91. package/src/FormInput/__snapshots__/FormInput.test.js.snap +323 -316
  92. package/src/FormInput/form-input.scss +9 -9
  93. package/src/FormInput/index.js +2 -2
  94. package/src/FormInputArray/FormInputArray.js +224 -210
  95. package/src/FormInputArray/FormInputArray.test.js +108 -59
  96. package/src/FormInputArray/__snapshots__/FormInputArray.test.js.snap +52 -40
  97. package/src/FormInputArray/form-input-array.scss +13 -8
  98. package/src/FormInputArray/index.js +2 -2
  99. package/src/FormSection.js +13 -13
  100. package/src/IconInput.js +31 -31
  101. package/src/InlineFormInput/InlineFormInput.js +6 -6
  102. package/src/InlineFormInput/InlineFormInput.test.js +23 -23
  103. package/src/InlineFormInput/__snapshots__/InlineFormInput.test.js.snap +26 -26
  104. package/src/InlineFormInput/index.js +3 -3
  105. package/src/InlineFormInput/inline-form-input.scss +3 -3
  106. package/src/MoneyInput/InlineMoneyInput.js +7 -7
  107. package/src/MoneyInput/MoneyInput.js +7 -7
  108. package/src/MoneyInput/MoneyInputs.test.js +43 -43
  109. package/src/MoneyInput/__snapshots__/MoneyInputs.test.js.snap +81 -81
  110. package/src/MoneyInput/index.js +4 -4
  111. package/src/MoneyInput/money-input.scss +3 -3
  112. package/src/MoneyInput/moneyInputProps.js +12 -12
  113. package/src/NestedFormFieldContext.js +6 -6
  114. package/src/ReactSelectField/ReactSelectField.js +122 -120
  115. package/src/ReactSelectField/index.js +6 -6
  116. package/src/ReactSelectField/react-select-field.scss +5 -5
  117. package/src/StandardFormActions.js +27 -27
  118. package/src/SubmitFormButton.js +28 -28
  119. package/src/__Tests__/FormTestBase.js +14 -11
  120. package/src/__Tests__/IconInput.test.js +23 -23
  121. package/src/__Tests__/StandardFormActions.test.js +23 -23
  122. package/src/__Tests__/SubmitFormButton.test.js +23 -23
  123. package/src/__Tests__/__snapshots__/IconInput.test.js.snap +38 -38
  124. package/src/__Tests__/__snapshots__/StandardFormActions.test.js.snap +25 -25
  125. package/src/__Tests__/__snapshots__/SubmitFormButton.test.js.snap +18 -18
  126. package/src/__Tests__/index.js +2 -2
  127. package/src/_variables.scss +11 -11
  128. package/src/index.js +33 -33
  129. package/src/normalizers.js +42 -32
  130. package/src/selectors.js +3 -3
  131. package/src/styles.scss +7 -7
  132. package/src/useStandardFormInput.js +118 -118
  133. package/src/utils/index.js +3 -3
  134. package/src/utils/objectContainsNonSerializableProperty.js +15 -15
  135. package/src/utils/objectContainsNonSerializableProperty.test.js +49 -49
  136. package/src/utils/objectToFormData.js +89 -83
  137. package/src/utils/objectToFormData.test.js +76 -47
  138. package/src/utils/typeChecks.js +18 -18
  139. package/src/validators/index.js +2 -2
  140. package/src/validators/validators.js +93 -93
  141. package/src/validators/validators.test.js +79 -79
  142. package/CHANGELOG.json +0 -95
  143. package/CHANGELOG.md +0 -58
@@ -1,89 +1,89 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`BoolInput has matching snapshot 1`] = `
4
- <DocumentFragment>
5
- <form
6
- action="#"
7
- >
8
- <div
9
- class="form-group"
10
- >
11
- <div
12
- id="yesno-error-scroll-target"
13
- style="display: none;"
14
- />
15
- <div
16
- class="react-select-input css-2b097c-container"
17
- id="yesNo"
18
- >
19
- <div
20
- class=" css-150ye8w-control"
21
- >
22
- <div
23
- class=" css-lbak6p-Component"
24
- >
25
- <div
26
- class=" css-1osw1h9-placeholder"
27
- >
28
- Select...
29
- </div>
30
- <div
31
- class="css-lp83hw-Component"
32
- >
33
- <div
34
- class=""
35
- style="display: inline-block;"
36
- >
37
- <input
38
- aria-autocomplete="list"
39
- autocapitalize="none"
40
- autocomplete="off"
41
- autocorrect="off"
42
- id="react-select-3-input"
43
- spellcheck="false"
44
- style="box-sizing: content-box; width: 2px; border: 0px; opacity: 1; outline: 0; padding: 0px;"
45
- tabindex="0"
46
- type="text"
47
- value=""
48
- />
49
- <div
50
- style="position: absolute; top: 0px; left: 0px; visibility: hidden; height: 0px; overflow: scroll; white-space: pre; font-family: -webkit-small-control; letter-spacing: normal; text-transform: none;"
51
- />
52
- </div>
53
- </div>
54
- </div>
55
- <div
56
- class=" css-ny0e4k-Component"
57
- >
58
- <span
59
- class=" css-1sl80az-indicatorSeparator"
60
- />
61
- <div
62
- aria-hidden="true"
63
- class=" css-augegj-indicatorContainer"
64
- >
65
- <svg
66
- aria-hidden="true"
67
- class="css-7ezgaa-Component"
68
- focusable="false"
69
- height="20"
70
- viewBox="0 0 20 20"
71
- width="20"
72
- >
73
- <path
74
- d="M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"
75
- />
76
- </svg>
77
- </div>
78
- </div>
79
- </div>
80
- <input
81
- name="yesNo"
82
- type="hidden"
83
- value=""
84
- />
85
- </div>
86
- </div>
87
- </form>
88
- </DocumentFragment>
89
- `;
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`BoolInput has matching snapshot 1`] = `
4
+ <DocumentFragment>
5
+ <form
6
+ action="#"
7
+ >
8
+ <div
9
+ class="form-group"
10
+ >
11
+ <div
12
+ id="yesno-error-scroll-target"
13
+ style="display: none;"
14
+ />
15
+ <div
16
+ class="react-select-input css-2b097c-container"
17
+ id="yesNo"
18
+ >
19
+ <div
20
+ class=" css-150ye8w-control"
21
+ >
22
+ <div
23
+ class=" css-lbak6p-Component"
24
+ >
25
+ <div
26
+ class=" css-1osw1h9-placeholder"
27
+ >
28
+ Select...
29
+ </div>
30
+ <div
31
+ class="css-lp83hw-Component"
32
+ >
33
+ <div
34
+ class=""
35
+ style="display: inline-block;"
36
+ >
37
+ <input
38
+ aria-autocomplete="list"
39
+ autocapitalize="none"
40
+ autocomplete="off"
41
+ autocorrect="off"
42
+ id="react-select-3-input"
43
+ spellcheck="false"
44
+ style="box-sizing: content-box; width: 2px; border: 0px; opacity: 1; outline: 0; padding: 0px;"
45
+ tabindex="0"
46
+ type="text"
47
+ value=""
48
+ />
49
+ <div
50
+ style="position: absolute; top: 0px; left: 0px; visibility: hidden; height: 0px; overflow: scroll; white-space: pre; font-family: -webkit-small-control; letter-spacing: normal; text-transform: none;"
51
+ />
52
+ </div>
53
+ </div>
54
+ </div>
55
+ <div
56
+ class=" css-ny0e4k-Component"
57
+ >
58
+ <span
59
+ class=" css-1sl80az-indicatorSeparator"
60
+ />
61
+ <div
62
+ aria-hidden="true"
63
+ class=" css-augegj-indicatorContainer"
64
+ >
65
+ <svg
66
+ aria-hidden="true"
67
+ class="css-7ezgaa-Component"
68
+ focusable="false"
69
+ height="20"
70
+ viewBox="0 0 20 20"
71
+ width="20"
72
+ >
73
+ <path
74
+ d="M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"
75
+ />
76
+ </svg>
77
+ </div>
78
+ </div>
79
+ </div>
80
+ <input
81
+ name="yesNo"
82
+ type="hidden"
83
+ value=""
84
+ />
85
+ </div>
86
+ </div>
87
+ </form>
88
+ </DocumentFragment>
89
+ `;
@@ -1,6 +1,6 @@
1
- const boolOptions = [
2
- { label: 'Yes', value: true },
3
- { label: 'No', value: false },
4
- ];
5
-
6
- export default boolOptions;
1
+ const boolOptions = [
2
+ { label: 'Yes', value: true },
3
+ { label: 'No', value: false },
4
+ ];
5
+
6
+ export default boolOptions;
@@ -1,4 +1,4 @@
1
- import BoolInput from './BoolInput';
2
- import InlineBoolInput from './InlineBoolInput';
3
-
4
- export { BoolInput, InlineBoolInput };
1
+ import BoolInput from './BoolInput';
2
+ import InlineBoolInput from './InlineBoolInput';
3
+
4
+ export { BoolInput, InlineBoolInput };
@@ -1,37 +1,37 @@
1
- import React from 'react';
2
- import { Button } from 'reactstrap';
3
- import { useAxiosRequest } from 'envoc-request';
4
-
5
- export default function ConfirmBaseForm({
6
- handleCancel,
7
- request,
8
- yesColor = 'danger',
9
- style,
10
- title,
11
- ...props
12
- }) {
13
- const webRequest = useAxiosRequest(
14
- Object.assign({}, request, { autoExecute: false })
15
- );
16
- return (
17
- <div style={{ textAlign: 'center', ...style }} {...props}>
18
- <h3>{title}</h3>
19
- <Button
20
- color={yesColor}
21
- onClick={webRequest.submitRequest}
22
- disabled={webRequest.loading}>
23
- Yes
24
- </Button>
25
- <Button
26
- type="button"
27
- color="link"
28
- disabled={webRequest.loading}
29
- onClick={handleCancel || goBack}>
30
- Cancel
31
- </Button>
32
- </div>
33
- );
34
- function goBack() {
35
- window.history.back();
36
- }
37
- }
1
+ import React from 'react';
2
+ import { Button } from 'reactstrap';
3
+ import { useAxiosRequest } from 'envoc-request';
4
+
5
+ export default function ConfirmBaseForm({
6
+ handleCancel,
7
+ request,
8
+ yesColor = 'danger',
9
+ style,
10
+ title,
11
+ ...props
12
+ }) {
13
+ const webRequest = useAxiosRequest(
14
+ Object.assign({}, request, { autoExecute: false })
15
+ );
16
+ return (
17
+ <div style={{ textAlign: 'center', ...style }} {...props}>
18
+ <h3>{title}</h3>
19
+ <Button
20
+ color={yesColor}
21
+ onClick={webRequest.submitRequest}
22
+ disabled={webRequest.loading}>
23
+ Yes
24
+ </Button>
25
+ <Button
26
+ type="button"
27
+ color="link"
28
+ disabled={webRequest.loading}
29
+ onClick={handleCancel || goBack}>
30
+ Cancel
31
+ </Button>
32
+ </div>
33
+ );
34
+ function goBack() {
35
+ window.history.back();
36
+ }
37
+ }
@@ -1,14 +1,14 @@
1
- import React from 'react';
2
- import { render, screen } from '@testing-library/react';
3
- import ConfirmBaseForm from './ConfirmBaseForm';
4
-
5
- describe('ConfirmBaseForm', () => {
6
- it('Renders without error', () => {
7
- render(<ConfirmBaseForm />);
8
- });
9
-
10
- it('has matching snapshot', () => {
11
- const renderResult = render(<ConfirmBaseForm />);
12
- expect(renderResult.asFragment()).toMatchSnapshot();
13
- });
14
- });
1
+ import React from 'react';
2
+ import { render, screen } from '@testing-library/react';
3
+ import ConfirmBaseForm from './ConfirmBaseForm';
4
+
5
+ describe('ConfirmBaseForm', () => {
6
+ it('Renders without error', () => {
7
+ render(<ConfirmBaseForm />);
8
+ });
9
+
10
+ it('has matching snapshot', () => {
11
+ const renderResult = render(<ConfirmBaseForm />);
12
+ expect(renderResult.asFragment()).toMatchSnapshot();
13
+ });
14
+ });
@@ -1,23 +1,23 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`ConfirmBaseForm has matching snapshot 1`] = `
4
- <DocumentFragment>
5
- <div
6
- style="text-align: center;"
7
- >
8
- <h3 />
9
- <button
10
- class="btn btn-danger"
11
- type="button"
12
- >
13
- Yes
14
- </button>
15
- <button
16
- class="btn btn-link"
17
- type="button"
18
- >
19
- Cancel
20
- </button>
21
- </div>
22
- </DocumentFragment>
23
- `;
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`ConfirmBaseForm has matching snapshot 1`] = `
4
+ <DocumentFragment>
5
+ <div
6
+ style="text-align: center;"
7
+ >
8
+ <h3 />
9
+ <button
10
+ class="btn btn-danger"
11
+ type="button"
12
+ >
13
+ Yes
14
+ </button>
15
+ <button
16
+ class="btn btn-link"
17
+ type="button"
18
+ >
19
+ Cancel
20
+ </button>
21
+ </div>
22
+ </DocumentFragment>
23
+ `;
@@ -1,2 +1,2 @@
1
- import ConfirmBaseForm from './ConfirmBaseForm';
1
+ import ConfirmBaseForm from './ConfirmBaseForm';
2
2
  export default ConfirmBaseForm;
@@ -1,39 +1,39 @@
1
- import React from 'react';
2
- import { useHistory, useParams } from 'react-router-dom';
3
- import ConfirmBaseForm from '../ConfirmBaseForm';
4
- import { toast } from 'react-toastify';
5
-
6
- export default function ConfirmDeleteForm({
7
- successUrl,
8
- form,
9
- children,
10
- ...props
11
- }) {
12
- const history = useHistory();
13
- const { entityId } = useParams();
14
- const request = {
15
- method: 'delete',
16
- url: `/api/${form}/${entityId}`,
17
- onComplete: () => {
18
- toast.success('Deleted!');
19
- goBack();
20
- },
21
- };
22
- return (
23
- <ConfirmBaseForm
24
- request={request}
25
- handleCancel={goBack}
26
- title="Are you sure you want to delete this?"
27
- {...props}>
28
- {children}
29
- </ConfirmBaseForm>
30
- );
31
-
32
- function goBack() {
33
- if (successUrl) {
34
- history.push(successUrl);
35
- } else {
36
- history.back();
37
- }
38
- }
39
- }
1
+ import React from 'react';
2
+ import { useHistory, useParams } from 'react-router-dom';
3
+ import ConfirmBaseForm from '../ConfirmBaseForm';
4
+ import { toast } from 'react-toastify';
5
+
6
+ export default function ConfirmDeleteForm({
7
+ successUrl,
8
+ form,
9
+ children,
10
+ ...props
11
+ }) {
12
+ const history = useHistory();
13
+ const { entityId } = useParams();
14
+ const request = {
15
+ method: 'delete',
16
+ url: `/api/${form}/${entityId}`,
17
+ onComplete: () => {
18
+ toast.success('Deleted!');
19
+ goBack();
20
+ },
21
+ };
22
+ return (
23
+ <ConfirmBaseForm
24
+ request={request}
25
+ handleCancel={goBack}
26
+ title="Are you sure you want to delete this?"
27
+ {...props}>
28
+ {children}
29
+ </ConfirmBaseForm>
30
+ );
31
+
32
+ function goBack() {
33
+ if (successUrl) {
34
+ history.push(successUrl);
35
+ } else {
36
+ history.back();
37
+ }
38
+ }
39
+ }
@@ -1,24 +1,24 @@
1
- import React from 'react';
2
- import { HashRouter } from 'react-router-dom';
3
- import { render, screen } from '@testing-library/react';
4
-
5
- import ConfirmDeleteForm from './ConfirmDeleteForm';
6
-
7
- describe('ConfirmDeleteForm', () => {
8
- it('Renders without error', () => {
9
- render(
10
- <HashRouter>
11
- <ConfirmDeleteForm />
12
- </HashRouter>
13
- );
14
- });
15
-
16
- it('has matching snapshot', () => {
17
- const renderResult = render(
18
- <HashRouter>
19
- <ConfirmDeleteForm />
20
- </HashRouter>
21
- );
22
- expect(renderResult.asFragment()).toMatchSnapshot();
23
- });
24
- });
1
+ import React from 'react';
2
+ import { HashRouter } from 'react-router-dom';
3
+ import { render, screen } from '@testing-library/react';
4
+
5
+ import ConfirmDeleteForm from './ConfirmDeleteForm';
6
+
7
+ describe('ConfirmDeleteForm', () => {
8
+ it('Renders without error', () => {
9
+ render(
10
+ <HashRouter>
11
+ <ConfirmDeleteForm />
12
+ </HashRouter>
13
+ );
14
+ });
15
+
16
+ it('has matching snapshot', () => {
17
+ const renderResult = render(
18
+ <HashRouter>
19
+ <ConfirmDeleteForm />
20
+ </HashRouter>
21
+ );
22
+ expect(renderResult.asFragment()).toMatchSnapshot();
23
+ });
24
+ });
@@ -1,25 +1,25 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`ConfirmDeleteForm has matching snapshot 1`] = `
4
- <DocumentFragment>
5
- <div
6
- style="text-align: center;"
7
- >
8
- <h3>
9
- Are you sure you want to delete this?
10
- </h3>
11
- <button
12
- class="btn btn-danger"
13
- type="button"
14
- >
15
- Yes
16
- </button>
17
- <button
18
- class="btn btn-link"
19
- type="button"
20
- >
21
- Cancel
22
- </button>
23
- </div>
24
- </DocumentFragment>
25
- `;
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`ConfirmDeleteForm has matching snapshot 1`] = `
4
+ <DocumentFragment>
5
+ <div
6
+ style="text-align: center;"
7
+ >
8
+ <h3>
9
+ Are you sure you want to delete this?
10
+ </h3>
11
+ <button
12
+ class="btn btn-danger"
13
+ type="button"
14
+ >
15
+ Yes
16
+ </button>
17
+ <button
18
+ class="btn btn-link"
19
+ type="button"
20
+ >
21
+ Cancel
22
+ </button>
23
+ </div>
24
+ </DocumentFragment>
25
+ `;
@@ -1,2 +1,2 @@
1
- import ConfirmDeleteForm from './ConfirmDeleteForm'
1
+ import ConfirmDeleteForm from './ConfirmDeleteForm'
2
2
  export default ConfirmDeleteForm;
@@ -1,46 +1,58 @@
1
- import React from 'react';
2
- import DatePicker from 'react-date-picker';
3
- import parseISO from 'date-fns/parseISO';
4
- import classnames from 'classnames';
5
-
6
- const dateOnlyRegex = /^\d{4}-\d{2}-\d{2}$/;
7
- export default class DatePickerInput extends React.Component {
8
- render() {
9
- const { value, className, ...rest } = this.props;
10
-
11
- if (value && !dateOnlyRegex.test(value)) {
12
- const errorMessage = `Invalid date only value of ${value} passed to DatePicker input. This input is only configured to handle dates in the format yyyy-mm-dd. Ensure that the server is configured to return date only values.`;
13
- if (process.env.NODE_ENV !== 'production') {
14
- //We should throw if 'value' is not 'yyyy-mm-dd' in dev
15
- throw new Error(errorMessage);
16
- } else {
17
- console.error(errorMessage);
18
- }
19
- }
20
-
21
- const parsedValue = value ? parseISO(value) : null;
22
- return (
23
- <DatePicker
24
- className={classnames('form-control', className)}
25
- onCalendarOpen={this.onCalendarOpen}
26
- {...rest}
27
- value={parsedValue}
28
- onChange={this.handleChange}
29
- onBlur={this.handleBlur}
30
- />
31
- );
32
- }
33
- handleBlur = () => {
34
- const { onBlur } = this.props;
35
- onBlur();
36
- };
37
- handleChange = (e) => {
38
- const { onChange } = this.props;
39
- if (e == null) {
40
- onChange(null);
41
- } else {
42
- // ensure ONLY the date is persisted - so UTC offset info / time is not persisted or sent
43
- onChange(e.toISOString().split('T')[0]);
44
- }
45
- };
46
- }
1
+ import React from 'react';
2
+ import DatePicker from 'react-date-picker';
3
+ import parseISO from 'date-fns/parseISO';
4
+ import classnames from 'classnames';
5
+
6
+ const dateOnlyRegex = /^\d{4}-\d{2}-\d{2}$/;
7
+ const defaultMaxDate = new Date('9999-12-31');
8
+
9
+ export default class DatePickerInput extends React.Component {
10
+ render() {
11
+ const { value, className, maxDate = defaultMaxDate, ...rest } = this.props;
12
+
13
+ if (value && !dateOnlyRegex.test(value)) {
14
+ const errorMessage = `Invalid date only value of ${value} passed to DatePicker input. This input is only configured to handle dates in the format yyyy-mm-dd. Ensure that the server is configured to return date only values.`;
15
+ if (process.env.NODE_ENV !== 'production') {
16
+ //We should throw if 'value' is not 'yyyy-mm-dd' in dev
17
+ throw new Error(errorMessage);
18
+ } else {
19
+ console.error(errorMessage);
20
+ }
21
+ }
22
+
23
+ const parsedValue = value ? parseISO(value) : null;
24
+ return (
25
+ <DatePicker
26
+ className={classnames('form-control', className)}
27
+ onCalendarOpen={this.onCalendarOpen}
28
+ {...rest}
29
+ value={parsedValue}
30
+ onChange={this.handleChange}
31
+ onBlur={this.handleBlur}
32
+ maxDate={maxDate}
33
+ />
34
+ );
35
+ }
36
+ handleBlur = () => {
37
+ const { onBlur } = this.props;
38
+ onBlur();
39
+ };
40
+ handleChange = (e) => {
41
+ const { onChange } = this.props;
42
+ if (e == null) {
43
+ onChange(null);
44
+ } else {
45
+ // ensure ONLY the date is persisted - so UTC offset info / time is not persisted or sent
46
+ onChange(convertToTimeZoneInsensitiveISOString(e).split('T')[0]);
47
+ }
48
+ };
49
+ }
50
+
51
+ export function convertToTimeZoneInsensitiveISOString(date) {
52
+ const year = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(date);
53
+ const month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(
54
+ date
55
+ );
56
+ const day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date);
57
+ return `${year}-${month}-${day}T00:00:00.000Z`;
58
+ }