|
1 | 1 | import { useEffect, useState } from 'react'; |
2 | 2 |
|
3 | | -import client from '@/apis/client'; |
| 3 | +import { getReports } from '@/apis/admin'; |
4 | 4 | import { AlarmIcon } from '@/assets/icons'; |
5 | 5 |
|
6 | | -import DetailFrame from './components/DetailFrame'; |
7 | | -import ListItem from './components/ListItem'; |
| 6 | +import ListHeaderFrame from './components/ListHeaderFrame'; |
| 7 | +import ReportDetailModal from './components/ReportDetailModal'; |
| 8 | +import ReportHandlingModal from './components/ReportHandlingModal'; |
| 9 | +import ReportListItem from './components/ReportListItem'; |
8 | 10 | import WrapperFrame from './components/WrapperFrame'; |
| 11 | +import WrapperTitle from './components/WrapperTitle'; |
9 | 12 |
|
10 | 13 | export default function ReportManage() { |
11 | 14 | const [detailModalOpen, setDetailModalOpen] = useState<boolean>(false); |
12 | | - // { |
13 | | - // id: '001', |
14 | | - // reporterEmail: '[email protected]', |
15 | | - // targetEmail: '[email protected]', |
16 | | - // reportedAt: new Date(2025, 1, 20), |
17 | | - // letterId:2001, |
18 | | - // sharePostId:null, |
19 | | - // eventId:null, |
20 | | - // reportType:'LETTER', |
21 | | - // reason:"ABUSE", |
22 | | - // reasonDetail:null, |
23 | | - // status: 'PENDING', |
24 | | - // }, |
25 | | - const DUMMY = [ |
26 | | - { |
27 | | - id: '001', |
28 | | - reporterEmail: '[email protected]', |
29 | | - |
30 | | - reportedAt: new Date(2020, 12, 4), |
31 | | - reason: '욕설', |
32 | | - }, |
33 | | - { |
34 | | - id: '002', |
35 | | - reporterEmail: '[email protected]', |
36 | | - |
37 | | - reportedAt: new Date(2020, 12, 4), |
38 | | - reason: '욕설', |
39 | | - }, |
40 | | - { |
41 | | - id: '003', |
42 | | - reporterEmail: '[email protected]', |
43 | | - |
44 | | - reportedAt: new Date(2000, 6, 23), |
45 | | - reason: '욕설', |
46 | | - }, |
47 | | - { |
48 | | - id: '004', |
49 | | - reporterEmail: '[email protected]', |
50 | | - |
51 | | - reportedAt: new Date(1080, 11, 5), |
52 | | - reason: '욕설', |
53 | | - }, |
54 | | - { |
55 | | - id: '005', |
56 | | - reporterEmail: '[email protected]', |
57 | | - |
58 | | - reportedAt: new Date(2040, 1, 2), |
59 | | - reason: '욕설', |
60 | | - }, |
61 | | - { |
62 | | - id: '006', |
63 | | - reporterEmail: '[email protected]', |
64 | | - |
65 | | - reportedAt: new Date(2025, 1, 23), |
66 | | - reason: '욕설', |
67 | | - }, |
68 | | - ]; |
69 | | - const modalContents = [ |
70 | | - { |
71 | | - title: '신고 목록 삭제', |
72 | | - onClick: () => { |
73 | | - console.log('삭제'); |
74 | | - }, |
75 | | - }, |
76 | | - { |
77 | | - title: '작성자 활동 정지', |
78 | | - onClick: () => { |
79 | | - console.log('정지'); |
80 | | - }, |
81 | | - }, |
82 | | - ]; |
| 15 | + const [handleModalOpen, setHandleModalOpen] = useState<boolean>(false); |
| 16 | + const [reports, setReports] = useState<Report[]>([]); |
| 17 | + const [selectedReport, setSelectReport] = useState<Report | null>(null); |
| 18 | + const [selectedReportId, setSelectedReportId] = useState<number | null>(null); |
| 19 | + |
83 | 20 | // const [allReports, setAllReports] = useState(); |
84 | 21 | useEffect(() => { |
85 | | - const getAllReports = async () => { |
86 | | - const res = await client.get('/api/reports'); |
87 | | - console.log(res); |
88 | | - }; |
89 | | - getAllReports(); |
90 | | - const getReportDetail = async () => { |
91 | | - const res = await client.get('/api/reports/2'); |
92 | | - console.log(res); |
93 | | - }; |
94 | | - getReportDetail(); |
95 | | - const postReport = async () => { |
96 | | - const res = await client.post('/api/reports', { |
97 | | - letterId: 2010, |
98 | | - reportType: 'POST', |
99 | | - reason: 'HARASSMENT', |
100 | | - reasonDetail: '테스트용', |
101 | | - }); |
102 | | - console.log(res); |
103 | | - }; |
104 | | - postReport(); |
| 22 | + getReports(setReports, '?status=PENDING'); |
105 | 23 | }, []); |
106 | 24 | return ( |
107 | 25 | <WrapperFrame> |
108 | | - <span className="h3-sb flex items-center gap-4.5"> |
109 | | - <AlarmIcon className="h-9 w-9"></AlarmIcon> 신고 편지 목록 |
110 | | - </span> |
| 26 | + <WrapperTitle title="신고 편지 목록" Icon={AlarmIcon} /> |
| 27 | + |
111 | 28 | <section className="mt-5 flex flex-col"> |
112 | | - <div className="bg-primary-3 flex w-full border-b px-6 py-4"> |
113 | | - <div className="flex w-[80%] items-center"> |
114 | | - <span className="ml-4 flex basis-1/10 overflow-ellipsis">ID</span> |
115 | | - <span className="ml-4 flex basis-2/10">제보자 이메일</span> |
116 | | - <span className="ml-4 flex basis-2/10">작성자 이메일</span> |
117 | | - <span className="ml-4 flex basis-2/10">제보 일자</span> |
118 | | - <span className="ml-4 flex basis-3/10">제보 사유</span> |
119 | | - </div> |
120 | | - </div> |
121 | | - {DUMMY.map((data, idx) => ( |
122 | | - <ListItem |
123 | | - data={data} |
124 | | - modalContents={modalContents} |
| 29 | + <ListHeaderFrame> |
| 30 | + <span className="admin-list-set basis-1/10 overflow-ellipsis">ID</span> |
| 31 | + <span className="admin-list-set basis-2/10">제보자 이메일</span> |
| 32 | + <span className="admin-list-set basis-2/10">작성자 이메일</span> |
| 33 | + <span className="admin-list-set basis-2/10">제보 일자</span> |
| 34 | + <span className="admin-list-set basis-3/10">제보 사유</span> |
| 35 | + </ListHeaderFrame> |
| 36 | + {reports.map((data, idx) => ( |
| 37 | + <ReportListItem |
125 | 38 | key={idx} |
| 39 | + report={data} |
126 | 40 | setDetailModalOpen={setDetailModalOpen} |
| 41 | + setSelectedReportId={setSelectedReportId} |
| 42 | + setHandleModalOpen={setHandleModalOpen} |
| 43 | + setSelectReport={setSelectReport} |
127 | 44 | /> |
128 | 45 | ))} |
129 | 46 | </section> |
130 | 47 | {detailModalOpen && ( |
131 | | - <DetailFrame closeEvent={setDetailModalOpen}> |
132 | | - <> |
133 | | - <span className="h2-sb">제보 편지 상세 조회</span> |
134 | | - </> |
135 | | - </DetailFrame> |
| 48 | + <ReportDetailModal selectedReport={selectedReport} closeEvent={setDetailModalOpen} /> |
| 49 | + )} |
| 50 | + {handleModalOpen && ( |
| 51 | + <ReportHandlingModal |
| 52 | + setReports={setReports} |
| 53 | + setHandleModalOpen={setHandleModalOpen} |
| 54 | + selectedReportId={selectedReportId} |
| 55 | + /> |
136 | 56 | )} |
137 | 57 | </WrapperFrame> |
138 | 58 | ); |
|
0 commit comments