Skip to content

Commit

Permalink
[Slider] Create unstyled version and migrate to emotion & styled-comp…
Browse files Browse the repository at this point in the history
…onents (#22435)
  • Loading branch information
mnajdova committed Sep 23, 2020
1 parent 688386a commit 56fae30
Show file tree
Hide file tree
Showing 91 changed files with 5,477 additions and 45 deletions.
6 changes: 5 additions & 1 deletion .codesandbox/ci.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,17 @@
"packages/material-ui-styles",
"packages/material-ui-system",
"packages/material-ui-types",
"packages/material-ui-utils"
"packages/material-ui-utils",
"packages/material-ui-styled-engine",
"packages/material-ui-styled-engine-sc"
],
"publishDirectory": {
"@material-ui/core": "packages/material-ui/build",
"@material-ui/icons": "packages/material-ui-icons/build",
"@material-ui/lab": "packages/material-ui-lab/build",
"@material-ui/styles": "packages/material-ui-styles/build",
"@material-ui/styled-engine": "packages/material-ui-styled-engine/build",
"@material-ui/styled-engine-sc": "packages/material-ui-styled-engine-sc/build",
"@material-ui/system": "packages/material-ui-system/build",
"@material-ui/types": "packages/material-ui-types",
"@material-ui/utils": "packages/material-ui-utils/build"
Expand Down
2 changes: 2 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ const defaultAlias = {
'@material-ui/docs': './packages/material-ui-docs/src',
'@material-ui/icons': './packages/material-ui-icons/src',
'@material-ui/lab': './packages/material-ui-lab/src',
'@material-ui/styled-engine': './packages/material-ui-styled-engine/src',
'@material-ui/styled-engine-sc': './packages/material-ui-styled-engine-sc/src',
'@material-ui/styles': './packages/material-ui-styles/src',
'@material-ui/system': './packages/material-ui-system/src',
'@material-ui/utils': './packages/material-ui-utils/src',
Expand Down
4 changes: 4 additions & 0 deletions docs/babel.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ const alias = {
'@material-ui/icons': '../packages/material-ui-icons/src',
'@material-ui/lab': '../packages/material-ui-lab/src',
'@material-ui/styles': '../packages/material-ui-styles/src',
'@material-ui/styled-engine-sc': '../packages/material-ui-styled-engine-sc/src',
// Swap the comments on the next two lines for using the styled-components as style engine
'@material-ui/styled-engine': '../packages/material-ui-styled-engine/src',
// '@material-ui/styled-engine': '../packages/material-ui-styled-engine-sc/src',
'@material-ui/system': '../packages/material-ui-system/src',
'@material-ui/utils': '../packages/material-ui-utils/src',
docs: './',
Expand Down
3 changes: 3 additions & 0 deletions docs/next.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ module.exports = {
'@material-ui/docs': '../packages/material-ui-docs/src',
'@material-ui/icons': '../packages/material-ui-icons/src',
'@material-ui/lab': '../packages/material-ui-lab/src',
'@material-ui/styled-engine': '../packages/material-ui-styled-engine/src',
'@material-ui/styled-engine-sc':
'../packages/material-ui-styled-engine-sc/src',
'@material-ui/styles': '../packages/material-ui-styles/src',
'@material-ui/system': '../packages/material-ui-system/src',
'@material-ui/utils': '../packages/material-ui-utils/src',
Expand Down
6 changes: 6 additions & 0 deletions docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"@babel/plugin-transform-object-assign": "^7.10.1",
"@babel/runtime-corejs2": "^7.10.2",
"@date-io/core": "^1.3.9",
"@emotion/cache": "^10.0.27",
"@emotion/core": "^10.0.27",
"@emotion/styled": "^10.0.27",
"@fortawesome/fontawesome-svg-core": "^1.2.30",
Expand All @@ -32,6 +33,8 @@
"@material-ui/icons": "^5.0.0-alpha.1",
"@material-ui/lab": "^5.0.0-alpha.1",
"@material-ui/pickers": "^4.0.0-alpha.11",
"@material-ui/styled-engine": "^5.0.0-alpha.1",
"@material-ui/styled-engine-sc": "^5.0.0-alpha.1",
"@material-ui/styles": "^5.0.0-alpha.1",
"@material-ui/system": "^5.0.0-alpha.1",
"@material-ui/types": "^5.0.0",
Expand Down Expand Up @@ -68,6 +71,8 @@
"date-fns": "^2.15.0",
"docsearch.js": "^2.6.3",
"doctrine": "^3.0.0",
"emotion-server": "^10.0.27",
"emotion-theming": "^10.0.27",
"express": "^4.17.1",
"fg-loadcss": "^2.0.1",
"final-form": "^4.18.5",
Expand Down Expand Up @@ -110,6 +115,7 @@
"redux-logger": "^3.0.6",
"rimraf": "^3.0.0",
"styled-components": "^5.0.0",
"stylis-plugin-rtl": "^1.0.0",
"webfontloader": "^1.6.28",
"webpack": "^4.41.0",
"webpack-bundle-analyzer": "^3.5.1"
Expand Down
39 changes: 32 additions & 7 deletions docs/pages/_app.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,26 @@ import NextHead from 'next/head';
import PropTypes from 'prop-types';
import acceptLanguage from 'accept-language';
import { create } from 'jss';
import rtl from 'jss-rtl';
import jssRtl from 'jss-rtl';
import { StyleSheetManager } from 'styled-components';
import { CacheProvider } from '@emotion/core';
import createCache from '@emotion/cache';
import rtlPlugin from 'stylis-plugin-rtl';
import { useRouter } from 'next/router';
import { StylesProvider, jssPreset } from '@material-ui/styles';
import pages from 'docs/src/pages';
import initRedux from 'docs/src/modules/redux/initRedux';
import PageContext from 'docs/src/modules/components/PageContext';
import GoogleAnalytics from 'docs/src/modules/components/GoogleAnalytics';
import loadScript from 'docs/src/modules/utils/loadScript';
import RtlContext from 'docs/src/modules/utils/RtlContext';
import { ThemeProvider } from 'docs/src/modules/components/ThemeContext';
import { pathnameToLanguage, getCookie } from 'docs/src/modules/utils/helpers';
import { ACTION_TYPES, CODE_VARIANTS } from 'docs/src/modules/constants';

// Configure JSS
const jss = create({
plugins: [...jssPreset().plugins, rtl()],
plugins: [...jssPreset().plugins, jssRtl()],
insertionPoint: process.browser ? document.querySelector('#insertion-point-jss') : null,
});

Expand Down Expand Up @@ -275,6 +280,17 @@ function findActivePage(currentPages, pathname) {
return activePage;
}

// Cache for the ltr version of the styles
const cacheLtr = createCache();
cacheLtr.compat = true;

// Cache for the rtl version of the styles
const cacheRtl = createCache({
key: 'rtl',
stylisPlugins: [rtlPlugin],
});
cacheRtl.compat = true;

function AppWrapper(props) {
const { children, pageProps } = props;

Expand All @@ -283,6 +299,9 @@ function AppWrapper(props) {
initRedux({ options: { userLanguage: pageProps.userLanguage } }),
);

const [rtl, setRtl] = React.useState(false);
const rtlContextValue = { rtl, setRtl };

React.useEffect(() => {
loadDependencies();
registerServiceWorker();
Expand Down Expand Up @@ -313,11 +332,17 @@ function AppWrapper(props) {
))}
</NextHead>
<ReduxProvider store={redux}>
<PageContext.Provider value={{ activePage, pages, versions: pageProps.versions }}>
<StylesProvider jss={jss}>
<ThemeProvider>{children}</ThemeProvider>
</StylesProvider>
</PageContext.Provider>
<RtlContext.Provider value={rtlContextValue}>
<PageContext.Provider value={{ activePage, pages, versions: pageProps.versions }}>
<StyleSheetManager stylisPlugins={rtl ? [rtlPlugin] : []}>
<CacheProvider value={rtl ? cacheRtl : cacheLtr}>
<StylesProvider jss={jss}>
<ThemeProvider>{children}</ThemeProvider>
</StylesProvider>
</CacheProvider>
</StyleSheetManager>
</PageContext.Provider>
</RtlContext.Provider>
<LanguageNegotiation />
<Analytics />
</ReduxProvider>
Expand Down
93 changes: 59 additions & 34 deletions docs/pages/_document.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import React from 'react';
import { ServerStyleSheets } from '@material-ui/styles';
import { ServerStyleSheet } from 'styled-components';
import { extractCritical } from 'emotion-server';
import Document, { Html, Head, Main, NextScript } from 'next/document';
import { LANGUAGES_SSR } from 'docs/src/modules/constants';
import { pathnameToLanguage } from 'docs/src/modules/utils/helpers';
Expand Down Expand Up @@ -92,55 +94,78 @@ export default class MyDocument extends Document {
}
}

// `getInitialProps` belongs to `_document` (instead of `_app`),
// it's compatible with static-site generation (SSG).
MyDocument.getInitialProps = async (ctx) => {
// Resolution order
//
// On the server:
// 1. page.getInitialProps
// 2. document.getInitialProps
// 3. page.render
// 4. document.render
// 1. app.getInitialProps
// 2. page.getInitialProps
// 3. document.getInitialProps
// 4. app.render
// 5. page.render
// 6. document.render
//
// On the server with error:
// 2. document.getInitialProps
// 1. document.getInitialProps
// 2. app.render
// 3. page.render
// 4. document.render
//
// On the client
// 1. page.getInitialProps
// 3. page.render
// 1. app.getInitialProps
// 2. page.getInitialProps
// 3. app.render
// 4. page.render

// Render app and page and get the context of the page with collected side effects.
const sheets = new ServerStyleSheets();
const materialSheets = new ServerStyleSheets();
const styledComponentsSheet = new ServerStyleSheet();
const originalRenderPage = ctx.renderPage;

ctx.renderPage = () =>
originalRenderPage({
enhanceApp: (App) => (props) => sheets.collect(<App {...props} />),
});
try {
ctx.renderPage = () =>
originalRenderPage({
enhanceApp: (App) => (props) =>
styledComponentsSheet.collectStyles(materialSheets.collect(<App {...props} />)),
});

const initialProps = await Document.getInitialProps(ctx);
const initialProps = await Document.getInitialProps(ctx);
const emotionStyles = extractCritical(initialProps.html);

let css = sheets.toString();
// It might be undefined, e.g. after an error.
if (css && process.env.NODE_ENV === 'production') {
const result1 = await prefixer.process(css, { from: undefined });
css = result1.css;
css = cleanCSS.minify(css).styles;
}
let css = materialSheets.toString();
// It might be undefined, e.g. after an error.
if (css && process.env.NODE_ENV === 'production') {
const result1 = await prefixer.process(css, { from: undefined });
css = result1.css;
css = cleanCSS.minify(css).styles;
}

return {
...initialProps,
canonical: pathnameToLanguage(ctx.req.url).canonical,
userLanguage: ctx.query.userLanguage || 'en',
styles: [
...React.Children.toArray(initialProps.styles),
<style
id="jss-server-side"
key="jss-server-side"
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{ __html: css }}
/>,
],
};
return {
...initialProps,
canonical: pathnameToLanguage(ctx.req.url).canonical,
userLanguage: ctx.query.userLanguage || 'en',
// Styles fragment is rendered after the app and page rendering finish.
styles: [
...React.Children.toArray(initialProps.styles),
<style
id="jss-server-side"
key="jss-server-side"
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{ __html: css }}
/>,
<style
id="emotion-server-side"
key="emotion-server-side"
data-emotion-css={emotionStyles.ids.join(' ')}
// eslint-disable-next-line react/no-danger
dangerouslySetInnerHTML={{ __html: emotionStyles.css }}
/>,
styledComponentsSheet.getStyleElement(),
],
};
} finally {
styledComponentsSheet.seal();
}
};
15 changes: 15 additions & 0 deletions docs/pages/api-docs/slider-styled.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import React from 'react';
import MarkdownDocs from 'docs/src/modules/components/MarkdownDocs';
import { prepareMarkdown } from 'docs/src/modules/utils/parseMarkdown';

const pageFilename = 'api/slider-styled';
const requireRaw = require.context('!raw-loader!./', false, /\/slider-styled\.md$/);

export default function Page({ docs }) {
return <MarkdownDocs docs={docs} />;
}

Page.getInitialProps = () => {
const { demos, docs } = prepareMarkdown({ pageFilename, requireRaw });
return { demos, docs };
};
33 changes: 33 additions & 0 deletions docs/pages/api-docs/slider-styled.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
---
filename: /packages/material-ui-lab/src/SliderStyled/SliderStyled.js
---

<!--- This documentation is automatically generated, do not try to edit it. -->

# SliderStyled API

<p class="description">The API documentation of the SliderStyled React component. Learn more about the props and the CSS customization points.</p>

## Import

```js
import SliderStyled from '@material-ui/lab/SliderStyled';
// or
import { SliderStyled } from '@material-ui/lab';
```

You can learn more about the difference by [reading this guide](/guides/minimizing-bundle-size/).





## Props

| Name | Type | Default | Description |
|:-----|:-----|:--------|:------------|

The `ref` is forwarded to the root element.

Any other props supplied will be provided to the root element (native element).

15 changes: 15 additions & 0 deletions docs/pages/api-docs/slider-unstyled.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import React from 'react';
import MarkdownDocs from 'docs/src/modules/components/MarkdownDocs';
import { prepareMarkdown } from 'docs/src/modules/utils/parseMarkdown';

const pageFilename = 'api/slider-unstyled';
const requireRaw = require.context('!raw-loader!./', false, /\/slider-unstyled\.md$/);

export default function Page({ docs }) {
return <MarkdownDocs docs={docs} />;
}

Page.getInitialProps = () => {
const { demos, docs } = prepareMarkdown({ pageFilename, requireRaw });
return { demos, docs };
};
Loading

0 comments on commit 56fae30

Please sign in to comment.