'use client';
import { useState, useTransition } from 'react';
import { FoxButton } from '@fox/core/components/fox-button';
import { FoxButtonGroup } from '@fox/core/components/fox-button-group';
import { FoxIconButton } from '@fox/core/components/fox-icon-button';
import { useFeedback } from '@/app/_hooks/use-feedback';
import type { AdminMember } from '@/lib/domain/admin-member';
import styles from './admin-member-row-actions.module.scss';
import { deleteAdminMemberAction } from '../_actions';
import { AdminMemberEditModal } from './admin-member-edit-modal';
interface AdminMemberRowActionsProps {
member: AdminMember;
isSelf: boolean;
}
const SELF_DELETE_HINT = '현재 로그인한 본인 계정은 삭제할 수 없습니다.';
export function AdminMemberRowActions({
member,
isSelf,
}: AdminMemberRowActionsProps) {
const { showAlert, hideAlert, showToast } = useFeedback();
const [isEditOpen, setIsEditOpen] = useState(false);
const [isDeleting, startDeleting] = useTransition();
function runDelete() {
hideAlert();
startDeleting(async () => {
const result = await deleteAdminMemberAction(member.id);
if (result.status === 'error') {
showToast({
variant: 'danger',
message: result.message ?? '삭제하지 못했습니다.',
});
return;
}
showToast({ variant: 'success', message: '관리자를 삭제했습니다.' });
});
}
function confirmDelete() {
showAlert({
variant: 'danger',
title: '관리자를 삭제하시겠습니까?',
message: `${member.name}(${member.loginId}) 계정을 삭제합니다. 삭제 후에는 되돌릴 수 없습니다.`,
actions: (
),
});
}
return (
}
label="수정"
onAction={() => setIsEditOpen(true)}
/>
}
label={isDeleting ? '삭제 중' : '삭제'}
disabled={isSelf || isDeleting}
onAction={confirmDelete}
/>
{isEditOpen && (
setIsEditOpen(false)}
/>
)}
);
}