mirror of
https://github.com/jxnblk/mdx-deck.git
synced 2024-11-29 13:58:02 +03:00
Refactor local storage
This commit is contained in:
parent
4c26383670
commit
d63ba7be5a
@ -12,6 +12,7 @@ import Grid from './Grid'
|
|||||||
import Print from './Print'
|
import Print from './Print'
|
||||||
import GoogleFonts from './GoogleFonts'
|
import GoogleFonts from './GoogleFonts'
|
||||||
import Catch from './Catch'
|
import Catch from './Catch'
|
||||||
|
import Storage from './Storage'
|
||||||
|
|
||||||
const NORMAL = 'normal'
|
const NORMAL = 'normal'
|
||||||
const PRESENTER = 'presenter'
|
const PRESENTER = 'presenter'
|
||||||
@ -26,9 +27,6 @@ const modes = {
|
|||||||
PRINT,
|
PRINT,
|
||||||
}
|
}
|
||||||
|
|
||||||
const STORAGE_INDEX = 'mdx-slide'
|
|
||||||
const STORAGE_STEP = 'mdx-step'
|
|
||||||
|
|
||||||
const keys = {
|
const keys = {
|
||||||
right: 39,
|
right: 39,
|
||||||
left: 37,
|
left: 37,
|
||||||
@ -174,22 +172,6 @@ export class MDXDeck extends React.Component {
|
|||||||
this.setState({ slides })
|
this.setState({ slides })
|
||||||
}
|
}
|
||||||
|
|
||||||
handleStorageChange = e => {
|
|
||||||
const { key } = e
|
|
||||||
switch (key) {
|
|
||||||
case STORAGE_INDEX:
|
|
||||||
const index = parseInt(e.newValue, 10)
|
|
||||||
this.goto(index)
|
|
||||||
break
|
|
||||||
case STORAGE_STEP:
|
|
||||||
const step = parseInt(e.newValue, 10)
|
|
||||||
this.setState({ step })
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getMode = () => {
|
getMode = () => {
|
||||||
const query = querystring.parse(
|
const query = querystring.parse(
|
||||||
globalHistory.location.search.replace(/^\?/, '')
|
globalHistory.location.search.replace(/^\?/, '')
|
||||||
@ -199,21 +181,16 @@ export class MDXDeck extends React.Component {
|
|||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
document.body.addEventListener('keydown', this.handleKeyDown)
|
document.body.addEventListener('keydown', this.handleKeyDown)
|
||||||
window.addEventListener('storage', this.handleStorageChange)
|
|
||||||
this.getMode()
|
this.getMode()
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
document.body.removeEventListener('keydown', this.handleKeyDown)
|
document.body.removeEventListener('keydown', this.handleKeyDown)
|
||||||
window.removeEventListener('storage', this.handleStorageChange)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate() {
|
componentDidUpdate() {
|
||||||
const index = this.getIndex()
|
const { mode } = this.state
|
||||||
const { step, mode } = this.state
|
|
||||||
const { pathname, search } = globalHistory.location
|
const { pathname, search } = globalHistory.location
|
||||||
localStorage.setItem(STORAGE_INDEX, index)
|
|
||||||
localStorage.setItem(STORAGE_STEP, step)
|
|
||||||
|
|
||||||
if (mode !== NORMAL && mode !== PRINT) {
|
if (mode !== NORMAL && mode !== PRINT) {
|
||||||
const query = '?' + querystring.stringify({ mode })
|
const query = '?' + querystring.stringify({ mode })
|
||||||
@ -274,6 +251,7 @@ export class MDXDeck extends React.Component {
|
|||||||
<Provider {...this.props} {...this.state} mode={mode} index={index}>
|
<Provider {...this.props} {...this.state} mode={mode} index={index}>
|
||||||
{style}
|
{style}
|
||||||
<Catch>
|
<Catch>
|
||||||
|
<Storage {...this.state} goto={this.goto} index={index} />
|
||||||
<GoogleFonts />
|
<GoogleFonts />
|
||||||
<Wrapper {...this.props} {...this.state} modes={modes} index={index}>
|
<Wrapper {...this.props} {...this.state} modes={modes} index={index}>
|
||||||
<Swipeable onSwipedRight={this.previous} onSwipedLeft={this.next}>
|
<Swipeable onSwipedRight={this.previous} onSwipedLeft={this.next}>
|
||||||
|
44
packages/components/src/Storage.js
Normal file
44
packages/components/src/Storage.js
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import { useEffect } from 'react'
|
||||||
|
|
||||||
|
const STORAGE_INDEX = 'mdx-slide'
|
||||||
|
const STORAGE_STEP = 'mdx-step'
|
||||||
|
|
||||||
|
export const useLocalStorage = (handler, args = []) => {
|
||||||
|
useEffect(() => {
|
||||||
|
window.addEventListener('storage', handler)
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener('storage', handler)
|
||||||
|
}
|
||||||
|
}, [...args])
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useSetStorage = (key, value) => {
|
||||||
|
useEffect(() => {
|
||||||
|
localStorage.setItem(key, value)
|
||||||
|
}, [key, value])
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleStorageChange = ({ goto, update }) => e => {
|
||||||
|
const { key } = e
|
||||||
|
switch (key) {
|
||||||
|
case STORAGE_INDEX:
|
||||||
|
const index = parseInt(e.newValue, 10)
|
||||||
|
goto(index)
|
||||||
|
break
|
||||||
|
case STORAGE_STEP:
|
||||||
|
const step = parseInt(e.newValue, 10)
|
||||||
|
update({ step })
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ({ goto, update, index, step }) => {
|
||||||
|
const handler = handleStorageChange({ goto, update })
|
||||||
|
useLocalStorage(handler)
|
||||||
|
useSetStorage(STORAGE_INDEX, index)
|
||||||
|
useSetStorage(STORAGE_STEP, step)
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user