site/lib/use-prefers-motion.js
Lachlan Campbell eed9d5eb2d Redesign Slack page (#37)
* Redesign Slack page

* Fix homepage

* Add subtle arrow animation

* Continue polishing
2020-07-25 23:18:49 -04:00

30 lines
975 B
JavaScript

// Inspired by https://joshwcomeau.com/snippets/react-hooks/use-prefers-reduced-motion
import React from 'react'
const QUERY = '(prefers-reduced-motion: no-preference)'
const isRenderingOnServer = typeof window === 'undefined'
const getInitialState = () => {
// For our initial server render, we won't know if the user
// prefers reduced motion, but it doesn't matter. This value
// will be overwritten on the client, before any animations
// occur.
return isRenderingOnServer ? false : window.matchMedia(QUERY).matches
}
function usePrefersMotion() {
const [prefersMotion, setPrefersMotion] = React.useState(getInitialState)
React.useEffect(() => {
const mediaQueryList = window.matchMedia(QUERY)
const listener = event => {
setPrefersMotion(!event.matches)
}
mediaQueryList.addListener(listener)
return () => {
mediaQueryList.removeListener(listener)
}
}, [])
return prefersMotion
}
export default usePrefersMotion