'use client'; import { 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 { SystemMenuNode } from '@/lib/domain/system-menu'; import { deleteSystemMenuAction } from '../_actions'; import styles from './menu-tree.module.scss'; interface MenuRowActionsProps { node: SystemMenuNode; onEdit: (node: SystemMenuNode) => void; onAddChild: (node: SystemMenuNode) => void; } export function MenuRowActions({ node, onEdit, onAddChild }: MenuRowActionsProps) { const { showAlert, hideAlert, showToast } = useFeedback(); const [isDeleting, startDeleting] = useTransition(); function runDelete() { hideAlert(); startDeleting(async () => { const result = await deleteSystemMenuAction(node.id); if (result.status === 'error') { showToast({ variant: 'danger', message: result.message }); return; } showToast({ variant: 'success', message: '메뉴를 삭제했습니다.' }); }); } function confirmDelete() { showAlert({ variant: 'danger', title: '메뉴를 삭제하시겠습니까?', message: node.children.length > 0 ? `"${node.name}" 아래에 하위 메뉴 ${node.children.length}개가 있습니다. 삭제 후에는 되돌릴 수 없습니다.` : `"${node.name}" 메뉴를 삭제합니다. 삭제 후에는 되돌릴 수 없습니다.`, actions: ( ), }); } return (
); }