mirror of
https://github.com/ant-design/ant-design.git
synced 2025-08-06 07:56:28 +08:00
chore: stackblitz change tsx (#38039)
* feat: stackblitz change tsx * feat: open * feat: type * feat: code
This commit is contained in:
parent
a2de8f7b2e
commit
e72675da27
@ -48,12 +48,13 @@ class Demo extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
shouldComponentUpdate(nextProps, nextState) {
|
shouldComponentUpdate(nextProps, nextState) {
|
||||||
const { codeExpand, copied, copyTooltipOpen } = this.state;
|
const { codeExpand, copied, copyTooltipOpen, codeType } = this.state;
|
||||||
const { expand, theme, showRiddleButton } = this.props;
|
const { expand, theme, showRiddleButton } = this.props;
|
||||||
return (
|
return (
|
||||||
(codeExpand || expand) !== (nextState.codeExpand || nextProps.expand) ||
|
(codeExpand || expand) !== (nextState.codeExpand || nextProps.expand) ||
|
||||||
copied !== nextState.copied ||
|
copied !== nextState.copied ||
|
||||||
copyTooltipOpen !== nextState.copyTooltipOpen ||
|
copyTooltipOpen !== nextState.copyTooltipOpen ||
|
||||||
|
codeType !== nextState.copyTooltipOpen ||
|
||||||
nextProps.theme !== theme ||
|
nextProps.theme !== theme ||
|
||||||
nextProps.showRiddleButton !== showRiddleButton
|
nextProps.showRiddleButton !== showRiddleButton
|
||||||
);
|
);
|
||||||
@ -141,7 +142,7 @@ class Demo extends React.Component {
|
|||||||
theme,
|
theme,
|
||||||
showRiddleButton,
|
showRiddleButton,
|
||||||
} = props;
|
} = props;
|
||||||
const { copied, copyTooltipOpen } = state;
|
const { copied, copyTooltipOpen, codeType } = state;
|
||||||
if (!this.liveDemo) {
|
if (!this.liveDemo) {
|
||||||
this.liveDemo = meta.iframe ? (
|
this.liveDemo = meta.iframe ? (
|
||||||
<BrowserFrame>
|
<BrowserFrame>
|
||||||
@ -188,7 +189,18 @@ class Demo extends React.Component {
|
|||||||
</body>
|
</body>
|
||||||
</html>`;
|
</html>`;
|
||||||
|
|
||||||
|
const tsconfig = `{
|
||||||
|
"compilerOptions": {
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
"target": "esnext",
|
||||||
|
"module": "esnext",
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"moduleResolution": "node",
|
||||||
|
}
|
||||||
|
}`;
|
||||||
|
|
||||||
const [sourceCode, sourceCodeTyped] = this.getSourceCode();
|
const [sourceCode, sourceCodeTyped] = this.getSourceCode();
|
||||||
|
const suffix = codeType === 'tsx' ? 'tsx' : 'js';
|
||||||
|
|
||||||
const dependencies = sourceCode.split('\n').reduce(
|
const dependencies = sourceCode.split('\n').reduce(
|
||||||
(acc, line) => {
|
(acc, line) => {
|
||||||
@ -208,6 +220,10 @@ class Demo extends React.Component {
|
|||||||
);
|
);
|
||||||
|
|
||||||
dependencies['@ant-design/icons'] = 'latest';
|
dependencies['@ant-design/icons'] = 'latest';
|
||||||
|
if (suffix === 'tsx') {
|
||||||
|
dependencies['@types/react'] = '^18.0.0';
|
||||||
|
dependencies['@types/react-dom'] = '^18.0.0';
|
||||||
|
}
|
||||||
dependencies.react = '^18.0.0';
|
dependencies.react = '^18.0.0';
|
||||||
dependencies['react-dom'] = '^18.0.0';
|
dependencies['react-dom'] = '^18.0.0';
|
||||||
|
|
||||||
@ -269,7 +285,7 @@ class Demo extends React.Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Reorder source code
|
// Reorder source code
|
||||||
let parsedSourceCode = sourceCode;
|
let parsedSourceCode = suffix === 'tsx' ? sourceCodeTyped : sourceCode;
|
||||||
let importReactContent = "import React from 'react';";
|
let importReactContent = "import React from 'react';";
|
||||||
|
|
||||||
const importReactReg = /import React(\D*)from 'react';/;
|
const importReactReg = /import React(\D*)from 'react';/;
|
||||||
@ -323,8 +339,8 @@ createRoot(document.getElementById('container')).render(<Demo />);
|
|||||||
files: {
|
files: {
|
||||||
'package.json': { content: codesandboxPackage },
|
'package.json': { content: codesandboxPackage },
|
||||||
'index.css': { content: indexCssContent },
|
'index.css': { content: indexCssContent },
|
||||||
'index.js': { content: indexJsContent },
|
[`index.${suffix}`]: { content: indexJsContent },
|
||||||
'demo.js': { content: demoJsContent },
|
[`demo.${suffix}`]: { content: demoJsContent },
|
||||||
'index.html': {
|
'index.html': {
|
||||||
content: html,
|
content: html,
|
||||||
},
|
},
|
||||||
@ -336,11 +352,14 @@ createRoot(document.getElementById('container')).render(<Demo />);
|
|||||||
dependencies,
|
dependencies,
|
||||||
files: {
|
files: {
|
||||||
'index.css': indexCssContent,
|
'index.css': indexCssContent,
|
||||||
'index.js': indexJsContent,
|
[`index.${suffix}`]: indexJsContent,
|
||||||
'demo.js': demoJsContent,
|
[`demo.${suffix}`]: demoJsContent,
|
||||||
'index.html': html,
|
'index.html': html,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
if (suffix === 'tsx') {
|
||||||
|
stackblitzPrefillConfig.files['tsconfig.json'] = tsconfig;
|
||||||
|
}
|
||||||
|
|
||||||
let codeBox = (
|
let codeBox = (
|
||||||
<section className={codeBoxClass} id={meta.id}>
|
<section className={codeBoxClass} id={meta.id}>
|
||||||
@ -426,7 +445,9 @@ createRoot(document.getElementById('container')).render(<Demo />);
|
|||||||
className="code-box-code-action"
|
className="code-box-code-action"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
this.track({ type: 'stackblitz', demo: meta.id });
|
this.track({ type: 'stackblitz', demo: meta.id });
|
||||||
stackblitzSdk.openProject(stackblitzPrefillConfig);
|
stackblitzSdk.openProject(stackblitzPrefillConfig, {
|
||||||
|
openFile: [`demo.${suffix}`],
|
||||||
|
});
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<ThunderboltOutlined className="code-box-stackblitz" />
|
<ThunderboltOutlined className="code-box-stackblitz" />
|
||||||
|
Loading…
Reference in New Issue
Block a user