* bookings page redesign work in progress fix: duplicate translation key chore: use newly supported separator type remove outdated BookingDetailsSheet remove dropdown and related code revert unncessary changes * fix wrong rebase * fix type error * refactor: separate bookings columns into filter and display columns (#24959) * refactor: separate bookings columns into filter and display columns - Extract filter-only columns into shared filterColumns.ts - Extract list display columns into listColumns.tsx - Create BookingsListContainer for list view with both column sets - Create BookingsCalendarContainer for calendar view with filter columns only - Refactor bookings-view.tsx to use dynamic imports for containers - Remove column/table creation logic from bookings-view.tsx This ensures calendar view doesn't import list-specific UI components (AvatarGroup, Badge, etc.) Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * fix: return null instead of false for separator rows in filter accessors The filter accessor functions were returning false for separator rows instead of null, which would pollute the multi-select filters with bogus 'false' values. This fix ensures that separator rows return null so they are properly excluded from filters. Addresses cubic AI reviewer feedback on PR #24959 Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * clean up filter column visibility * feat: integrate booking calendar view with re-designed list (#24973) * add toggle button * remove the dateRange filter when switching from calendar to list view * move "view" to the action dropdown * add close button the details sheet * move close button * fix more button behavior --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix type error * update the test case * fix e2e util * fix actions dropdown * revert e2e tests * fix type error on BookingActionsDropdown.tsx * fix: include today's bookings in flatData for past status Previously, flatData excluded groupedBookings.today, which caused past bookings that happened today to not show up when status === 'past'. This fix includes today's bookings in flatData for all statuses. Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * improve attendee cell * fix e2e tests * change max * fix e2e * add reschedule requested message * fix e2e * update e2e * remove flaky checks --------- Co-authored-by: Eunjae Lee <hey@eunjae.dev> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
67 lines
1.7 KiB
TypeScript
67 lines
1.7 KiB
TypeScript
"use client";
|
|
|
|
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
|
import type { BookingStatus } from "@calcom/prisma/enums";
|
|
import classNames from "@calcom/ui/classNames";
|
|
import { Button } from "@calcom/ui/components/button";
|
|
|
|
import { useJoinableLocation } from "./useJoinableLocation";
|
|
|
|
interface JoinMeetingButtonProps {
|
|
location: string | null;
|
|
metadata?: unknown;
|
|
bookingStatus: BookingStatus;
|
|
size?: "sm" | "base" | "lg";
|
|
color?: "primary" | "secondary" | "minimal" | "destructive";
|
|
className?: string;
|
|
onClick?: (e: React.MouseEvent) => void;
|
|
}
|
|
|
|
export function JoinMeetingButton({
|
|
location,
|
|
metadata,
|
|
bookingStatus,
|
|
size = "base",
|
|
color = "secondary",
|
|
className,
|
|
onClick,
|
|
}: JoinMeetingButtonProps) {
|
|
const { t } = useLocale();
|
|
const { isJoinable, locationToDisplay, provider } = useJoinableLocation({
|
|
location,
|
|
metadata,
|
|
bookingStatus,
|
|
t,
|
|
});
|
|
|
|
if (!isJoinable || !locationToDisplay) {
|
|
return null;
|
|
}
|
|
|
|
const handleClick = (e: React.MouseEvent) => {
|
|
e.stopPropagation();
|
|
onClick?.(e);
|
|
};
|
|
|
|
return (
|
|
<Button
|
|
color={color}
|
|
size={size}
|
|
href={locationToDisplay}
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className={classNames("flex items-center gap-2", className)}
|
|
onClick={handleClick}>
|
|
{provider?.iconUrl && (
|
|
// eslint-disable-next-line @next/next/no-img-element
|
|
<img
|
|
src={provider.iconUrl}
|
|
className="h-4 w-4 flex-shrink-0 rounded-sm"
|
|
alt={`${provider.label} logo`}
|
|
/>
|
|
)}
|
|
{provider?.label ? t("join_event_location", { eventLocationType: provider.label }) : t("join_meeting")}
|
|
</Button>
|
|
);
|
|
}
|