'use client'; import { useActionState, useEffect, useRef, useState } from 'react'; import { FoxButton } from '@fox/core/components/fox-button'; import { FoxFormLabel } from '@fox/core/components/fox-form-label'; import { FoxHelperText } from '@fox/core/components/fox-helper-text'; import { FoxInput } from '@fox/core/components/fox-input'; import { FoxModal } from '@fox/core/components/fox-modal'; import { FoxRadio } from '@fox/core/components/fox-radio'; import { FoxRadioGroup } from '@fox/core/components/fox-radio-group'; import { FoxTextArea } from '@fox/core/components/fox-text-area'; import { submitFormAction } from '@/app/_hooks/submit-form-action'; import { useFeedback } from '@/app/_hooks/use-feedback'; import { DESCRIPTION_MAX_LENGTH, INITIAL_POINT_STANDARD_FORM_STATE, } from '@/lib/domain/point-standard-form'; import type { PointStandard } from '@/lib/domain/point-standard'; import { updatePointStandardAction } from '../_actions'; import styles from './point-standard-form.module.scss'; interface PointStandardFormModalProps { standard: PointStandard; onClose: () => void; } export function PointStandardFormModal({ standard, onClose, }: PointStandardFormModalProps) { const { showToast } = useFeedback(); const formRef = useRef(null); const [state, formAction, isPending] = useActionState( updatePointStandardAction, INITIAL_POINT_STANDARD_FORM_STATE ); const [isDuplicable, setIsDuplicable] = useState(standard.isDuplicable); const [isActive, setIsActive] = useState(standard.isActive); useEffect(() => { if (state.status === 'success') { showToast({ variant: 'success', message: '포인트 기준을 수정했습니다.' }); onClose(); } }, [state, showToast, onClose]); const errors = state.status === 'error' ? (state.errors ?? {}) : {}; return ( formRef.current?.requestSubmit()} /> } >
submitFormAction(event, formAction)} className={styles.fields} >

* 는 필수 항목입니다.

{/* 화면에서는 읽기 전용이지만 백엔드 UPDATE가 EVENT_CD를 덮어써서 그대로 돌려보낸다. */}
{/* 기획 ① 이벤트행은 수정불가(Read Only). 값은 hidden id가 갖는다. */}
포인트
포인트
{errors.point && }
제한포인트
'0' 일경우 일 누적 포인트에 대한 제한이 없습니다.
{errors.limitPoint && ( )}
중복 여부 setIsDuplicable(true)} /> setIsDuplicable(false)} />
사용여부 setIsActive(true)} /> setIsActive(false)} />
{state.status === 'error' && state.message && ( )}
); }