Исправлена проблема, когда после сабмита формы не загружался список статей.

This commit is contained in:
anibilag 2025-02-25 19:37:30 +03:00
parent be59f4418a
commit ae5e789f1b
2 changed files with 24 additions and 19 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

View File

@ -10,8 +10,8 @@ import { GalleryImage, CategoryTitles, CityTitles, CategoryIds, CityIds, Article
import { Pencil, Trash2, ChevronLeft, ChevronRight, ImagePlus, X } from 'lucide-react'; import { Pencil, Trash2, ChevronLeft, ChevronRight, ImagePlus, X } from 'lucide-react';
// Default cover image for new articles // Обложка по умоланию для новых статей
const DEFAULT_COVER_IMAGE = '/images/empty-cover.png'; const DEFAULT_COVER_IMAGE = '/images/cover-placeholder.webp';
export function AdminPage() { export function AdminPage() {
const [articleId, setArticleId] = useState(''); const [articleId, setArticleId] = useState('');
@ -26,6 +26,7 @@ export function AdminPage() {
const [editingId, setEditingId] = useState<string | null>(null); const [editingId, setEditingId] = useState<string | null>(null);
const [showDeleteModal, setShowDeleteModal] = useState<string | null>(null); const [showDeleteModal, setShowDeleteModal] = useState<string | null>(null);
const [articles, setArticles] = useState<Article[]>([]); const [articles, setArticles] = useState<Article[]>([]);
const [refreshArticles, setRefreshArticles] = useState(0);
const [totalPages, setTotalPages] = useState(1); const [totalPages, setTotalPages] = useState(1);
const [currentPage, setCurrentPage] = useState(1); const [currentPage, setCurrentPage] = useState(1);
const [filterCategoryId, setFilterCategoryId] = useState(0); const [filterCategoryId, setFilterCategoryId] = useState(0);
@ -33,6 +34,7 @@ export function AdminPage() {
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
const [content, setContent] = useState(''); const [content, setContent] = useState('');
// Загрузка статей // Загрузка статей
useEffect(() => { useEffect(() => {
const fetchArticles = async () => { const fetchArticles = async () => {
@ -53,7 +55,7 @@ export function AdminPage() {
}; };
fetchArticles(); fetchArticles();
}, [currentPage, filterCategoryId, filterCityId]); }, [currentPage, filterCategoryId, filterCityId, refreshArticles]);
const handlePageChange = (page: number) => { const handlePageChange = (page: number) => {
setCurrentPage(page); setCurrentPage(page);
@ -89,6 +91,8 @@ export function AdminPage() {
...prev, ...prev,
articles: prev.filter(article => article.id !== id), articles: prev.filter(article => article.id !== id),
})); }));
setRefreshArticles(prev => prev + 1);
} catch (error) { } catch (error) {
setError('Не удалось удалить статью'); setError('Не удалось удалить статью');
console.error(error); console.error(error);
@ -112,6 +116,7 @@ export function AdminPage() {
}; };
if (editingId) { if (editingId) {
// Редактирование существующей статьи
try { try {
const response = await axios.put(`/api/articles/${editingId}`, articleData, { const response = await axios.put(`/api/articles/${editingId}`, articleData, {
headers: { headers: {
@ -119,12 +124,7 @@ export function AdminPage() {
}, },
}); });
setArticles(prev => ({ setArticles(prev => prev.map(article => article.id === editingId ? response.data : article));
...prev,
articles: prev.map(article =>
article.id === editingId ? response.data : article
),
}));
} catch (error) { } catch (error) {
setError('Не удалось обновить статью'); setError('Не удалось обновить статью');
console.error(error); console.error(error);
@ -134,19 +134,22 @@ export function AdminPage() {
} }
else { else {
// Создание новой статьи // Создание новой статьи
const response = await axios.post('/api/articles', articleData, { try {
headers: { const response = await axios.post('/api/articles', articleData, {
Authorization: `Bearer ${localStorage.getItem('token')}`, headers: {
}, Authorization: `Bearer ${localStorage.getItem('token')}`,
}); },
setArticles(prev => ({ });
...prev,
articles: [...prev, response.data],
}));
console.log('Создание новой статьи:', articleData); setArticles(prev => [...prev, response.data]);
} catch (error) {
setError('Не удалось создать статью');
console.error(error);
}
} }
setRefreshArticles(prev => prev + 1);
// Очистка формы статьи // Очистка формы статьи
setArticleId(''); setArticleId('');
setTitle(''); setTitle('');
@ -157,6 +160,8 @@ export function AdminPage() {
setReadTime(5); setReadTime(5);
setGallery([]); setGallery([]);
setContent(''); // Очищаем содержимое редактора setContent(''); // Очищаем содержимое редактора
setEditingId(null);
}; };
const handleGalleryImageUpload = (imageUrl: string) => { const handleGalleryImageUpload = (imageUrl: string) => {