'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, createPaymentConfig, updatePaymentConfig, deletePaymentConfig } from '@services/payments/payments'; import FormLayout, { ButtonBlack, Input, Textarea, FormField, FormLabelAndMessage, Flex } from '@components/StyledElements/Form/Form'; import { Check, Edit, Trash2 } 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'; const PaymentsConfigurationPage: React.FC = () => { const org = useOrg() as any; const session = useLHSession() as any; 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 enableStripe = async () => { try { const newConfig = { provider: 'stripe', enabled: true }; const config = await createPaymentConfig(org.id, newConfig, 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'); } }; 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'); } }; if (isLoading) { return
Loading...
; } if (error) { return
Error loading payment configuration
; } return (

Payments Configuration

Manage your organization payments configuration

{stripeConfig ? (
Stripe is enabled
Delete Configuration } functionToExecute={deleteConfig} status="warning" />
) : ( )}
{stripeConfig && ( setIsModalOpen(false)} /> )}
); }; interface EditStripeConfigModalProps { orgId: number; configId: string; accessToken: string; isOpen: boolean; onClose: () => void; } const EditStripeConfigModal: React.FC = ({ orgId, configId, accessToken, isOpen, onClose }) => { const [stripePublishableKey, setStripePublishableKey] = useState(''); const [stripeSecretKey, setStripeSecretKey] = useState(''); const [stripeWebhookSecret, setStripeWebhookSecret] = useState(''); // Add this useEffect hook to fetch and set the existing configuration useEffect(() => { const fetchConfig = async () => { try { const config = await getPaymentConfigs(orgId, accessToken); const stripeConfig = config.find((c: any) => c.id === configId); if (stripeConfig && stripeConfig.provider_config) { setStripePublishableKey(stripeConfig.provider_config.stripe_publishable_key || ''); setStripeSecretKey(stripeConfig.provider_config.stripe_secret_key || ''); setStripeWebhookSecret(stripeConfig.provider_config.stripe_webhook_secret || ''); } } catch (error) { console.error('Error fetching Stripe configuration:', error); toast.error('Failed to load existing configuration'); } }; if (isOpen) { fetchConfig(); } }, [isOpen, orgId, configId, accessToken]); const handleSubmit = async () => { try { const stripe_config = { stripe_publishable_key: stripePublishableKey, stripe_secret_key: stripeSecretKey, stripe_webhook_secret: stripeWebhookSecret, }; const updatedConfig = { provider_config: stripe_config, }; await updatePaymentConfig(orgId, configId, updatedConfig, accessToken); toast.success('Configuration updated successfully'); mutate([`/payments/${orgId}/config`, accessToken]); onClose(); } catch (error) { console.error('Error updating config:', error); toast.error('Failed to update configuration'); } }; return ( setStripePublishableKey(e.target.value)} placeholder="pk_test_..." /> setStripeSecretKey(e.target.value)} placeholder="sk_test_..." /> setStripeWebhookSecret(e.target.value)} placeholder="whsec_..." /> Save } /> ); }; export default PaymentsConfigurationPage;