Add CRA React15 example to test back-compat

This commit is contained in:
Michael Shilman 2019-04-10 11:45:16 +08:00
parent b6f4abf24c
commit bc62ea3ea2
23 changed files with 2349 additions and 161 deletions

View File

@ -109,6 +109,11 @@ jobs:
command: |
cd examples/preact-kitchen-sink
yarn build-storybook
- run:
name: Build cra react15
command: |
cd examples/cra-react15
yarn build-storybook
- run:
name: Build official-storybook
command: |
@ -186,6 +191,11 @@ jobs:
command: |
cd examples/preact-kitchen-sink
yarn storybook --smoke-test --quiet
- run:
name: Run cra reac15 (smoke test)
command: |
cd examples/cra-react15
yarn storybook --smoke-test --quiet
native-smoke-tests:
<<: *defaults
steps:

View File

@ -9,6 +9,7 @@ import jetbrains.buildServer.configs.kotlin.v2017_2.failureConditions.failOnMetr
enum class StorybookApp(val appName: String, val exampleDir: String, val merged: Boolean = true) {
CRA("CRA", "cra-kitchen-sink"),
CRA_TS("CRA TS", "cra-ts-kitchen-sink"),
CRA_REACT15("CRA REACT15", "cra-react15"),
VUE("Vue", "vue-kitchen-sink"),
ANGULAR("Angular", "angular-cli"),
POLYMER("Polymer", "polymer-cli"),

View File

@ -0,0 +1,3 @@
{
"presets": ["env", "react"]
}

View File

@ -0,0 +1,2 @@
import '@storybook/addon-actions/register';
import '@storybook/addon-links/register';

View File

@ -0,0 +1,14 @@
import { configure, addParameters } from '@storybook/react';
import { create } from '@storybook/theming';
function loadStories() {
require('../src/stories');
}
addParameters({
options: {
theme: create({ colorPrimary: 'hotpink', colorSecondary: 'orangered' }),
},
});
configure(loadStories, module);

View File

@ -0,0 +1 @@
This is a [Create React App](https://github.com/facebookincubator/create-react-app) that uses an old version of CRA and an old version of React (15.4.x). It's not meant to be exhaustive but rather to make sure we don't break legacy support.

View File

@ -0,0 +1,28 @@
{
"name": "cra-react15",
"version": "0.1.0",
"private": true,
"dependencies": {
"babel-loader": "7",
"react": "^15.4.2",
"react-dom": "^15.4.2",
"react-scripts": "1.1.5",
"global": "^4.3.2"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject",
"storybook": "start-storybook -p 9009 -s public",
"build-storybook": "build-storybook -s public"
},
"devDependencies": {
"@storybook/addon-actions": "5.1.0-alpha.24",
"@storybook/addon-links": "5.1.0-alpha.24",
"@storybook/theming": "5.1.0-alpha.24",
"@storybook/react": "5.1.0-alpha.24",
"babel-core": "6",
"babel-runtime": "6"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#000000">
<!--
manifest.json provides metadata used when your web app is added to the
homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
</head>
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>

View File

@ -0,0 +1,15 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
}
],
"start_url": "./index.html",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

View File

@ -0,0 +1,32 @@
.App {
text-align: center;
}
.App-logo {
animation: App-logo-spin infinite 20s linear;
height: 80px;
}
.App-header {
background-color: #222;
height: 150px;
padding: 20px;
color: white;
}
.App-title {
font-size: 1.5em;
}
.App-intro {
font-size: large;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}

View File

@ -0,0 +1,22 @@
/* eslint-disable react/prefer-stateless-function */
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class App extends Component {
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
</p>
</div>
);
}
}
export default App;

View File

@ -0,0 +1,10 @@
import React from 'react';
import ReactDOM from 'react-dom';
import { document } from 'global';
import App from './App';
it('renders without crashing', () => {
const div = document.createElement('div');
ReactDOM.render(<App />, div);
ReactDOM.unmountComponentAtNode(div);
});

View File

@ -0,0 +1,5 @@
body {
margin: 0;
padding: 0;
font-family: sans-serif;
}

View File

@ -0,0 +1,7 @@
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import { document } from 'global';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));

