left-menu-mask.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { memo, useEffect, useRef, useState } from 'react'
  2. import { useLayoutContext } from '../../../shared/context/layout-context'
  3. import { useUserSettingsContext } from '@/shared/context/user-settings-context'
  4. export default memo(function LeftMenuMask() {
  5. const { setLeftMenuShown } = useLayoutContext()
  6. const { userSettings } = useUserSettingsContext()
  7. const { editorTheme, editorLightTheme, editorDarkTheme, overallTheme } =
  8. userSettings
  9. const [original] = useState({
  10. editorTheme,
  11. overallTheme,
  12. editorLightTheme,
  13. editorDarkTheme,
  14. })
  15. const maskRef = useRef<HTMLDivElement | null>(null)
  16. useEffect(() => {
  17. if (maskRef.current) {
  18. if (
  19. editorTheme !== original.editorTheme ||
  20. editorLightTheme !== original.editorLightTheme ||
  21. editorDarkTheme !== original.editorDarkTheme ||
  22. overallTheme !== original.overallTheme
  23. ) {
  24. maskRef.current.style.opacity = '0'
  25. }
  26. }
  27. }, [editorTheme, editorLightTheme, editorDarkTheme, overallTheme, original])
  28. return (
  29. // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
  30. <div
  31. id="left-menu-mask"
  32. ref={maskRef}
  33. onClick={() => setLeftMenuShown(false)}
  34. />
  35. )
  36. })