@dhis2/ui-forms 9.10.3 → 9.11.1-beta.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.
- package/build/cjs/CheckboxFieldFF/{CheckboxFieldFF.stories.e2e.js → CheckboxFieldFF.e2e.stories.js} +22 -15
- package/build/cjs/CheckboxFieldFF/CheckboxFieldFF.js +2 -12
- package/build/cjs/CheckboxFieldFF/{CheckboxFieldFF.stories.js → CheckboxFieldFF.prod.stories.js} +29 -24
- package/build/cjs/CheckboxFieldFF/features/can_toggle_a_boolean/index.js +0 -1
- package/build/cjs/CheckboxFieldFF/features/can_toggle_a_value/index.js +0 -1
- package/build/cjs/CheckboxFieldFF/features/common/index.js +0 -1
- package/build/cjs/CheckboxFieldFF/features/displays_error/index.js +0 -2
- package/build/cjs/FieldGroupFF/FieldGroupFF.js +1 -10
- package/build/cjs/FieldGroupFF/{FieldGroupFF.stories.js → FieldGroupFF.prod.stories.js} +11 -12
- package/build/cjs/FileInputFieldFF/{FileInputFieldFF.stories.e2e.js → FileInputFieldFF.e2e.stories.js} +45 -56
- package/build/cjs/FileInputFieldFF/FileInputFieldFF.js +2 -19
- package/build/cjs/FileInputFieldFF/{FileInputFieldFF.stories.js → FileInputFieldFF.prod.stories.js} +29 -22
- package/build/cjs/FileInputFieldFF/features/accepts_file/index.js +0 -1
- package/build/cjs/FileInputFieldFF/features/common/index.js +0 -1
- package/build/cjs/FileInputFieldFF/features/displays_error/index.js +0 -1
- package/build/cjs/InputFieldFF/InputFieldFF.e2e.stories.js +30 -0
- package/build/cjs/InputFieldFF/InputFieldFF.js +2 -12
- package/build/cjs/InputFieldFF/{InputFieldFF.stories.js → InputFieldFF.prod.stories.js} +29 -22
- package/build/cjs/InputFieldFF/features/can_set_a_value/index.js +0 -1
- package/build/cjs/InputFieldFF/features/displays_error/index.js +0 -2
- package/build/cjs/MultiSelectFieldFF/{MultiSelectFieldFF.stories.e2e.js → MultiSelectFieldFF.e2e.stories.js} +15 -17
- package/build/cjs/MultiSelectFieldFF/MultiSelectFieldFF.js +3 -15
- package/build/cjs/MultiSelectFieldFF/MultiSelectFieldFF.prod.stories.js +107 -0
- package/build/cjs/MultiSelectFieldFF/features/can_set_a_value/index.js +0 -1
- package/build/cjs/MultiSelectFieldFF/features/common/index.js +1 -2
- package/build/cjs/MultiSelectFieldFF/features/displays_error/index.js +0 -2
- package/build/cjs/RadioFieldFF/RadioFieldFF.e2e.stories.js +45 -0
- package/build/cjs/RadioFieldFF/RadioFieldFF.js +2 -12
- package/build/cjs/RadioFieldFF/{RadioFieldFF.stories.js → RadioFieldFF.prod.stories.js} +29 -16
- package/build/cjs/RadioFieldFF/features/can_set_a_value/index.js +0 -1
- package/build/cjs/RadioFieldFF/features/common/index.js +0 -1
- package/build/cjs/RadioFieldFF/features/displays_error/index.js +0 -2
- package/build/cjs/SingleSelectFieldFF/SingleSelectFieldFF.e2e.stories.js +39 -0
- package/build/cjs/SingleSelectFieldFF/SingleSelectFieldFF.js +2 -12
- package/build/cjs/SingleSelectFieldFF/SingleSelectFieldFF.prod.stories.js +106 -0
- package/build/cjs/SingleSelectFieldFF/features/can_set_a_value/index.js +0 -1
- package/build/cjs/SingleSelectFieldFF/features/common/index.js +0 -1
- package/build/cjs/SingleSelectFieldFF/features/displays_error/index.js +0 -2
- package/build/cjs/SwitchFieldFF/SwitchFieldFF.e2e.stories.js +56 -0
- package/build/cjs/SwitchFieldFF/SwitchFieldFF.js +2 -12
- package/build/cjs/SwitchFieldFF/{SwitchFieldFF.stories.js → SwitchFieldFF.prod.stories.js} +29 -24
- package/build/cjs/SwitchFieldFF/features/can_toggle_a_boolean/index.js +0 -1
- package/build/cjs/SwitchFieldFF/features/can_toggle_a_value/index.js +0 -1
- package/build/cjs/SwitchFieldFF/features/common/index.js +0 -1
- package/build/cjs/SwitchFieldFF/features/displays_error/index.js +0 -2
- package/build/cjs/TextAreaFieldFF/TextAreaFieldFF.e2e.stories.js +30 -0
- package/build/cjs/TextAreaFieldFF/TextAreaFieldFF.js +2 -12
- package/build/cjs/TextAreaFieldFF/{TextAreaFieldFF.stories.js → TextAreaFieldFF.prod.stories.js} +29 -24
- package/build/cjs/TextAreaFieldFF/features/can_set_a_value/index.js +0 -1
- package/build/cjs/TextAreaFieldFF/features/displays_error/index.js +0 -2
- package/build/cjs/__tests__/__snapshots__/index.test.js.snap +3 -0
- package/build/cjs/__tests__/index.test.js +1 -1
- package/build/cjs/formDecorator.js +6 -21
- package/build/cjs/index.js +2 -21
- package/build/cjs/locales/index.js +3 -75
- package/build/cjs/shared/helpers/createBlurHandler.js +0 -3
- package/build/cjs/shared/helpers/createChangeHandler.js +0 -2
- package/build/cjs/shared/helpers/createFocusHandler.js +0 -3
- package/build/cjs/shared/helpers/createSelectChangeHandler.js +0 -2
- package/build/cjs/shared/helpers/createToggleChangeHandler.js +0 -3
- package/build/cjs/shared/helpers/getValidationText.js +0 -6
- package/build/cjs/shared/helpers/hasError.js +0 -2
- package/build/cjs/shared/helpers/isLoading.js +0 -2
- package/build/cjs/shared/helpers/isValid.js +0 -2
- package/build/cjs/shared/helpers.js +0 -9
- package/build/cjs/shared/propTypes.js +7 -20
- package/build/cjs/transformers/arrayWithIdObjects.js +2 -6
- package/build/cjs/transformers/index.js +0 -1
- package/build/cjs/validators/__tests__/alphaNumeric.test.js +0 -2
- package/build/cjs/validators/__tests__/boolean.test.js +0 -2
- package/build/cjs/validators/__tests__/composeValidators.test.js +0 -3
- package/build/cjs/validators/__tests__/createCharacterLengthRange.test.js +6 -6
- package/build/cjs/validators/__tests__/createEqualTo.test.js +0 -3
- package/build/cjs/validators/__tests__/createMaxCharacterLength.test.js +1 -2
- package/build/cjs/validators/__tests__/createMaxNumber.test.js +1 -2
- package/build/cjs/validators/__tests__/createMinCharacterLength.test.js +1 -2
- package/build/cjs/validators/__tests__/createMinNumber.test.js +1 -2
- package/build/cjs/validators/__tests__/createNumberRange.test.js +0 -3
- package/build/cjs/validators/__tests__/createPattern.test.js +1 -3
- package/build/cjs/validators/__tests__/dhis2Password.test.js +0 -2
- package/build/cjs/validators/__tests__/dhis2Username.test.js +0 -2
- package/build/cjs/validators/__tests__/email.test.js +7 -6
- package/build/cjs/validators/__tests__/hasValue.test.js +0 -2
- package/build/cjs/validators/__tests__/integer.test.js +0 -2
- package/build/cjs/validators/__tests__/internationalPhoneNumber.test.js +6 -5
- package/build/cjs/validators/__tests__/number.test.js +0 -2
- package/build/cjs/validators/__tests__/string.test.js +0 -2
- package/build/cjs/validators/__tests__/url.test.js +1 -2
- package/build/cjs/validators/alphaNumeric.js +2 -11
- package/build/cjs/validators/boolean.js +2 -10
- package/build/cjs/validators/composeValidators.js +0 -4
- package/build/cjs/validators/createCharacterLengthRange.js +1 -8
- package/build/cjs/validators/createEqualTo.js +1 -8
- package/build/cjs/validators/createMaxCharacterLength.js +1 -6
- package/build/cjs/validators/createMaxNumber.js +1 -6
- package/build/cjs/validators/createMinCharacterLength.js +1 -6
- package/build/cjs/validators/createMinNumber.js +1 -6
- package/build/cjs/validators/createNumberRange.js +1 -8
- package/build/cjs/validators/createPattern.js +2 -10
- package/build/cjs/validators/dhis2Password.js +6 -28
- package/build/cjs/validators/dhis2Username.js +2 -11
- package/build/cjs/validators/email.js +3 -11
- package/build/cjs/validators/hasValue.js +2 -10
- package/build/cjs/validators/helpers/index.js +1 -16
- package/build/cjs/validators/index.js +0 -20
- package/build/cjs/validators/integer.js +3 -10
- package/build/cjs/validators/internationalPhoneNumber.js +8 -14
- package/build/cjs/validators/number.js +2 -10
- package/build/cjs/validators/string.js +2 -10
- package/build/cjs/validators/test-helpers/index.js +1 -6
- package/build/cjs/validators/url.js +2 -11
- package/build/es/CheckboxFieldFF/{CheckboxFieldFF.stories.e2e.js → CheckboxFieldFF.e2e.stories.js} +14 -7
- package/build/es/CheckboxFieldFF/CheckboxFieldFF.js +1 -3
- package/build/es/CheckboxFieldFF/{CheckboxFieldFF.stories.js → CheckboxFieldFF.prod.stories.js} +29 -3
- package/build/es/FieldGroupFF/FieldGroupFF.js +0 -2
- package/build/es/FieldGroupFF/{FieldGroupFF.stories.js → FieldGroupFF.prod.stories.js} +11 -1
- package/build/es/FileInputFieldFF/{FileInputFieldFF.stories.e2e.js → FileInputFieldFF.e2e.stories.js} +14 -16
- package/build/es/FileInputFieldFF/FileInputFieldFF.js +1 -8
- package/build/es/FileInputFieldFF/{FileInputFieldFF.stories.js → FileInputFieldFF.prod.stories.js} +29 -3
- package/build/es/InputFieldFF/{InputFieldFF.stories.e2e.js → InputFieldFF.e2e.stories.js} +8 -4
- package/build/es/InputFieldFF/InputFieldFF.js +1 -3
- package/build/es/InputFieldFF/{InputFieldFF.stories.js → InputFieldFF.prod.stories.js} +29 -3
- package/build/es/MultiSelectFieldFF/{MultiSelectFieldFF.stories.e2e.js → MultiSelectFieldFF.e2e.stories.js} +7 -7
- package/build/es/MultiSelectFieldFF/MultiSelectFieldFF.js +2 -6
- package/build/es/MultiSelectFieldFF/MultiSelectFieldFF.prod.stories.js +98 -0
- package/build/es/MultiSelectFieldFF/features/common/index.js +1 -1
- package/build/es/RadioFieldFF/{RadioFieldFF.stories.e2e.js → RadioFieldFF.e2e.stories.js} +6 -3
- package/build/es/RadioFieldFF/RadioFieldFF.js +1 -3
- package/build/es/RadioFieldFF/{RadioFieldFF.stories.js → RadioFieldFF.prod.stories.js} +29 -3
- package/build/es/SingleSelectFieldFF/{SingleSelectFieldFF.stories.e2e.js → SingleSelectFieldFF.e2e.stories.js} +10 -6
- package/build/es/SingleSelectFieldFF/SingleSelectFieldFF.js +1 -3
- package/build/es/SingleSelectFieldFF/SingleSelectFieldFF.prod.stories.js +97 -0
- package/build/es/SwitchFieldFF/{SwitchFieldFF.stories.e2e.js → SwitchFieldFF.e2e.stories.js} +14 -7
- package/build/es/SwitchFieldFF/SwitchFieldFF.js +1 -3
- package/build/es/SwitchFieldFF/{SwitchFieldFF.stories.js → SwitchFieldFF.prod.stories.js} +29 -3
- package/build/es/TextAreaFieldFF/{TextAreaFieldFF.stories.e2e.js → TextAreaFieldFF.e2e.stories.js} +8 -4
- package/build/es/TextAreaFieldFF/TextAreaFieldFF.js +1 -3
- package/build/es/TextAreaFieldFF/{TextAreaFieldFF.stories.js → TextAreaFieldFF.prod.stories.js} +29 -3
- package/build/es/__tests__/__snapshots__/index.test.js.snap +3 -0
- package/build/es/__tests__/index.test.js +1 -0
- package/build/es/formDecorator.js +5 -12
- package/build/es/index.js +2 -2
- package/build/es/shared/helpers/createBlurHandler.js +0 -2
- package/build/es/shared/helpers/createChangeHandler.js +0 -2
- package/build/es/shared/helpers/createFocusHandler.js +0 -2
- package/build/es/shared/helpers/createSelectChangeHandler.js +0 -1
- package/build/es/shared/helpers/createToggleChangeHandler.js +0 -2
- package/build/es/shared/helpers/getValidationText.js +0 -5
- package/build/es/shared/helpers/hasError.js +0 -1
- package/build/es/shared/helpers/isLoading.js +0 -1
- package/build/es/shared/helpers/isValid.js +0 -1
- package/build/es/transformers/arrayWithIdObjects.js +0 -2
- package/build/es/validators/__tests__/createCharacterLengthRange.test.js +6 -3
- package/build/es/validators/__tests__/createMaxCharacterLength.test.js +1 -0
- package/build/es/validators/__tests__/createMaxNumber.test.js +1 -0
- package/build/es/validators/__tests__/createMinCharacterLength.test.js +1 -0
- package/build/es/validators/__tests__/createMinNumber.test.js +1 -0
- package/build/es/validators/__tests__/createPattern.test.js +1 -1
- package/build/es/validators/__tests__/email.test.js +7 -4
- package/build/es/validators/__tests__/internationalPhoneNumber.test.js +6 -3
- package/build/es/validators/__tests__/url.test.js +1 -0
- package/build/es/validators/alphaNumeric.js +0 -2
- package/build/es/validators/boolean.js +0 -2
- package/build/es/validators/composeValidators.js +0 -2
- package/build/es/validators/createCharacterLengthRange.js +0 -2
- package/build/es/validators/createEqualTo.js +0 -2
- package/build/es/validators/createMaxCharacterLength.js +0 -2
- package/build/es/validators/createMaxNumber.js +0 -2
- package/build/es/validators/createMinCharacterLength.js +0 -2
- package/build/es/validators/createMinNumber.js +0 -2
- package/build/es/validators/createNumberRange.js +0 -2
- package/build/es/validators/createPattern.js +0 -3
- package/build/es/validators/dhis2Password.js +3 -12
- package/build/es/validators/dhis2Username.js +0 -2
- package/build/es/validators/email.js +1 -2
- package/build/es/validators/hasValue.js +0 -2
- package/build/es/validators/integer.js +3 -4
- package/build/es/validators/internationalPhoneNumber.js +7 -7
- package/build/es/validators/number.js +0 -2
- package/build/es/validators/string.js +0 -2
- package/build/es/validators/test-helpers/index.js +1 -4
- package/build/es/validators/url.js +2 -3
- package/package.json +13 -13
- package/build/cjs/InputFieldFF/InputFieldFF.stories.e2e.js +0 -27
- package/build/cjs/MultiSelectFieldFF/MultiSelectFieldFF.stories.js +0 -91
- package/build/cjs/RadioFieldFF/RadioFieldFF.stories.e2e.js +0 -45
- package/build/cjs/SingleSelectFieldFF/SingleSelectFieldFF.stories.e2e.js +0 -37
- package/build/cjs/SingleSelectFieldFF/SingleSelectFieldFF.stories.js +0 -90
- package/build/cjs/SwitchFieldFF/SwitchFieldFF.stories.e2e.js +0 -49
- package/build/cjs/TextAreaFieldFF/TextAreaFieldFF.stories.e2e.js +0 -27
- package/build/es/MultiSelectFieldFF/MultiSelectFieldFF.stories.js +0 -70
- package/build/es/SingleSelectFieldFF/SingleSelectFieldFF.stories.js +0 -69
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { storiesOf } from '@storybook/react';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { Field } from 'react-final-form';
|
|
4
3
|
import { CheckboxFieldFF } from '../CheckboxFieldFF/CheckboxFieldFF.js';
|
|
@@ -12,8 +11,7 @@ import { SwitchFieldFF } from '../SwitchFieldFF/SwitchFieldFF.js';
|
|
|
12
11
|
import { TextAreaFieldFF } from '../TextAreaFieldFF/TextAreaFieldFF.js';
|
|
13
12
|
import { composeValidators, email, hasValue } from '../validators/index.js';
|
|
14
13
|
import { FileInputFieldFF } from './FileInputFieldFF.js';
|
|
15
|
-
|
|
16
|
-
const StandardForm = _ref => {
|
|
14
|
+
const Form = _ref => {
|
|
17
15
|
let {
|
|
18
16
|
values
|
|
19
17
|
} = _ref;
|
|
@@ -194,11 +192,9 @@ const StandardForm = _ref => {
|
|
|
194
192
|
if (!files) {
|
|
195
193
|
return undefined;
|
|
196
194
|
}
|
|
197
|
-
|
|
198
195
|
const [file] = files;
|
|
199
|
-
|
|
200
196
|
if (file.type !== 'text/plain') {
|
|
201
|
-
return
|
|
197
|
+
return `The file you provided is not a txt file, received "${file.type}"`;
|
|
202
198
|
}
|
|
203
199
|
},
|
|
204
200
|
component: FileInputFieldFF
|
|
@@ -211,14 +207,12 @@ const StandardForm = _ref => {
|
|
|
211
207
|
if (!files) {
|
|
212
208
|
return undefined;
|
|
213
209
|
}
|
|
214
|
-
|
|
215
210
|
return files.reduce((error, file) => {
|
|
216
211
|
if (error) {
|
|
217
212
|
return error;
|
|
218
213
|
}
|
|
219
|
-
|
|
220
214
|
if (file.type !== 'application/jpg') {
|
|
221
|
-
return
|
|
215
|
+
return `One of the files is not a jpg, received "${file.type}"`;
|
|
222
216
|
}
|
|
223
217
|
}, undefined);
|
|
224
218
|
},
|
|
@@ -233,14 +227,18 @@ const StandardForm = _ref => {
|
|
|
233
227
|
className: "checkbox"
|
|
234
228
|
}));
|
|
235
229
|
};
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
230
|
+
export default {
|
|
231
|
+
title: 'Testing:FileInput',
|
|
232
|
+
decorators: [formDecorator],
|
|
233
|
+
parameters: {
|
|
234
|
+
options: {
|
|
235
|
+
showPanel: false
|
|
236
|
+
}
|
|
240
237
|
}
|
|
241
|
-
}
|
|
238
|
+
};
|
|
239
|
+
export const StandardForm = (_, _ref2) => {
|
|
242
240
|
let {
|
|
243
241
|
formRenderProps
|
|
244
242
|
} = _ref2;
|
|
245
|
-
return /*#__PURE__*/React.createElement(
|
|
246
|
-
}
|
|
243
|
+
return /*#__PURE__*/React.createElement(Form, formRenderProps);
|
|
244
|
+
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign
|
|
2
|
-
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
3
2
|
import { FileListItem, FileInputField } from '@dhis2-ui/file-input';
|
|
4
3
|
import PropTypes from 'prop-types';
|
|
5
4
|
import React from 'react';
|
|
@@ -8,21 +7,18 @@ import { hasError, isValid, getValidationText } from '../shared/helpers.js';
|
|
|
8
7
|
import { inputPropType, metaPropType } from '../shared/propTypes.js';
|
|
9
8
|
const btnLabel = i18n.t('Upload file');
|
|
10
9
|
const btnLabelMulti = i18n.t('Upload files');
|
|
11
|
-
|
|
12
10
|
const dedupeAndConcat = (currentFiles, newFileList) => {
|
|
13
11
|
return [...currentFiles, ...newFileList].reduceRight((acc, file) => {
|
|
14
12
|
if (!acc.unique.has(file.name)) {
|
|
15
13
|
acc.unique.add(file.name);
|
|
16
14
|
acc.files.unshift(file);
|
|
17
15
|
}
|
|
18
|
-
|
|
19
16
|
return acc;
|
|
20
17
|
}, {
|
|
21
18
|
files: [],
|
|
22
19
|
unique: new Set()
|
|
23
20
|
}).files;
|
|
24
21
|
};
|
|
25
|
-
|
|
26
22
|
const createChangeHandler = (input, multifile) => _ref => {
|
|
27
23
|
let {
|
|
28
24
|
files
|
|
@@ -34,13 +30,11 @@ const createChangeHandler = (input, multifile) => _ref => {
|
|
|
34
30
|
const value = multifile ? dedupeAndConcat(currentFiles, files) : [...files];
|
|
35
31
|
input.onChange(value);
|
|
36
32
|
};
|
|
37
|
-
|
|
38
33
|
const createRemoveHandler = (input, fileToDelete) => () => {
|
|
39
34
|
const files = input.value.filter(file => file !== fileToDelete);
|
|
40
35
|
const value = files.length > 0 ? files : '';
|
|
41
36
|
input.onChange(value);
|
|
42
37
|
};
|
|
43
|
-
|
|
44
38
|
export const FileInputFieldFF = _ref2 => {
|
|
45
39
|
let {
|
|
46
40
|
buttonLabel,
|
|
@@ -74,7 +68,6 @@ export const FileInputFieldFF = _ref2 => {
|
|
|
74
68
|
FileInputFieldFF.propTypes = {
|
|
75
69
|
/** `input` props provided by Final Form `Field` */
|
|
76
70
|
input: inputPropType.isRequired,
|
|
77
|
-
|
|
78
71
|
/** `meta` props provided by Final Form `Field` */
|
|
79
72
|
meta: metaPropType.isRequired,
|
|
80
73
|
buttonLabel: PropTypes.string,
|
package/build/es/FileInputFieldFF/{FileInputFieldFF.stories.js → FileInputFieldFF.prod.stories.js}
RENAMED
|
@@ -4,7 +4,31 @@ import { formDecorator } from '../formDecorator.js';
|
|
|
4
4
|
import { inputArgType, metaArgType } from '../shared/propTypes.js';
|
|
5
5
|
import { hasValue } from '../validators/index.js';
|
|
6
6
|
import { FileInputFieldFF } from './FileInputFieldFF.js';
|
|
7
|
-
const description =
|
|
7
|
+
const description = `
|
|
8
|
+
The \`FileInputFieldFF\` is a wrapper around a \`FileInputField\` that enables it to work with Final Form, the preferred library in DHIS 2 apps for form validation and utilities.
|
|
9
|
+
|
|
10
|
+
#### Final Form
|
|
11
|
+
|
|
12
|
+
See how to use Final Form at [Final Form - Getting Started](https://final-form.org/docs/react-final-form/getting-started).
|
|
13
|
+
|
|
14
|
+
Inside a Final Form \`<Form>\` component, these 'FF' UI components are intended to be used in the \`component\` prop of the [Final Form \`<Field>\` components](https://final-form.org/docs/react-final-form/api/Field) where they will receive some props from the Field, e.g. \`<Field component={FileInputFieldFF} />\`. See the code samples below for examples.
|
|
15
|
+
|
|
16
|
+
#### Props
|
|
17
|
+
|
|
18
|
+
The props shown in the table below are generally provided to the \`FileInputFieldFF\` wrapper by the Final Form \`Field\`.
|
|
19
|
+
|
|
20
|
+
Note that any props beyond the API of the \`Field\` component will be spread to the \`FileInputFieldFF\`, which passes any extra props to the underlying \`FileInputField\` using \`{...rest}\`.
|
|
21
|
+
|
|
22
|
+
Therefore, to add any props to the \`FileInputFieldFF\` or \`FileInputField\`, add those props to the parent Final Form \`Field\` component.
|
|
23
|
+
|
|
24
|
+
Also see \`FileInput\` and \`FileInputField\` for notes about props and implementation.
|
|
25
|
+
|
|
26
|
+
\`\`\`js
|
|
27
|
+
import { FileInputFieldFF } from '@dhis2/ui'
|
|
28
|
+
\`\`\`
|
|
29
|
+
|
|
30
|
+
Press **Submit** to see the form values logged to the console.
|
|
31
|
+
`;
|
|
8
32
|
const files = [new File([], 'file1.txt'), new File([], 'file2.txt')];
|
|
9
33
|
export default {
|
|
10
34
|
title: 'File Input Field (Final Form)',
|
|
@@ -18,9 +42,11 @@ export default {
|
|
|
18
42
|
}
|
|
19
43
|
},
|
|
20
44
|
argTypes: {
|
|
21
|
-
input: {
|
|
45
|
+
input: {
|
|
46
|
+
...inputArgType
|
|
22
47
|
},
|
|
23
|
-
meta: {
|
|
48
|
+
meta: {
|
|
49
|
+
...metaArgType
|
|
24
50
|
}
|
|
25
51
|
}
|
|
26
52
|
};
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
import { storiesOf } from '@storybook/react';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { Field } from 'react-final-form';
|
|
4
3
|
import { formDecorator } from '../formDecorator.js';
|
|
5
4
|
import { hasValue } from '../validators/index.js';
|
|
6
5
|
import { InputFieldFF } from './InputFieldFF.js';
|
|
7
|
-
|
|
6
|
+
export default {
|
|
7
|
+
title: 'Testing:InputFieldFF',
|
|
8
|
+
decorators: [formDecorator]
|
|
9
|
+
};
|
|
10
|
+
export const Default = () => /*#__PURE__*/React.createElement(Field, {
|
|
8
11
|
component: InputFieldFF,
|
|
9
12
|
name: "agree",
|
|
10
13
|
label: "Do you agree?"
|
|
11
|
-
})
|
|
14
|
+
});
|
|
15
|
+
export const Required = () => /*#__PURE__*/React.createElement(Field, {
|
|
12
16
|
name: "agree",
|
|
13
17
|
component: InputFieldFF,
|
|
14
18
|
required: true,
|
|
15
19
|
validate: hasValue,
|
|
16
20
|
label: "Do you agree?"
|
|
17
|
-
})
|
|
21
|
+
});
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign
|
|
2
|
-
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
3
2
|
import { InputField } from '@dhis2-ui/input';
|
|
4
3
|
import PropTypes from 'prop-types';
|
|
5
4
|
import React from 'react';
|
|
@@ -35,7 +34,6 @@ export const InputFieldFF = _ref => {
|
|
|
35
34
|
InputFieldFF.propTypes = {
|
|
36
35
|
/** `input` props received from Final Form `Field` */
|
|
37
36
|
input: inputPropType.isRequired,
|
|
38
|
-
|
|
39
37
|
/** `meta` props received from Final Form `Field` */
|
|
40
38
|
meta: metaPropType.isRequired,
|
|
41
39
|
error: PropTypes.bool,
|
|
@@ -4,7 +4,31 @@ import { formDecorator } from '../formDecorator.js';
|
|
|
4
4
|
import { inputArgType, metaArgType } from '../shared/propTypes.js';
|
|
5
5
|
import { hasValue } from '../validators/index.js';
|
|
6
6
|
import { InputFieldFF } from './InputFieldFF.js';
|
|
7
|
-
const description =
|
|
7
|
+
const description = `
|
|
8
|
+
The \`InputFieldFF\` is a wrapper around a \`InputField\` that enables it to work with Final Form, the preferred library for form validation and utilities in DHIS 2 apps.
|
|
9
|
+
|
|
10
|
+
#### Final Form
|
|
11
|
+
|
|
12
|
+
See how to use Final Form at [Final Form - Getting Started](https://final-form.org/docs/react-final-form/getting-started).
|
|
13
|
+
|
|
14
|
+
Inside a Final Form \`<Form>\` component, these 'FF' UI components are intended to be used in the \`component\` prop of the [Final Form \`<Field>\` components](https://final-form.org/docs/react-final-form/api/Field) where they will receive some props from the Field, e.g. \`<Field component={InputFieldFF} />\`. See the code samples below for examples.
|
|
15
|
+
|
|
16
|
+
#### Props
|
|
17
|
+
|
|
18
|
+
The props shown in the table below are generally provided to the \`InputFieldFF\` wrapper by the Final Form \`Field\`.
|
|
19
|
+
|
|
20
|
+
Note that any props beyond the API of the \`Field\` component will be spread to the \`InputFieldFF\`, which passes any extra props to the underlying \`InputField\` using \`{...rest}\`.
|
|
21
|
+
|
|
22
|
+
Therefore, to add any props to the \`InputFieldFF\` or \`InputField\`, add those props to the parent Final Form \`Field\` component.
|
|
23
|
+
|
|
24
|
+
Also see \`InputField\` for notes about props and implementation.
|
|
25
|
+
|
|
26
|
+
\`\`\`js
|
|
27
|
+
import { InputFieldFF } from '@dhis2/ui'
|
|
28
|
+
\`\`\`
|
|
29
|
+
|
|
30
|
+
Press **Submit** to see the form values logged to the console.
|
|
31
|
+
`;
|
|
8
32
|
export default {
|
|
9
33
|
title: 'Input Field (Final Form)',
|
|
10
34
|
component: InputFieldFF,
|
|
@@ -17,9 +41,11 @@ export default {
|
|
|
17
41
|
}
|
|
18
42
|
},
|
|
19
43
|
argTypes: {
|
|
20
|
-
input: {
|
|
44
|
+
input: {
|
|
45
|
+
...inputArgType
|
|
21
46
|
},
|
|
22
|
-
meta: {
|
|
47
|
+
meta: {
|
|
48
|
+
...metaArgType
|
|
23
49
|
}
|
|
24
50
|
}
|
|
25
51
|
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { storiesOf } from '@storybook/react';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { Field } from 'react-final-form';
|
|
4
3
|
import { formDecorator } from '../formDecorator.js';
|
|
@@ -11,11 +10,12 @@ const defaultOptions = [{
|
|
|
11
10
|
value: 'second',
|
|
12
11
|
label: 'Second'
|
|
13
12
|
}];
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
13
|
+
export default {
|
|
14
|
+
title: 'MultiSelectFieldFF',
|
|
15
|
+
component: MultiSelectFieldFF,
|
|
16
|
+
decorators: [formDecorator]
|
|
17
|
+
};
|
|
18
|
+
export const Required = (_, _ref) => {
|
|
19
19
|
let {
|
|
20
20
|
cypressProps
|
|
21
21
|
} = _ref;
|
|
@@ -27,4 +27,4 @@ storiesOf('Testing:MultiSelectFieldFF', module).addDecorator(formDecorator).addP
|
|
|
27
27
|
validate: hasValue,
|
|
28
28
|
options: cypressProps.options || defaultOptions
|
|
29
29
|
});
|
|
30
|
-
}
|
|
30
|
+
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign
|
|
2
|
-
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
3
2
|
import { MultiSelectOption, MultiSelectField } from '@dhis2-ui/select';
|
|
4
3
|
import PropTypes from 'prop-types';
|
|
5
4
|
import React from 'react';
|
|
@@ -29,9 +28,7 @@ export const MultiSelectFieldFF = _ref => {
|
|
|
29
28
|
onFocus: createFocusHandler(input, onFocus),
|
|
30
29
|
onChange: createSelectChangeHandler(input),
|
|
31
30
|
onBlur: createBlurHandler(input, onBlur),
|
|
32
|
-
selected: input.value || []
|
|
33
|
-
/* input.value is an empty string initially, so we're providing an empty array if falsey */
|
|
34
|
-
|
|
31
|
+
selected: input.value || [] /* input.value is an empty string initially, so we're providing an empty array if falsey */
|
|
35
32
|
}), options.map(option => /*#__PURE__*/React.createElement(MultiSelectOption, _extends({
|
|
36
33
|
key: option.value
|
|
37
34
|
}, option))));
|
|
@@ -39,7 +36,6 @@ export const MultiSelectFieldFF = _ref => {
|
|
|
39
36
|
MultiSelectFieldFF.propTypes = {
|
|
40
37
|
/** `input` props provided by Final Form `Field` */
|
|
41
38
|
input: inputPropType.isRequired,
|
|
42
|
-
|
|
43
39
|
/** `meta` props provided by Final Form `Field` */
|
|
44
40
|
meta: metaPropType.isRequired,
|
|
45
41
|
error: PropTypes.bool,
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Field } from 'react-final-form';
|
|
3
|
+
import { formDecorator } from '../formDecorator.js';
|
|
4
|
+
import { inputArgType, metaArgType } from '../shared/propTypes.js';
|
|
5
|
+
import { MultiSelectFieldFF } from './MultiSelectFieldFF.js';
|
|
6
|
+
const description = `
|
|
7
|
+
The \`MultiSelectFieldFF\` is a wrapper around a \`MultiSelectField\` that enables it to work with Final Form, the preferred library for form validation and utilities in DHIS 2 apps.
|
|
8
|
+
|
|
9
|
+
#### Final Form
|
|
10
|
+
|
|
11
|
+
See how to use Final Form at [Final Form - Getting Started](https://final-form.org/docs/react-final-form/getting-started).
|
|
12
|
+
|
|
13
|
+
Inside a Final Form \`<Form>\` component, these 'FF' UI components are intended to be used in the \`component\` prop of the [Final Form \`<Field>\` components](https://final-form.org/docs/react-final-form/api/Field) where they will receive some props from the Field, e.g. \`<Field component={MultiSelectFieldFF} />\`. See the code samples below for examples.
|
|
14
|
+
|
|
15
|
+
#### Props
|
|
16
|
+
|
|
17
|
+
The props shown in the table below are generally provided to the \`MultiSelectFieldFF\` wrapper by the Final Form \`Field\`.
|
|
18
|
+
|
|
19
|
+
Note that any props beyond the API of the \`Field\` component will be spread to the \`MultiSelectFieldFF\`, which passes any extra props to the underlying \`MultiSelectField\` using \`{...rest}\`.
|
|
20
|
+
|
|
21
|
+
Therefore, to add any props to the \`MultiSelectFieldFF\` or \`MultiSelectField\`, add those props to the parent Final Form \`Field\` component.
|
|
22
|
+
|
|
23
|
+
Also see \`MultiSelect\` and \`MultiSelectField\` for notes about props and implementation.
|
|
24
|
+
|
|
25
|
+
\`\`\`js
|
|
26
|
+
import { MultiSelectFieldFF } from '@dhis2/ui'
|
|
27
|
+
\`\`\`
|
|
28
|
+
|
|
29
|
+
Press **Submit** to see the form values logged to the console.
|
|
30
|
+
|
|
31
|
+
_**Note:** Dropdowns may not appear correctly on this page. See the affected demos in the 'Canvas' tab for propper dropdown placement._
|
|
32
|
+
`;
|
|
33
|
+
const options = [{
|
|
34
|
+
value: '1',
|
|
35
|
+
label: 'one'
|
|
36
|
+
}, {
|
|
37
|
+
value: '2',
|
|
38
|
+
label: 'two'
|
|
39
|
+
}, {
|
|
40
|
+
value: '3',
|
|
41
|
+
label: 'three'
|
|
42
|
+
}, {
|
|
43
|
+
value: '4',
|
|
44
|
+
label: 'four'
|
|
45
|
+
}, {
|
|
46
|
+
value: '5',
|
|
47
|
+
label: 'five'
|
|
48
|
+
}, {
|
|
49
|
+
value: '6',
|
|
50
|
+
label: 'six'
|
|
51
|
+
}, {
|
|
52
|
+
value: '7',
|
|
53
|
+
label: 'seven'
|
|
54
|
+
}, {
|
|
55
|
+
value: '8',
|
|
56
|
+
label: 'eight'
|
|
57
|
+
}, {
|
|
58
|
+
value: '9',
|
|
59
|
+
label: 'nine'
|
|
60
|
+
}, {
|
|
61
|
+
value: '10',
|
|
62
|
+
label: 'ten'
|
|
63
|
+
}];
|
|
64
|
+
const initialValue = ['3', '4', '9', '10'];
|
|
65
|
+
export default {
|
|
66
|
+
title: 'Multi Select Field (Final Form)',
|
|
67
|
+
component: MultiSelectFieldFF,
|
|
68
|
+
decorators: [formDecorator],
|
|
69
|
+
parameters: {
|
|
70
|
+
docs: {
|
|
71
|
+
description: {
|
|
72
|
+
component: description
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
argTypes: {
|
|
77
|
+
input: {
|
|
78
|
+
...inputArgType
|
|
79
|
+
},
|
|
80
|
+
meta: {
|
|
81
|
+
...metaArgType
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
export const Default = () => /*#__PURE__*/React.createElement(Field, {
|
|
86
|
+
component: MultiSelectFieldFF,
|
|
87
|
+
name: "agree",
|
|
88
|
+
label: "Do you agree?",
|
|
89
|
+
options: options
|
|
90
|
+
});
|
|
91
|
+
export const InitialValue = () => /*#__PURE__*/React.createElement(Field, {
|
|
92
|
+
component: MultiSelectFieldFF,
|
|
93
|
+
name: "agree",
|
|
94
|
+
label: "Do you agree?",
|
|
95
|
+
options: options,
|
|
96
|
+
initialValue: initialValue
|
|
97
|
+
});
|
|
98
|
+
InitialValue.storyName = 'InitialValue';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Given } from '@badeball/cypress-cucumber-preprocessor';
|
|
2
2
|
Given('a required MultiSelect with no selected value', () => {
|
|
3
|
-
cy.visitStory('
|
|
3
|
+
cy.visitStory('MultiSelectFieldFF', 'Required');
|
|
4
4
|
cy.getFormValue('multiSelect');
|
|
5
5
|
cy.verifyFormValue('multiSelect', undefined);
|
|
6
6
|
});
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { storiesOf } from '@storybook/react';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { Field } from 'react-final-form';
|
|
4
3
|
import { FieldGroupFF } from '../FieldGroupFF/FieldGroupFF.js';
|
|
5
4
|
import { formDecorator } from '../formDecorator.js';
|
|
6
5
|
import { hasValue } from '../validators/index.js';
|
|
7
6
|
import { RadioFieldFF } from './RadioFieldFF.js';
|
|
8
|
-
|
|
7
|
+
export default {
|
|
8
|
+
title: 'Testing:RadioFieldFF',
|
|
9
|
+
decorators: [formDecorator]
|
|
10
|
+
};
|
|
11
|
+
export const RequiredAndNoSelectedValue = () => /*#__PURE__*/React.createElement(FieldGroupFF, {
|
|
9
12
|
name: "choice"
|
|
10
13
|
}, /*#__PURE__*/React.createElement(Field, {
|
|
11
14
|
type: "radio",
|
|
@@ -31,4 +34,4 @@ storiesOf('Testing:RadioFieldFF', module).addDecorator(formDecorator).add('Requi
|
|
|
31
34
|
value: "three",
|
|
32
35
|
validate: hasValue,
|
|
33
36
|
required: true
|
|
34
|
-
}))
|
|
37
|
+
}));
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign
|
|
2
|
-
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
3
2
|
import { Radio } from '@dhis2-ui/radio';
|
|
4
3
|
import PropTypes from 'prop-types';
|
|
5
4
|
import React from 'react';
|
|
@@ -32,7 +31,6 @@ export const RadioFieldFF = _ref => {
|
|
|
32
31
|
RadioFieldFF.propTypes = {
|
|
33
32
|
/** `input` props received from Final Form `Field` */
|
|
34
33
|
input: inputPropType.isRequired,
|
|
35
|
-
|
|
36
34
|
/** `meta` props received from Final Form `Field` */
|
|
37
35
|
meta: metaPropType.isRequired,
|
|
38
36
|
error: PropTypes.bool,
|
|
@@ -4,7 +4,31 @@ import { Field } from 'react-final-form';
|
|
|
4
4
|
import { formDecorator } from '../formDecorator.js';
|
|
5
5
|
import { inputArgType, metaArgType } from '../shared/propTypes.js';
|
|
6
6
|
import { RadioFieldFF } from './RadioFieldFF.js';
|
|
7
|
-
const description =
|
|
7
|
+
const description = `
|
|
8
|
+
The \`RadioFieldFF\` is a wrapper around a \`Radio\` that enables it to work with Final Form, the preferred library for form validation and utilities in DHIS 2 apps.
|
|
9
|
+
|
|
10
|
+
#### Final Form
|
|
11
|
+
|
|
12
|
+
See how to use Final Form at [Final Form - Getting Started](https://final-form.org/docs/react-final-form/getting-started).
|
|
13
|
+
|
|
14
|
+
Inside a Final Form \`<Form>\` component, these 'FF' UI components are intended to be used in the \`component\` prop of the [Final Form \`<Field>\` components](https://final-form.org/docs/react-final-form/api/Field) where they will receive some props from the Field, e.g. \`<Field component={RadioFieldFF} />\`. See the code samples below for examples.
|
|
15
|
+
|
|
16
|
+
#### Props
|
|
17
|
+
|
|
18
|
+
The props shown in the table below are generally provided to the \`RadioFieldFF\` wrapper by the Final Form \`Field\`.
|
|
19
|
+
|
|
20
|
+
Note that any props beyond the API of the \`Field\` component will be spread to the \`RadioFieldFF\`, which passes any extra props to the underlying \`Radio\` using \`{...rest}\`.
|
|
21
|
+
|
|
22
|
+
Therefore, to add any props to the \`RadioFieldFF\` or \`Radio\`, add those props to the parent Final Form \`Field\` component.
|
|
23
|
+
|
|
24
|
+
Also see \`Radio\` for notes about props and implementation.
|
|
25
|
+
|
|
26
|
+
\`\`\`js
|
|
27
|
+
import { RadioFieldFF } from '@dhis2/ui'
|
|
28
|
+
\`\`\`
|
|
29
|
+
|
|
30
|
+
Press **Submit** to see the form values logged to the console.
|
|
31
|
+
`;
|
|
8
32
|
export default {
|
|
9
33
|
title: 'Radio Field (Final Form)',
|
|
10
34
|
component: RadioFieldFF,
|
|
@@ -17,9 +41,11 @@ export default {
|
|
|
17
41
|
}
|
|
18
42
|
},
|
|
19
43
|
argTypes: {
|
|
20
|
-
input: {
|
|
44
|
+
input: {
|
|
45
|
+
...inputArgType
|
|
21
46
|
},
|
|
22
|
-
meta: {
|
|
47
|
+
meta: {
|
|
48
|
+
...metaArgType
|
|
23
49
|
}
|
|
24
50
|
}
|
|
25
51
|
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { storiesOf } from '@storybook/react';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
import { Field } from 'react-final-form';
|
|
4
3
|
import { formDecorator } from '../formDecorator.js';
|
|
@@ -8,11 +7,16 @@ const defaultOptions = [{
|
|
|
8
7
|
value: 'initial',
|
|
9
8
|
label: 'Initial'
|
|
10
9
|
}];
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
export default {
|
|
11
|
+
title: 'Testing:SingleSelectFieldFF',
|
|
12
|
+
decorators: [formDecorator],
|
|
13
|
+
parameters: {
|
|
14
|
+
options: {
|
|
15
|
+
showPanel: false
|
|
16
|
+
}
|
|
14
17
|
}
|
|
15
|
-
}
|
|
18
|
+
};
|
|
19
|
+
export const Required = (_, _ref) => {
|
|
16
20
|
let {
|
|
17
21
|
cypressProps
|
|
18
22
|
} = _ref;
|
|
@@ -24,4 +28,4 @@ storiesOf('Testing:SingleSelectFieldFF', module).addDecorator(formDecorator).add
|
|
|
24
28
|
validate: hasValue,
|
|
25
29
|
options: cypressProps.options || defaultOptions
|
|
26
30
|
});
|
|
27
|
-
}
|
|
31
|
+
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign
|
|
2
|
-
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
3
2
|
import { SingleSelectOption, SingleSelectField } from '@dhis2-ui/select';
|
|
4
3
|
import PropTypes from 'prop-types';
|
|
5
4
|
import React from 'react';
|
|
@@ -37,7 +36,6 @@ export const SingleSelectFieldFF = _ref => {
|
|
|
37
36
|
SingleSelectFieldFF.propTypes = {
|
|
38
37
|
/** `input` props received from Final Form `Field` */
|
|
39
38
|
input: inputPropType.isRequired,
|
|
40
|
-
|
|
41
39
|
/** `meta` props received from Final Form `Field` */
|
|
42
40
|
meta: metaPropType.isRequired,
|
|
43
41
|
options: PropTypes.arrayOf(PropTypes.shape({
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Field } from 'react-final-form';
|
|
3
|
+
import { formDecorator } from '../formDecorator.js';
|
|
4
|
+
import { inputArgType, metaArgType } from '../shared/propTypes.js';
|
|
5
|
+
import { SingleSelectFieldFF } from './SingleSelectFieldFF.js';
|
|
6
|
+
const description = `
|
|
7
|
+
The \`SingleSelectFieldFF\` is a wrapper around a \`SingleSelectField\` that enables it to work with Final Form, the preferred library for form validation and utilities in DHIS 2 apps.
|
|
8
|
+
|
|
9
|
+
#### Final Form
|
|
10
|
+
|
|
11
|
+
See how to use Final Form at [Final Form - Getting Started](https://final-form.org/docs/react-final-form/getting-started).
|
|
12
|
+
|
|
13
|
+
Inside a Final Form \`<Form>\` component, these 'FF' UI components are intended to be used in the \`component\` prop of the [Final Form \`<Field>\` components](https://final-form.org/docs/react-final-form/api/Field) where they will receive some props from the Field, e.g. \`<Field component={SingleSelectFieldFF} />\`. See the code samples below for examples.
|
|
14
|
+
|
|
15
|
+
#### Props
|
|
16
|
+
|
|
17
|
+
The props shown in the table below are generally provided to the \`SingleSelectFieldFF\` wrapper by the Final Form \`Field\`.
|
|
18
|
+
|
|
19
|
+
Note that any props beyond the API of the \`Field\` component will be spread to the \`SingleSelectFieldFF\`, which passes any extra props to the underlying \`SingleSelectField\` using \`{...rest}\`.
|
|
20
|
+
|
|
21
|
+
Therefore, to add any props to the \`SingleSelectFieldFF\` or \`SingleSelectField\`, add those props to the parent Final Form \`Field\` component.
|
|
22
|
+
|
|
23
|
+
Also see \`SingleSelect\` and \`SingleSelectField\` for notes about props and implementation.
|
|
24
|
+
|
|
25
|
+
\`\`\`js
|
|
26
|
+
import { SingleSelectFieldFF } from '@dhis2/ui'
|
|
27
|
+
\`\`\`
|
|
28
|
+
|
|
29
|
+
Press **Submit** to see the form values logged to the console.
|
|
30
|
+
|
|
31
|
+
_**Note:** Dropdowns may not appear correctly on this page. See the affected demos in the 'Canvas' tab for propper dropdown placement._
|
|
32
|
+
`;
|
|
33
|
+
const options = [{
|
|
34
|
+
value: '1',
|
|
35
|
+
label: 'one'
|
|
36
|
+
}, {
|
|
37
|
+
value: '2',
|
|
38
|
+
label: 'two'
|
|
39
|
+
}, {
|
|
40
|
+
value: '3',
|
|
41
|
+
label: 'three'
|
|
42
|
+
}, {
|
|
43
|
+
value: '4',
|
|
44
|
+
label: 'four'
|
|
45
|
+
}, {
|
|
46
|
+
value: '5',
|
|
47
|
+
label: 'five'
|
|
48
|
+
}, {
|
|
49
|
+
value: '6',
|
|
50
|
+
label: 'six'
|
|
51
|
+
}, {
|
|
52
|
+
value: '7',
|
|
53
|
+
label: 'seven'
|
|
54
|
+
}, {
|
|
55
|
+
value: '8',
|
|
56
|
+
label: 'eight'
|
|
57
|
+
}, {
|
|
58
|
+
value: '9',
|
|
59
|
+
label: 'nine'
|
|
60
|
+
}, {
|
|
61
|
+
value: '10',
|
|
62
|
+
label: 'ten'
|
|
63
|
+
}];
|
|
64
|
+
export default {
|
|
65
|
+
title: 'Single Select Field (Final Form)',
|
|
66
|
+
component: SingleSelectFieldFF,
|
|
67
|
+
decorators: [formDecorator],
|
|
68
|
+
parameters: {
|
|
69
|
+
docs: {
|
|
70
|
+
description: {
|
|
71
|
+
component: description
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
argTypes: {
|
|
76
|
+
input: {
|
|
77
|
+
...inputArgType
|
|
78
|
+
},
|
|
79
|
+
meta: {
|
|
80
|
+
...metaArgType
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
export const Default = () => /*#__PURE__*/React.createElement(Field, {
|
|
85
|
+
component: SingleSelectFieldFF,
|
|
86
|
+
name: "agree",
|
|
87
|
+
label: "Do you agree?",
|
|
88
|
+
options: options
|
|
89
|
+
});
|
|
90
|
+
export const InitialValue = () => /*#__PURE__*/React.createElement(Field, {
|
|
91
|
+
component: SingleSelectFieldFF,
|
|
92
|
+
name: "agree",
|
|
93
|
+
label: "Do you agree?",
|
|
94
|
+
options: options,
|
|
95
|
+
initialValue: "4"
|
|
96
|
+
});
|
|
97
|
+
InitialValue.storyName = 'InitialValue';
|