Исправлена проблема, когда после сабмита формы не загружался список статей.
This commit is contained in:
parent
be59f4418a
commit
ae5e789f1b
BIN
public/images/cover-placeholder.webp
Normal file
BIN
public/images/cover-placeholder.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 141 KiB |
@ -10,8 +10,8 @@ import { GalleryImage, CategoryTitles, CityTitles, CategoryIds, CityIds, Article
|
||||
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() {
|
||||
const [articleId, setArticleId] = useState('');
|
||||
@ -26,6 +26,7 @@ export function AdminPage() {
|
||||
const [editingId, setEditingId] = useState<string | null>(null);
|
||||
const [showDeleteModal, setShowDeleteModal] = useState<string | null>(null);
|
||||
const [articles, setArticles] = useState<Article[]>([]);
|
||||
const [refreshArticles, setRefreshArticles] = useState(0);
|
||||
const [totalPages, setTotalPages] = useState(1);
|
||||
const [currentPage, setCurrentPage] = useState(1);
|
||||
const [filterCategoryId, setFilterCategoryId] = useState(0);
|
||||
@ -33,6 +34,7 @@ export function AdminPage() {
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
const [content, setContent] = useState('');
|
||||
|
||||
|
||||
// Загрузка статей
|
||||
useEffect(() => {
|
||||
const fetchArticles = async () => {
|
||||
@ -53,7 +55,7 @@ export function AdminPage() {
|
||||
};
|
||||
|
||||
fetchArticles();
|
||||
}, [currentPage, filterCategoryId, filterCityId]);
|
||||
}, [currentPage, filterCategoryId, filterCityId, refreshArticles]);
|
||||
|
||||
const handlePageChange = (page: number) => {
|
||||
setCurrentPage(page);
|
||||
@ -89,6 +91,8 @@ export function AdminPage() {
|
||||
...prev,
|
||||
articles: prev.filter(article => article.id !== id),
|
||||
}));
|
||||
|
||||
setRefreshArticles(prev => prev + 1);
|
||||
} catch (error) {
|
||||
setError('Не удалось удалить статью');
|
||||
console.error(error);
|
||||
@ -112,6 +116,7 @@ export function AdminPage() {
|
||||
};
|
||||
|
||||
if (editingId) {
|
||||
// Редактирование существующей статьи
|
||||
try {
|
||||
const response = await axios.put(`/api/articles/${editingId}`, articleData, {
|
||||
headers: {
|
||||
@ -119,12 +124,7 @@ export function AdminPage() {
|
||||
},
|
||||
});
|
||||
|
||||
setArticles(prev => ({
|
||||
...prev,
|
||||
articles: prev.map(article =>
|
||||
article.id === editingId ? response.data : article
|
||||
),
|
||||
}));
|
||||
setArticles(prev => prev.map(article => article.id === editingId ? response.data : article));
|
||||
} catch (error) {
|
||||
setError('Не удалось обновить статью');
|
||||
console.error(error);
|
||||
@ -134,18 +134,21 @@ export function AdminPage() {
|
||||
}
|
||||
else {
|
||||
// Создание новой статьи
|
||||
try {
|
||||
const response = await axios.post('/api/articles', articleData, {
|
||||
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('');
|
||||
@ -157,6 +160,8 @@ export function AdminPage() {
|
||||
setReadTime(5);
|
||||
setGallery([]);
|
||||
setContent(''); // Очищаем содержимое редактора
|
||||
|
||||
setEditingId(null);
|
||||
};
|
||||
|
||||
const handleGalleryImageUpload = (imageUrl: string) => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user