File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
'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 { FoxPencilSimpleIcon, FoxTrashIcon } from '@fox/core/icons';
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: (
<FoxButtonGroup size="md">
<FoxButton type="default" size="md" label="취소" onAction={hideAlert} />
<FoxButton type="error" size="md" label="삭제" onAction={runDelete} />
</FoxButtonGroup>
),
});
}
return (
<FoxButtonGroup size="sm" align="center">
<FoxIconButton
type="default"
size="sm"
icon={<FoxPencilSimpleIcon />}
label="수정"
onAction={() => setIsEditOpen(true)}
/>
<span className={styles.hint} title={isSelf ? SELF_DELETE_HINT : undefined}>
<FoxIconButton
type="default"
size="sm"
icon={<FoxTrashIcon />}
label={isDeleting ? '삭제 중' : '삭제'}
disabled={isSelf || isDeleting}
onAction={confirmDelete}
/>
</span>
{isEditOpen && (
<AdminMemberEditModal
member={member}
onClose={() => setIsEditOpen(false)}
/>
)}
</FoxButtonGroup>
);
}