Skip to content

Commit 7bd9ba7

Browse files
authored
Merge pull request #353 from data-driven-forms/sync-demo-with-v2
[V2]Sync demo with v2
2 parents 811e042 + 6c97843 commit 7bd9ba7

20 files changed

+165
-159
lines changed

packages/react-renderer-demo/src/app/pages/live-editor.js

Lines changed: 14 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
11
/* eslint no-console: "off" */
2-
import React, { useContext, useState } from 'react';
2+
import React, { useState } from 'react';
33
import Grid from '@material-ui/core/Grid';
44
import Paper from '@material-ui/core/Paper';
5-
import List from '@material-ui/core/List';
6-
import ListItem from '@material-ui/core/ListItem';
7-
import ListItemText from '@material-ui/core/ListItemText';
8-
import Typography from '@material-ui/core/Typography';
95
import FormRenderer from '@data-driven-forms/react-form-renderer';
106
import { componentTypes as components, validatorTypes as validators, defaultSchemaValidator } from '@data-driven-forms/react-form-renderer';
7+
import { FormTemplate, componentMapper } from '@data-driven-forms/pf4-component-mapper';
118

129
import dynamic from 'next/dynamic';
13-
14-
import MapperContext from '@docs/components/mappers-context';
1510
const CodeEditor = dynamic(import('@docs/components/code-editor'), {
1611
ssr: false
1712
});
@@ -79,7 +74,7 @@ const baseStructure = {
7974
name: 'text_box_6',
8075
label: 'Text Box unvisible',
8176
title: 'Text Box unvisible',
82-
isVisible: false,
77+
hideField: true,
8378
component: components.TEXT_FIELD
8479
},
8580
{
@@ -491,8 +486,6 @@ const LiveEditor = () => {
491486
parsedSchema: baseStructure
492487
});
493488

