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
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 { useFeedback } from '@/app/_hooks/use-feedback';
import type { PointStandard } from '@/lib/domain/point-standard';
import type { CommonCode } from '@/lib/domain/common-code';
import { deletePointStandardAction } from '../_actions';
import { PointStandardFormModal } from './point-standard-form-modal';
interface PointStandardRowActionsProps {
standard: PointStandard;
eventCodes: readonly CommonCode[];
}
export function PointStandardRowActions({
standard,
eventCodes,
}: PointStandardRowActionsProps) {
const { showAlert, hideAlert, showToast } = useFeedback();
const [isEditOpen, setIsEditOpen] = useState(false);
const [isDeleting, startDeleting] = useTransition();
function runDelete() {
hideAlert();
startDeleting(async () => {
const result = await deletePointStandardAction(standard.id);
if (result.status === 'error') {
showToast({ variant: 'danger', message: result.message });
return;
}
showToast({ variant: 'success', message: '포인트 기준을 삭제했습니다.' });
});
}
function confirmDelete() {
showAlert({
variant: 'danger',
title: '포인트 기준을 삭제하시겠습니까?',
message: `"${standard.eventCode}" 기준을 삭제합니다. 삭제 후에는 되돌릴 수 없습니다.`,
actions: (
<FoxButtonGroup size="md">
<FoxButton type="default" size="md" label="취소" onAction={hideAlert} />
<FoxButton type="primary" size="md" label="삭제" onAction={runDelete} />
</FoxButtonGroup>
),
});
}
return (
<div className="flex items-center gap-1">
<FoxIconButton
type="default"
size="sm"
icon={<i className="fox-ico fox-ico-PencilSimple" aria-hidden="true" />}
label="수정"
onAction={() => setIsEditOpen(true)}
/>
<FoxIconButton
type="default"
size="sm"
icon={<i className="fox-ico fox-ico-Trash" aria-hidden="true" />}
label={isDeleting ? '삭제 중' : '삭제'}
disabled={isDeleting}
onAction={confirmDelete}
/>
{isEditOpen && (
<PointStandardFormModal
standard={standard}
eventCodes={eventCodes}
onClose={() => setIsEditOpen(false)}
/>
)}
</div>
);
}