-
{dict.language}
- {(['en', 'fr', 'ar'] as AdminLanguage[]).map((value) => {
- const active = value === language
- const meta = languageMeta[value]
- return (
-
- )
- })}
+
+
+
+ {open && (
+
+ {(['en', 'fr', 'ar'] as AdminLanguage[]).map((value) => {
+ const meta = languageMeta[value]
+ const active = value === language
+ return (
+
+ )
+ })}
+
+ )}
)
}
export function AdminThemeSwitcher() {
const { theme, setTheme, dict } = useAdminI18n()
+ const [open, setOpen] = useState(false)
const [embedded, setEmbedded] = useState(false)
+ const ref = useRef
(null)
useEffect(() => {
setEmbedded(window.self !== window.top)
}, [])
+ useEffect(() => {
+ if (!open) return
+ function onMouseDown(e: MouseEvent) {
+ if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)
+ }
+ document.addEventListener('mousedown', onMouseDown)
+ return () => document.removeEventListener('mousedown', onMouseDown)
+ }, [open])
+
if (embedded) return null
return (
-
- {(['light', 'dark'] as AdminTheme[]).map((value) => {
- const active = value === theme
- return (
-
- )
- })}
+
+
+
+ {open && (
+
+ {(['light', 'dark'] as AdminTheme[]).map((value) => {
+ const active = value === theme
+ return (
+
+ )
+ })}
+
+ )}
)
}