Skip to content

Commit f21fc84

Browse files
committed
Update demo code editor
- no switcher - automatically transforms root imports to relative one
1 parent bedc6bd commit f21fc84

File tree

8 files changed

+34
-105
lines changed

8 files changed

+34
-105
lines changed

packages/react-renderer-demo/src/components/code-editor/index.js

Lines changed: 3 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import React, { useState } from 'react';
1+
import React from 'react';
22
import PropTypes from 'prop-types';
33
import makeStyles from '@material-ui/core/styles/makeStyles';
44
import Highlight, { defaultProps } from 'prism-react-renderer/';
55
import ghTheme from 'prism-react-renderer/themes/github';
66
import vsTheme from 'prism-react-renderer/themes/vsDark';
7-
import Select from '@material-ui/core/Select';
87
import tranformImports from './transform-imports';
98

109
const useStyles = makeStyles({
@@ -41,82 +40,23 @@ const useStylesCode = makeStyles((theme) => ({
4140
[theme.breakpoints.down('sm')]: {
4241
maxWidth: (props) => (props.inExample ? '100%' : 'calc(100vw - 64px)')
4342
}
44-
},
45-
switchwrapper: {
46-
right: 0,
47-
position: 'absolute'
48-
},
49-
select: {
50-
fontSize: 'inherit',
51-
color: 'white',
52-
'& option': {
53-
color: 'black'
54-
},
55-
'& svg': {
56-
color: 'white'
57-
},
58-
'&:before': {
59-
display: 'none'
60-
}
61-
},
62-
emptyLine: {
63-
// additional line added to snippets on mobile, so the select dont block the code
64-
display: 'none',
65-
[theme.breakpoints.down('sm')]: {
66-
marginBottom: 24,
67-
display: 'block'
68-
}
6943
}
7044
}));
7145

72-
const CodeEditor = ({ value, children, className, switchable, inExample, ...props }) => {
73-
const [env, setEnv] = useState('cjs');
46+
const CodeEditor = ({ value, children, className, inExample }) => {
7447
const classes = useStylesCode({ inExample });
7548

7649
const lang = className ? className.toLowerCase().replace('language-', '') : undefined;
7750
let content = value || children || '';
51+
content = tranformImports(content);
7852
content = content.substring(0, content.length - 1);
7953

80-
// read props from code in --- { "key": value } ---\n format
81-
let propsFromMD = content.match(/--- .* ---/);
82-
if (propsFromMD) {
83-
propsFromMD = JSON.parse(propsFromMD[0].replace(/-/g, ''));
84-
content = content.replace(/--- .* ---\n/, '');
85-
}
86-
87-
propsFromMD = propsFromMD || {};
88-
const isSwitchable = switchable && propsFromMD.switchable !== false;
89-
const hasSwitcher = isSwitchable && content.match(/import.*data-driven-forms\/(\w*|\d*|-)*('|"|`|)/);
90-
91-
if (isSwitchable && env !== 'umd') {
92-
content = tranformImports(content, env);
93-
}
94-
9554
return (
9655
<div className={classes.wrapper}>
97-
{hasSwitcher && (
98-
<div className={classes.switchwrapper}>
99-
<Select
100-
native
101-
value={env}
102-
onChange={(e) => setEnv(e.target.value)}
103-
label="Environment"
104-
inputProps={{
105-
name: 'env'
106-
}}
107-
className={classes.select}
108-
>
109-
<option value="cjs">CJS</option>
110-
<option value="esm">ESM</option>
111-
<option value="umd">UMD</option>
112-
</Select>
113-
</div>
114-
)}
11556
<Highlight {...defaultProps} theme={lang === 'bash' ? ghTheme : vsTheme} code={content} language={lang || 'jsx'}>
11657
{({ className, style, tokens, getLineProps, getTokenProps }) => (
11758
<Pre className={className} style={style}>
11859
<React.Fragment>
119-
{hasSwitcher && <pre className={classes.emptyLine} />}
12060
{tokens.map((line, i) => (
12161
<div key={i} {...getLineProps({ line, key: i })}>
12262
{line.map((token, key) => (
@@ -136,7 +76,6 @@ CodeEditor.propTypes = {
13676
value: PropTypes.string,
13777
children: PropTypes.string,
13878
className: PropTypes.string,
139-
switchable: PropTypes.bool,
14079
inExample: PropTypes.bool
14180
};
14281

packages/react-renderer-demo/src/components/code-editor/transform-imports.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
1-
const tranformImports = (content, env) => {
2-
if (env === 'umd') {
3-
return content;
4-
}
5-
1+
const tranformImports = (content) => {
62
let newContent = content;
73

8-
const regexp = RegExp('import.*data-driven-forms.*', 'g');
4+
const regexp = RegExp('import.*{.*data-driven-forms.*', 'g');
95
let match;
106
const matches = [];
117

@@ -22,7 +18,7 @@ const tranformImports = (content, env) => {
2218
.split(',')
2319
.map(
2420
(imp) =>
25-
`import ${imp} from '${pck}/dist/${env}/${imp
21+
`import ${imp} from '${pck}/${imp
2622
.split(/(?=[A-Z])/)
2723
.join('-')
2824
.toLowerCase()}';`

packages/react-renderer-demo/src/components/landing-page/landing-page-cards.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ const LandingPageCards = () => {
211211
Write a schema
212212
</Typography>
213213
<div className={classes.editorWrapper}>
214-
<CodeEditor showGutter={false} value={value} fontSize={11} switchable />
214+
<CodeEditor showGutter={false} value={value} fontSize={11} />
215215
</div>
216216
</Grid>
217217
<Grid item xs={12} md={5}>

packages/react-renderer-demo/src/components/mdx/mdx-components.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ const MdxComponents = {
103103
{children}
104104
</Typography>
105105
),
106-
code: (props) => <CodeEditor {...props} switchable />,
106+
code: (props) => <CodeEditor {...props} />,
107107
a: MdLink,
108108
h1: (props) => <Heading {...props} level={4} component="h1" />,
109109
h2: (props) => <Heading {...props} level={5} component="h2" />,

packages/react-renderer-demo/src/pages/components/renderer.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import DocPage from '@docs/doc-page';
77
Form renderer is the core component of Data Driven Forms. It is used to generate and render forms.
88

99
```jsx
10-
import FormRenderer from '@data-driven-forms/react-form-renderer';
10+
import { FormRenderer } from '@data-driven-forms/react-form-renderer';
1111

1212
const App = () => (<FormRenderer
1313
onSubmit={onSubmit}

packages/react-renderer-demo/src/pages/mappers/custom-mapper.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ const componentMapper = {
9999
And then use the component mapper in the form renderer component:
100100

101101
```jsx
102-
import FormRenderer from '@data-driven-forms/react-form-renderer';
102+
import { FormRenderer } from '@data-driven-forms/react-form-renderer';
103103

104104
const Form = (props) => <FormRenderer
105105
componentMapper={componentMapper}

packages/react-renderer-demo/src/pages/optimization.md

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,55 +4,48 @@ import DocPage from '@docs/doc-page';
44

55
# Optimization
66

7-
Data Driven Forms is built in three module formats: CJS, ESM and UMD.
7+
Data Driven Forms is built in two module formats: CJS and ESM.
88

9-
## CJS
9+
By using a standard import path, **the module based on your environment will be used**. Browser environments are using ESM modules, environments based on NodeJS (testing) are using CJS.
10+
11+
## Import only specific file
12+
13+
Exported files follow the kebab case. All components are exported in default exports.
1014

1115
```jsx
12-
--- { "switchable": false } ---
13-
import FormRenderer from '@data-driven-forms/react-form-renderer/form-renderer';
1416
import useField from '@data-driven-forms/react-form-renderer/use-field';
1517
```
16-
1718
## ESM
1819

20+
In case you need to import ESM module manually, you can do this by using `esm` in a path. However, we do not recommend it.
21+
1922
```jsx
20-
--- { "switchable": false } ---
21-
import FormRenderer from '@data-driven-forms/react-form-renderer/dist/esm/form-renderer';
22-
import useField from '@data-driven-forms/react-form-renderer/dist/esm/use-field';
23+
import FormRenderer from '@data-driven-forms/react-form-renderer/esm/form-renderer';
24+
import useField from '@data-driven-forms/react-form-renderer/esm/use-field';
2325
```
2426

25-
In both of CJS and ESM, exported files follow the kebab case. All components are exported in default exports.
26-
2727
## UMD
2828

29-
**Recommendation: UMD is just a fallback option. We strongly recommend to use CJS or ESM. These two modules allow to better optimization via treeshaking and more modern language syntax.**
30-
31-
```jsx
32-
--- { "switchable": false } ---
33-
import { FormRenderer, useField } from '@data-driven-forms/react-form-renderer';
34-
```
35-
36-
Only the `FormRenderer` component is exported as a default. In all other packages, use only named exports.
29+
UMD module format is no longer supported.
3730

3831
---
3932

4033
## Mixing imports
4134

42-
**Do not mix** different module formats (for example `Renderer` imported from UMD and `componentMapper` from CJS), otherwise you will encounter this error:
35+
**Do not mix** different module formats (for example `Renderer` imported from ESM and `componentMapper` from CJS), otherwise you will encounter this error:
4336

4437
`useField must be used inside of a <Form> component`
4538

4639
## Transforming imports in Babel
4740

48-
You can automate tranforming imports to specific module formats by using [transform-imports](https://www.npmjs.com/package/babel-plugin-transform-imports) plugin in your Babel configuration. With that, you don't need to write explicit imports manually and you can still import everything from projects' roots.
41+
You can automate tranforming imports by using [transform-imports](https://www.npmjs.com/package/babel-plugin-transform-imports) plugin in your Babel configuration. With that, you don't need to write explicit imports manually and you can still import everything from projects' roots.
4942

5043
Example:
5144

5245
```jsx
5346
// babel.config.js
5447

55-
const transformDDFImportsToCJS = [
48+
const transformDDFImports = [
5649
'transform-imports',
5750
{
5851
'@data-driven-forms/react-form-renderer': {
@@ -63,7 +56,7 @@ const transformDDFImportsToCJS = [
6356
.toLowerCase()}.js`,
6457
}
6558
},
66-
'react-form-renderer-cjs'
59+
'react-form-renderer'
6760
]
6861

6962
...
@@ -72,18 +65,19 @@ module.exports = {
7265
...,
7366
plugins: [
7467
...,
75-
transformDDFImportsToCJS
68+
transformDDFImports
7669
]
7770
}
7871
```
7972

8073
Result:
8174

82-
```jsx
83-
--- { "switchable": false } ---
84-
import { useField } from '@data-driven-forms/react-form-renderer';
85-
// ^^ this will be converted to >>
86-
import useField from '@data-driven-forms/react-form-renderer/use-field';
87-
```
75+
76+
`import { useField } from '@data-driven-forms/react-form-renderer';`
77+
78+
will be converted to
79+
80+
`import useField from '@data-driven-forms/react-form-renderer/use-field';`
81+
8882

8983
</DocPage>

packages/react-renderer-demo/src/pages/testing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import React from 'react';
2121
import { act } from 'react-dom/test-utils';
2222
import { mount } from 'enzyme';
2323

24-
import FormRenderer from '@data-driven-forms/react-form-renderer';
24+
import { FormRenderer } from '@data-driven-forms/react-form-renderer';
2525
import { componentMapper, FormTemplate } from '@data-driven-forms/mui-component-mapper';
2626

2727
describe('<FormRendererTest />', () => {

0 commit comments

Comments
 (0)