View File

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3">
<g fill="#61DAFB">
<path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/>
<circle cx="420.9" cy="296.5" r="45.7"/>
<path d="M520.5 78.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,19 @@
import React from 'react';
import { storiesOf } from '@storybook/react';
import { action } from '@storybook/addon-actions';
import { linkTo } from '@storybook/addon-links';
import { Button, Welcome } from '@storybook/react/demo';
storiesOf('Welcome', module).add('to Storybook', () => <Welcome showApp={linkTo('Button')} />);
storiesOf('Button', module)
.add('with text', () => <Button onClick={action('clicked')}>Hello Button</Button>)
.add('with some emoji', () => (
<Button onClick={action('clicked')}>
<span role="img" aria-label="so cool">
😀 😎 👍 💯
</span>
</Button>
));

View File

@ -26,6 +26,7 @@ const style = {
'html-kitchen-sink',
'riot-kitchen-sink',
'preact-kitchen-sink',
'cra-react15',
].forEach(name => {
chapter.add(name, () => <iframe style={style} title={name} src={`${name}/index.html`} />, {
chromatic: { delay: 2000 },

View File

@ -17,6 +17,7 @@ module.exports = {
'<rootDir>/examples/vue-kitchen-sink',
'<rootDir>/examples/angular-cli',
'<rootDir>/examples/preact-kitchen-sink',
'<rootDir>/examples/cra-react15',
],
roots: [
'<rootDir>/addons',
@ -35,6 +36,7 @@ module.exports = {
'addon-jest.test.js',
'/cli/test/',
'/examples/cra-kitchen-sink/src/App.test.js',
'/examples/cra-react15/src/App.test.js',
'/examples/cra-ts-kitchen-sink/src/components/',
'/examples/angular-cli/src/app/',
],

View File

@ -3,19 +3,76 @@
"name": "monorepo",
"public": true,
"builds": [
{ "src": "examples/angular-cli/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/cra-kitchen-sink/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/cra-ts-kitchen-sink/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/ember-cli/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/html-kitchen-sink/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/marko-cli/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/mithril-kitchen-sink/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/official-storybook/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/polymer-cli/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/preact-kitchen-sink/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/riot-kitchen-sink/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/svelte-kitchen-sink/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } },
{ "src": "examples/vue-kitchen-sink/package.json", "use": "@now/static-build", "config": { "distDir": "storybook-static" } }
{
"src": "examples/angular-cli/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/cra-kitchen-sink/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/cra-ts-kitchen-sink/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/ember-cli/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/html-kitchen-sink/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/marko-cli/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/mithril-kitchen-sink/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/official-storybook/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/polymer-cli/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/preact-kitchen-sink/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/riot-kitchen-sink/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/svelte-kitchen-sink/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/vue-kitchen-sink/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
},
{
"src": "examples/cra-react15/package.json",
"use": "@now/static-build",
"config": { "distDir": "storybook-static" }
}
],
"routes": [
{ "src": "/docs", "dest": "https://storybook.js.org" },

View File

@ -2,7 +2,7 @@
#
# This builds all the example storybooks for running chromatic on your dev machine
examples=(angular-cli ember-cli cra-kitchen-sink cra-ts-kitchen-sink html-kitchen-sink marko-cli mithril-kitchen-sink polymer-cli preact-kitchen-sink vue-kitchen-sink svelte-kitchen-sink official-storybook riot-kitchen-sink)
examples=(angular-cli ember-cli cra-kitchen-sink cra-ts-kitchen-sink html-kitchen-sink marko-cli mithril-kitchen-sink polymer-cli preact-kitchen-sink vue-kitchen-sink svelte-kitchen-sink official-storybook riot-kitchen-sink cra-react15)
for example in "${examples[@]}"
do

View File

@ -27,6 +27,12 @@ elif [ "$BUILD_CONTEXT" = "CRA_TS" ]; then
yarn build-storybook --quiet
mv storybook-static ../../netlify-build
popd
elif [ "$BUILD_CONTEXT" = "CRA_REACT15" ]; then
pushd examples/cra-react15
yarn add tapable # quirk with netlify build instance
yarn build-storybook --quiet
mv storybook-static ../../netlify-build
popd
elif [ "$BUILD_CONTEXT" = "VUE" ]; then
echo "netlify-build Vue examples"
pushd examples/vue-kitchen-sink

2200
yarn.lock

File diff suppressed because it is too large Load Diff