Skip to content

Commit ee3001b

Browse files
committed
Switch to lazy import in code examples
Fixed code duplication in all code examples. This was cause due to the require context. It was forcing webpack to parse the whole directory.
1 parent d507d8b commit ee3001b

File tree

1 file changed

+9
-20
lines changed

1 file changed

+9
-20
lines changed

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

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { Fragment, useEffect, useState, lazy, useRef } from 'react';
22
import Grid from '@material-ui/core/Grid';
33
import { makeStyles } from '@material-ui/core/styles';
44
import Typography from '@material-ui/core/Typography';
@@ -24,10 +24,6 @@ const CodeEditor = dynamic(import('./code-editor'), {
2424
ssr: false
2525
});
2626

27-
const reqSource = require.context('!raw-loader!@docs/examples', true, /\.js/);
28-
const reqCss = require.context('!raw-loader!@docs/examples', true, /\.css/);
29-
const req = require.context('@docs/examples', true, /\.js/);
30-
3127
const useStyles = makeStyles((theme) => ({
3228
codeWrapper: {
3329
background: '#1D1F21',
@@ -138,23 +134,16 @@ const getPayload = (type, code, sourceFiles = {}) =>
138134
});
139135

140136
const CodeExample = ({ source, mode, mapper, additionalSources }) => {
137+
const {current: Component} = useRef(mode === 'preview' ? dynamic(import(`@docs/examples/${source}`)) : Fragment)
138+
const [codeSource, setCodeSource] = useState('');
139+
const sourceFiles = [];
140+
useEffect(() => {
141+
import(`!raw-loader!@docs/examples/${source}`).then(file => {
142+
setCodeSource(file.default)
143+
})
144+
}, [source])
141145
const classes = useStyles();
142-
const codeSource = reqSource(`./${source}.js`).default;
143-
let Component;
144146
if (mode === 'preview') {
145-
Component = req(`./${source}.js`).default;
146-
const sourceFiles = additionalSources
147-
? additionalSources.split(',').reduce(
148-
(acc, curr) => ({
149-
...acc,
150-
[`src/${curr.split('/').pop()}`]: {
151-
content: curr.match(/\.css$/) ? reqCss(`./${curr}`).default : reqSource(`./${curr}`).default
152-
}
153-
}),
154-
{}
155-
)
156-
: {};
157-
158147
return (
159148
<Grid container spacing={0} className="DocRawComponent">
160149
<Grid item xs={12}>

0 commit comments

Comments
 (0)