import styled from 'styled-components'; import React, { useState, Fragment } from 'react'; import CheckBox from '../../components/common/input/CheckBox'; import { LogHistory, MailDelete, MailDetailView } from '../../apis'; import { Title, FormWrapper, TableStyle, MailTitle, TableWrapper } from '../../styles/Components'; import Button from '../../components/common/button/Button'; import 'react-datepicker/dist/react-datepicker.css'; import { useNavigate } from 'react-router-dom'; import MailDetailModal from '../../components/modal/MailDetailModal'; import Pagination from '../../components/common/Pagination/Pagination'; import { authList } from '../../store/authList'; import { useRecoilValue } from 'recoil'; import { authType, mailReceiveType, mailSendStatus, mailSendType, mailType, } from '../../assets/data'; import ViewTableInfo from '../../components/common/Table/ViewTableInfo'; import { convertKTC } from '../../utils'; import { StatusLabel, StatusWapper } from '../../styles/ModuleComponents'; import { CommonSearchBar, useCommonSearch } from '../../components/ServiceManage'; import { INITIAL_PAGE_LIMIT } from '../../assets/data/adminConstants'; import { alertTypes } from '../../assets/data/types'; import { useModal, useTable, withAuth } from '../../hooks/hook'; import { useAlert } from '../../context/AlertProvider'; import { useLoading } from '../../context/LoadingProvider'; import useCommonSearchOld from '../../hooks/useCommonSearchOld'; import LogDetailModal from '../../components/common/modal/LogDetailModal'; import { historyTables } from '../../assets/data/data'; const Mail = () => { const token = sessionStorage.getItem('token'); const userInfo = useRecoilValue(authList); const {showModal, showToast} = useAlert(); const {withLoading} = useLoading(); const navigate = useNavigate(); const [detailData, setDetailData] = useState(''); const [historyData, setHistoryData] = useState({}); const { modalState, handleModalView, handleModalClose } = useModal({ detail: 'hidden', history: 'hidden' }); const { config, searchParams, data: dataList, handleSearch, handleReset, handlePageChange, handlePageSizeChange, handleOrderByChange, updateSearchParams, configLoaded } = useCommonSearchOld("mailSearch"); const { selectedRows, handleSelectRow, isRowSelected } = useTable(dataList?.list || [], {mode: 'single'}); const handleModalSubmit = async (type, param = null) => { switch (type) { case "history": const params = {}; params.db_type = "MYSQL" params.sql_id = param.id; params.table_name = historyTables.mail await LogHistory(token, params).then(data => { setHistoryData(data); handleModalView('history'); }); break; case "detail": await MailDetailView(token, param).then(data => { setDetailData(data); handleModalView('detail'); }); break; case "delete": if(selectedRows.length === 0) return; showModal('MAIL_SELECT_DELETE', { type: alertTypes.confirm, onConfirm: () => handleModalSubmit('deleteConfirm') }); break; case "deleteConfirm": let list = []; let isChecked = false; selectedRows.map(data => { const row = dataList.list.find(row => row.id === Number(data.id)); if(row.send_status === "FINISH" || row.send_status === "RUNNING" || row.send_status === "FAIL") isChecked = true; list.push({ id: data.id, }); }); if(isChecked) { showToast('MAIL_SEND_STATUS_WARNING', {type: alertTypes.warning}); return; } withLoading( async () => { return await MailDelete(token, list); }).then(data => { showToast('DEL_COMPLETE', {type: alertTypes.success}); }).catch(reason => { showToast('API_FAIL', {type: alertTypes.error}); }).finally(() => { handleSearch(updateSearchParams); }); break; } } return ( <>