'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 (
<>