import { Button, IconButton, Menu, MenuButton, MenuButtonProps, MenuItem, MenuList, Stack, Text, useDisclosure, useToast, } from '@chakra-ui/react' import { ChevronLeftIcon, PlusIcon, TrashIcon } from 'assets/icons' import React, { useState } from 'react' import { CustomDomainModal } from './CustomDomainModal' import { deleteCustomDomain, useCustomDomains } from 'services/user' import { useWorkspace } from 'contexts/WorkspaceContext' type Props = Omit & { currentCustomDomain?: string onCustomDomainSelect: (domain: string) => void } export const CustomDomainsDropdown = ({ currentCustomDomain, onCustomDomainSelect, ...props }: Props) => { const [isDeleting, setIsDeleting] = useState('') const { isOpen, onOpen, onClose } = useDisclosure() const { workspace } = useWorkspace() const toast = useToast({ position: 'top-right', status: 'error', }) const { customDomains, mutate } = useCustomDomains({ workspaceId: workspace?.id, onError: (error) => toast({ title: error.name, description: error.message }), }) const handleMenuItemClick = (customDomain: string) => () => onCustomDomainSelect(customDomain) const handleDeleteDomainClick = (domainName: string) => async (e: React.MouseEvent) => { if (!workspace) return e.stopPropagation() setIsDeleting(domainName) const { error } = await deleteCustomDomain(workspace.id, domainName) setIsDeleting('') if (error) return toast({ title: error.name, description: error.message }) mutate({ customDomains: (customDomains ?? []).filter( (cd) => cd.name !== domainName ), }) } const handleNewDomain = (domain: string) => { if (!workspace) return mutate({ customDomains: [ ...(customDomains ?? []), { name: domain, workspaceId: workspace?.id }, ], }) handleMenuItemClick(domain)() } return ( {workspace?.id && ( )} } colorScheme="gray" justifyContent="space-between" textAlign="left" {...props} > {currentCustomDomain ?? 'Add my domain'} {(customDomains ?? []).map((customDomain) => ( ))} } onClick={onOpen} > Connect new ) }