494-
const mappers = useContext(MapperContext);
495-
496489
const onChange = (value) => {
497490
let schema;
498491
try {
@@ -503,7 +496,7 @@ const LiveEditor = () => {
503496
}
504497

505498
try {
506-
defaultSchemaValidator(schema, mappers.mappers.pf4.componentMapper);
499+
defaultSchemaValidator(schema, componentMapper);
507500
setState((state) => ({ ...state, parsedSchema: schema }));
508501
} catch (error) {
509502
console.warn('not correct json schema', error);
@@ -517,40 +510,21 @@ const LiveEditor = () => {
517510
<div style={{ width: '100%', paddingTop: 10, background: '#1d1f21' }}>
518511
<CodeEditor readOnly={false} mode="json" onChange={onChange} value={value} maxLines={50} />
519512
</div>
520-
<div>
521-
<Grid container spacing={6}>
522-
<Grid item xs={12} md={6}>
523-
<Typography variant="h6">Avaiable components:</Typography>
524-
<div>
525-
<List>
526-
{[...new Set(Object.values(components))].map((item) =>
527-
item === 'wizard' ? null : (
528-
<ListItem key={item}>
529-
<ListItemText primary={item} />
530-
</ListItem>
531-
)
532-
)}
533-
</List>
534-
</div>
535-
</Grid>
536-
</Grid>
537-
</div>
538513
</Grid>
539514
<Grid item md={6} xs={12}>
540515
<Paper square style={{ padding: 16, paddingLeft: 24 }}>
541516
<Grid container spacing={6}>
542517
<Grid item xs={12}>
543-
{mappers.loaded && (
544-
<div className="pf4">
545-
<FormRenderer
546-
componentMapper={mappers.mappers.pf4.componentMapper}
547-
schema={parsedSchema}
548-
onSubmit={console.log}
549-
onCancel={() => console.log('Cancel clicked')}
550-
canReset
551-
/>
552-
</div>
553-
)}
518+
<div className="pf4">
519+
<FormRenderer
520+
componentMapper={componentMapper}
521+
FormTemplate={FormTemplate}
522+
schema={parsedSchema}
523+
onSubmit={console.log}
524+
onCancel={() => console.log('Cancel clicked')}
525+
canReset
526+
/>
527+
</div>
554528
</Grid>
555529
</Grid>
556530
</Paper>

packages/react-renderer-demo/src/app/pages/renderer/form-controls.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import ListOfContents from '../../src/helpers/list-of-contents';
66
<Grid container item>
77
<Grid item xs={12} md={10}>
88

9+
# Obsolete page
10+
911
# Custom form buttons
1012

1113
If you need completely customized buttons, you can pass a component to form renderer via `renderFormButtons` prop.

packages/react-renderer-demo/src/app/src/components/component-example.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,21 +147,21 @@ class ComponentExample extends Component {
147147
[componentTypes.WIZARD]: MuiWizard,
148148
summary: Summary
149149
},
150-
formTemplate: props.mappers.mui.formTemplate
150+
FormTemplate: props.mappers.mui.FormTemplate
151151
},
152152
pf3: {
153153
componentMapper: {
154154
...props.mappers.pf3.componentMapper,
155155
summary: Summary
156156
},
157-
formTemplate: props.mappers.pf3.formTemplate
157+
FormTemplate: props.mappers.pf3.FormTemplate
158158
},
159159
pf4: {
160160
componentMapper: {
161161
...props.mappers.pf4.componentMapper,
162162
summary: Summary
163163
},
164-
formTemplate: props.mappers.pf4.formTemplate
164+
FormTemplate: props.mappers.pf4.FormTemplate
165165
}
166166
};
167167
}

packages/react-renderer-demo/src/app/src/components/navigation/mapper.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ const Item = ({ href, linkText, component }) => {
2727
selected={href.replace('/?', '?') === router.asPath}
2828
key={href || linkText}
2929
className={classes.nested}
30-
component={forwardRef((props) => (
31-
<RouterNavLink key={component} href={href.replace('/?', '?')}>
30+
component={forwardRef((props, ref) => (
31+
<RouterNavLink ref={ref} key={component} href={href.replace('/?', '?')}>
3232
<Link style={{ color: 'rgba(0, 0, 0, 0.87)' }} {...props} href={href.replace('/?', '?')} />
3333
</RouterNavLink>
3434
))}
@@ -70,8 +70,8 @@ const FinalList = ({ title, level, link, fields, previousLinks = [], renderItems
7070
};
7171

7272
const Mapper = {
73-
wrapper: FinalList,
74-
item: Item
73+
Wrapper: FinalList,
74+
Item
7575
};
7676

7777
export default Mapper;

packages/react-renderer-demo/src/app/src/components/navigation/menu-renderer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const renderItems = (items, level = 0, previousLinks = ['']) => {
2323

2424
if (fields) {
2525
return (
26-
<Mapper.wrapper
26+
<Mapper.Wrapper
2727
key={`${link}-${title}-${open}`}
2828
open={open}
2929
fields={fields}
@@ -38,7 +38,7 @@ const renderItems = (items, level = 0, previousLinks = ['']) => {
3838
}
3939

4040
return (
41-
<Mapper.item
41+
<Mapper.Item
4242
href={createLink(...previousLinks, link || component)}
4343
level={level}
4444
key={`${link || component}-${linkText}`}

packages/react-renderer-demo/src/app/src/doc-components/cleared-value.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useState } from 'react';
22
import FormRenderer, { componentTypes } from '@data-driven-forms/react-form-renderer';
3-
import { componentMapper } from '@data-driven-forms/pf4-component-mapper';
3+
import { componentMapper, FormTemplate } from '@data-driven-forms/pf4-component-mapper';
44
import { Title } from '@patternfly/react-core/dist/js/components/Title/Title';
55

66
const schema = {
@@ -15,7 +15,7 @@ const schema = {
1515
}],
1616
};
1717

18-
const DataTypesExample = () => {
18+
const ClearedValueExample = () => {
1919
const [ values, setValues ] = useState({});
2020
return (
2121
<div className="pf4">
@@ -24,7 +24,7 @@ const DataTypesExample = () => {
2424
'field-with-initial-value': 'Delete me!',
2525
}}
2626
clearedValue={ null }
27-
FormTemplate={ formTemplate }
27+
FormTemplate={ FormTemplate }
2828
componentMapper={ componentMapper }
2929
schema={ schema }
3030
onSubmit={ console.log }
@@ -39,4 +39,4 @@ const DataTypesExample = () => {
3939
</div>
4040
);};
4141

42-
export default DataTypesExample;
42+
export default ClearedValueExample;

packages/react-renderer-demo/src/app/src/doc-components/component-mapper/form-fields-mapper.js

Lines changed: 81 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,112 @@
11
/* eslint react/prop-types: "off" */
2-
import React, { Fragment } from 'react';
3-
import FormRender, { componentTypes, useFieldApi } from '@data-driven-forms/react-form-renderer';
2+
import React, { useState } from 'react';
3+
import FormRender, { componentTypes, useFieldApi, useFormApi } from '@data-driven-forms/react-form-renderer';
44

55
import './form-fields-mapper-docs.css';
66

7-
const wrapperStyles = {
8-
padding: 16,
9-
borderRadius: 4,
10-
fontFamily: 'Roboto',
11-
};
12-
13-
const FormWrapper = ({ children, ...props }) => (<form style={ wrapperStyles } { ...props }>{ children }</form>);
14-
15-
const Title = ({ children, ...props }) => <h1>{ children }</h1>;
16-
17-
const Description = ({ children, ...props }) => <p >{ children }</p>;
18-
19-
const getButtonStyle = variant => ({
7+
const getButtonStyle = (variant) => ({
208
color: 'White',
219
backgroundColor: variant === 'primary' ? 'RebeccaPurple' : '#888',
2210
padding: '8px 16px',
2311
borderRadius: 4,
2412
cursor: 'pointer',
2513
border: 'none',
26-
marginRight: 4,
14+
marginRight: 4
2715
});
2816

29-
const Button = ({ children, label, variant, ...props }) => <button style={ getButtonStyle(variant) } { ...props }>{ label }</button>;
30-
31-
const TextField = ({ customProp, label, input, isRequired, meta: { error, touched }, FieldArrayProvider, dataType, ...props }) => (
32-
<div className={ `ddorg__demo-formGroup ${isRequired ? 'required' : ''} ${error ? 'error' : ''}` }>
33-
<label htmlFor={ input.name }>{ label }</label>
34-
<input id={ input.name } { ...input } { ...props } />
35-
{ touched && error && <p className="error-text">{ error }</p> }
36-
{ customProp && <p>This is a custom prop and has nothing to do with form schema</p> }
37-
</div>
17+
const Button = ({ children, label, variant, ...props }) => (
18+
<button style={getButtonStyle(variant)} {...props}>
19+
{label}
20+
</button>
3821
);
3922

40-
const CustomComponent = (props) => {
41-
const { input, meta, ...rest } = useFieldApi(props)
42-
return <TextField input={ input } meta={ input } { ...rest } />
23+
const FormTemplate = ({ formFields }) => {
24+
const { handleSubmit, onCancel } = useFormApi();
25+
return (
26+
<form
27+
onSubmit={(event) => {
28+
event.preventDefault();
29+
handleSubmit();
30+
}}
31+
>
32+
{formFields}
33+
<Button type="submit" variant="primary" label="Submit" />
34+
<Button type="button" label="cancel" onClick={onCancel} />
35+
</form>
36+
);
37+
};
38+
39+
const TextField = (props) => {
40+
const {
41+
customProp,
42+
label,
43+
input,
44+
isRequired,
45+
meta: { error, touched },
46+
FieldArrayProvider,
47+
dataType,
48+
...rest
49+
} = useFieldApi(props);
50+
return (
51+
<div className={`ddorg__demo-formGroup ${isRequired ? 'required' : ''} ${error ? 'error' : ''}`}>
52+
<label htmlFor={input.name}>{label}</label>
53+
<input id={input.name} {...input} {...rest} />
54+
{touched && error && <p className="error-text">{error}</p>}
55+
{customProp && <p>This is a custom prop and has nothing to do with form schema</p>}
56+
</div>
57+
);
4358
};
4459

4560
const componentMapper = {
4661
[componentTypes.TEXT_FIELD]: TextField,
47-
'custom-component-type': CustomComponent,
62+
'custom-component-type': TextField
4863
};
4964

5065
const ComponentMapper = () => {
66+
const [values, setValues] = useState({});
5167
const schema = {
52-
fields: [{
53-
component: componentTypes.TEXT_FIELD,
54-
name: 'first-name',
55-
label: 'First name',
56-
isRequired: true,
57-
validate: [ value => !value || value.lenght === 0 ? 'Required' : undefined ],
58-
customProp: true,
59-
}, {
60-
component: componentTypes.TEXT_FIELD,
61-
name: 'last-name',
62-
label: 'Last name',
63-
isRequired: true,
64-
validate: [ value => !value || value.lenght === 0 ? 'Required' : undefined ],
65-
}, {
66-
component: componentTypes.TEXT_FIELD,
67-
name: 'age',
68-
label: 'Your age',
69-
type: 'number',
70-
}, {
71-
component: 'custom-component-type',
72-
name: 'password',
73-
label: 'Your password',
74-
type: 'password',
75-
}],
68+
fields: [
69+
{
70+
component: componentTypes.TEXT_FIELD,
71+
name: 'first-name',
72+
label: 'First name',
73+
isRequired: true,
74+
validate: [(value) => (!value || value.lenght === 0 ? 'Required' : undefined)],
75+
customProp: true
76+
},
77+
{
78+
component: componentTypes.TEXT_FIELD,
79+
name: 'last-name',
80+
label: 'Last name',
81+
isRequired: true,
82+
validate: [(value) => (!value || value.lenght === 0 ? 'Required' : undefined)]
83+
},
84+
{
85+
component: componentTypes.TEXT_FIELD,
86+
name: 'age',
87+
label: 'Your age',
88+
type: 'number'
89+
},
90+
{
91+
component: 'custom-component-type',
92+
name: 'password',
93+
label: 'Your password',
94+
type: 'password'
95+
}
96+
],
7697
title: 'Custom form fields mapper and layout mapper',
77-
description: 'If you want to see the source code, please expand the code example.',
98+
description: 'If you want to see the source code, please expand the code example.'
7899
};
79100
return (
80101
<div>
81102
<FormRender
82-
componentMapper={ componentMapper }
83-
FormTemplate={ () => null }
84-
schema={ schema }
85-
onSubmit={ console.log }
86-
onCancel={ () => console.log('cancel action') }
103+
componentMapper={componentMapper}
104+
FormTemplate={FormTemplate}
105+
schema={schema}
106+
onSubmit={(values) => setValues(values)}
107+
onCancel={() => console.log('cancel action')}
87108
/>
109+
<pre>{JSON.stringify(values, null, 2)}</pre>
88110
</div>
89111
);
90112
};

packages/react-renderer-demo/src/app/src/doc-components/custom-buttons.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import FormRenderer, { componentTypes, validatorTypes } from '@data-driven-forms/react-form-renderer';
3-
import { componentMapper } from '@data-driven-forms/pf4-component-mapper';
3+
import { componentMapper, FormTemplate } from '@data-driven-forms/pf4-component-mapper';
44
import { Button } from '@material-ui/core';
55

66
const schema = {
@@ -31,7 +31,7 @@ const asyncSubmit = (values, api) => new Promise(resolve => setTimeout(() => res
3131
const FormControls = () => (
3232
<div className="pf4">
3333
<FormRenderer
34-
FormTemplate={ formTemplate }
34+
FormTemplate={ FormTemplate }
3535
componentMapper={ componentMapper }
3636
schema={ schema }
3737
onSubmit={ asyncSubmit }

0 commit comments

Comments
 (0)