52d5261b51
* display UTM parameters * persist view (list | calendar) in localStorage * move to next page on clicking "next" of last item in the page improve navigation ^ Conflicts: ^ apps/web/modules/bookings/components/BookingCalendarContainer.tsx * fix navigation on calendar view * Delete apps/web/modules/bookings/NAVIGATION_IMPLEMENTATION.md * avoid page size being 0 * check feature flag on user level * use map to improve useBookingListData * address feedback * feat(bookings): add smart navigation for calendar view - Add sort option to tRPC bookings.get schema and handler - Create NAVIGATION_PROBE_WINDOW_MONTHS constant (3 months) - Create useNearestFutureBooking hook to find nearest future booking - Create useNearestPastBooking hook to find nearest past booking - Update useCalendarNavigationCapabilities to use probe results - Update BookingCalendarContainer to wire up probe hooks This enables the booking details sheet to: - Disable next/prev buttons when no bookings exist in that direction - Jump directly to the week containing the nearest booking Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * fix type error * feat: add booking selection state when using slideover (#25637) * implement booking selection when using slideover * remove pixel shift * fix * auto scroll to selected event on calendar * make DateValues header sticky when scrolling --------- Co-authored-by: Eunjae Lee <hey@eunjae.dev> * prefetch previous / next weeks on calendar view * clean up classes * handle "fetched & but no data" situation more correctly in useCalendarAutoSelector --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
"use client";
|
|
|
|
import { useEffect } from "react";
|
|
|
|
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
|
import useMediaQuery from "@calcom/lib/hooks/useMediaQuery";
|
|
import { ToggleGroup } from "@calcom/ui/components/form";
|
|
import { Icon } from "@calcom/ui/components/icon";
|
|
|
|
import { useBookingsView } from "../hooks/useBookingsView";
|
|
|
|
type ViewToggleButtonProps = {
|
|
bookingsV3Enabled: boolean;
|
|
};
|
|
|
|
export function ViewToggleButton({ bookingsV3Enabled }: ViewToggleButtonProps) {
|
|
const { t } = useLocale();
|
|
const [view, setView] = useBookingsView({ bookingsV3Enabled });
|
|
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
|
|
useEffect(() => {
|
|
// Force list view on mobile
|
|
if (isMobile && view === "calendar") {
|
|
setView("list");
|
|
}
|
|
}, [isMobile, view, setView]);
|
|
|
|
if (isMobile) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<div className="hidden sm:block">
|
|
<ToggleGroup
|
|
value={view}
|
|
onValueChange={(value: "list" | "calendar") => {
|
|
if (!value) return;
|
|
setView(value);
|
|
}}
|
|
options={[
|
|
{
|
|
value: "list",
|
|
label: "",
|
|
tooltip: t("list_view"),
|
|
iconLeft: <Icon name="menu" className="h-4 w-4" />,
|
|
},
|
|
{
|
|
value: "calendar",
|
|
label: "",
|
|
tooltip: t("calendar_view"),
|
|
iconLeft: <Icon name="calendar" className="h-4 w-4" />,
|
|
},
|
|
]}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|