add fullscreen mode to realtime

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-05-28 20:46:41 +02:00
parent 813f86a9a9
commit ad305e71ae
3 changed files with 103 additions and 38 deletions

View File

@@ -0,0 +1,51 @@
'use client';
import { cn } from '@/utils/cn';
import { FullscreenIcon } from 'lucide-react';
import { parseAsBoolean, useQueryState } from 'nuqs';
import { Tooltiper } from './ui/tooltip';
type Props = {
children: React.ReactNode;
className?: string;
};
export const useFullscreen = () =>
useQueryState(
'fullscreen',
parseAsBoolean.withDefault(false).withOptions({
history: 'push',
clearOnDefault: true,
})
);
export const Fullscreen = (props: Props) => {
const [isFullscreen] = useFullscreen();
return (
<div
className={cn(
isFullscreen && 'fixed inset-0 z-50 overflow-auto bg-slate-100'
)}
>
{props.children}
</div>
);
};
export const FullscreenToggle = () => {
const [, setIsFullscreen] = useFullscreen();
return (
<Tooltiper content="Toggle fullscreen" asChild>
<button
className="flex items-center gap-2"
onClick={() => {
setIsFullscreen((p) => !p);
}}
>
<FullscreenIcon />
Realtime
</button>
</Tooltiper>
);
};