Skip to content

Commit 811e042

Browse files
authored
Merge pull request #352 from data-driven-forms/fix-template-re-render
Rewrite mappers FormTemplates to be components.
2 parents 2ca49cf + cbe0612 commit 811e042

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+4753
-2661
lines changed

__mocks__/mock-form-template.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ const path = require('path');
88
const FormTemplate = ({ schema: { title, label, description }, formFields }) => {
99
// When testing inside the renderer package, it cannot import things from itself!
1010
const isInternal = path.dirname(module.parent.filename).includes('/react-form-renderer/');
11-
1211
const formOptions = isInternal ? useFormApiInternal() : useFormApi();
1312
const FormSpyFinal = isInternal ? FormSpyInternal : FormSpy;
1413

packages/common/src/form-template.js

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ FormControls.defaultProps = {
104104
buttonOrder: ['submit', 'reset', 'cancel']
105105
};
106106

107-
const formTemplate = ({
107+
const FormTemplate = ({
108108
FormWrapper,
109109
Title,
110110
Description,
@@ -113,17 +113,19 @@ const formTemplate = ({
113113
formWrapperProps,
114114
showFormControls = true,
115115
disableSubmit = [],
116-
onStateUpdate,
117-
...options
118-
}) => ({ schema: { title, description, label }, formFields }) => {
116+
...rest
117+
}) => {
118+
const {
119+
schema: { title, description, label },
120+
formFields
121+
} = rest;
119122
const { onReset, onCancel, getState, handleSubmit } = useFormApi();
120123

121124
return (
122125
<FormWrapper onSubmit={handleSubmit} {...formWrapperProps}>
123126
{(title || label) && <Title>{title || label}</Title>}
124127
{description && <Description>{description}</Description>}
125128
{formFields}
126-
{onStateUpdate && <FormSpy onChange={onStateUpdate} />}
127129
{showFormControls && (
128130
<FormSpy>
129131
{(formSpyProps) => (
@@ -135,7 +137,7 @@ const formTemplate = ({
135137
onCancel={onCancel}
136138
disableSubmit={isDisabled(disableSubmit, getState)}
137139
formSpyProps={formSpyProps}
138-
{...options}
140+
{...rest}
139141
/>
140142
)}
141143
</FormSpy>
@@ -144,4 +146,20 @@ const formTemplate = ({
144146
);
145147
};
146148

147-
export default formTemplate;
149+
FormTemplate.propTypes = {
150+
FormWrapper: PropTypes.oneOfType([PropTypes.node, PropTypes.func, PropTypes.element]).isRequired,
151+
Title: PropTypes.oneOfType([PropTypes.node, PropTypes.func, PropTypes.element]).isRequired,
152+
Description: PropTypes.oneOfType([PropTypes.node, PropTypes.func, PropTypes.element]).isRequired,
153+
Button: PropTypes.oneOfType([PropTypes.node, PropTypes.func, PropTypes.element]).isRequired,
154+
ButtonGroup: PropTypes.oneOfType([PropTypes.node, PropTypes.func, PropTypes.element]).isRequired,
155+
formWrapperProps: PropTypes.object,
156+
showFormControls: PropTypes.bool,
157+
disableSubmit: PropTypes.arrayOf(PropTypes.string)
158+
};
159+
160+
FormTemplate.defaultProps = {
161+
showFormControls: true,
162+
disableSubmit: []
163+
};
164+
165+
export default FormTemplate;

packages/mui-component-mapper/demo/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import ReactDOM from "react-dom";
44
import FormRenderer from '@data-driven-forms/react-form-renderer';
55

66
import Grid from '@material-ui/core/Grid';
7-
import { componentMapper, formTemplate } from '../src'
7+
import { componentMapper, FormTemplate } from '../src'
88
import { createMuiTheme } from '@material-ui/core/styles';
99
import { ThemeProvider } from '@material-ui/styles';
1010
import Typography from '@material-ui/core/Typography';
@@ -32,7 +32,7 @@ const App = () => (
3232
<FormRenderer
3333
onSubmit={console.log}
3434
componentMapper={componentMapper}
35-
formTemplate={formTemplate()}
35+
FormTemplate={props => <FormTemplate {...props} />}
3636
schema={demoSchema}
3737
onCancel={() => console.log('canceling')}
3838
/>

packages/mui-component-mapper/src/components/form-template.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Grid from '@material-ui/core/Grid';
44
import MUIButton from '@material-ui/core/Button';
55
import Typography from '@material-ui/core/Typography';
66

7-
import formTemplate from '@data-driven-forms/common/src/form-template';
7+
import FormTemplate from '@data-driven-forms/common/src/form-template';
88

99
const Form = ({ children, ...props }) => <form {...props}>{children}</form>;
1010
const Description = ({ children }) => (
@@ -28,6 +28,8 @@ const Button = ({ label, variant, children, ...props }) => (
2828
</MUIButton>
2929
);
3030

31-
const MuiFormTemplate = (options) => formTemplate({ FormWrapper: Form, Button, ButtonGroup, Title, Description, ...options });
31+
const MuiFormTemplate = (props) => (
32+
<FormTemplate FormWrapper={Form} Button={Button} ButtonGroup={ButtonGroup} Title={Title} Description={Description} {...props} />
33+
);
3234

3335
export default MuiFormTemplate;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
export { default as componentMapper, components } from './components/component-mapper';
2-
export { default as formTemplate } from './components/form-template';
2+
export { default as FormTemplate } from './components/form-template';

packages/mui-component-mapper/src/tests/form-fields.test.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,18 @@ import Checkbox from '../components/checkbox';
77

88
import MockFieldProvider from '../../../../__mocks__/mock-field-provider';
99
import RenderWithProvider from '../../../../__mocks__/with-provider';
10-
import formTemplate from '../components/form-template';
10+
import FormTemplate from '../components/form-template';
1111
import componentMapper from '../components/component-mapper';
1212
import { Radio } from '@material-ui/core';
1313

1414
const RendererWrapper = ({ schema = { fields: [] }, ...props }) => (
15-
<FormRenderer onSubmit={jest.fn()} formTemplate={formTemplate()} schema={schema} componentMapper={componentMapper} {...props} />
15+
<FormRenderer
16+
onSubmit={jest.fn()}
17+
FormTemplate={(props) => <FormTemplate {...props} />}
18+
schema={schema}
19+
componentMapper={componentMapper}
20+
{...props}
21+
/>
1622
);
1723

1824
describe('formFields', () => {

packages/mui-component-mapper/src/tests/tabs.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Tab from '@material-ui/core/Tab';
77
import FormTabs from '../components/tabs';
88
import RenderWithProvider from '../../../../__mocks__/with-provider';
99
import FormRenderer, { validatorTypes } from '@data-driven-forms/react-form-renderer';
10-
import { componentMapper, formTemplate } from '../index';
10+
import { componentMapper, FormTemplate } from '../index';
1111

1212
describe('tabs', () => {
1313
const props = {
@@ -85,7 +85,7 @@ describe('tabs', () => {
8585
const wrapper = mount(
8686
<FormRenderer
8787
componentMapper={componentMapper}
88-
formTemplate={formTemplate()}
88+
FormTemplate={(props) => <FormTemplate {...props} />}
8989
onSubmit={(values) => onSubmit(values)}
9090
schema={{
9191
fields: [

packages/pf3-component-mapper/demo/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import React, { useState } from "react";
33
import ReactDOM from "react-dom";
44
import FormRenderer from '@data-driven-forms/react-form-renderer';
55
import { Grid, Row, Button } from 'patternfly-react';
6-
import { componentMapper, formTemplate } from '../src'
6+
import { componentMapper, FormTemplate } from '../src'
77
import { schema, uiSchema, conditionalSchema, arraySchema, uiArraySchema } from './demo-schemas/widget-schema';
88
import miqSchema from './demo-schemas/miq-schema';
99
import wizardSchema from './demo-schemas/wizard-schema';
@@ -120,7 +120,7 @@ const App = () => {
120120
initialValues={{}}
121121
onSubmit={console.log}
122122
componentMapper={componentMapper}
123-
formTemplate={formTemplate()}
123+
FormTemplate={(props) => <FormTemplate {...props} />}
124124
schema={schema}
125125
onCancel={() => console.log('cancel')}
126126
/>

packages/pf3-component-mapper/src/components/form-template.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from 'react';
22
import PropTypes from 'prop-types';
33
import { Button as PF3Button, Form } from 'patternfly-react';
44
import './form-template.scss';
5-
import formTemplate from '@data-driven-forms/common/src/form-template';
5+
import FormTemplate from '@data-driven-forms/common/src/form-template';
66

77
export const FormWrapper = ({ children, ...props }) => <Form {...props}>{children}</Form>;
88

@@ -49,6 +49,8 @@ Description.propTypes = {
4949
children: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]).isRequired
5050
};
5151

52-
const PF3FormTemplate = (options) => formTemplate({ FormWrapper, Button, ButtonGroup, Title, Description, ...options });
52+
const PF3FormTemplate = (props) => (
53+
<FormTemplate FormWrapper={FormWrapper} Button={Button} ButtonGroup={ButtonGroup} Title={Title} Description={Description} {...props} />
54+
);
5355

5456
export default PF3FormTemplate;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
export { default as componentMapper, components, rawComponents } from './components/component-mapper';
2-
export { default as formTemplate } from './components/form-template';
2+
export { default as FormTemplate } from './components/form-template';

0 commit comments

Comments
 (0)