import { Button, Card, CardContent, CardHeader, CardTitle, FormField, Input, Label, Switch, } from '@/components/ui'; import { Text } from '@/components/ui/Typography.tsx'; import Textarea from '@/components/ui/Textarea.tsx'; import { usePage, useUpdatePage, useCreatePage, usePublishPage } from '@/hooks/api/useAdminAPI.ts'; import { useTranslation } from '@/hooks/useI18n.tsx'; import { ArrowLeft, Save, Eye } from 'lucide-react'; import { useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import type { CreatePageRequest, UpdatePageRequest } from '@/services/admin-api.ts'; const ContentPageEditPage = () => { const { t } = useTranslation(); const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const isNew = id === 'new'; const { data: page } = usePage(isNew ? null : id); const { mutate: updatePage, isPending: isUpdating } = useUpdatePage(); const { mutate: createPage, isPending: isCreating } = useCreatePage(); const { mutate: publishPage, isPending: isPublishing } = usePublishPage(); const [formData, setFormData] = useState(() => ({ slug: page?.slug ?? '', title: page?.title ?? '', content: page?.content ?? '', status: page?.status ?? 'draft', visibility: page?.visibility ?? 'public', })); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (isNew) { createPage(formData, { onSuccess: (newPage) => { navigate(`/admin/content/pages/${newPage.id}/edit`); }, }); } else if (id) { updatePage( { id, request: formData as UpdatePageRequest, }, { onSuccess: () => { // Show success message }, } ); } }; const handlePublish = () => { if (id && page?.status !== 'published') { publishPage(id, { onSuccess: () => { // Show success message }, }); } }; return (
{isNew ? t('adminPage.content.pages.newPage') || 'New Page' : t('adminPage.content.pages.editPage') || 'Edit Page'} {!isNew && page?.status !== 'published' && ( )} {!isNew && page?.slug && ( )}
setFormData({ ...formData, slug: e.target.value })} placeholder="about-us" required disabled={!isNew} /> {t('adminPage.content.pages.slugHint') || 'URL-friendly identifier (e.g., about-us, contact)'} setFormData({ ...formData, title: e.target.value })} required />