'use client'; import React, { useState } from 'react' import { useOrg } from '@components/Contexts/OrgContext'; import { useLHSession } from '@components/Contexts/LHSessionContext'; import useSWR, { mutate } from 'swr'; import { getProducts, deleteProduct, updateProduct } from '@services/payments/products'; import CreateProductForm from '@components/Dashboard/Payments/SubComponents/CreateProductForm'; import { Plus, Trash2, Pencil, DollarSign, Info } from 'lucide-react'; import Modal from '@components/StyledElements/Modal/Modal'; import ConfirmationModal from '@components/StyledElements/ConfirmationModal/ConfirmationModal'; import toast from 'react-hot-toast'; import Link from 'next/link'; import { getUriWithOrg } from '@services/config/config'; function PaymentsProductPage() { const org = useOrg() as any; const session = useLHSession() as any; const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); const [editingProductId, setEditingProductId] = useState(null); const { data: products, error } = useSWR( () => org && session ? [`/payments/${org.id}/products`, session.data?.tokens?.access_token] : null, ([url, token]) => getProducts(org.id, token) ); const handleDeleteProduct = async (productId: string) => { try { await deleteProduct(org.id, productId, session.data?.tokens?.access_token); mutate([`/payments/${org.id}/products`, session.data?.tokens?.access_token]); toast.success('Product deleted successfully'); } catch (error) { toast.error('Failed to delete product'); } } if (error) return
Failed to load products
; if (!products) return
Loading...
; return (

Products

setIsCreateModalOpen(false)} /> } />
{products.data.map((product: any) => (
{editingProductId === product.id ? ( setEditingProductId(null)} onCancel={() => setEditingProductId(null)} /> ) : (

{product.name}

} functionToExecute={() => handleDeleteProduct(product.id)} status="warning" />

{product.description}

${product.amount.toFixed(2)}

{product.product_type}

{product.benefits && (

Benefits:

{product.benefits}

)}
)}
))}
{products.data.length === 0 && (

No products available. Create a new product to get started.

)}
) } const EditProductForm = ({ product, onSuccess, onCancel }: { product: any, onSuccess: () => void, onCancel: () => void }) => { const [name, setName] = useState(product.name); const [description, setDescription] = useState(product.description); const [amount, setAmount] = useState(product.amount); const [benefits, setBenefits] = useState(product.benefits || ''); const org = useOrg() as any; const session = useLHSession() as any; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); try { await updateProduct(org.id, product.id, { name, description, amount, benefits }, session.data?.tokens?.access_token); mutate([`/payments/${org.id}/products`, session.data?.tokens?.access_token]); onSuccess(); toast.success('Product updated successfully'); } catch (error) { toast.error('Failed to update product'); } }; return (
setName(e.target.value)} className="w-full p-2 border rounded" placeholder="Product Name" />