gitscope
← marzneshin / v0.1.0 / app/dashboard/src/components/delete-modal/index.tsx
https://dev.kronoz.win/r/marzneshin.git
app/dashboard/src/components/delete-modal/index.tsx · TypeScript
Blame Raw
 1
 2
 3import {
 4  Button,
 5  Modal,
 6  ModalBody,
 7  ModalCloseButton,
 8  ModalContent,
 9  ModalFooter,
10  ModalHeader,
11  ModalOverlay,
12  Spinner,
13  Text,
14} from '@chakra-ui/react';
15import { FC } from 'react';
16import { Trans, useTranslation } from 'react-i18next';
17import { DeleteIcon } from 'components/dialog';
18import { Icon } from 'components/icon';
19
20type DeleteModalProps = {
21  onDelete: () => void,
22  deleteObjectPromptT: string,
23  deleteObjectTitleT: string,
24  deletingObjectName?: string,
25  isOpen: boolean,
26  onClose: () => void,
27  loading: boolean,
28}
29
30export const DeleteModal: FC<DeleteModalProps> = ({
31  onDelete,
32  isOpen,
33  onClose,
34  deletingObjectName,
35  loading,
36  deleteObjectTitleT,
37  deleteObjectPromptT
38}) => {
39  const { t } = useTranslation();
40
41  return (
42    <Modal isCentered isOpen={isOpen} onClose={onClose} size="sm">
43      <ModalOverlay bg="blackAlpha.300" backdropFilter="blur(10px)" />
44      <ModalContent mx="3">
45        <ModalHeader pt={6}>
46          <Icon color="red">
47            <DeleteIcon />
48          </Icon>
49        </ModalHeader>
50        <ModalCloseButton mt={3} />
51        <ModalBody>
52          <Text fontWeight="semibold" fontSize="lg">
53            {t(deleteObjectTitleT)}
54          </Text>
55          {deletingObjectName && (
56            <Text
57              mt={1}
58              fontSize="sm"
59              _dark={{ color: 'gray.400' }}
60              color="gray.600"
61            >
62              <Trans components={{ b: <b /> }}>
63                {t(deleteObjectPromptT, { name: deletingObjectName })}
64              </Trans>
65            </Text>
66          )}
67        </ModalBody>
68        <ModalFooter display="flex">
69          <Button size="sm" onClick={onClose} mr={3} w="full" variant="outline">
70            {t('cancel')}
71          </Button>
72          <Button
73            size="sm"
74            w="full"
75            colorScheme="red"
76            onClick={() => onDelete()}
77            leftIcon={loading ? <Spinner size="xs" /> : undefined}
78          >
79            {t('delete')}
80          </Button>
81        </ModalFooter>
82      </ModalContent>
83    </Modal>
84  );
85};