envoc-form 2.0.1-6 → 3.0.0-2
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 +7 -7
- package/dist/css/envoc-form-styles.css +43 -5
- package/dist/css/envoc-form-styles.css.map +1 -1
- package/es/AddressInput/AddressInput.js +7 -6
- package/es/ConfirmBaseForm/ConfirmBaseForm.js +3 -2
- package/es/ConfirmDeleteForm/ConfirmDeleteForm.js +6 -5
- package/es/DatePickerInput/DatePickerInput.js +8 -3
- package/es/FileInput/DefaultFileList.js +36 -0
- package/es/FileInput/DropzoneFileInput.js +58 -0
- package/es/FileInput/FileInput.js +31 -9
- package/es/FileInput/index.js +2 -1
- package/es/Form/Form.js +11 -33
- package/es/Form/FormBasedPreventNavigation.js +4 -7
- package/es/FormGroupWrapper.js +2 -1
- package/es/FormInput/FormInput.js +19 -7
- package/es/FormInputArray/FormInputArray.js +39 -24
- package/es/IconInput.js +2 -1
- package/es/ReactSelectField/ReactSelectField.js +6 -3
- package/es/SubmitFormButton.js +2 -1
- package/es/__Tests__/FormTestBase.js +5 -2
- package/es/normalizers.js +10 -5
- package/es/useStandardFormInput.js +4 -2
- package/es/utils/index.js +3 -0
- package/es/utils/objectContainsNonSerializableProperty.js +16 -0
- package/es/utils/objectToFormData.js +65 -0
- package/es/utils/typeChecks.js +25 -0
- package/lib/AddressInput/AddressInput.js +14 -8
- package/lib/ConfirmBaseForm/ConfirmBaseForm.js +4 -2
- package/lib/ConfirmDeleteForm/ConfirmDeleteForm.js +6 -4
- package/lib/DatePickerInput/DatePickerInput.js +9 -3
- package/lib/FileInput/DefaultFileList.js +47 -0
- package/lib/FileInput/DropzoneFileInput.js +75 -0
- package/lib/FileInput/FileInput.js +39 -10
- package/lib/FileInput/index.js +13 -3
- package/lib/Form/Form.js +19 -39
- package/lib/Form/FormBasedPreventNavigation.js +4 -10
- package/lib/FormGroupWrapper.js +3 -1
- package/lib/FormInput/FormInput.js +21 -8
- package/lib/FormInputArray/FormInputArray.js +47 -26
- package/lib/FormSection.js +5 -1
- package/lib/IconInput.js +3 -1
- package/lib/ReactSelectField/ReactSelectField.js +13 -5
- package/lib/ReactSelectField/index.js +6 -2
- package/lib/SubmitFormButton.js +3 -1
- package/lib/__Tests__/FormTestBase.js +6 -2
- package/lib/index.js +7 -3
- package/lib/normalizers.js +10 -5
- package/lib/useStandardFormInput.js +5 -2
- package/lib/utils/index.js +23 -0
- package/lib/utils/objectContainsNonSerializableProperty.js +24 -0
- package/lib/utils/objectToFormData.js +73 -0
- package/lib/utils/typeChecks.js +58 -0
- package/lib/validators/index.js +5 -1
- package/package.json +99 -92
- package/src/AddressInput/AddesssInput.test.js +23 -23
- package/src/AddressInput/AddressInput.js +73 -73
- package/src/AddressInput/UsStates.js +53 -53
- package/src/AddressInput/__snapshots__/AddesssInput.test.js.snap +207 -207
- package/src/AddressInput/index.js +2 -2
- package/src/BoolInput/BoolInput.js +7 -7
- package/src/BoolInput/BoolInput.test.js +23 -23
- package/src/BoolInput/InlineBoolInput.js +7 -7
- package/src/BoolInput/__snapshots__/BoolInput.test.js.snap +89 -89
- package/src/BoolInput/boolOptions.js +6 -6
- package/src/BoolInput/index.js +4 -4
- package/src/ConfirmBaseForm/ConfirmBaseForm.js +37 -37
- package/src/ConfirmBaseForm/ConfirmBaseForm.test.js +14 -14
- package/src/ConfirmBaseForm/__snapshots__/ConfirmBaseForm.test.js.snap +23 -23
- package/src/ConfirmBaseForm/index.js +1 -1
- package/src/ConfirmDeleteForm/ConfirmDeleteForm.js +39 -39
- package/src/ConfirmDeleteForm/ConfirmDeleteForm.test.js +24 -24
- package/src/ConfirmDeleteForm/__snapshots__/ConfirmDeleteForm.test.js.snap +25 -25
- package/src/ConfirmDeleteForm/index.js +1 -1
- package/src/DatePickerInput/DatePickerInput.js +49 -46
- package/src/DatePickerInput/DatePickerInput.test.js +74 -74
- package/src/DatePickerInput/__snapshots__/DatePickerInput.test.js.snap +134 -134
- package/src/DatePickerInput/date-picker-input.scss +42 -42
- package/src/DatePickerInput/index.js +3 -3
- package/src/ErrorScrollTarget.js +6 -6
- package/src/FileInput/DefaultFileList.js +39 -0
- package/src/FileInput/DropzoneFileInput.js +56 -0
- package/src/FileInput/DropzoneFileInput.test.js +24 -0
- package/src/FileInput/FileInput.js +77 -49
- package/src/FileInput/FileInput.test.js +24 -15
- package/src/FileInput/__snapshots__/DropzoneFileInput.test.js.snap +57 -0
- package/src/FileInput/__snapshots__/FileInput.test.js.snap +58 -22
- package/src/FileInput/file-input.scss +58 -17
- package/src/FileInput/index.js +4 -3
- package/src/Form/FocusError.js +48 -48
- package/src/Form/Form.js +139 -161
- package/src/Form/Form.test.js +23 -23
- package/src/Form/FormBasedPreventNavigation.js +25 -25
- package/src/Form/ServerErrorContext.js +7 -7
- package/src/Form/__snapshots__/Form.test.js.snap +9 -9
- package/src/Form/index.js +3 -3
- package/src/FormGroup.js +30 -30
- package/src/FormGroupWrapper.js +28 -28
- package/src/FormInput/FormInput.js +144 -141
- package/src/FormInput/FormInput.test.js +66 -66
- package/src/FormInput/__snapshots__/FormInput.test.js.snap +323 -316
- package/src/FormInput/form-input.scss +9 -9
- package/src/FormInput/index.js +2 -2
- package/src/FormInputArray/FormInputArray.js +224 -210
- package/src/FormInputArray/FormInputArray.test.js +108 -59
- package/src/FormInputArray/__snapshots__/FormInputArray.test.js.snap +52 -40
- package/src/FormInputArray/form-input-array.scss +13 -8
- package/src/FormInputArray/index.js +2 -2
- package/src/FormSection.js +13 -13
- package/src/IconInput.js +31 -31
- package/src/InlineFormInput/InlineFormInput.js +6 -6
- package/src/InlineFormInput/InlineFormInput.test.js +23 -23
- package/src/InlineFormInput/__snapshots__/InlineFormInput.test.js.snap +26 -26
- package/src/InlineFormInput/index.js +3 -3
- package/src/InlineFormInput/inline-form-input.scss +3 -3
- package/src/MoneyInput/InlineMoneyInput.js +7 -7
- package/src/MoneyInput/MoneyInput.js +7 -7
- package/src/MoneyInput/MoneyInputs.test.js +43 -43
- package/src/MoneyInput/__snapshots__/MoneyInputs.test.js.snap +81 -81
- package/src/MoneyInput/index.js +4 -4
- package/src/MoneyInput/money-input.scss +3 -3
- package/src/MoneyInput/moneyInputProps.js +12 -12
- package/src/NestedFormFieldContext.js +6 -6
- package/src/ReactSelectField/ReactSelectField.js +122 -120
- package/src/ReactSelectField/index.js +6 -6
- package/src/ReactSelectField/react-select-field.scss +5 -5
- package/src/StandardFormActions.js +27 -27
- package/src/SubmitFormButton.js +28 -28
- package/src/__Tests__/FormTestBase.js +14 -11
- package/src/__Tests__/IconInput.test.js +23 -23
- package/src/__Tests__/StandardFormActions.test.js +23 -23
- package/src/__Tests__/SubmitFormButton.test.js +23 -23
- package/src/__Tests__/__snapshots__/IconInput.test.js.snap +38 -38
- package/src/__Tests__/__snapshots__/StandardFormActions.test.js.snap +25 -25
- package/src/__Tests__/__snapshots__/SubmitFormButton.test.js.snap +18 -18
- package/src/__Tests__/index.js +2 -2
- package/src/_variables.scss +11 -11
- package/src/index.js +33 -33
- package/src/normalizers.js +42 -32
- package/src/selectors.js +3 -3
- package/src/styles.scss +7 -7
- package/src/useStandardFormInput.js +118 -118
- package/src/utils/index.js +3 -0
- package/src/utils/objectContainsNonSerializableProperty.js +15 -0
- package/src/utils/objectContainsNonSerializableProperty.test.js +49 -0
- package/src/utils/objectToFormData.js +89 -0
- package/src/utils/objectToFormData.test.js +76 -0
- package/src/utils/typeChecks.js +18 -0
- package/src/validators/index.js +2 -2
- package/src/validators/validators.js +93 -93
- package/src/validators/validators.test.js +79 -79
- package/CHANGELOG.json +0 -95
- package/CHANGELOG.md +0 -58
@@ -1,46 +1,49 @@
|
|
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
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
}
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
{
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
}
|
42
|
-
|
43
|
-
onChange(
|
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(e.toISOString().split('T')[0]);
|
47
|
+
}
|
48
|
+
};
|
49
|
+
}
|
@@ -1,74 +1,74 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import { render } from '@testing-library/react';
|
3
|
-
import '@testing-library/jest-dom/extend-expect';
|
4
|
-
import DatePickerInput from './DatePickerInput';
|
5
|
-
|
6
|
-
//hack so the datepicker internals don't complain about this not existing in the context of jest
|
7
|
-
HTMLCanvasElement.prototype.getContext = () => {};
|
8
|
-
|
9
|
-
//Tell console.error to be quiet about the errors so jest output isn't super noisy
|
10
|
-
//https://github.com/facebook/jest/pull/5267#issuecomment-356605468
|
11
|
-
beforeEach(() => {
|
12
|
-
jest.spyOn(console, 'error');
|
13
|
-
console.error.mockImplementation(() => {});
|
14
|
-
});
|
15
|
-
|
16
|
-
afterEach(() => {
|
17
|
-
console.error.mockRestore();
|
18
|
-
});
|
19
|
-
|
20
|
-
describe('DatePickerInput', () => {
|
21
|
-
it('Renders without error', () => {
|
22
|
-
render(
|
23
|
-
<DatePickerInput
|
24
|
-
minDate={new Date('9/23/2020')}
|
25
|
-
maxDate={new Date('09/23/2021')}
|
26
|
-
/>
|
27
|
-
);
|
28
|
-
});
|
29
|
-
|
30
|
-
it('Throws when given an invalid format date', () => {
|
31
|
-
expect(() =>
|
32
|
-
render(
|
33
|
-
<DatePickerInput
|
34
|
-
minDate={new Date('9/23/2020')}
|
35
|
-
maxDate={new Date('09/23/2021')}
|
36
|
-
value="09/25/2020"
|
37
|
-
/>
|
38
|
-
)
|
39
|
-
).toThrow();
|
40
|
-
});
|
41
|
-
|
42
|
-
it('Throws when given a date with time included', () => {
|
43
|
-
expect(() =>
|
44
|
-
render(
|
45
|
-
<DatePickerInput
|
46
|
-
minDate={new Date('9/23/2020')}
|
47
|
-
maxDate={new Date('09/23/2021')}
|
48
|
-
value="2020-09-25T19:07:49.774Z"
|
49
|
-
/>
|
50
|
-
)
|
51
|
-
).toThrow();
|
52
|
-
});
|
53
|
-
|
54
|
-
it('Accepts valid date only format', () => {
|
55
|
-
render(
|
56
|
-
<DatePickerInput
|
57
|
-
minDate={new Date('9/23/2020')}
|
58
|
-
maxDate={new Date('09/23/2021')}
|
59
|
-
value="2020-09-25"
|
60
|
-
/>
|
61
|
-
);
|
62
|
-
});
|
63
|
-
|
64
|
-
it('has matching snapshot', () => {
|
65
|
-
const renderResult = render(
|
66
|
-
<DatePickerInput
|
67
|
-
minDate={new Date('9/23/2020')}
|
68
|
-
maxDate={new Date('09/23/2021')}
|
69
|
-
value="2020-09-25"
|
70
|
-
/>
|
71
|
-
);
|
72
|
-
expect(renderResult.asFragment()).toMatchSnapshot();
|
73
|
-
});
|
74
|
-
});
|
1
|
+
import React from 'react';
|
2
|
+
import { render } from '@testing-library/react';
|
3
|
+
import '@testing-library/jest-dom/extend-expect';
|
4
|
+
import DatePickerInput from './DatePickerInput';
|
5
|
+
|
6
|
+
//hack so the datepicker internals don't complain about this not existing in the context of jest
|
7
|
+
HTMLCanvasElement.prototype.getContext = () => {};
|
8
|
+
|
9
|
+
//Tell console.error to be quiet about the errors so jest output isn't super noisy
|
10
|
+
//https://github.com/facebook/jest/pull/5267#issuecomment-356605468
|
11
|
+
beforeEach(() => {
|
12
|
+
jest.spyOn(console, 'error');
|
13
|
+
console.error.mockImplementation(() => {});
|
14
|
+
});
|
15
|
+
|
16
|
+
afterEach(() => {
|
17
|
+
console.error.mockRestore();
|
18
|
+
});
|
19
|
+
|
20
|
+
describe('DatePickerInput', () => {
|
21
|
+
it('Renders without error', () => {
|
22
|
+
render(
|
23
|
+
<DatePickerInput
|
24
|
+
minDate={new Date('9/23/2020')}
|
25
|
+
maxDate={new Date('09/23/2021')}
|
26
|
+
/>
|
27
|
+
);
|
28
|
+
});
|
29
|
+
|
30
|
+
it('Throws when given an invalid format date', () => {
|
31
|
+
expect(() =>
|
32
|
+
render(
|
33
|
+
<DatePickerInput
|
34
|
+
minDate={new Date('9/23/2020')}
|
35
|
+
maxDate={new Date('09/23/2021')}
|
36
|
+
value="09/25/2020"
|
37
|
+
/>
|
38
|
+
)
|
39
|
+
).toThrow();
|
40
|
+
});
|
41
|
+
|
42
|
+
it('Throws when given a date with time included', () => {
|
43
|
+
expect(() =>
|
44
|
+
render(
|
45
|
+
<DatePickerInput
|
46
|
+
minDate={new Date('9/23/2020')}
|
47
|
+
maxDate={new Date('09/23/2021')}
|
48
|
+
value="2020-09-25T19:07:49.774Z"
|
49
|
+
/>
|
50
|
+
)
|
51
|
+
).toThrow();
|
52
|
+
});
|
53
|
+
|
54
|
+
it('Accepts valid date only format', () => {
|
55
|
+
render(
|
56
|
+
<DatePickerInput
|
57
|
+
minDate={new Date('9/23/2020')}
|
58
|
+
maxDate={new Date('09/23/2021')}
|
59
|
+
value="2020-09-25"
|
60
|
+
/>
|
61
|
+
);
|
62
|
+
});
|
63
|
+
|
64
|
+
it('has matching snapshot', () => {
|
65
|
+
const renderResult = render(
|
66
|
+
<DatePickerInput
|
67
|
+
minDate={new Date('9/23/2020')}
|
68
|
+
maxDate={new Date('09/23/2021')}
|
69
|
+
value="2020-09-25"
|
70
|
+
/>
|
71
|
+
);
|
72
|
+
expect(renderResult.asFragment()).toMatchSnapshot();
|
73
|
+
});
|
74
|
+
});
|
@@ -1,134 +1,134 @@
|
|
1
|
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
-
|
3
|
-
exports[`DatePickerInput has matching snapshot 1`] = `
|
4
|
-
<DocumentFragment>
|
5
|
-
<div
|
6
|
-
class="react-date-picker react-date-picker--closed react-date-picker--enabled form-control"
|
7
|
-
>
|
8
|
-
<div
|
9
|
-
class="react-date-picker__wrapper"
|
10
|
-
>
|
11
|
-
<div
|
12
|
-
class="react-date-picker__inputGroup"
|
13
|
-
>
|
14
|
-
<input
|
15
|
-
max="2021-09-23"
|
16
|
-
min="2020-09-23"
|
17
|
-
name="date"
|
18
|
-
style="visibility: hidden; position: absolute; z-index: -999;"
|
19
|
-
type="date"
|
20
|
-
value="2020-09-25"
|
21
|
-
/>
|
22
|
-
<input
|
23
|
-
autocomplete="off"
|
24
|
-
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__month"
|
25
|
-
data-input="true"
|
26
|
-
inputmode="numeric"
|
27
|
-
max="12"
|
28
|
-
min="9"
|
29
|
-
name="month"
|
30
|
-
placeholder="--"
|
31
|
-
type="number"
|
32
|
-
value="9"
|
33
|
-
/>
|
34
|
-
<span
|
35
|
-
class="react-date-picker__inputGroup__divider"
|
36
|
-
>
|
37
|
-
/
|
38
|
-
</span>
|
39
|
-
<input
|
40
|
-
autocomplete="off"
|
41
|
-
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__day"
|
42
|
-
data-input="true"
|
43
|
-
inputmode="numeric"
|
44
|
-
max="30"
|
45
|
-
min="23"
|
46
|
-
name="day"
|
47
|
-
placeholder="--"
|
48
|
-
type="number"
|
49
|
-
value="25"
|
50
|
-
/>
|
51
|
-
<span
|
52
|
-
class="react-date-picker__inputGroup__divider"
|
53
|
-
>
|
54
|
-
/
|
55
|
-
</span>
|
56
|
-
<input
|
57
|
-
autocomplete="off"
|
58
|
-
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__year"
|
59
|
-
data-input="true"
|
60
|
-
inputmode="numeric"
|
61
|
-
max="2021"
|
62
|
-
min="2020"
|
63
|
-
name="year"
|
64
|
-
placeholder="----"
|
65
|
-
step="1"
|
66
|
-
type="number"
|
67
|
-
value="2020"
|
68
|
-
/>
|
69
|
-
</div>
|
70
|
-
<button
|
71
|
-
class="react-date-picker__clear-button react-date-picker__button"
|
72
|
-
type="button"
|
73
|
-
>
|
74
|
-
<svg
|
75
|
-
class="react-date-picker__clear-button__icon react-date-picker__button__icon"
|
76
|
-
height="19"
|
77
|
-
stroke="black"
|
78
|
-
stroke-width="2"
|
79
|
-
viewBox="0 0 19 19"
|
80
|
-
width="19"
|
81
|
-
xmlns="http://www.w3.org/2000/svg"
|
82
|
-
>
|
83
|
-
<line
|
84
|
-
x1="4"
|
85
|
-
x2="15"
|
86
|
-
y1="4"
|
87
|
-
y2="15"
|
88
|
-
/>
|
89
|
-
<line
|
90
|
-
x1="15"
|
91
|
-
x2="4"
|
92
|
-
y1="4"
|
93
|
-
y2="15"
|
94
|
-
/>
|
95
|
-
</svg>
|
96
|
-
</button>
|
97
|
-
<button
|
98
|
-
class="react-date-picker__calendar-button react-date-picker__button"
|
99
|
-
type="button"
|
100
|
-
>
|
101
|
-
<svg
|
102
|
-
class="react-date-picker__calendar-button__icon react-date-picker__button__icon"
|
103
|
-
height="19"
|
104
|
-
stroke="black"
|
105
|
-
stroke-width="2"
|
106
|
-
viewBox="0 0 19 19"
|
107
|
-
width="19"
|
108
|
-
xmlns="http://www.w3.org/2000/svg"
|
109
|
-
>
|
110
|
-
<rect
|
111
|
-
fill="none"
|
112
|
-
height="15"
|
113
|
-
width="15"
|
114
|
-
x="2"
|
115
|
-
y="2"
|
116
|
-
/>
|
117
|
-
<line
|
118
|
-
x1="6"
|
119
|
-
x2="6"
|
120
|
-
y1="0"
|
121
|
-
y2="4"
|
122
|
-
/>
|
123
|
-
<line
|
124
|
-
x1="13"
|
125
|
-
x2="13"
|
126
|
-
y1="0"
|
127
|
-
y2="4"
|
128
|
-
/>
|
129
|
-
</svg>
|
130
|
-
</button>
|
131
|
-
</div>
|
132
|
-
</div>
|
133
|
-
</DocumentFragment>
|
134
|
-
`;
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`DatePickerInput has matching snapshot 1`] = `
|
4
|
+
<DocumentFragment>
|
5
|
+
<div
|
6
|
+
class="react-date-picker react-date-picker--closed react-date-picker--enabled form-control"
|
7
|
+
>
|
8
|
+
<div
|
9
|
+
class="react-date-picker__wrapper"
|
10
|
+
>
|
11
|
+
<div
|
12
|
+
class="react-date-picker__inputGroup"
|
13
|
+
>
|
14
|
+
<input
|
15
|
+
max="2021-09-23"
|
16
|
+
min="2020-09-23"
|
17
|
+
name="date"
|
18
|
+
style="visibility: hidden; position: absolute; z-index: -999;"
|
19
|
+
type="date"
|
20
|
+
value="2020-09-25"
|
21
|
+
/>
|
22
|
+
<input
|
23
|
+
autocomplete="off"
|
24
|
+
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__month"
|
25
|
+
data-input="true"
|
26
|
+
inputmode="numeric"
|
27
|
+
max="12"
|
28
|
+
min="9"
|
29
|
+
name="month"
|
30
|
+
placeholder="--"
|
31
|
+
type="number"
|
32
|
+
value="9"
|
33
|
+
/>
|
34
|
+
<span
|
35
|
+
class="react-date-picker__inputGroup__divider"
|
36
|
+
>
|
37
|
+
/
|
38
|
+
</span>
|
39
|
+
<input
|
40
|
+
autocomplete="off"
|
41
|
+
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__day"
|
42
|
+
data-input="true"
|
43
|
+
inputmode="numeric"
|
44
|
+
max="30"
|
45
|
+
min="23"
|
46
|
+
name="day"
|
47
|
+
placeholder="--"
|
48
|
+
type="number"
|
49
|
+
value="25"
|
50
|
+
/>
|
51
|
+
<span
|
52
|
+
class="react-date-picker__inputGroup__divider"
|
53
|
+
>
|
54
|
+
/
|
55
|
+
</span>
|
56
|
+
<input
|
57
|
+
autocomplete="off"
|
58
|
+
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__year"
|
59
|
+
data-input="true"
|
60
|
+
inputmode="numeric"
|
61
|
+
max="2021"
|
62
|
+
min="2020"
|
63
|
+
name="year"
|
64
|
+
placeholder="----"
|
65
|
+
step="1"
|
66
|
+
type="number"
|
67
|
+
value="2020"
|
68
|
+
/>
|
69
|
+
</div>
|
70
|
+
<button
|
71
|
+
class="react-date-picker__clear-button react-date-picker__button"
|
72
|
+
type="button"
|
73
|
+
>
|
74
|
+
<svg
|
75
|
+
class="react-date-picker__clear-button__icon react-date-picker__button__icon"
|
76
|
+
height="19"
|
77
|
+
stroke="black"
|
78
|
+
stroke-width="2"
|
79
|
+
viewBox="0 0 19 19"
|
80
|
+
width="19"
|
81
|
+
xmlns="http://www.w3.org/2000/svg"
|
82
|
+
>
|
83
|
+
<line
|
84
|
+
x1="4"
|
85
|
+
x2="15"
|
86
|
+
y1="4"
|
87
|
+
y2="15"
|
88
|
+
/>
|
89
|
+
<line
|
90
|
+
x1="15"
|
91
|
+
x2="4"
|
92
|
+
y1="4"
|
93
|
+
y2="15"
|
94
|
+
/>
|
95
|
+
</svg>
|
96
|
+
</button>
|
97
|
+
<button
|
98
|
+
class="react-date-picker__calendar-button react-date-picker__button"
|
99
|
+
type="button"
|
100
|
+
>
|
101
|
+
<svg
|
102
|
+
class="react-date-picker__calendar-button__icon react-date-picker__button__icon"
|
103
|
+
height="19"
|
104
|
+
stroke="black"
|
105
|
+
stroke-width="2"
|
106
|
+
viewBox="0 0 19 19"
|
107
|
+
width="19"
|
108
|
+
xmlns="http://www.w3.org/2000/svg"
|
109
|
+
>
|
110
|
+
<rect
|
111
|
+
fill="none"
|
112
|
+
height="15"
|
113
|
+
width="15"
|
114
|
+
x="2"
|
115
|
+
y="2"
|
116
|
+
/>
|
117
|
+
<line
|
118
|
+
x1="6"
|
119
|
+
x2="6"
|
120
|
+
y1="0"
|
121
|
+
y2="4"
|
122
|
+
/>
|
123
|
+
<line
|
124
|
+
x1="13"
|
125
|
+
x2="13"
|
126
|
+
y1="0"
|
127
|
+
y2="4"
|
128
|
+
/>
|
129
|
+
</svg>
|
130
|
+
</button>
|
131
|
+
</div>
|
132
|
+
</div>
|
133
|
+
</DocumentFragment>
|
134
|
+
`;
|
@@ -1,42 +1,42 @@
|
|
1
|
-
@import '../variables';
|
2
|
-
|
3
|
-
.react-date-picker {
|
4
|
-
padding: 0;
|
5
|
-
&.react-date-picker--open {
|
6
|
-
border: 1px solid $input-border-color--focused;
|
7
|
-
box-shadow: $input-box-shadow--focused;
|
8
|
-
}
|
9
|
-
&.react-date-picker--disabled {
|
10
|
-
background-color: $input-disabled-background-color;
|
11
|
-
border-color: $input-disabled-border-color;
|
12
|
-
}
|
13
|
-
|
14
|
-
.react-date-picker__wrapper {
|
15
|
-
width: 100%;
|
16
|
-
border: none;
|
17
|
-
}
|
18
|
-
|
19
|
-
.react-date-picker__inputGroup {
|
20
|
-
width: 100%;
|
21
|
-
margin-left: 10px;
|
22
|
-
}
|
23
|
-
|
24
|
-
.is-invalid.react-date-picker {
|
25
|
-
border: 1px solid $red;
|
26
|
-
}
|
27
|
-
|
28
|
-
.react-date-picker__calendar {
|
29
|
-
z-index: 3;
|
30
|
-
}
|
31
|
-
.react-date-picker__inputGroup__input {
|
32
|
-
min-width: 18px;
|
33
|
-
text-align: center;
|
34
|
-
&.react-date-picker__inputGroup__year {
|
35
|
-
min-width: 40px;
|
36
|
-
}
|
37
|
-
}
|
38
|
-
|
39
|
-
.react-calendar__tile--now {
|
40
|
-
outline: 1px solid rgba(0, 0, 0, 0.5);
|
41
|
-
}
|
42
|
-
}
|
1
|
+
@import '../variables';
|
2
|
+
|
3
|
+
.react-date-picker {
|
4
|
+
padding: 0;
|
5
|
+
&.react-date-picker--open {
|
6
|
+
border: 1px solid $input-border-color--focused;
|
7
|
+
box-shadow: $input-box-shadow--focused;
|
8
|
+
}
|
9
|
+
&.react-date-picker--disabled {
|
10
|
+
background-color: $input-disabled-background-color;
|
11
|
+
border-color: $input-disabled-border-color;
|
12
|
+
}
|
13
|
+
|
14
|
+
.react-date-picker__wrapper {
|
15
|
+
width: 100%;
|
16
|
+
border: none;
|
17
|
+
}
|
18
|
+
|
19
|
+
.react-date-picker__inputGroup {
|
20
|
+
width: 100%;
|
21
|
+
margin-left: 10px;
|
22
|
+
}
|
23
|
+
|
24
|
+
.is-invalid.react-date-picker {
|
25
|
+
border: 1px solid $red;
|
26
|
+
}
|
27
|
+
|
28
|
+
.react-date-picker__calendar {
|
29
|
+
z-index: 3;
|
30
|
+
}
|
31
|
+
.react-date-picker__inputGroup__input {
|
32
|
+
min-width: 18px;
|
33
|
+
text-align: center;
|
34
|
+
&.react-date-picker__inputGroup__year {
|
35
|
+
min-width: 40px;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
.react-calendar__tile--now {
|
40
|
+
outline: 1px solid rgba(0, 0, 0, 0.5);
|
41
|
+
}
|
42
|
+
}
|
@@ -1,3 +1,3 @@
|
|
1
|
-
import DatePickerInput from './DatePickerInput';
|
2
|
-
|
3
|
-
export default DatePickerInput;
|
1
|
+
import DatePickerInput from './DatePickerInput';
|
2
|
+
|
3
|
+
export default DatePickerInput;
|
package/src/ErrorScrollTarget.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
|
3
|
-
export default function ErrorScrollTarget(props) {
|
4
|
-
const divId = `${props.name.toLowerCase()}-error-scroll-target`;
|
5
|
-
return <div id={divId} style={{ display: 'none' }} />;
|
6
|
-
}
|
1
|
+
import React from 'react';
|
2
|
+
|
3
|
+
export default function ErrorScrollTarget(props) {
|
4
|
+
const divId = `${props.name.toLowerCase()}-error-scroll-target`;
|
5
|
+
return <div id={divId} style={{ display: 'none' }} />;
|
6
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { ListGroupItem, ListGroup } from 'reactstrap';
|
3
|
+
|
4
|
+
export default function DefaultFileList({ files, rejectedFiles = [] }) {
|
5
|
+
return (
|
6
|
+
<ListGroup>
|
7
|
+
{files.map((file) => (
|
8
|
+
<Group key={file.path} item={file} warning={false} />
|
9
|
+
))}
|
10
|
+
{rejectedFiles.map(({ file }) => {
|
11
|
+
return <Group key={file.path} item={file} warning={true} />;
|
12
|
+
})}
|
13
|
+
</ListGroup>
|
14
|
+
);
|
15
|
+
}
|
16
|
+
|
17
|
+
function Group({ item, warning }) {
|
18
|
+
return (
|
19
|
+
<ListGroupItem
|
20
|
+
color={`d-flex ${
|
21
|
+
warning ? 'warning' : 'success'
|
22
|
+
} justify-content-between list-group-item ${
|
23
|
+
warning ? 'list-group-item-warning' : 'list-group-item-success'
|
24
|
+
} px-3 py-1 rounded-1`}>
|
25
|
+
<span className="d-flex justify-content-between w-100">
|
26
|
+
<span>{item.name}</span> <span>{humanFileSize(item.size)}</span>
|
27
|
+
</span>
|
28
|
+
</ListGroupItem>
|
29
|
+
);
|
30
|
+
}
|
31
|
+
|
32
|
+
function humanFileSize(size) {
|
33
|
+
const i = Math.floor(Math.log(size) / Math.log(1024));
|
34
|
+
return (
|
35
|
+
(size / Math.pow(1024, i)).toFixed(2) * 1 +
|
36
|
+
' ' +
|
37
|
+
['B', 'KB', 'MB', 'GB', 'TB'][i]
|
38
|
+
);
|
39
|
+
}
|