'use client'; import { useActionState } from 'react'; import { FoxFileUpload } from '@fox/core/components/fox-file-upload'; import { FoxHelperText } from '@fox/core/components/fox-helper-text'; import { FoxInput } from '@fox/core/components/fox-input'; import { FoxPageHeader } from '@fox/core/components/fox-page-header'; import { FoxTextArea } from '@fox/core/components/fox-text-area'; import { submitFormAction } from '@/app/_hooks/submit-form-action'; import { THUMBNAIL_HELP_TEXT, type ContentItem, type GradesBySchool, } from '@/lib/domain/content'; import { INITIAL_CONTENT_FORM_STATE, MESSAGE_MAX_LENGTH, SUBJECT_MAX_LENGTH, TITLE_MAX_LENGTH, } from '@/lib/domain/content-form'; import { contentBreadcrumb, contentListPath } from '@/lib/domain/content-query'; import type { CommonCode } from '@/lib/domain/common-code'; import { FILE_MODULE, fileModuleAccept } from '@/lib/domain/file-module'; import { createComicAction, updateComicAction } from '../../_actions'; import { ContentCutsField } from '../../_components/content-cuts-field'; import { ContentFormActions } from '../../_components/content-form-actions'; import { ContentFormRow } from '../../_components/content-form-row'; import { ContentGradeField } from '../../_components/content-grade-field'; import { ContentKeywordField } from '../../_components/content-keyword-field'; import { ContentVisibilityField } from '../../_components/content-visibility-field'; import styles from '../../_components/content-form.module.scss'; interface ComicFormProps { schools: readonly CommonCode[]; gradesBySchool: GradesBySchool; item?: ContentItem; thumbnailUrl?: string | null; cutUrls?: string[]; } /** 콘텐츠 등록·수정 (4컷금융만화) — 시안 5449:10850. */ export function ComicForm({ schools, gradesBySchool, item, thumbnailUrl, cutUrls = [], }: ComicFormProps) { const isEdit = item !== undefined; const [state, formAction, isPending] = useActionState( isEdit ? updateComicAction : createComicAction, INITIAL_CONTENT_FORM_STATE ); const errors = state.status === 'error' ? (state.errors ?? {}) : {}; return ( <>
submitFormAction(event, formAction)} className={styles.form} > {isEdit && } {isEdit && ( )} {state.status === 'error' && state.message && ( )} ); }