2024-10-16 03:25:59 +03:00
|
|
|
import {
|
|
|
|
|
MobilePage,
|
|
|
|
|
MobilePageContent,
|
|
|
|
|
MobilePageHeader,
|
2024-10-16 17:18:06 +03:00
|
|
|
MobilePagePortal,
|
2024-10-16 03:25:59 +03:00
|
|
|
MobilePageTitle,
|
2024-10-16 17:18:06 +03:00
|
|
|
MobilePageTrigger,
|
2024-10-16 03:25:59 +03:00
|
|
|
} from "@/components/mobile/MobilePage";
|
2024-09-25 19:05:40 +03:00
|
|
|
import { Drawer, DrawerContent, DrawerTrigger } from "@/components/ui/drawer";
|
|
|
|
|
import {
|
|
|
|
|
Popover,
|
|
|
|
|
PopoverContent,
|
|
|
|
|
PopoverTrigger,
|
|
|
|
|
} from "@/components/ui/popover";
|
2024-10-16 15:15:25 +03:00
|
|
|
import {
|
|
|
|
|
Sheet,
|
|
|
|
|
SheetContent,
|
|
|
|
|
SheetDescription,
|
|
|
|
|
SheetHeader,
|
|
|
|
|
SheetTitle,
|
|
|
|
|
SheetTrigger,
|
|
|
|
|
} from "@/components/ui/sheet";
|
2024-09-25 19:05:40 +03:00
|
|
|
import { isMobile } from "react-device-detect";
|
|
|
|
|
|
|
|
|
|
type PlatformAwareDialogProps = {
|
|
|
|
|
trigger: JSX.Element;
|
|
|
|
|
content: JSX.Element;
|
|
|
|
|
triggerClassName?: string;
|
|
|
|
|
contentClassName?: string;
|
|
|
|
|
open: boolean;
|
|
|
|
|
onOpenChange: (open: boolean) => void;
|
|
|
|
|
};
|
|
|
|
|
export default function PlatformAwareDialog({
|
|
|
|
|
trigger,
|
|
|
|
|
content,
|
|
|
|
|
triggerClassName = "",
|
|
|
|
|
contentClassName = "",
|
|
|
|
|
open,
|
|
|
|
|
onOpenChange,
|
|
|
|
|
}: PlatformAwareDialogProps) {
|
|
|
|
|
if (isMobile) {
|
|
|
|
|
return (
|
|
|
|
|
<Drawer open={open} onOpenChange={onOpenChange}>
|
|
|
|
|
<DrawerTrigger asChild>{trigger}</DrawerTrigger>
|
2024-09-26 23:30:56 +03:00
|
|
|
<DrawerContent className="max-h-[75dvh] overflow-hidden px-4">
|
2024-09-25 19:05:40 +03:00
|
|
|
{content}
|
|
|
|
|
</DrawerContent>
|
|
|
|
|
</Drawer>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Popover open={open} onOpenChange={onOpenChange}>
|
|
|
|
|
<PopoverTrigger asChild className={triggerClassName}>
|
|
|
|
|
{trigger}
|
|
|
|
|
</PopoverTrigger>
|
|
|
|
|
<PopoverContent className={contentClassName}>{content}</PopoverContent>
|
|
|
|
|
</Popover>
|
|
|
|
|
);
|
|
|
|
|
}
|
2024-10-16 03:25:59 +03:00
|
|
|
|
|
|
|
|
type PlatformAwareSheetProps = {
|
|
|
|
|
trigger: JSX.Element;
|
2024-10-16 15:15:25 +03:00
|
|
|
title?: string | JSX.Element;
|
2024-10-16 03:25:59 +03:00
|
|
|
content: JSX.Element;
|
|
|
|
|
triggerClassName?: string;
|
2024-10-16 15:15:25 +03:00
|
|
|
titleClassName?: string;
|
2024-10-16 03:25:59 +03:00
|
|
|
contentClassName?: string;
|
|
|
|
|
open: boolean;
|
|
|
|
|
onOpenChange: (open: boolean) => void;
|
|
|
|
|
};
|
|
|
|
|
export function PlatformAwareSheet({
|
|
|
|
|
trigger,
|
2024-10-16 15:15:25 +03:00
|
|
|
title,
|
2024-10-16 03:25:59 +03:00
|
|
|
content,
|
|
|
|
|
triggerClassName = "",
|
2024-10-16 15:15:25 +03:00
|
|
|
titleClassName = "",
|
2024-10-16 03:25:59 +03:00
|
|
|
contentClassName = "",
|
|
|
|
|
open,
|
|
|
|
|
onOpenChange,
|
|
|
|
|
}: PlatformAwareSheetProps) {
|
|
|
|
|
if (isMobile) {
|
|
|
|
|
return (
|
2024-10-16 17:18:06 +03:00
|
|
|
<MobilePage open={open} onOpenChange={onOpenChange}>
|
|
|
|
|
<MobilePageTrigger onClick={() => onOpenChange(true)}>
|
|
|
|
|
{trigger}
|
|
|
|
|
</MobilePageTrigger>
|
|
|
|
|
<MobilePagePortal>
|
2024-10-16 03:25:59 +03:00
|
|
|
<MobilePageContent className="h-full overflow-hidden">
|
|
|
|
|
<MobilePageHeader
|
|
|
|
|
className="mx-2"
|
|
|
|
|
onClose={() => onOpenChange(false)}
|
|
|
|
|
>
|
|
|
|
|
<MobilePageTitle>More Filters</MobilePageTitle>
|
|
|
|
|
</MobilePageHeader>
|
|
|
|
|
<div className={contentClassName}>{content}</div>
|
|
|
|
|
</MobilePageContent>
|
2024-10-16 17:18:06 +03:00
|
|
|
</MobilePagePortal>
|
|
|
|
|
</MobilePage>
|
2024-10-16 03:25:59 +03:00
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (
|
2024-10-16 15:15:25 +03:00
|
|
|
<Sheet open={open} onOpenChange={onOpenChange} modal={false}>
|
2024-10-16 03:25:59 +03:00
|
|
|
<SheetTrigger asChild className={triggerClassName}>
|
|
|
|
|
{trigger}
|
|
|
|
|
</SheetTrigger>
|
2024-10-16 15:15:25 +03:00
|
|
|
<SheetContent className={contentClassName}>
|
|
|
|
|
<SheetHeader>
|
|
|
|
|
<SheetTitle className={title ? titleClassName : "sr-only"}>
|
|
|
|
|
{title ?? ""}
|
|
|
|
|
</SheetTitle>
|
|
|
|
|
<SheetDescription className="sr-only">Information</SheetDescription>
|
|
|
|
|
</SheetHeader>
|
|
|
|
|
{content}
|
|
|
|
|
</SheetContent>
|
2024-10-16 03:25:59 +03:00
|
|
|
</Sheet>
|
|
|
|
|
);
|
|
|
|
|
}
|