diff --git a/apps/customers/src/components/CustomerAddresses.tsx b/apps/customers/src/components/CustomerAddresses.tsx index 2379a9ba..9a18219d 100644 --- a/apps/customers/src/components/CustomerAddresses.tsx +++ b/apps/customers/src/components/CustomerAddresses.tsx @@ -1,7 +1,12 @@ +import { useCustomerDetails } from '#hooks/useCustomerDetails' import { + Button, + Icon, ListItem, ResourceAddress, Section, + useCoreSdkProvider, + useResourceAddressOverlay, useTokenProvider, withSkeletonTemplate } from '@commercelayer/app-elements' @@ -13,7 +18,32 @@ interface Props { export const CustomerAddresses = withSkeletonTemplate( ({ customer }): JSX.Element | null => { + const { sdkClient } = useCoreSdkProvider() const { canUser } = useTokenProvider() + const { mutateCustomer } = useCustomerDetails(customer.id) + + async function handleOnCreateAsync(formValues: any): Promise { + try { + // Create new address + await sdkClient.customer_addresses.create({ + customer_email: customer.email, + customer, + address: formValues + }) + void mutateCustomer() + } catch (error) { + console.error('Error creating or updating address:', error) + } + } + + function handleOnCreate(formValues: any): void { + handleOnCreateAsync(formValues).catch((error) => { + console.error('Error in handleOnCreate:', error) + }) + } + + const { ResourceAddressOverlay, openAddressOverlay } = + useResourceAddressOverlay({ onCreate: handleOnCreate, showNotes: true }) const addresses = customer.customer_addresses?.map( (customerAddress, idx) => @@ -21,15 +51,37 @@ export const CustomerAddresses = withSkeletonTemplate( ) : null ) - if (addresses?.length === 0) return <> + return ( + <> + - return
{addresses}
+
{ + openAddressOverlay() + }} + > + + Add New Address + + } + > + {addresses?.length === 0 ? 'No Address Yet' : addresses} +
+ + ) } )