mirror of
https://github.com/jxnblk/mdx-deck.git
synced 2024-11-29 13:58:02 +03:00
Split state from UI
This commit is contained in:
parent
fa7964f200
commit
7d9dcf7278
@ -10,6 +10,7 @@
|
|||||||
"start": "yarn workspace @mdx-deck/docs start",
|
"start": "yarn workspace @mdx-deck/docs start",
|
||||||
"analyze-bundle": "yarn workspace @mdx-deck/docs start --webpack bundle-analyzer.config.js",
|
"analyze-bundle": "yarn workspace @mdx-deck/docs start --webpack bundle-analyzer.config.js",
|
||||||
"build": "yarn workspace @mdx-deck/docs build",
|
"build": "yarn workspace @mdx-deck/docs build",
|
||||||
|
"start-theme": "yarn workspace @mdx-deck/gatsby-theme start",
|
||||||
"build-theme": "yarn workspace @mdx-deck/gatsby-theme build",
|
"build-theme": "yarn workspace @mdx-deck/gatsby-theme build",
|
||||||
"test": "jest && yarn build-theme"
|
"test": "jest && yarn build-theme"
|
||||||
},
|
},
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import React, { useReducer, useMemo } from 'react'
|
import React, { useContext, useReducer, useMemo } from 'react'
|
||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types'
|
||||||
import { Router, globalHistory, navigate } from '@reach/router'
|
import { Router, globalHistory, navigate } from '@reach/router'
|
||||||
import { Global } from '@emotion/core'
|
import { Global } from '@emotion/core'
|
||||||
@ -58,15 +58,27 @@ const getWrapper = mode => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const MDXDeck = props => {
|
export const MDXDeckContext = React.createContext()
|
||||||
const { slides, basepath } = props
|
|
||||||
|
|
||||||
|
export const State = ({ children }) => {
|
||||||
const [state, setState] = useState({
|
const [state, setState] = useState({
|
||||||
metadata: {},
|
metadata: {},
|
||||||
step: 0,
|
step: 0,
|
||||||
mode: NORMAL,
|
mode: NORMAL,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const context = {
|
||||||
|
state,
|
||||||
|
setState,
|
||||||
|
}
|
||||||
|
|
||||||
|
return <MDXDeckContext.Provider value={context} children={children} />
|
||||||
|
}
|
||||||
|
|
||||||
|
export const Deck = props => {
|
||||||
|
const { slides, basepath } = props
|
||||||
|
const { state, setState } = useContext(MDXDeckContext)
|
||||||
|
|
||||||
const index = getIndex(props)
|
const index = getIndex(props)
|
||||||
|
|
||||||
const getMeta = i => {
|
const getMeta = i => {
|
||||||
@ -160,6 +172,12 @@ export const MDXDeck = props => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const MDXDeck = props => (
|
||||||
|
<State>
|
||||||
|
<Deck {...props} />
|
||||||
|
</State>
|
||||||
|
)
|
||||||
|
|
||||||
MDXDeck.propTypes = {
|
MDXDeck.propTypes = {
|
||||||
slides: PropTypes.array.isRequired,
|
slides: PropTypes.array.isRequired,
|
||||||
headTags: PropTypes.array.isRequired,
|
headTags: PropTypes.array.isRequired,
|
||||||
|
@ -1,12 +1,22 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import MDXRenderer from 'gatsby-mdx/mdx-renderer'
|
import MDXRenderer from 'gatsby-mdx/mdx-renderer'
|
||||||
import { graphql } from 'gatsby'
|
import { graphql } from 'gatsby'
|
||||||
import Layout from '../layouts/deck'
|
import { MDXDeck, splitSlides } from '@mdx-deck/components'
|
||||||
|
|
||||||
|
const Wrapper = props => <MDXDeck {...splitSlides(props)} />
|
||||||
|
|
||||||
export default props => {
|
export default props => {
|
||||||
const { mdx } = props.data
|
const { mdx } = props.data
|
||||||
const children = <MDXRenderer children={mdx.code.body} />
|
const Component = props => <MDXRenderer {...props} children={mdx.code.body} />
|
||||||
return <Layout {...props} children={children} />
|
|
||||||
|
return (
|
||||||
|
<Component
|
||||||
|
basepath={props.pageContext.basepath}
|
||||||
|
components={{
|
||||||
|
wrapper: Wrapper,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const query = graphql`
|
export const query = graphql`
|
||||||
|
Loading…
Reference in New Issue
Block a user