Skip to content

Commit 775a0cc

Browse files
committed
[#3688] Add storybook story
1 parent 93ee7dc commit 775a0cc

File tree

6 files changed

+129
-5
lines changed

6 files changed

+129
-5
lines changed

src/openforms/js/components/admin/form_design/registrations/objectsapi/ObjectsApiOptionsForm.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ import React from 'react';
33

44
import Field from 'components/admin/forms/Field';
55

6-
import ObjectsApiOptionsFormField from './ObjectsApiOptionsFormField';
6+
import ObjectsApiOptionsFormFields from './ObjectsApiOptionsFormFields';
77

88
const ObjectsApiOptionsForm = ({index, name, label, schema, formData, onChange}) => {
99
return (
1010
<Field name={name} label={label}>
11-
<ObjectsApiOptionsFormField
11+
<ObjectsApiOptionsFormFields
1212
index={index}
1313
name={name}
1414
schema={schema}
@@ -19,7 +19,7 @@ const ObjectsApiOptionsForm = ({index, name, label, schema, formData, onChange})
1919
);
2020
};
2121

22-
ObjectsApiOptionsFormField.propTypes = {
22+
ObjectsApiOptionsForm.propTypes = {
2323
index: PropTypes.number,
2424
name: PropTypes.string,
2525
label: PropTypes.node,

src/openforms/js/components/admin/form_design/registrations/objectsapi/ObjectsApiOptionsFormField.js src/openforms/js/components/admin/form_design/registrations/objectsapi/ObjectsApiOptionsFormFields.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const Wrapper = ({children}) => (
2424
</form>
2525
);
2626

27-
const ObjectsApiFormFields = ({index, name, schema, formData, onChange}) => {
27+
const ObjectsApiOptionsFormFields = ({index, name, schema, formData, onChange}) => {
2828
const intl = useIntl();
2929
const validationErrors = useContext(ValidationErrorContext);
3030

@@ -357,4 +357,4 @@ const ObjectsApiFormFields = ({index, name, schema, formData, onChange}) => {
357357
);
358358
};
359359

360-
export default ObjectsApiFormFields;
360+
export default ObjectsApiOptionsFormFields;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import {ArgTypes, Canvas, Meta} from '@storybook/addon-docs';
2+
3+
import ObjectsApiOptionsFormFields from './ObjectsApiOptionsFormFields';
4+
import * as ObjectsApiOptionsFormFieldsStories from './ObjectsApiOptionsFormFields.stories';
5+
6+
<Meta of={ObjectsApiOptionsFormFieldsStories} />
7+
8+
# Objects API Registration
9+
10+
Here we can set up the registration backend for Objects APIs. The Objecttype and corresponding
11+
versions are fetched from the API.
12+
13+
<Canvas of={ObjectsApiOptionsFormFieldsStories.Default} />
14+
15+
## Props
16+
17+
<ArgTypes of={ObjectsApiOptionsFormFields} />
18+
19+
**Warning**: this component requires the following contexts:
20+
21+
- `ValidationErrorContext`, for validation errors
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import {useArgs} from '@storybook/client-api';
2+
3+
import {FormDecorator} from 'components/admin/form_design/story-decorators';
4+
import Field from 'components/admin/forms/Field';
5+
import Fieldset from 'components/admin/forms/Fieldset';
6+
import FormRow from 'components/admin/forms/FormRow';
7+
8+
import ObjectsApiOptionsFormFields from './ObjectsApiOptionsFormFields';
9+
import {mockObjecttypeVersionsGet, mockObjecttypesGet} from './mocks';
10+
11+
const render = ({index, label, name}) => {
12+
const [{formData}, updateArgs] = useArgs();
13+
const onChange = newValues => {
14+
updateArgs({formData: newValues});
15+
};
16+
17+
return (
18+
<Fieldset>
19+
<FormRow>
20+
<Field name={name} label={label}>
21+
<ObjectsApiOptionsFormFields
22+
index={index}
23+
name={name}
24+
formData={formData}
25+
onChange={onChange}
26+
/>
27+
</Field>
28+
</FormRow>
29+
</Fieldset>
30+
);
31+
};
32+
33+
export default {
34+
title: 'Form design/Registration/Objects API',
35+
decorators: [FormDecorator],
36+
render,
37+
args: {
38+
formData: {},
39+
},
40+
parameters: {
41+
msw: {
42+
handlers: [
43+
mockObjecttypesGet([
44+
{
45+
url: 'https://objecttypen.nl/api/v1/objecttypes/2c77babf-a967-4057-9969-0200320d23f1',
46+
uuid: '2c77babf-a967-4057-9969-0200320d23f1',
47+
name: 'Tree',
48+
namePlural: 'Trees',
49+
},
50+
]),
51+
mockObjecttypeVersionsGet('2c77babf-a967-4057-9969-0200320d23f1', [{version: 1}]),
52+
],
53+
},
54+
},
55+
};
56+
57+
export const Default = {};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import {rest} from 'msw';
2+
3+
export const BASE_URL = process.env.SB_BASE_URL || '';
4+
5+
export const mockObjecttypesGet = objecttypes =>
6+
rest.get(`${BASE_URL}/api/v2/registration/plugins/objects-api/object-types`, (req, res, ctx) => {
7+
return res(ctx.json(objecttypes));
8+
});
9+
10+
export const mockObjecttypeVersionsGet = (objecttypeUuid, versions) =>
11+
rest.get(
12+
`${BASE_URL}/api/v2/registration/plugins/objects-api/object-types/${objecttypeUuid}/versions`,
13+
(req, res, ctx) => {
14+
return res(ctx.json(versions));
15+
}
16+
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React from 'react';
2+
3+
const getFieldErrors = (name, index, errors, field) => {
4+
const errorMessages = [];
5+
6+
for (const [errorName, errorReason] of errors) {
7+
if (errorName.startsWith(name)) {
8+
const errorNameBits = errorName.split('.');
9+
if (errorNameBits[2] === String(index) && errorNameBits[errorNameBits.length - 1] === field) {
10+
errorMessages.push(errorReason);
11+
}
12+
}
13+
}
14+
15+
return errorMessages.length > 0 ? errorMessages : null;
16+
};
17+
18+
const getErrorMarkup = errorMessages => {
19+
return (
20+
<ul className="error-detail bs-callout bs-callout-info">
21+
{errorMessages.map((msg, index) => (
22+
<li key={index} className="text-danger">
23+
{msg}
24+
</li>
25+
))}
26+
</ul>
27+
);
28+
};
29+
30+
export {getErrorMarkup, getFieldErrors};

0 commit comments

Comments
 (0)