import type { Dispatch, SetStateAction } from "react"; import { useState } from "react"; import { Dialog } from "@calcom/features/components/controlled-dialog"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import { Button } from "@calcom/ui/components/button"; import { DialogContent, DialogFooter, DialogHeader, DialogClose } from "@calcom/ui/components/dialog"; import { showToast } from "@calcom/ui/components/toast"; import { CreditCardIcon, TriangleAlertIcon } from "@coss/ui/icons"; interface IRescheduleDialog { isOpenDialog: boolean; setIsOpenDialog: Dispatch>; bookingId: number; paymentAmount: number; paymentCurrency: string; } export const ChargeCardDialog = (props: IRescheduleDialog) => { const { t } = useLocale(); const utils = trpc.useUtils(); const { isOpenDialog, setIsOpenDialog, bookingId } = props; const [chargeError, setChargeError] = useState(null); const chargeCardMutation = trpc.viewer.payments.chargeCard.useMutation({ onSuccess: () => { utils.viewer.bookings.invalidate(); setIsOpenDialog(false); setChargeError(null); showToast("Charge successful", "success"); }, onError: (error) => { setChargeError(error.message || t("error_charging_card")); }, }); const currencyStringParams = { amount: props.paymentAmount / 100.0, formatParams: { amount: { currency: props.paymentCurrency } }, }; return (

{t("charge_card_dialog_body", currencyStringParams)}

{chargeError && (

{chargeError}

)}
); };