import React, { useEffect, useState } from 'react'; import { useClient } from 'urql'; import { Box, Button, Center, Flex, IconButton, Menu, MenuButton, MenuList, NumberDecrementStepper, NumberIncrementStepper, NumberInput, NumberInputField, NumberInputStepper, Select, Spinner, Table, TableCaption, Tbody, Td, Text, Th, Thead, Tooltip, Tr, } from '@chakra-ui/react'; import { FaAngleDoubleLeft, FaAngleDoubleRight, FaAngleDown, FaAngleLeft, FaAngleRight, FaExclamationCircle, } from 'react-icons/fa'; import UpdateEmailTemplateModal from '../components/UpdateEmailTemplateModal'; import { pageLimits, UpdateModalViews, EmailTemplateInputDataFields, } from '../constants'; import { EmailTemplatesQuery, WebhooksDataQuery } from '../graphql/queries'; import dayjs from 'dayjs'; import DeleteEmailTemplateModal from '../components/DeleteEmailTemplateModal'; interface paginationPropTypes { limit: number; page: number; offset: number; total: number; maxPages: number; } interface EmailTemplateDataType { [EmailTemplateInputDataFields.ID]: string; [EmailTemplateInputDataFields.EVENT_NAME]: string; [EmailTemplateInputDataFields.SUBJECT]: string; [EmailTemplateInputDataFields.CREATED_AT]: number; [EmailTemplateInputDataFields.TEMPLATE]: string; } const EmailTemplates = () => { const client = useClient(); const [loading, setLoading] = useState(false); const [emailTemplatesData, setEmailTemplatesData] = useState< EmailTemplateDataType[] >([]); const [paginationProps, setPaginationProps] = useState({ limit: 5, page: 1, offset: 0, total: 0, maxPages: 1, }); const getMaxPages = (pagination: paginationPropTypes) => { const { limit, total } = pagination; if (total > 1) { return total % limit === 0 ? total / limit : parseInt(`${total / limit}`) + 1; } else return 1; }; const fetchEmailTemplatesData = async () => { setLoading(true); const res = await client .query(EmailTemplatesQuery, { params: { pagination: { limit: paginationProps.limit, page: paginationProps.page, }, }, }) .toPromise(); if (res.data?._email_templates) { const { pagination, EmailTemplates: emailTemplates } = res.data?._email_templates; const maxPages = getMaxPages(pagination); if (emailTemplates?.length) { setEmailTemplatesData(emailTemplates); setPaginationProps({ ...paginationProps, ...pagination, maxPages }); } else { if (paginationProps.page !== 1) { setPaginationProps({ ...paginationProps, ...pagination, maxPages, page: 1, }); } } } setLoading(false); }; const paginationHandler = (value: Record) => { setPaginationProps({ ...paginationProps, ...value }); }; useEffect(() => { fetchEmailTemplatesData(); }, [paginationProps.page, paginationProps.limit]); return ( Email Templates {!loading ? ( emailTemplatesData.length ? ( {emailTemplatesData.map((templateData: EmailTemplateDataType) => ( ))} {(paginationProps.maxPages > 1 || paginationProps.total >= 5) && ( paginationHandler({ page: 1, }) } isDisabled={paginationProps.page <= 1} mr={4} icon={} /> paginationHandler({ page: paginationProps.page - 1, }) } isDisabled={paginationProps.page <= 1} icon={} /> Page{' '} {paginationProps.page} {' '} of{' '} {paginationProps.maxPages} Go to page:{' '} paginationHandler({ page: parseInt(value), }) } value={paginationProps.page} > paginationHandler({ page: paginationProps.page + 1, }) } isDisabled={ paginationProps.page >= paginationProps.maxPages } icon={} /> paginationHandler({ page: paginationProps.maxPages, }) } isDisabled={ paginationProps.page >= paginationProps.maxPages } ml={4} icon={} /> )}
Event Name Subject Created At Actions
{templateData[EmailTemplateInputDataFields.EVENT_NAME]} {templateData[EmailTemplateInputDataFields.SUBJECT]} {dayjs(templateData.created_at * 1000).format( 'MMM DD, YYYY' )} Menu
) : (
No Data
) ) : (
)}
); }; export default EmailTemplates;