import { AlertDialog, AlertDialogBody, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, Button, ButtonGroup, Icon, IconButton, Link, Menu, MenuButton, MenuItem, MenuList, Stack, Text, useDisclosure, useToast, } from '@chakra-ui/react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { __ } from '@wordpress/i18n'; import React, { useRef } from 'react'; import { BiCalendar, BiDotsVerticalRounded, BiShow } from 'react-icons/bi'; import { Link as RouterLink } from 'react-router-dom'; import { Td, Tr } from 'react-super-responsive-table'; import { CustomIcon } from '../../../../../../../assets/js/back-end/components/common/CustomIcon'; import { EditIcon, Trash, } from '../../../../../../../assets/js/back-end/constants/images'; import API from '../../../../../../../assets/js/back-end/utils/api'; import { getWordpressLocalTime } from '../../../../../../../assets/js/back-end/utils/utils'; import { urls } from '../../../constants/urls'; import { GroupStatus } from '../../../enums/Enum'; import { groupsBackendRoutes } from '../../../routes/routes'; import { GroupSchema } from '../../../types/group'; interface Props { data: GroupSchema; isLoading?: boolean; bulkIds: string[]; setBulkIds: (value: string[]) => void; } const GroupRow: React.FC = (props) => { const { data, isLoading, bulkIds, setBulkIds } = props; const { status } = data; const createdOnDate = data.date_created?.split(' ')[0]; const toast = useToast(); const cancelRef = useRef(); const queryClient = useQueryClient(); const groupsAPI = new API(urls.groups); const { onClose, onOpen, isOpen } = useDisclosure(); const restoreGroup = useMutation({ mutationFn: (id: number) => groupsAPI.restore(id), ...{ onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['groupsList'] }); toast({ title: __('Group Restored', 'learning-management-system'), isClosable: true, status: 'success', }); }, onError: (error: any) => { const message: any = error?.message ? error?.message : error?.data?.message; toast({ title: __('Failed to restore group.', 'learning-management-system'), description: message ? `${message}` : undefined, status: 'error', isClosable: true, }); }, }, }); const trashGroup = useMutation({ mutationFn: (id: number) => groupsAPI.delete(id), ...{ onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['groupsList'] }); toast({ title: __('Group moved to trash', 'learning-management-system'), isClosable: true, status: 'success', }); }, onError: (error: any) => { const message: any = error?.message ? error?.message : error?.data?.message; toast({ title: __( 'Failed to move a group to trash.', 'learning-management-system', ), description: message ? `${message}` : undefined, status: 'error', isClosable: true, }); }, }, }); const deleteGroup = useMutation({ mutationFn: (id: number) => groupsAPI.delete(id, { force: true }), ...{ onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['groupsList'] }); onClose(); }, onError: (error: any) => { const message: any = error?.message ? error?.message : error?.data?.message; toast({ title: __('Failed to delete group.', 'learning-management-system'), description: message ? `${message}` : undefined, status: 'error', isClosable: true, }); }, }, }); const onTrashPress = () => { trashGroup.mutate(data.id); }; const onDeletePress = () => { onOpen(); }; const onDeleteConfirm = () => { deleteGroup.mutate(data.id); }; const onRestorePress = () => { restoreGroup.mutate(data.id); }; return ( <> {status === 'trash' ? ( {data.title} ) : ( {data.title} )} {getWordpressLocalTime(createdOnDate, 'Y-m-d, h:i A')} {status === GroupStatus.Trash ? ( } variant="outline" rounded="sm" fontSize="large" size="xs" /> onRestorePress()} icon={} _hover={{ color: 'primary.500' }} > {__('Restore', 'learning-management-system')} onDeletePress()} icon={} _hover={{ color: 'red.500' }} > {__('Delete Permanently', 'learning-management-system')} ) : ( } variant="outline" rounded="sm" fontSize="large" size="xs" /> onTrashPress()} icon={} _hover={{ color: 'red.500' }} > {__('Trash', 'learning-management-system')} )} {__('Deleting Group', 'learning-management-system')} {data.title} {__( 'Are you sure? You can’t restore after deleting.', 'learning-management-system', )} ); }; export default GroupRow;