aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/hooks.ts
diff options
context:
space:
mode:
authorSebastien Castiel <sebastien@castiel.me>2024-01-09 08:53:51 -0500
committerSebastien Castiel <sebastien@castiel.me>2024-01-09 08:53:51 -0500
commit1b9e624004cfb64135b744f877e5fa87e5810abd (patch)
treef1994b7c10d98410bdc73ca323d2c32e6e019bac /src/lib/hooks.ts
parent6bd3299331265ea2a0c800e3c3199ad4e32ce8de (diff)
Ask the user who they are when opening a group for the first time (#7)
Diffstat (limited to 'src/lib/hooks.ts')
-rw-r--r--src/lib/hooks.ts42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/lib/hooks.ts b/src/lib/hooks.ts
new file mode 100644
index 0000000..02e2543
--- /dev/null
+++ b/src/lib/hooks.ts
@@ -0,0 +1,42 @@
+import { useEffect, useState } from 'react'
+
+export function useMediaQuery(query: string): boolean {
+ const getMatches = (query: string): boolean => {
+ // Prevents SSR issues
+ if (typeof window !== 'undefined') {
+ return window.matchMedia(query).matches
+ }
+ return false
+ }
+
+ const [matches, setMatches] = useState<boolean>(getMatches(query))
+
+ function handleChange() {
+ setMatches(getMatches(query))
+ }
+
+ useEffect(() => {
+ const matchMedia = window.matchMedia(query)
+
+ // Triggered at the first client-side load and if query changes
+ handleChange()
+
+ // Listen matchMedia
+ if (matchMedia.addListener) {
+ matchMedia.addListener(handleChange)
+ } else {
+ matchMedia.addEventListener('change', handleChange)
+ }
+
+ return () => {
+ if (matchMedia.removeListener) {
+ matchMedia.removeListener(handleChange)
+ } else {
+ matchMedia.removeEventListener('change', handleChange)
+ }
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [query])
+
+ return matches
+}