import { AlertDialog, AlertDialogBody, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, Badge, Box, Button, ButtonGroup, Flex, HStack, Icon, IconButton, Text, Tooltip, useToast, } from '@chakra-ui/react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { __ } from '@wordpress/i18n'; import React, { useRef, useState } from 'react'; import { BiGroup } from 'react-icons/bi'; import { RxDividerVertical } from 'react-icons/rx'; import { EditIcon, Trash, } from '../../../../../../assets/js/back-end/constants/images'; import API from '../../../../../../assets/js/back-end/utils/api'; import { urls } from '../../constants/urls'; import { GroupDisplayStatus } from '../../enums/Enum'; import { GroupSchema } from '../../types/group'; interface GroupProps { group: GroupSchema; onExpandedGroupsChange?: (id: number | null) => void; } const Group: React.FC = ({ group, onExpandedGroupsChange }) => { const toast = useToast(); const queryClient = useQueryClient(); const groupAPI = new API(urls.groups); const [isOpen, setIsOpen] = useState(false); const onClose = () => setIsOpen(false); const onOpen = () => setIsOpen(true); const cancelRef = useRef(null); const handleDeleteClick = () => { onOpen(); }; const deleteGroup = useMutation({ mutationFn: () => groupAPI.delete(group.id, { force: true }), ...{ onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['groupsList'] }); toast({ title: __( 'Group deleted successfully.', 'learning-management-system', ), status: 'success', isClosable: true, }); onExpandedGroupsChange?.(null); }, onError: (error: any) => { toast({ title: __('An error occurred.', 'learning-management-system'), description: error.response?.data?.message || error.message, status: 'error', isClosable: true, }); }, }, }); const displayStatus = group.display_status ?? GroupDisplayStatus.Inactive; const isPending = displayStatus === GroupDisplayStatus.Pending; const isInactive = displayStatus === GroupDisplayStatus.Inactive; const statusReasonLabel: Record = { failed: __('Your last order failed.', 'learning-management-system'), cancelled: __( 'Your last order was cancelled.', 'learning-management-system', ), refunded: __('Your last order was refunded.', 'learning-management-system'), removed: __('Your last order was removed.', 'learning-management-system'), }; const inactiveTooltip = statusReasonLabel[group.status_reason ?? ''] ?? __('Payment incomplete.', 'learning-management-system'); return ( <> {__('Deleting Group', 'learning-management-system')} {__( 'Are you sure? You can’t undo this action afterwards.', 'learning-management-system', )} onExpandedGroupsChange?.(group.id)} color={'oxford-night'} fontWeight={'semibold'} > {group.title} {isPending && ( {__('Pending', 'learning-management-system')} )} {isInactive && ( {__('Inactive', 'learning-management-system')} )} {group?.emails?.length || 0} onExpandedGroupsChange?.(group.id)} variant="unstyled" cursor="pointer" icon={} aria-label={__('Edit', 'learning-management-system')} mt={1} /> } aria-label={__('Delete', 'learning-management-system')} mt={1} /> ); }; export default Group;