File size: 1,122 Bytes
a0c836f
 
 
852e9a3
a0c836f
 
 
 
852e9a3
a0c836f
 
 
 
 
852e9a3
a0c836f
 
 
 
 
 
 
 
852e9a3
 
 
 
a0c836f
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import { useEffect } from "react"
import { Outlet, useNavigate } from "react-router-dom"
import Sidebar from "./Sidebar"
import { useIsMobile } from "../useMediaQuery"

// Shared shell for the non-chat authenticated pages: Sidebar + page content.
export default function Layout() {
  const navigate = useNavigate()
  const isMobile = useIsMobile()

  // Let the service worker deep-link us (e.g. notification click -> /today).
  useEffect(() => {
    if (!("serviceWorker" in navigator)) return
    const handler = (event) => {
      if (event.data?.type === "navigate" && event.data.url) navigate(event.data.url)
    }
    navigator.serviceWorker.addEventListener("message", handler)
    return () => navigator.serviceWorker.removeEventListener("message", handler)
  }, [navigate])

  return (
    <div style={{ width: "100%", height: "100vh", display: "flex", overflow: "hidden" }}>
      <Sidebar />
      <div style={{
        flex: 1, display: "flex", flexDirection: "column", background: "#f5f7fa",
        overflowY: "auto", paddingTop: isMobile ? 52 : 0,
      }}>
        <Outlet />
      </div>
    </div>
  )
}