Open seunghee1108 opened 8 months ago
수정 본입니다 "use client";
import React, { useState, useEffect, useCallback } from "react";
interface User { name: string; username: string; cash: number; activate: number; checked: boolean; addDate: string; }
const pageSize = 10;
export default function ManagePage() {
const [users, setUsers] = useState<User[]>([]);
const [giveCash, setGiveCash] = useState
const fetchData = useCallback(
async (page: number) => {
try {
let apiUrl = /users?page=${page}&pageSize=${pageSize}
;
if (searchTerm) {
apiUrl += `&searchTerm=${searchTerm}`;
}
const response = await fetch(apiUrl);
const data = await response.json();
setUsers(data.users);
setPageInfo({
currentPage: data.pageInfo.currentPage,
pageSize: data.pageInfo.pageSize,
totalPages: data.pageInfo.totalPages,
});
} catch (error) {
console.error("사용자 정보를 가져오는데 실패했습니다.", error);
}
},
[searchTerm]
);
const handlePageChange = (newPage: number) => { setPageInfo({ ...pageInfo, currentPage: newPage, }); };
const handleCheckboxChange = (username: string) => { setSelectedUsers((prevSelected) => { const isSelected = prevSelected.includes(username); let updatedSelected: string[];
if (isSelected) {
updatedSelected = prevSelected.filter((name) => name !== username);
} else {
updatedSelected = [...prevSelected, username];
}
return updatedSelected;
});
};
const handleToggleActivation = async (username: string, currentActivate: number) => {
try {
// 서버에 활성화/비활성화 토글 요청 보내기
const response = await fetch(/users/${username}/toggle-activate
, {
method: "PUT",
});
if (!response.ok) {
throw new Error("사용자 활성화/비활성화를 토글하는데 실패했습니다.");
}
// 성공적으로 토글된 경우, 사용자 목록 다시 불러오기 fetchData(pageInfo.currentPage); } catch (error) { console.error("사용자 활성화/비활성화 토글 중 오류 발생:", error); } };
const toggleCheckbox = (index: number) => { const updatedUsers = [...users]; updatedUsers[index].checked = !updatedUsers[index].checked; setUsers(updatedUsers); };
const giveCashToUsers = () => { const checkedUsers = users.filter((user) => user.checked); // 체크된 사용자 필터링 if (checkedUsers.length === 0) { alert("캐시를 지급할 사용자를 선택하세요."); return; } const usernamesToGiveCash = checkedUsers.map((user) => user.username);
fetch("/give-cash", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ usernames: usernamesToGiveCash, giveCash }),
})
.then((response) => response.json())
.then((data) => {
setUsers(data.updatedUsers);
setGiveCash("");
alert("지급이 완료되었습니다");
})
.catch((error) => {
console.error("Error granting cash:", error);
});
};
useEffect(() => { setSearchTerm(""); }, []);
useEffect(() => { fetchData(pageInfo.currentPage); }, [fetchData, pageInfo.currentPage]);
return (
선택 | 이름 | 아이디 | 캐시 | 가입일 | 활성화 |
---|---|---|---|---|---|
toggleCheckbox(index)} /> | {user.name} | {user.username} | {user.cash} | {new Date(user.addDate) .toISOString() .replace("T", " ") .substr(0, 19)} |
); }
admin/app/manage/page.tsx