사용자 삭제 기능 추가
- 헤더 오른쪽 버튼 시스템 구현 - ContextType에 setOnRightClick 추가 - useSetOnRightClick 훅 추가 - HeaderNavigationProps에 onRightClick 추가 - HeaderType.LeftArrow에 오른쪽 삭제 버튼 렌더링 - 사용자 삭제 API 및 타입 추가 - UserDeleteParams, UserDeleteResponse 인터페이스 추가 - use-user-delete-mutation 훅 생성 - API_URL_USER.deleteUser() 엔드포인트 사용 - 사용자 설정 페이지에서 삭제 기능 구현 - 현재 로그인한 사용자가 아닐 경우에만 삭제 버튼 표시 - showConfirm 다이얼로그로 삭제 확인 - 삭제 성공 시 토스트 메시지 표시 및 목록 페이지로 이동 - 목록 페이지에서 refresh 상태로 자동 갱신 - showConfirm 위젯 추가 - Promise 기반의 확인 다이얼로그 - 취소/확인 버튼 지원 - 다국어 지원 (common.cancel, common.confirm) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
65
src/entities/user/api/use-user-delete-mutation.ts
Normal file
65
src/entities/user/api/use-user-delete-mutation.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
import axios from 'axios';
|
||||
import { API_URL_USER } from '@/shared/api/api-url-user';
|
||||
import { NiceAxiosError } from '@/shared/@types/error';
|
||||
import {
|
||||
UserDeleteParams,
|
||||
UserDeleteResponse
|
||||
} from '../model/types';
|
||||
|
||||
interface UserDeleteMutationResponse {
|
||||
status: boolean;
|
||||
data?: UserDeleteResponse;
|
||||
error?: {
|
||||
root: string;
|
||||
errKey: string;
|
||||
code: string;
|
||||
message: string;
|
||||
timestamp: string;
|
||||
details: Record<string, string>;
|
||||
};
|
||||
}
|
||||
|
||||
import {
|
||||
useMutation,
|
||||
UseMutationOptions
|
||||
} from '@tanstack/react-query';
|
||||
import { getHeaderUserAgent } from '@/shared/constants/url';
|
||||
|
||||
export const userDelete = async (params: UserDeleteParams): Promise<UserDeleteMutationResponse> => {
|
||||
let headerOptions = {
|
||||
menuId: 45,
|
||||
apiType: 'DELETE'
|
||||
};
|
||||
let options = {
|
||||
headers: {
|
||||
'X-User-Agent': getHeaderUserAgent(headerOptions)
|
||||
}
|
||||
};
|
||||
try {
|
||||
const response = await axios.post<UserDeleteResponse>(API_URL_USER.deleteUser(), params, options);
|
||||
return { status: true, data: response.data };
|
||||
} catch (error: any) {
|
||||
return {
|
||||
status: false,
|
||||
error: {
|
||||
root: 'USER_DELETE',
|
||||
errKey: error.response?.data?.errKey || 'UNKNOWN_ERROR',
|
||||
code: error.response?.status?.toString() || '500',
|
||||
message: error.response?.data?.message || error.message || 'Unknown error',
|
||||
timestamp: new Date().toISOString(),
|
||||
details: error.response?.data?.details || {}
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
export const useUserDeleteMutation = (options?: UseMutationOptions<UserDeleteMutationResponse, NiceAxiosError, UserDeleteParams>) => {
|
||||
const mutation = useMutation<UserDeleteMutationResponse, NiceAxiosError, UserDeleteParams>({
|
||||
...options,
|
||||
mutationFn: (params: UserDeleteParams) => userDelete(params),
|
||||
});
|
||||
|
||||
return {
|
||||
...mutation,
|
||||
};
|
||||
};
|
||||
@@ -219,6 +219,16 @@ export interface UserCreateResponse {
|
||||
user: UserData;
|
||||
};
|
||||
|
||||
export interface UserDeleteParams {
|
||||
mid: string;
|
||||
usrid: string;
|
||||
};
|
||||
|
||||
export interface UserDeleteResponse {
|
||||
status: boolean;
|
||||
error?: ErrorResponse;
|
||||
};
|
||||
|
||||
export interface AuthMethodItem {
|
||||
usrid: string;
|
||||
systemAdminClassId: string;
|
||||
|
||||
Reference in New Issue
Block a user