import React, { useState, Fragment, useMemo } from 'react'; import Button from '../../components/common/button/Button'; import Loading from '../../components/common/Loading'; import { Title, SelectInput, TableStyle, TableWrapper, TableActionButton, TableDetailRow, TableDetailContainer, TableDetailFlex, TableDetailColumn, DetailTableInfo, } from '../../styles/Components'; import { modalTypes } from '../../assets/data'; import { useTranslation } from 'react-i18next'; import { FormLabel, FormRowGroup, MessageWrapper, } from '../../styles/ModuleComponents'; import { authType } from '../../assets/data'; import { useModal, withAuth } from '../../utils/hook'; import { DynamicModal, TopButton } from '../../components/common'; import { opInitDataType, opSuccessType } from '../../assets/data/options'; import { InitData } from '../../apis/Data'; import DataInitSearchBar, { useDataInitSearch } from '../../components/ServiceManage/searchBar/DataInitSearchBar'; const DataInitView = () => { const { t } = useTranslation(); const token = sessionStorage.getItem('token'); const [loading, setLoading] = useState(false); // 로딩 창 const { modalState, handleModalView, handleModalClose } = useModal({ cancel: 'hidden', registConfirm: 'hidden', registComplete: 'hidden' }); const [alertMsg, setAlertMsg] = useState(''); const [resultData, setResultData] = useState(initData); //데이터 정보 const [expandedRows, setExpandedRows] = useState({}); const { searchParams, loading: dataLoading, data: dataList, handleSearch, handleReset, updateSearchParams } = useDataInitSearch(token, 500, setAlertMsg); const toggleRowExpand = (index) => { setExpandedRows(prev => ({ ...prev, [index]: !prev[index] })); }; const tableHeaders = useMemo(() => { return [ { id: 'logTime', label: '일시', width: '100px' }, { id: 'key', label: '키', width: '150px' }, { id: 'dataType', label: '초기화대상', width: '80px' }, { id: 'tranId', label: '트랜잭션ID', width: '150px' }, { id: 'success', label: '성공여부', width: '60px' }, { id: 'message', label: '작업메시지', width: '300px' }, { id: 'details', label: '상세정보', width: '100px' }, // { id: 'recovery', label: '복구', width: '100px' } ]; }, []); const renderDetailData = (data) => { if (!data || typeof data !== 'object') return <>; return ( 정보 {Object.entries(data).map(([key, value]) => ( {key} {typeof value === 'object' && value !== null ? JSON.stringify(value) : String(value) } ))} ); }; const handleSubmit = async (type, param = null) => { switch (type) { case "submit": handleModalView('registConfirm'); break; case "registConfirm": setLoading(true); await InitData(token, resultData).then(data => { setLoading(false); handleModalClose('registConfirm'); if(data.result === "SUCCESS") { handleModalView('registComplete'); }else{ setAlertMsg(t('REGIST_FAIL')); } }).catch(reason => { setLoading(false); handleModalClose('registConfirm'); setAlertMsg(t('API_FAIL')); }); break; case "registComplete": dataReset(); handleModalClose('registComplete'); break; case "warning": setAlertMsg(''); break; } } const dataReset = () => { setResultData(initData); } return ( <> 데이터 초기화 초기화 대상 setResultData({ ...resultData, init_data_type: e.target.value })} width="150px"> {opInitDataType.map((data, index) => ( ))}