'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;