From a32954ef8f8f15671aff1d6996bcb806f2e37dd9 Mon Sep 17 00:00:00 2001 From: dahhyeon Date: Mon, 10 Feb 2025 22:46:47 +0900 Subject: [PATCH] =?UTF-8?q?feat:#345=20confirm=EC=B0=BD=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=ED=9B=85=ED=95=A8=EC=88=98=EB=A1=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 3 +- src/api/{ => admin/member}/getAdminUser.tsx | 0 .../member}/patchUserManagement.tsx | 1 - src/components/Admin/ButtonGroup.tsx | 3 +- .../Admin/Modal/MemberDetailModal.tsx | 3 -- src/components/Admin/SelectedTopBar.tsx | 2 +- .../Admin/context/MemberContext.tsx | 3 +- src/hooks/useAdminActions.ts | 52 +++++++++++++++++++ 8 files changed, 57 insertions(+), 10 deletions(-) rename src/api/{ => admin/member}/getAdminUser.tsx (100%) rename src/api/{ => admin/member}/patchUserManagement.tsx (95%) create mode 100644 src/hooks/useAdminActions.ts diff --git a/package-lock.json b/package-lock.json index 57cf95d3..31981b83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3717,8 +3717,7 @@ "node_modules/dayjs": { "version": "1.11.13", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", - "license": "MIT" + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" }, "node_modules/debug": { "version": "4.4.0", diff --git a/src/api/getAdminUser.tsx b/src/api/admin/member/getAdminUser.tsx similarity index 100% rename from src/api/getAdminUser.tsx rename to src/api/admin/member/getAdminUser.tsx diff --git a/src/api/patchUserManagement.tsx b/src/api/admin/member/patchUserManagement.tsx similarity index 95% rename from src/api/patchUserManagement.tsx rename to src/api/admin/member/patchUserManagement.tsx index 7b7d43f4..e6c86405 100644 --- a/src/api/patchUserManagement.tsx +++ b/src/api/admin/member/patchUserManagement.tsx @@ -13,7 +13,6 @@ const resetPwdApi = async (userId: number | number[]) => { try { const queryParam = userIds.map((id) => `userId=${id}`).join('&'); const url = `${BASE_URL}${PATH}/reset?${queryParam}`; - console.log(`API 요청 URL: ${url}`); const response = await axios.patch( url, {}, diff --git a/src/components/Admin/ButtonGroup.tsx b/src/components/Admin/ButtonGroup.tsx index b0893bb1..8da6088b 100644 --- a/src/components/Admin/ButtonGroup.tsx +++ b/src/components/Admin/ButtonGroup.tsx @@ -21,7 +21,6 @@ const ButtonGroupContainer = styled.div<{ hasEndGap?: boolean }>` overflow-x: auto; white-space: nowrap; padding-left: 10px; - max-width: 100%; &::-webkit-scrollbar { height: 3px; } @@ -72,7 +71,7 @@ const ButtonGroup: React.FC = ({ color="#fff" textcolor="#000" width="auto" - height="40px" + height="45px" borderRadius="4px" onClick={onClick} disabled={disabled} diff --git a/src/components/Admin/Modal/MemberDetailModal.tsx b/src/components/Admin/Modal/MemberDetailModal.tsx index 651ecab7..a0909bd9 100644 --- a/src/components/Admin/Modal/MemberDetailModal.tsx +++ b/src/components/Admin/Modal/MemberDetailModal.tsx @@ -37,20 +37,17 @@ const ModalContent = styled.div` background-color: white; border-radius: 4px; width: 100%; - /* max-width: 600px; */ box-shadow: 0px 3px 8px 0px rgba(133, 141, 138, 0.2); display: flex; flex-direction: column; gap: 20px; padding: 10px; flex: 1.5; - /* margin-top: 20%; */ `; const ActivityContent = styled(ModalContent)` flex: 1; margin-bottom: 6%; - /* max-width: 400px; */ `; const FlexWrapper = styled.div` diff --git a/src/components/Admin/SelectedTopBar.tsx b/src/components/Admin/SelectedTopBar.tsx index 14b2c73f..cb0361b4 100644 --- a/src/components/Admin/SelectedTopBar.tsx +++ b/src/components/Admin/SelectedTopBar.tsx @@ -71,7 +71,7 @@ const SelectedTopBar: React.FC = () => { { label: '비밀번호 초기화', onClick: () => - alert( + window.confirm( `${selectedMembers.length}명의 멤버 비밀번호를 초기화하시겠습니까?`, ), disabled: false, diff --git a/src/components/Admin/context/MemberContext.tsx b/src/components/Admin/context/MemberContext.tsx index f0c094c0..ba32c4d0 100644 --- a/src/components/Admin/context/MemberContext.tsx +++ b/src/components/Admin/context/MemberContext.tsx @@ -66,7 +66,8 @@ export const MemberProvider: React.FC<{ children: React.ReactNode }> = ({ console.log('API응답: ', response.data); const mappedMembers = fetchedMembers.map((user: any) => ({ ...user, - cardinals: user.cardinals.length > 0 ? user.cardinals.join('.') : '', + cardinals: + user.cardinals.length > 0 ? user.cardinals.reverse().join('.') : '', status: statusMapping[user.status] || '추방', createdAt: new Date(user.createdAt) .toISOString() diff --git a/src/hooks/useAdminActions.ts b/src/hooks/useAdminActions.ts new file mode 100644 index 00000000..e664006c --- /dev/null +++ b/src/hooks/useAdminActions.ts @@ -0,0 +1,52 @@ +import resetPwdApi from '@/api/admin/member/patchUserManagement'; + +type ActionType = + | '가입 승인' + | '관리자로 변경' + | '사용자로 변경' + | '비밀번호 초기화' + | '유저 추방'; + +const getConfirmMessage = (action: ActionType, count: number) => { + switch (action) { + case '가입 승인': + return `${count}명의 멤버 가입을 승인하시겠습니까?`; + case '관리자로 변경': + return `${count}명의 멤버를 관리자로 변경하시겠습니까?`; + case '사용자로 변경': + return `${count}명의 멤버를 사용자로 변경하시겠습니까?`; + case '비밀번호 초기화': + return `${count}명의 멤버 비밀번호를 초기화하시겠습니까?`; + case '유저 추방': + return `${count}명의 멤버를 추방하시겠습니까?`; + default: + return `${count}명의 멤버에 대해 ${action}을 진행하시겠습니까?`; + } +}; + +const useAdminActions = () => { + const handleAction = async (action: ActionType, targetIds: number[]) => { + const count = targetIds.length; + const confirmMessage = getConfirmMessage(action, count); + + if (!window.confirm(confirmMessage)) return; + + try { + console.log(`${action} API 요청 시작...`, targetIds); + + if (action === '비밀번호 초기화') { + const response = await resetPwdApi(targetIds); + console.log('비밀번호 초기화 API 응답:', response); + alert('비밀번호 초기화가 완료되었습니다.'); + } + + // 다른 API 요청 로직 추가 가능 + } catch (error: any) { + console.error('오류 발생:', error.message); + } + }; + + return { handleAction }; +}; + +export default useAdminActions;