-1

I am trying to put Popover with Calendar inside Tabs, but I cant get it working and I get hydration error.

'use client'
import {cn} from "@/lib/utils";
import {Popover, PopoverContent, PopoverTrigger} from "@/components/ui/popover";
import {Button} from "@/components/ui/button";
import {CalendarIcon} from "lucide-react";
import {addDays, format} from "date-fns";
import {Calendar} from "@/components/ui/calendar";
import {useState} from "react";
import {Tabs} from "@/components/ui/tabs";
import {DateRange} from "react-day-picker";
import {TabsList, TabsTrigger} from "@/components/ui/tabs";

export default function DateTab() {
    const [date, setDate] = useState<DateRange | undefined>({
        from: new Date(2022, 0, 20),
        to: addDays(new Date(2022, 0, 20), 20),
    })
    return (
        <Tabs defaultValue="date-picker">
            <TabsList>
                <TabsTrigger value="date-picker">
                    <Popover>
                        <PopoverTrigger asChild>
                            <Button
                                id="date"
                                variant={"outline"}
                                className={cn(
                                    "w-[300px] justify-start text-left font-normal",
                                    !date && "text-muted-foreground"
                                )}
                            >
                            <CalendarIcon className="mr-2 h-4 w-4"/>
                            {date?.from ? (
                                date.to ? (
                                    <>
                                        {format(date.from, "LLL dd, y")} -{" "}
                                        {format(date.to, "LLL dd, y")}
                                    </>
                                ) : (
                                    format(date.from, "LLL dd, y")
                                )
                            ) : (
                                <span>Pick a date</span>
                            )}
                       </Button>
                    </PopoverTrigger>
                        <PopoverContent className="w-auto p-0" align="start">
                            <Calendar
                                initialFocus
                                mode="range"
                                defaultMonth={date?.from}
                                selected={date}
                                onSelect={setDate}
                                numberOfMonths={2}
                            />
                        </PopoverContent>
                    </Popover>
                </TabsTrigger>
                <TabsTrigger value="28-days">
                    28 days
                </TabsTrigger>
                <TabsTrigger value="14-days">
                    14 days
                </TabsTrigger>
                <TabsTrigger value="7-days">
                    7 days
                </TabsTrigger>
            </TabsList>
        </Tabs>
    )
}

I have already tried adding asChild to but then it seems like data props aren't passed by along buttons and selected tab is not working properly.

I don't know if there is any other way to do this without getting hydration error?

1
  • The only solution I found is to disable SSR on that component but I don't like that
    – Raian
    Commented Jul 4 at 10:50

0

Browse other questions tagged or ask your own question.