envoc-form 5.0.2 → 5.0.4-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 +4650 -1250
- package/dist/index.cjs +21523 -0
- package/dist/index.d.ts +575 -0
- package/dist/index.js +21456 -0
- package/package.json +107 -111
- package/dist/css/envoc-form-styles.css +0 -3
- package/dist/css/envoc-form-styles.css.map +0 -1
- package/es/AddressInput/AddressInput.d.ts +0 -24
- package/es/AddressInput/AddressInput.js +0 -20
- package/es/AddressInput/UsStates.d.ts +0 -3
- package/es/AddressInput/UsStates.js +0 -53
- package/es/ConfirmBaseForm/ConfirmBaseForm.d.ts +0 -26
- package/es/ConfirmBaseForm/ConfirmBaseForm.js +0 -42
- package/es/ConfirmDeleteForm/ConfirmDeleteForm.d.ts +0 -24
- package/es/ConfirmDeleteForm/ConfirmDeleteForm.js +0 -60
- package/es/DatePicker/DatePickerGroup.d.ts +0 -13
- package/es/DatePicker/DatePickerGroup.js +0 -87
- package/es/DatePicker/DatePickerHelper.d.ts +0 -3
- package/es/DatePicker/DatePickerHelper.js +0 -1
- package/es/DatePicker/StringDateOnlyPickerGroup.d.ts +0 -9
- package/es/DatePicker/StringDateOnlyPickerGroup.js +0 -29
- package/es/DatePicker/StringDatePickerGroup.d.ts +0 -9
- package/es/DatePicker/StringDatePickerGroup.js +0 -24
- package/es/Field/CustomFieldInputProps.d.ts +0 -7
- package/es/Field/CustomFieldInputProps.js +0 -1
- package/es/Field/CustomFieldMetaProps.d.ts +0 -4
- package/es/Field/CustomFieldMetaProps.js +0 -1
- package/es/Field/Field.d.ts +0 -28
- package/es/Field/Field.js +0 -51
- package/es/Field/FieldErrorScrollTarget.d.ts +0 -2
- package/es/Field/FieldErrorScrollTarget.js +0 -12
- package/es/Field/FieldNameContext.d.ts +0 -3
- package/es/Field/FieldNameContext.js +0 -3
- package/es/Field/FieldSection.d.ts +0 -7
- package/es/Field/FieldSection.js +0 -9
- package/es/Field/InjectedFieldProps.d.ts +0 -7
- package/es/Field/InjectedFieldProps.js +0 -1
- package/es/Field/StandAloneInput.d.ts +0 -13
- package/es/Field/StandAloneInput.js +0 -50
- package/es/Field/useStandardField.d.ts +0 -21
- package/es/Field/useStandardField.js +0 -92
- package/es/FieldArray/FieldArray.d.ts +0 -24
- package/es/FieldArray/FieldArray.js +0 -77
- package/es/File/FileGroup.d.ts +0 -10
- package/es/File/FileGroup.js +0 -53
- package/es/File/FileList.d.ts +0 -5
- package/es/File/FileList.js +0 -10
- package/es/File/humanFileSize.d.ts +0 -1
- package/es/File/humanFileSize.js +0 -6
- package/es/Form/FocusError.d.ts +0 -7
- package/es/Form/FocusError.js +0 -42
- package/es/Form/Form.d.ts +0 -33
- package/es/Form/Form.js +0 -141
- package/es/Form/FormBasedPreventNavigation.d.ts +0 -6
- package/es/Form/FormBasedPreventNavigation.js +0 -20
- package/es/Form/LegacyFormBasedPreventNavigation.d.ts +0 -17
- package/es/Form/LegacyFormBasedPreventNavigation.js +0 -69
- package/es/Form/NewFormBasedPreventNavigation.d.ts +0 -14
- package/es/Form/NewFormBasedPreventNavigation.js +0 -39
- package/es/Form/ServerErrorContext.d.ts +0 -11
- package/es/Form/ServerErrorContext.js +0 -9
- package/es/FormActions.d.ts +0 -12
- package/es/FormActions.js +0 -16
- package/es/FormDefaults.d.ts +0 -4
- package/es/FormDefaults.js +0 -2
- package/es/Group.d.ts +0 -16
- package/es/Group.js +0 -14
- package/es/Input/IconInputGroup.d.ts +0 -12
- package/es/Input/IconInputGroup.js +0 -43
- package/es/Input/InputGroup.d.ts +0 -12
- package/es/Input/InputGroup.js +0 -34
- package/es/Input/MoneyInputGroup.d.ts +0 -9
- package/es/Input/MoneyInputGroup.js +0 -43
- package/es/Input/NumberInputGroup.d.ts +0 -9
- package/es/Input/NumberInputGroup.js +0 -43
- package/es/Input/PhoneNumberInputGroup.d.ts +0 -10
- package/es/Input/PhoneNumberInputGroup.js +0 -47
- package/es/Input/StringInputGroup.d.ts +0 -8
- package/es/Input/StringInputGroup.js +0 -43
- package/es/Normalization/NormalizationFunction.d.ts +0 -4
- package/es/Normalization/NormalizationFunction.js +0 -1
- package/es/Normalization/normalizers.d.ts +0 -4
- package/es/Normalization/normalizers.js +0 -32
- package/es/Select/BooleanSelectGroup.d.ts +0 -7
- package/es/Select/BooleanSelectGroup.js +0 -28
- package/es/Select/NumberSelectGroup.d.ts +0 -9
- package/es/Select/NumberSelectGroup.js +0 -21
- package/es/Select/SelectGroup.d.ts +0 -27
- package/es/Select/SelectGroup.js +0 -65
- package/es/Select/SelectGroupPropsHelper.d.ts +0 -3
- package/es/Select/SelectGroupPropsHelper.js +0 -1
- package/es/Select/StringSelectGroup.d.ts +0 -9
- package/es/Select/StringSelectGroup.js +0 -21
- package/es/StandardFormActions.d.ts +0 -11
- package/es/StandardFormActions.js +0 -14
- package/es/SubmitFormButton.d.ts +0 -10
- package/es/SubmitFormButton.js +0 -40
- package/es/TextArea/TextAreaGroup.d.ts +0 -9
- package/es/TextArea/TextAreaGroup.js +0 -35
- package/es/Validation/ValidatedApiResult.d.ts +0 -6
- package/es/Validation/ValidatedApiResult.js +0 -1
- package/es/Validation/ValidationError.d.ts +0 -5
- package/es/Validation/ValidationError.js +0 -1
- package/es/Validation/ValidationFunction.d.ts +0 -4
- package/es/Validation/ValidationFunction.js +0 -1
- package/es/Validation/validators.d.ts +0 -18
- package/es/Validation/validators.js +0 -77
- package/es/index.d.ts +0 -75
- package/es/index.js +0 -51
- package/es/setupTests.d.ts +0 -1
- package/es/setupTests.js +0 -1
- package/es/utils/objectContainsNonSerializableProperty.d.ts +0 -1
- package/es/utils/objectContainsNonSerializableProperty.js +0 -14
- package/es/utils/objectToFormData.d.ts +0 -10
- package/es/utils/objectToFormData.js +0 -77
- package/es/utils/typeChecks.d.ts +0 -8
- package/es/utils/typeChecks.js +0 -18
- package/lib/AddressInput/AddressInput.d.ts +0 -24
- package/lib/AddressInput/AddressInput.js +0 -26
- package/lib/AddressInput/UsStates.d.ts +0 -3
- package/lib/AddressInput/UsStates.js +0 -55
- package/lib/ConfirmBaseForm/ConfirmBaseForm.d.ts +0 -26
- package/lib/ConfirmBaseForm/ConfirmBaseForm.js +0 -48
- package/lib/ConfirmDeleteForm/ConfirmDeleteForm.d.ts +0 -24
- package/lib/ConfirmDeleteForm/ConfirmDeleteForm.js +0 -66
- package/lib/DatePicker/DatePickerGroup.d.ts +0 -13
- package/lib/DatePicker/DatePickerGroup.js +0 -95
- package/lib/DatePicker/DatePickerHelper.d.ts +0 -3
- package/lib/DatePicker/DatePickerHelper.js +0 -2
- package/lib/DatePicker/StringDateOnlyPickerGroup.d.ts +0 -9
- package/lib/DatePicker/StringDateOnlyPickerGroup.js +0 -35
- package/lib/DatePicker/StringDatePickerGroup.d.ts +0 -9
- package/lib/DatePicker/StringDatePickerGroup.js +0 -30
- package/lib/Field/CustomFieldInputProps.d.ts +0 -7
- package/lib/Field/CustomFieldInputProps.js +0 -2
- package/lib/Field/CustomFieldMetaProps.d.ts +0 -4
- package/lib/Field/CustomFieldMetaProps.js +0 -2
- package/lib/Field/Field.d.ts +0 -28
- package/lib/Field/Field.js +0 -56
- package/lib/Field/FieldErrorScrollTarget.d.ts +0 -2
- package/lib/Field/FieldErrorScrollTarget.js +0 -15
- package/lib/Field/FieldNameContext.d.ts +0 -3
- package/lib/Field/FieldNameContext.js +0 -9
- package/lib/Field/FieldSection.d.ts +0 -7
- package/lib/Field/FieldSection.js +0 -12
- package/lib/Field/InjectedFieldProps.d.ts +0 -7
- package/lib/Field/InjectedFieldProps.js +0 -2
- package/lib/Field/StandAloneInput.d.ts +0 -13
- package/lib/Field/StandAloneInput.js +0 -76
- package/lib/Field/useStandardField.d.ts +0 -21
- package/lib/Field/useStandardField.js +0 -95
- package/lib/FieldArray/FieldArray.d.ts +0 -24
- package/lib/FieldArray/FieldArray.js +0 -83
- package/lib/File/FileGroup.d.ts +0 -10
- package/lib/File/FileGroup.js +0 -58
- package/lib/File/FileList.d.ts +0 -5
- package/lib/File/FileList.js +0 -13
- package/lib/File/humanFileSize.d.ts +0 -1
- package/lib/File/humanFileSize.js +0 -10
- package/lib/Form/FocusError.d.ts +0 -7
- package/lib/Form/FocusError.js +0 -48
- package/lib/Form/Form.d.ts +0 -33
- package/lib/Form/Form.js +0 -147
- package/lib/Form/FormBasedPreventNavigation.d.ts +0 -6
- package/lib/Form/FormBasedPreventNavigation.js +0 -26
- package/lib/Form/LegacyFormBasedPreventNavigation.d.ts +0 -17
- package/lib/Form/LegacyFormBasedPreventNavigation.js +0 -72
- package/lib/Form/NewFormBasedPreventNavigation.d.ts +0 -14
- package/lib/Form/NewFormBasedPreventNavigation.js +0 -42
- package/lib/Form/ServerErrorContext.d.ts +0 -11
- package/lib/Form/ServerErrorContext.js +0 -15
- package/lib/FormActions.d.ts +0 -12
- package/lib/FormActions.js +0 -22
- package/lib/FormDefaults.d.ts +0 -4
- package/lib/FormDefaults.js +0 -5
- package/lib/Group.d.ts +0 -16
- package/lib/Group.js +0 -20
- package/lib/Input/IconInputGroup.d.ts +0 -12
- package/lib/Input/IconInputGroup.js +0 -48
- package/lib/Input/InputGroup.d.ts +0 -12
- package/lib/Input/InputGroup.js +0 -39
- package/lib/Input/MoneyInputGroup.d.ts +0 -9
- package/lib/Input/MoneyInputGroup.js +0 -48
- package/lib/Input/NumberInputGroup.d.ts +0 -9
- package/lib/Input/NumberInputGroup.js +0 -48
- package/lib/Input/PhoneNumberInputGroup.d.ts +0 -10
- package/lib/Input/PhoneNumberInputGroup.js +0 -52
- package/lib/Input/StringInputGroup.d.ts +0 -8
- package/lib/Input/StringInputGroup.js +0 -48
- package/lib/Normalization/NormalizationFunction.d.ts +0 -4
- package/lib/Normalization/NormalizationFunction.js +0 -2
- package/lib/Normalization/normalizers.d.ts +0 -4
- package/lib/Normalization/normalizers.js +0 -37
- package/lib/Select/BooleanSelectGroup.d.ts +0 -7
- package/lib/Select/BooleanSelectGroup.js +0 -35
- package/lib/Select/NumberSelectGroup.d.ts +0 -9
- package/lib/Select/NumberSelectGroup.js +0 -29
- package/lib/Select/SelectGroup.d.ts +0 -27
- package/lib/Select/SelectGroup.js +0 -71
- package/lib/Select/SelectGroupPropsHelper.d.ts +0 -3
- package/lib/Select/SelectGroupPropsHelper.js +0 -2
- package/lib/Select/StringSelectGroup.d.ts +0 -9
- package/lib/Select/StringSelectGroup.js +0 -29
- package/lib/StandardFormActions.d.ts +0 -11
- package/lib/StandardFormActions.js +0 -20
- package/lib/SubmitFormButton.d.ts +0 -10
- package/lib/SubmitFormButton.js +0 -45
- package/lib/TextArea/TextAreaGroup.d.ts +0 -9
- package/lib/TextArea/TextAreaGroup.js +0 -40
- package/lib/Validation/ValidatedApiResult.d.ts +0 -6
- package/lib/Validation/ValidatedApiResult.js +0 -2
- package/lib/Validation/ValidationError.d.ts +0 -5
- package/lib/Validation/ValidationError.js +0 -2
- package/lib/Validation/ValidationFunction.d.ts +0 -4
- package/lib/Validation/ValidationFunction.js +0 -2
- package/lib/Validation/validators.d.ts +0 -18
- package/lib/Validation/validators.js +0 -90
- package/lib/index.d.ts +0 -75
- package/lib/index.js +0 -119
- package/lib/setupTests.d.ts +0 -1
- package/lib/setupTests.js +0 -3
- package/lib/utils/objectContainsNonSerializableProperty.d.ts +0 -1
- package/lib/utils/objectContainsNonSerializableProperty.js +0 -17
- package/lib/utils/objectToFormData.d.ts +0 -10
- package/lib/utils/objectToFormData.js +0 -79
- package/lib/utils/typeChecks.d.ts +0 -8
- package/lib/utils/typeChecks.js +0 -29
- package/src/AddressInput/AddressInput.test.tsx +0 -27
- package/src/AddressInput/AddressInput.tsx +0 -82
- package/src/AddressInput/UsStates.ts +0 -55
- package/src/AddressInput/__snapshots__/AddressInput.test.tsx.snap +0 -182
- package/src/ConfirmBaseForm/ConfirmBaseForm.test.tsx +0 -24
- package/src/ConfirmBaseForm/ConfirmBaseForm.tsx +0 -74
- package/src/ConfirmBaseForm/__snapshots__/ConfirmBaseForm.test.tsx.snap +0 -23
- package/src/ConfirmDeleteForm/ConfirmDeleteForm.test.tsx +0 -24
- package/src/ConfirmDeleteForm/ConfirmDeleteForm.tsx +0 -87
- package/src/ConfirmDeleteForm/__snapshots__/ConfirmDeleteForm.test.tsx.snap +0 -25
- package/src/DatePicker/DatePicker.test.tsx +0 -48
- package/src/DatePicker/DatePickerGroup.tsx +0 -115
- package/src/DatePicker/DatePickerHelper.ts +0 -4
- package/src/DatePicker/StringDateOnlyPickerGroup.tsx +0 -28
- package/src/DatePicker/StringDatePickerGroup.tsx +0 -20
- package/src/DatePicker/__snapshots__/DatePicker.test.tsx.snap +0 -152
- package/src/Field/CustomFieldInputProps.ts +0 -10
- package/src/Field/CustomFieldMetaProps.ts +0 -5
- package/src/Field/Field.tsx +0 -113
- package/src/Field/FieldErrorScrollTarget.tsx +0 -12
- package/src/Field/FieldNameContext.ts +0 -6
- package/src/Field/FieldSection.tsx +0 -18
- package/src/Field/InjectedFieldProps.ts +0 -8
- package/src/Field/StandAloneInput.tsx +0 -55
- package/src/Field/useStandardField.ts +0 -125
- package/src/FieldArray/FieldArray.tsx +0 -154
- package/src/File/FileGroup.test.tsx +0 -35
- package/src/File/FileGroup.tsx +0 -85
- package/src/File/FileList.tsx +0 -21
- package/src/File/__snapshots__/FileGroup.test.tsx.snap +0 -34
- package/src/File/humanFileSize.ts +0 -8
- package/src/Form/FocusError.tsx +0 -55
- package/src/Form/Form.test.tsx +0 -14
- package/src/Form/Form.tsx +0 -237
- package/src/Form/FormBasedPreventNavigation.tsx +0 -56
- package/src/Form/LegacyFormBasedPreventNavigation.tsx +0 -77
- package/src/Form/NewFormBasedPreventNavigation.tsx +0 -59
- package/src/Form/ServerErrorContext.ts +0 -18
- package/src/Form/__snapshots__/Form.test.tsx.snap +0 -10
- package/src/FormActions.tsx +0 -47
- package/src/FormDefaults.ts +0 -2
- package/src/Group.tsx +0 -62
- package/src/Input/IconInputGroup.tsx +0 -54
- package/src/Input/InputGroup.tsx +0 -72
- package/src/Input/MoneyInputGroup.tsx +0 -50
- package/src/Input/NumberInputGroup.tsx +0 -48
- package/src/Input/PhoneNumberInputGroup.tsx +0 -45
- package/src/Input/StringInputGroup.tsx +0 -53
- package/src/Input/__Tests__/IconInputGroup.test.tsx +0 -35
- package/src/Input/__Tests__/MoneyInputGroup.test.tsx +0 -37
- package/src/Input/__Tests__/NumberInputGroup.test.tsx +0 -35
- package/src/Input/__Tests__/PhoneNumberInputGroup.test.tsx +0 -36
- package/src/Input/__Tests__/StringInputGroup.test.tsx +0 -27
- package/src/Input/__Tests__/__snapshots__/IconInputGroup.test.tsx.snap +0 -32
- package/src/Input/__Tests__/__snapshots__/MoneyInputGroup.test.tsx.snap +0 -34
- package/src/Input/__Tests__/__snapshots__/NumberInputGroup.test.tsx.snap +0 -32
- package/src/Input/__Tests__/__snapshots__/PhoneNumberInputGroup.test.tsx.snap +0 -33
- package/src/Input/__Tests__/__snapshots__/StringInputGroup.test.tsx.snap +0 -31
- package/src/Normalization/NormalizationFunction.ts +0 -4
- package/src/Normalization/normalizers.ts +0 -44
- package/src/Select/BooleanSelectGroup.tsx +0 -28
- package/src/Select/NumberSelectGroup.tsx +0 -16
- package/src/Select/SelectGroup.tsx +0 -124
- package/src/Select/SelectGroupPropsHelper.ts +0 -4
- package/src/Select/StringSelectGroup.tsx +0 -16
- package/src/Select/__tests__/BooleanSelectGroup.test.tsx +0 -35
- package/src/Select/__tests__/NumberSelectGroup.test.tsx +0 -87
- package/src/Select/__tests__/StringSelectGroup.test.tsx +0 -89
- package/src/Select/__tests__/__snapshots__/BooleanSelectGroup.test.tsx.snap +0 -98
- package/src/Select/__tests__/__snapshots__/NumberSelectGroup.test.tsx.snap +0 -195
- package/src/Select/__tests__/__snapshots__/StringSelectGroup.test.tsx.snap +0 -195
- package/src/StandardFormActions.tsx +0 -41
- package/src/SubmitFormButton.tsx +0 -54
- package/src/TextArea/TextAreaGroup.tsx +0 -64
- package/src/Validation/ValidatedApiResult.ts +0 -8
- package/src/Validation/ValidationError.ts +0 -6
- package/src/Validation/ValidationFunction.ts +0 -4
- package/src/Validation/validators.test.tsx +0 -81
- package/src/Validation/validators.ts +0 -97
- package/src/__Tests__/FormTestBase.tsx +0 -64
- package/src/__Tests__/RealisticForm.test.tsx +0 -82
- package/src/__Tests__/StandardFormActions.test.tsx +0 -17
- package/src/__Tests__/SubmitFormButton.test.tsx +0 -17
- package/src/__Tests__/__snapshots__/StandardFormActions.test.tsx.snap +0 -27
- package/src/__Tests__/__snapshots__/SubmitFormButton.test.tsx.snap +0 -20
- package/src/__Tests__/index.ts +0 -3
- package/src/_variables.scss +0 -11
- package/src/index.ts +0 -153
- package/src/react-app-env.d.ts +0 -1
- package/src/setupTests.ts +0 -1
- package/src/styles.scss +0 -0
- package/src/utils/objectContainsNonSerializableProperty.test.tsx +0 -49
- package/src/utils/objectContainsNonSerializableProperty.ts +0 -17
- package/src/utils/objectToFormData.test.tsx +0 -76
- package/src/utils/objectToFormData.ts +0 -105
- package/src/utils/typeChecks.ts +0 -18
@@ -1,74 +0,0 @@
|
|
1
|
-
import React, { MouseEventHandler } from 'react';
|
2
|
-
import classNames from 'classnames';
|
3
|
-
import { useAxiosRequest, useAxiosRequestProps } from 'envoc-request';
|
4
|
-
import { FormDefaults } from '../FormDefaults';
|
5
|
-
|
6
|
-
// TODO: change the style prop type to Tailwind type (does this exist before Tailwind 3.1 ???), or
|
7
|
-
// should this just be type 'string'
|
8
|
-
export interface ConfirmBaseFormProps {
|
9
|
-
/** Function to run when cancel button is clicked. */
|
10
|
-
handleCancel?: MouseEventHandler<HTMLButtonElement>;
|
11
|
-
/** Axios request upon confirmation */
|
12
|
-
request: useAxiosRequestProps;
|
13
|
-
style?: React.CSSProperties;
|
14
|
-
/** `<h3/>` title text on top of the form. */
|
15
|
-
title?: string;
|
16
|
-
/** Custom confirm button text.
|
17
|
-
* @defaultValue `Confirm`
|
18
|
-
*/
|
19
|
-
confirmButtonText?: string;
|
20
|
-
/** CSS class for the buttons. */
|
21
|
-
confirmButtonClass?: string;
|
22
|
-
/** Any components to be rendered in between the title and the buttons. */
|
23
|
-
children?: React.ReactNode;
|
24
|
-
}
|
25
|
-
|
26
|
-
// TODO: ask about how we should use 'children'
|
27
|
-
/**
|
28
|
-
* Confimation dialog. Navigates to a different route to allow the user to either confirm or cancel an action.
|
29
|
-
* Commonly used for confirming delete and archive.
|
30
|
-
*
|
31
|
-
* See `<ConfirmDeleteForm/>` if the confirmation is specifically for deletion.
|
32
|
-
*/
|
33
|
-
export default function ConfirmBaseForm({
|
34
|
-
handleCancel,
|
35
|
-
request,
|
36
|
-
style,
|
37
|
-
title,
|
38
|
-
confirmButtonText,
|
39
|
-
confirmButtonClass,
|
40
|
-
children,
|
41
|
-
...props
|
42
|
-
}: ConfirmBaseFormProps) {
|
43
|
-
const webRequest = useAxiosRequest(
|
44
|
-
Object.assign({}, request, { autoExecute: false })
|
45
|
-
);
|
46
|
-
const onCancel = handleCancel ?? goBack;
|
47
|
-
|
48
|
-
return (
|
49
|
-
<div style={{ textAlign: 'center', ...style }} {...props}>
|
50
|
-
<h3>{title}</h3>
|
51
|
-
{children}
|
52
|
-
<button
|
53
|
-
className={classNames(
|
54
|
-
confirmButtonClass ??
|
55
|
-
FormDefaults.cssClassPrefix + 'confirm-base-form-confirm-button'
|
56
|
-
)}
|
57
|
-
type="button"
|
58
|
-
onClick={webRequest.submitRequest}>
|
59
|
-
{confirmButtonText ?? 'Confirm'}
|
60
|
-
</button>
|
61
|
-
<button
|
62
|
-
className={classNames(
|
63
|
-
FormDefaults.cssClassPrefix + 'confirm-base-form-cancel-button'
|
64
|
-
)}
|
65
|
-
type="button"
|
66
|
-
onClick={onCancel}>
|
67
|
-
Cancel
|
68
|
-
</button>
|
69
|
-
</div>
|
70
|
-
);
|
71
|
-
function goBack() {
|
72
|
-
window.history.back();
|
73
|
-
}
|
74
|
-
}
|
@@ -1,23 +0,0 @@
|
|
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="envoc-form-confirm-base-form-confirm-button"
|
11
|
-
type="button"
|
12
|
-
>
|
13
|
-
Confirm
|
14
|
-
</button>
|
15
|
-
<button
|
16
|
-
class="envoc-form-confirm-base-form-cancel-button"
|
17
|
-
type="button"
|
18
|
-
>
|
19
|
-
Cancel
|
20
|
-
</button>
|
21
|
-
</div>
|
22
|
-
</DocumentFragment>
|
23
|
-
`;
|
@@ -1,24 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import { HashRouter } from 'react-router-dom';
|
3
|
-
import { render } 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 form="foo" />
|
12
|
-
</HashRouter>
|
13
|
-
);
|
14
|
-
});
|
15
|
-
|
16
|
-
it('has matching snapshot', () => {
|
17
|
-
const renderResult = render(
|
18
|
-
<HashRouter>
|
19
|
-
<ConfirmDeleteForm form="foo" />
|
20
|
-
</HashRouter>
|
21
|
-
);
|
22
|
-
expect(renderResult.asFragment()).toMatchSnapshot();
|
23
|
-
});
|
24
|
-
});
|
@@ -1,87 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import { useNavigate, useParams } from 'react-router-dom';
|
3
|
-
import { toast } from 'react-toastify';
|
4
|
-
import { useAxiosRequestProps } from 'envoc-request';
|
5
|
-
import ConfirmBaseForm, {
|
6
|
-
ConfirmBaseFormProps,
|
7
|
-
} from '../ConfirmBaseForm/ConfirmBaseForm';
|
8
|
-
import { FormDefaults } from '../FormDefaults';
|
9
|
-
|
10
|
-
export interface ConfirmDeleteFormProps
|
11
|
-
extends Pick<ConfirmBaseFormProps, 'style'> {
|
12
|
-
/** Url to navigate to on success. */
|
13
|
-
successUrl?: string;
|
14
|
-
/** Form name (key) to apply the confirmation on. */
|
15
|
-
form: string;
|
16
|
-
/** Custom message to display.
|
17
|
-
* @defaultValue `Are you sure you want to delete this?`
|
18
|
-
*/
|
19
|
-
title?: string;
|
20
|
-
/** Custom function when the axios request succeeds. */
|
21
|
-
handleComplete?: Function;
|
22
|
-
/** Custom function when the axios request fails. */
|
23
|
-
handleError?: Function;
|
24
|
-
/** Any components to be rendered in between the title and the buttons. */
|
25
|
-
children?: React.ReactNode;
|
26
|
-
}
|
27
|
-
|
28
|
-
/**
|
29
|
-
* Deletion confirmation. Navigates to a different route to allow the user to either confirm or cancel an action.
|
30
|
-
*
|
31
|
-
* Wraps `<ConfirmBaseForm/>`.
|
32
|
-
*/
|
33
|
-
export default function ConfirmDeleteForm({
|
34
|
-
successUrl,
|
35
|
-
form,
|
36
|
-
title,
|
37
|
-
handleComplete,
|
38
|
-
handleError,
|
39
|
-
children,
|
40
|
-
...props
|
41
|
-
}: ConfirmDeleteFormProps) {
|
42
|
-
const navigate = useNavigate();
|
43
|
-
const { entityId } = useParams();
|
44
|
-
const onComplete =
|
45
|
-
handleComplete ??
|
46
|
-
function () {
|
47
|
-
toast.success('Deleted!');
|
48
|
-
goBack();
|
49
|
-
};
|
50
|
-
const onError =
|
51
|
-
handleError ??
|
52
|
-
function (error: any) {
|
53
|
-
toast.error(
|
54
|
-
error.response?.data?.validationFailures[0]?.errorMessage ??
|
55
|
-
'Something went wrong talking to the portal. Contact support if this continues.'
|
56
|
-
);
|
57
|
-
};
|
58
|
-
|
59
|
-
const request = {
|
60
|
-
method: 'delete',
|
61
|
-
url: `/api/${form}/${entityId}`,
|
62
|
-
onComplete: onComplete,
|
63
|
-
onError: onError,
|
64
|
-
} as useAxiosRequestProps;
|
65
|
-
|
66
|
-
return (
|
67
|
-
<ConfirmBaseForm
|
68
|
-
request={request}
|
69
|
-
handleCancel={goBack}
|
70
|
-
title={title ?? 'Are you sure you want to delete this?'}
|
71
|
-
confirmButtonText="Yes"
|
72
|
-
confirmButtonClass={
|
73
|
-
FormDefaults.cssClassPrefix + 'confirm-delete-form-yes-button'
|
74
|
-
}
|
75
|
-
{...props}>
|
76
|
-
{children}
|
77
|
-
</ConfirmBaseForm>
|
78
|
-
);
|
79
|
-
|
80
|
-
function goBack() {
|
81
|
-
if (successUrl) {
|
82
|
-
navigate(successUrl);
|
83
|
-
} else {
|
84
|
-
navigate(-1);
|
85
|
-
}
|
86
|
-
}
|
87
|
-
}
|
@@ -1,25 +0,0 @@
|
|
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="envoc-form-confirm-delete-form-yes-button"
|
13
|
-
type="button"
|
14
|
-
>
|
15
|
-
Yes
|
16
|
-
</button>
|
17
|
-
<button
|
18
|
-
class="envoc-form-confirm-base-form-cancel-button"
|
19
|
-
type="button"
|
20
|
-
>
|
21
|
-
Cancel
|
22
|
-
</button>
|
23
|
-
</div>
|
24
|
-
</DocumentFragment>
|
25
|
-
`;
|
@@ -1,48 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import { render } from '@testing-library/react';
|
3
|
-
import StringDatePickerGroup from './StringDatePickerGroup';
|
4
|
-
import FormTestBase from '../__Tests__/FormTestBase';
|
5
|
-
|
6
|
-
//hack so the datepicker internals don't complain about this not existing in the context of jest
|
7
|
-
HTMLCanvasElement.prototype.getContext = () => null;
|
8
|
-
|
9
|
-
describe('IconInputGroup', () => {
|
10
|
-
it('renders without crashing', () => {
|
11
|
-
render(
|
12
|
-
<FormTestBase>
|
13
|
-
{({ Field }) => (
|
14
|
-
<Field
|
15
|
-
name="favoriteDate"
|
16
|
-
Component={StringDatePickerGroup}
|
17
|
-
label="Favorite Date"
|
18
|
-
monthPlaceholder="mm"
|
19
|
-
dayPlaceholder="dd"
|
20
|
-
yearPlaceholder="yyyy"
|
21
|
-
maxDate={new Date('9/23/2023')}
|
22
|
-
minDate={new Date('6/22/2022')}
|
23
|
-
/>
|
24
|
-
)}
|
25
|
-
</FormTestBase>
|
26
|
-
);
|
27
|
-
});
|
28
|
-
|
29
|
-
it('has matching snapshot', () => {
|
30
|
-
const renderResult = render(
|
31
|
-
<FormTestBase>
|
32
|
-
{({ Field }) => (
|
33
|
-
<Field
|
34
|
-
name="favoriteDate"
|
35
|
-
Component={StringDatePickerGroup}
|
36
|
-
label="Favorite Date"
|
37
|
-
monthPlaceholder="mm"
|
38
|
-
dayPlaceholder="dd"
|
39
|
-
yearPlaceholder="yyyy"
|
40
|
-
maxDate={new Date('9/23/2023')}
|
41
|
-
minDate={new Date('6/22/2022')}
|
42
|
-
/>
|
43
|
-
)}
|
44
|
-
</FormTestBase>
|
45
|
-
);
|
46
|
-
expect(renderResult.asFragment()).toMatchSnapshot();
|
47
|
-
});
|
48
|
-
});
|
@@ -1,115 +0,0 @@
|
|
1
|
-
import { useEffect, useState } from 'react';
|
2
|
-
import DatePicker, {
|
3
|
-
DatePickerProps,
|
4
|
-
} from 'react-date-picker/dist/entry.nostyle';
|
5
|
-
import classnames from 'classnames';
|
6
|
-
import parseISO from 'date-fns/parseISO';
|
7
|
-
import { InjectedFieldProps } from '../Field/InjectedFieldProps';
|
8
|
-
import { FormDefaults } from '../FormDefaults';
|
9
|
-
import Group, { GroupProps } from '../Group';
|
10
|
-
|
11
|
-
export interface DatePickerGroupProps<T>
|
12
|
-
extends InjectedFieldProps<T | undefined | null>,
|
13
|
-
Omit<
|
14
|
-
DatePickerProps,
|
15
|
-
keyof InjectedFieldProps<T> | 'name' | 'value' | 'className'
|
16
|
-
>,
|
17
|
-
Omit<GroupProps, keyof InjectedFieldProps<T> | 'children'> {
|
18
|
-
convert: (arg: Date) => T;
|
19
|
-
}
|
20
|
-
|
21
|
-
/**
|
22
|
-
* Field for inputting dates. Uses `<Group/>` and `<DatePicker/>`.
|
23
|
-
*
|
24
|
-
* Uses [react-date-picker](https://www.npmjs.com/package/react-date-picker)
|
25
|
-
*/
|
26
|
-
export default function DatePickerGroup<T>({
|
27
|
-
input,
|
28
|
-
meta,
|
29
|
-
label,
|
30
|
-
helpText,
|
31
|
-
className,
|
32
|
-
required,
|
33
|
-
disabled,
|
34
|
-
convert,
|
35
|
-
...rest
|
36
|
-
}: DatePickerGroupProps<T>) {
|
37
|
-
const [displayDate, setDisplayDate] = useState<Date | null>(null);
|
38
|
-
|
39
|
-
useEffect(() => {
|
40
|
-
if (!input.value) {
|
41
|
-
setDisplayDate(null);
|
42
|
-
} else if (typeof input.value === 'string') {
|
43
|
-
if (input.value.indexOf('T') === -1) {
|
44
|
-
setDisplayDate(new Date(`${input.value}T00:00:00.000`));
|
45
|
-
} else {
|
46
|
-
setDisplayDate(new Date(input.value));
|
47
|
-
}
|
48
|
-
}
|
49
|
-
}, [setDisplayDate, input.value]);
|
50
|
-
|
51
|
-
return (
|
52
|
-
<Group
|
53
|
-
input={input}
|
54
|
-
meta={meta}
|
55
|
-
label={label}
|
56
|
-
helpText={helpText}
|
57
|
-
className={classnames(
|
58
|
-
className,
|
59
|
-
FormDefaults.cssClassPrefix + 'date-picker'
|
60
|
-
)}
|
61
|
-
required={required}
|
62
|
-
disabled={disabled}>
|
63
|
-
<DatePicker
|
64
|
-
{...rest}
|
65
|
-
className={classnames(
|
66
|
-
FormDefaults.cssClassPrefix + 'date-picker',
|
67
|
-
className
|
68
|
-
)}
|
69
|
-
value={displayDate}
|
70
|
-
onChange={handleChange}
|
71
|
-
/>
|
72
|
-
</Group>
|
73
|
-
);
|
74
|
-
|
75
|
-
function handleChange(e: Date | Date[] | string | undefined) {
|
76
|
-
const { onChange } = input;
|
77
|
-
if (onChange === null) {
|
78
|
-
return;
|
79
|
-
}
|
80
|
-
|
81
|
-
if (!e) {
|
82
|
-
onChange(undefined);
|
83
|
-
setDisplayDate(null);
|
84
|
-
return;
|
85
|
-
} else if (typeof e === 'string') {
|
86
|
-
const parsedValue = parseISO(e.toString().split('T')[0]);
|
87
|
-
setDisplayDate(parsedValue);
|
88
|
-
onChange(convert(parsedValue));
|
89
|
-
} else if (e instanceof Date) {
|
90
|
-
const parsedValue = parseISO(
|
91
|
-
convertToTimeZoneInsensitiveISOString(e).split('T')[0]
|
92
|
-
);
|
93
|
-
setDisplayDate(parsedValue);
|
94
|
-
onChange(convert(parsedValue));
|
95
|
-
} else {
|
96
|
-
// e is instanceof Date[]
|
97
|
-
const parsedValue = parseISO(
|
98
|
-
convertToTimeZoneInsensitiveISOString(e[0]).split('T')[0]
|
99
|
-
);
|
100
|
-
setDisplayDate(parsedValue);
|
101
|
-
onChange(convert(parsedValue));
|
102
|
-
}
|
103
|
-
}
|
104
|
-
}
|
105
|
-
|
106
|
-
export function convertToTimeZoneInsensitiveISOString(date: Date): string {
|
107
|
-
const year = new Intl.DateTimeFormat('en', { year: 'numeric' })
|
108
|
-
.format(date)
|
109
|
-
.padStart(4, '0');
|
110
|
-
const month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(
|
111
|
-
date
|
112
|
-
);
|
113
|
-
const day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date);
|
114
|
-
return `${year}-${month}-${day}T00:00:00.000Z`;
|
115
|
-
}
|
@@ -1,28 +0,0 @@
|
|
1
|
-
import DatePickerGroup from './DatePickerGroup';
|
2
|
-
import { DatePickerHelper } from './DatePickerHelper';
|
3
|
-
|
4
|
-
export interface StringDateOnlyPickerGroupProps
|
5
|
-
extends DatePickerHelper<string | undefined | null> {}
|
6
|
-
|
7
|
-
/**
|
8
|
-
* Date picker input that consumes and outputs as a date only string in ISO format `YYYY-MM-DD`.
|
9
|
-
*
|
10
|
-
* Default display to the user is in `MM/DD/YYYY` format.
|
11
|
-
*/
|
12
|
-
export default function StringDatePickerGroup(
|
13
|
-
props: StringDateOnlyPickerGroupProps
|
14
|
-
) {
|
15
|
-
return <DatePickerGroup {...props} convert={convertToDateOnly} />;
|
16
|
-
}
|
17
|
-
|
18
|
-
function convertToDateOnly(arg: Date) {
|
19
|
-
const year = new Intl.DateTimeFormat('en', { year: 'numeric' })
|
20
|
-
.format(arg)
|
21
|
-
.padStart(4, '0');
|
22
|
-
|
23
|
-
const month = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(arg);
|
24
|
-
|
25
|
-
const day = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(arg);
|
26
|
-
|
27
|
-
return `${year}-${month}-${day}`;
|
28
|
-
}
|
@@ -1,20 +0,0 @@
|
|
1
|
-
import DatePickerGroup from './DatePickerGroup';
|
2
|
-
import { DatePickerHelper } from './DatePickerHelper';
|
3
|
-
|
4
|
-
export interface StringDatePickerGroupProps
|
5
|
-
extends DatePickerHelper<string | undefined | null> {}
|
6
|
-
|
7
|
-
/**
|
8
|
-
* Date picker input that consumes and outputs as a date only string in ISO format `YYYY-MM-DDTHH:mm:ss.sssZ` or `±YYYYYY-MM-DDTHH:mm:ss.sssZ`
|
9
|
-
*
|
10
|
-
* If you need `YYYY-MM-DD` format use `<StringDateOnlyPickerGroup/>`.
|
11
|
-
*/
|
12
|
-
export default function StringDatePickerGroup(
|
13
|
-
props: StringDatePickerGroupProps
|
14
|
-
) {
|
15
|
-
return <DatePickerGroup {...props} convert={convertToDateOnly} />;
|
16
|
-
}
|
17
|
-
|
18
|
-
function convertToDateOnly(arg: Date) {
|
19
|
-
return arg.toISOString();
|
20
|
-
}
|
@@ -1,152 +0,0 @@
|
|
1
|
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
-
|
3
|
-
exports[`IconInputGroup has matching snapshot 1`] = `
|
4
|
-
<DocumentFragment>
|
5
|
-
<form
|
6
|
-
action="#"
|
7
|
-
class="envoc-form-form"
|
8
|
-
>
|
9
|
-
<div
|
10
|
-
class="envoc-form-date-picker envoc-form-group"
|
11
|
-
>
|
12
|
-
<div
|
13
|
-
id="favoritedate-error-scroll-target"
|
14
|
-
style="display: none;"
|
15
|
-
/>
|
16
|
-
<label
|
17
|
-
for="favoriteDate"
|
18
|
-
>
|
19
|
-
Favorite Date
|
20
|
-
</label>
|
21
|
-
<div
|
22
|
-
class="react-date-picker react-date-picker--closed react-date-picker--enabled envoc-form-date-picker"
|
23
|
-
>
|
24
|
-
<div
|
25
|
-
class="react-date-picker__wrapper"
|
26
|
-
>
|
27
|
-
<div
|
28
|
-
class="react-date-picker__inputGroup"
|
29
|
-
>
|
30
|
-
<input
|
31
|
-
max="2023-09-23"
|
32
|
-
min="2022-06-22"
|
33
|
-
name="date"
|
34
|
-
style="visibility: hidden; position: absolute; z-index: -999;"
|
35
|
-
type="date"
|
36
|
-
value=""
|
37
|
-
/>
|
38
|
-
<input
|
39
|
-
autocomplete="off"
|
40
|
-
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__month"
|
41
|
-
data-input="true"
|
42
|
-
inputmode="numeric"
|
43
|
-
max="12"
|
44
|
-
min="1"
|
45
|
-
name="month"
|
46
|
-
placeholder="mm"
|
47
|
-
type="number"
|
48
|
-
value=""
|
49
|
-
/>
|
50
|
-
<span
|
51
|
-
class="react-date-picker__inputGroup__divider"
|
52
|
-
>
|
53
|
-
/
|
54
|
-
</span>
|
55
|
-
<input
|
56
|
-
autocomplete="off"
|
57
|
-
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__day"
|
58
|
-
data-input="true"
|
59
|
-
inputmode="numeric"
|
60
|
-
max="31"
|
61
|
-
min="1"
|
62
|
-
name="day"
|
63
|
-
placeholder="dd"
|
64
|
-
type="number"
|
65
|
-
value=""
|
66
|
-
/>
|
67
|
-
<span
|
68
|
-
class="react-date-picker__inputGroup__divider"
|
69
|
-
>
|
70
|
-
/
|
71
|
-
</span>
|
72
|
-
<input
|
73
|
-
autocomplete="off"
|
74
|
-
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__year"
|
75
|
-
data-input="true"
|
76
|
-
inputmode="numeric"
|
77
|
-
max="2023"
|
78
|
-
min="2022"
|
79
|
-
name="year"
|
80
|
-
placeholder="yyyy"
|
81
|
-
step="1"
|
82
|
-
type="number"
|
83
|
-
value=""
|
84
|
-
/>
|
85
|
-
</div>
|
86
|
-
<button
|
87
|
-
class="react-date-picker__clear-button react-date-picker__button"
|
88
|
-
type="button"
|
89
|
-
>
|
90
|
-
<svg
|
91
|
-
class="react-date-picker__clear-button__icon react-date-picker__button__icon"
|
92
|
-
height="19"
|
93
|
-
stroke="black"
|
94
|
-
stroke-width="2"
|
95
|
-
viewBox="0 0 19 19"
|
96
|
-
width="19"
|
97
|
-
xmlns="http://www.w3.org/2000/svg"
|
98
|
-
>
|
99
|
-
<line
|
100
|
-
x1="4"
|
101
|
-
x2="15"
|
102
|
-
y1="4"
|
103
|
-
y2="15"
|
104
|
-
/>
|
105
|
-
<line
|
106
|
-
x1="15"
|
107
|
-
x2="4"
|
108
|
-
y1="4"
|
109
|
-
y2="15"
|
110
|
-
/>
|
111
|
-
</svg>
|
112
|
-
</button>
|
113
|
-
<button
|
114
|
-
class="react-date-picker__calendar-button react-date-picker__button"
|
115
|
-
type="button"
|
116
|
-
>
|
117
|
-
<svg
|
118
|
-
class="react-date-picker__calendar-button__icon react-date-picker__button__icon"
|
119
|
-
height="19"
|
120
|
-
stroke="black"
|
121
|
-
stroke-width="2"
|
122
|
-
viewBox="0 0 19 19"
|
123
|
-
width="19"
|
124
|
-
xmlns="http://www.w3.org/2000/svg"
|
125
|
-
>
|
126
|
-
<rect
|
127
|
-
fill="none"
|
128
|
-
height="15"
|
129
|
-
width="15"
|
130
|
-
x="2"
|
131
|
-
y="2"
|
132
|
-
/>
|
133
|
-
<line
|
134
|
-
x1="6"
|
135
|
-
x2="6"
|
136
|
-
y1="0"
|
137
|
-
y2="4"
|
138
|
-
/>
|
139
|
-
<line
|
140
|
-
x1="13"
|
141
|
-
x2="13"
|
142
|
-
y1="0"
|
143
|
-
y2="4"
|
144
|
-
/>
|
145
|
-
</svg>
|
146
|
-
</button>
|
147
|
-
</div>
|
148
|
-
</div>
|
149
|
-
</div>
|
150
|
-
</form>
|
151
|
-
</DocumentFragment>
|
152
|
-
`;
|
@@ -1,10 +0,0 @@
|
|
1
|
-
export interface CustomFieldInputProps<TValue> {
|
2
|
-
id: string;
|
3
|
-
name: string;
|
4
|
-
value: TValue;
|
5
|
-
// we want to be more strict than formik is for setting the value
|
6
|
-
onChange: (newValue: TValue) => void;
|
7
|
-
|
8
|
-
// we don't want controlled vs uncontrolled components to behave oddly
|
9
|
-
onBlur: () => void;
|
10
|
-
}
|