diff --git a/src/components/CodeEditor/CodeEditor.js b/src/components/CodeEditor/CodeEditor.js
index f5ef723a..b199af5a 100644
--- a/src/components/CodeEditor/CodeEditor.js
+++ b/src/components/CodeEditor/CodeEditor.js
@@ -65,47 +65,8 @@ class CodeEditor extends Component {
}
return (
+
-
- {children && (
-
- {children}
-
- )}
-
)}
-
+
);
}
diff --git a/src/components/CodeExample/CodeExample.js b/src/components/CodeExample/CodeExample.js
new file mode 100644
index 00000000..39b40fc1
--- /dev/null
+++ b/src/components/CodeExample/CodeExample.js
@@ -0,0 +1,54 @@
+import React, { Component } from 'react';
+import {colors, media} from 'theme';
+import CodeEditor from '../CodeEditor/CodeEditor';
+
+class CodeExample extends Component {
+ render() {
+ const {children, code, loaded} = this.props;
+ return (
+
+ {children && (
+
+ {children}
+
+ )}
+ {loaded ?
:
Loading code example...
}
+
+ )
+ }
+}
+
+export default CodeExample;
diff --git a/src/components/CodeExample/index.js b/src/components/CodeExample/index.js
new file mode 100644
index 00000000..6bff868c
--- /dev/null
+++ b/src/components/CodeExample/index.js
@@ -0,0 +1,3 @@
+import CodeExample from './CodeExample';
+
+export default CodeExample;
diff --git a/src/pages/index.js b/src/pages/index.js
index 480d8b0a..c0bf8fc1 100644
--- a/src/pages/index.js
+++ b/src/pages/index.js
@@ -7,72 +7,37 @@
import ButtonLink from 'components/ButtonLink';
import Container from 'components/Container';
import Flex from 'components/Flex';
-import mountCodeExample from 'utils/mountCodeExample';
+import CodeExample from 'components/CodeExample';
import PropTypes from 'prop-types';
import React, {Component} from 'react';
import {graphql} from 'gatsby';
import TitleAndMetaTags from 'components/TitleAndMetaTags';
import Layout from 'components/Layout';
+import loadScript from 'utils/loadScript';
import {colors, media, sharedStyles} from 'theme';
import createOgUrl from 'utils/createOgUrl';
-import loadScript from 'utils/loadScript';
import {babelURL} from 'site-constants';
import ReactDOM from 'react-dom';
import logoWhiteSvg from 'icons/logo-white.svg';
class Home extends Component {
- constructor(props, context) {
- super(props, context);
-
- const {data} = props;
-
- const code = data.code.edges.reduce((map, {node}) => {
- map[node.id] = JSON.parse(node.internal.contentDigest);
-
- return map;
- }, {});
-
- const examples = data.examples.edges.map(({node}) => ({
- content: node.html,
- id: node.fields.slug.replace(/^.+\//, '').replace('.html', ''),
- title: node.frontmatter.title,
- }));
-
- const marketing = data.marketing.edges.map(({node}) => ({
- title: node.frontmatter.title,
- content: node.html,
- }));
-
- this.state = {
- code,
- examples,
- marketing,
- };
- }
+ state = {
+ babelLoaded: false
+ };
componentDidMount() {
- const {code, examples} = this.state;
-
- examples.forEach(({id}) => {
- renderExamplePlaceholder(id);
- });
-
- function mountCodeExamples() {
- examples.forEach(({id}) => {
- mountCodeExample(id, code[id]);
+ loadScript(babelURL).then(() => {
+ this.setState({
+ babelLoaded: true
});
- }
-
- loadScript(babelURL).then(mountCodeExamples, error => {
+ }, error => {
console.error('Babel failed to load.');
-
- mountCodeExamples();
});
}
-
render() {
- const {examples, marketing} = this.state;
- const {location} = this.props;
+ const {babelLoaded} = this.state;
+ const {data, location} = this.props;
+ const {examples, marketing} = data;
return (
@@ -217,7 +182,7 @@ class Home extends Component {
whiteSpace: 'nowrap',
},
}}>
- {marketing.map((column, index) => (
+ {marketing.edges.map(({ node: column }, index) => (
- {column.title}
+ {column.frontmatter.title}
-
+
))}
@@ -283,7 +248,7 @@ class Home extends Component {
/>
- {examples.map((example, index) => (
+ {examples.edges.map(({ node }, index) => (
-
{example.title}
-
-
+
+ {node.frontmatter.title}
+
+
))}
@@ -339,7 +305,6 @@ class Home extends Component {
Home.propTypes = {
data: PropTypes.shape({
- code: PropTypes.object.isRequired,
examples: PropTypes.object.isRequired,
marketing: PropTypes.object.isRequired,
}).isRequired,
@@ -382,22 +347,13 @@ const CtaItem = ({children, primary = false}) => (
export const pageQuery = graphql`
query IndexMarkdown {
- code: allExampleCode {
- edges {
- node {
- id
- internal {
- contentDigest
- }
- }
- }
- }
examples: allMarkdownRemark(
filter: {fileAbsolutePath: {regex: "//home/examples//"}}
sort: {fields: [frontmatter___order], order: ASC}
) {
edges {
node {
+ code
fields {
slug
}