import React, { useState } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { toast } from 'react-toastify'; import { Save, FileText, Globe } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { Button, Card, Input, Loading } from '../../components/common'; import { CMSEditor } from '../../components/admin/CMSEditor'; import { cmsService } from '../../services/cms.service'; import type { CMSPage as CMSPageType } from '../../services/cms.service'; export const CMSPage: React.FC = () => { const { t } = useTranslation(); const queryClient = useQueryClient(); const [selectedPage, setSelectedPage] = useState('impressum'); const [editingLang, setEditingLang] = useState<'en' | 'de'>('en'); const [editForm, setEditForm] = useState>({}); // Fetch CMS pages const { data: pages, isLoading } = useQuery({ queryKey: ['cms-pages'], queryFn: cmsService.getPages, }); // Update page mutation const updateMutation = useMutation({ mutationFn: ({ slug, data }: { slug: string; data: Partial }) => cmsService.updatePage(slug, data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['cms-pages'] }); toast.success(t('cms.pageUpdated')); }, onError: () => { toast.error(t('toast.saveError')); }, }); // Load page data when selection changes React.useEffect(() => { if (pages) { const page = pages.find(p => p.slug === selectedPage); if (page) { setEditForm(page); } } }, [pages, selectedPage]); const handleSave = () => { updateMutation.mutate({ slug: selectedPage, data: editForm, }); }; const handleContentChange = (content: string) => { const field = editingLang === 'de' ? 'content_de' : 'content_en'; setEditForm(prev => ({ ...prev, [field]: content })); }; const handleTitleChange = (title: string) => { const field = editingLang === 'de' ? 'title_de' : 'title_en'; setEditForm(prev => ({ ...prev, [field]: title })); }; if (isLoading) { return (
); } const currentPage = pages?.find(p => p.slug === selectedPage); return (

{t('cms.title')}

{t('cms.subtitle')}

{/* Page Selection */}

{t('cms.pages')}

{pages?.map((page) => ( ))}

{t('cms.previewLinks')}

{/* Editor */}

{t('cms.editPage', { page: t(`legal.${selectedPage}`) })}

{/* Language Tabs */}
{/* Title */}
handleTitleChange(e.target.value)} placeholder={t('cms.pageTitlePlaceholder')} />
{/* Content */}
{currentPage?.updated_at && (

{t('cms.lastUpdated')} {new Date(currentPage.updated_at).toLocaleString()}

)}
); };