'use client'; import React, { useState, useEffect } from 'react'; import { useOrg } from '@components/Contexts/OrgContext'; import { SiStripe } from '@icons-pack/react-simple-icons' import { useLHSession } from '@components/Contexts/LHSessionContext'; import { getPaymentConfigs, initializePaymentConfig, updatePaymentConfig, deletePaymentConfig, updateStripeAccountID, getStripeOnboardingLink } from '@services/payments/payments'; import FormLayout, { ButtonBlack, Input, Textarea, FormField, FormLabelAndMessage, Flex } from '@components/StyledElements/Form/Form'; import { AlertTriangle, BarChart2, Check, Coins, CreditCard, Edit, ExternalLink, Info, Loader2, RefreshCcw, Trash2, UnplugIcon } from 'lucide-react'; import toast from 'react-hot-toast'; import useSWR, { mutate } from 'swr'; import Modal from '@components/StyledElements/Modal/Modal'; import ConfirmationModal from '@components/StyledElements/ConfirmationModal/ConfirmationModal'; import { Button } from '@components/ui/button'; import { Alert, AlertDescription, AlertTitle } from '@components/ui/alert'; import { useRouter } from 'next/navigation'; import { getUriWithoutOrg } from '@services/config/config'; const PaymentsConfigurationPage: React.FC = () => { const org = useOrg() as any; const session = useLHSession() as any; const router = useRouter(); const access_token = session?.data?.tokens?.access_token; const { data: paymentConfigs, error, isLoading } = useSWR( () => (org && access_token ? [`/payments/${org.id}/config`, access_token] : null), ([url, token]) => getPaymentConfigs(org.id, token) ); const stripeConfig = paymentConfigs?.find((config: any) => config.provider === 'stripe'); const [isModalOpen, setIsModalOpen] = useState(false); const [isOnboarding, setIsOnboarding] = useState(false); const [isOnboardingLoading, setIsOnboardingLoading] = useState(false); const enableStripe = async () => { try { setIsOnboarding(true); const newConfig = { provider: 'stripe', enabled: true }; const config = await initializePaymentConfig(org.id, newConfig, 'stripe', access_token); toast.success('Stripe enabled successfully'); mutate([`/payments/${org.id}/config`, access_token]); } catch (error) { console.error('Error enabling Stripe:', error); toast.error('Failed to enable Stripe'); } finally { setIsOnboarding(false); } }; const editConfig = async () => { setIsModalOpen(true); }; const deleteConfig = async () => { try { await deletePaymentConfig(org.id, stripeConfig.id, access_token); toast.success('Stripe configuration deleted successfully'); mutate([`/payments/${org.id}/config`, access_token]); } catch (error) { console.error('Error deleting Stripe configuration:', error); toast.error('Failed to delete Stripe configuration'); } }; const handleStripeOnboarding = async () => { try { setIsOnboardingLoading(true); const { connect_url } = await getStripeOnboardingLink(org.id, access_token, getUriWithoutOrg('/payments/stripe/connect/oauth')); window.open(connect_url, '_blank'); } catch (error) { console.error('Error getting onboarding link:', error); toast.error('Failed to start Stripe onboarding'); } finally { setIsOnboardingLoading(false); } }; if (isLoading) { return