Версия 1.1.5 Скроллинг вверх в списке статей после сохранения при редактировании.
This commit is contained in:
parent
915b8274a6
commit
d6b4bfdb2c
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "vite-react-typescript-starter",
|
"name": "vite-react-typescript-starter",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.1.4",
|
"version": "1.1.5",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@ -54,6 +54,7 @@ interface ArticleFormProps {
|
|||||||
authors: Author[];
|
authors: Author[];
|
||||||
availableCategoryIds: number[];
|
availableCategoryIds: number[];
|
||||||
availableCityIds: number[];
|
availableCityIds: number[];
|
||||||
|
onAfterSave?: () => void; // Новый пропс для колбэка после сохранения
|
||||||
}
|
}
|
||||||
|
|
||||||
export function ArticleForm({
|
export function ArticleForm({
|
||||||
@ -66,6 +67,7 @@ export function ArticleForm({
|
|||||||
authors,
|
authors,
|
||||||
availableCategoryIds,
|
availableCategoryIds,
|
||||||
availableCityIds,
|
availableCityIds,
|
||||||
|
onAfterSave,
|
||||||
}: ArticleFormProps) {
|
}: ArticleFormProps) {
|
||||||
const { user } = useAuthStore();
|
const { user } = useAuthStore();
|
||||||
const isAdmin = user?.permissions.isAdmin || false;
|
const isAdmin = user?.permissions.isAdmin || false;
|
||||||
@ -278,6 +280,11 @@ export function ArticleForm({
|
|||||||
try {
|
try {
|
||||||
setIsSubmitting(true);
|
setIsSubmitting(true);
|
||||||
await onSubmit(articleData, closeForm);
|
await onSubmit(articleData, closeForm);
|
||||||
|
|
||||||
|
// Вызываем колбэк после успешного сохранения
|
||||||
|
if (closeForm && onAfterSave) {
|
||||||
|
onAfterSave();
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Ошибка при сохранении статьи:', error);
|
console.error('Ошибка при сохранении статьи:', error);
|
||||||
setError('Не удалось сохранить статью. Пожалуйста, попробуйте снова.');
|
setError('Не удалось сохранить статью. Пожалуйста, попробуйте снова.');
|
||||||
|
|||||||
@ -17,6 +17,7 @@ interface ArticleListProps {
|
|||||||
onShowGallery: (id: string) => void;
|
onShowGallery: (id: string) => void;
|
||||||
onNewArticle: () => void;
|
onNewArticle: () => void;
|
||||||
refreshTrigger: number;
|
refreshTrigger: number;
|
||||||
|
scrollToTop?: () => void; // Добавляем новый пропс
|
||||||
}
|
}
|
||||||
|
|
||||||
const ARTICLES_PER_PAGE = 6;
|
const ARTICLES_PER_PAGE = 6;
|
||||||
@ -29,6 +30,7 @@ export const ArticleList = React.memo(function ArticleList({
|
|||||||
onShowGallery,
|
onShowGallery,
|
||||||
onNewArticle,
|
onNewArticle,
|
||||||
refreshTrigger,
|
refreshTrigger,
|
||||||
|
scrollToTop,
|
||||||
}: ArticleListProps) {
|
}: ArticleListProps) {
|
||||||
const { user } = useAuthStore();
|
const { user } = useAuthStore();
|
||||||
const { availableCategoryIds, availableCityIds, isAdmin } = usePermissions();
|
const { availableCategoryIds, availableCityIds, isAdmin } = usePermissions();
|
||||||
@ -144,6 +146,12 @@ export const ArticleList = React.memo(function ArticleList({
|
|||||||
setSearchParams(newParams);
|
setSearchParams(newParams);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Обработчик редактирования статьи
|
||||||
|
const handleEditClick = (articleId: string) => {
|
||||||
|
onEdit(articleId);
|
||||||
|
scrollToTop?.();
|
||||||
|
};
|
||||||
|
|
||||||
const hasNoPermissions = availableCategoryIds.length === 0 || availableCityIds.length === 0;
|
const hasNoPermissions = availableCategoryIds.length === 0 || availableCityIds.length === 0;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -270,7 +278,7 @@ export const ArticleList = React.memo(function ArticleList({
|
|||||||
{article.isActive ? <ToggleRight size={18} /> : <ToggleLeft size={18} />}
|
{article.isActive ? <ToggleRight size={18} /> : <ToggleLeft size={18} />}
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
onClick={() => onEdit(article.id)}
|
onClick={() => handleEditClick(article.id)}
|
||||||
className="p-2 text-gray-400 hover:text-blue-600 rounded-full hover:bg-blue-50"
|
className="p-2 text-gray-400 hover:text-blue-600 rounded-full hover:bg-blue-50"
|
||||||
>
|
>
|
||||||
<Pencil size={18} />
|
<Pencil size={18} />
|
||||||
|
|||||||
@ -204,6 +204,11 @@ export function AdminPage() {
|
|||||||
setShowForm(true);
|
setShowForm(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Функция для скроллинга к списку статей
|
||||||
|
const scrollToArticlesList = () => {
|
||||||
|
window.scrollTo({ top: 0, behavior: 'smooth' });
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="min-h-screen bg-gray-50">
|
<div className="min-h-screen bg-gray-50">
|
||||||
<Header />
|
<Header />
|
||||||
@ -248,6 +253,7 @@ export function AdminPage() {
|
|||||||
onShowGallery={(id) => setShowGalleryModal(id)}
|
onShowGallery={(id) => setShowGalleryModal(id)}
|
||||||
onNewArticle={handleNewArticle}
|
onNewArticle={handleNewArticle}
|
||||||
refreshTrigger={refreshArticles}
|
refreshTrigger={refreshArticles}
|
||||||
|
scrollToTop={scrollToArticlesList} // Передаем функцию скроллинга
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{(viewMode === 'create' || viewMode === 'edit') && showForm && (
|
{(viewMode === 'create' || viewMode === 'edit') && showForm && (
|
||||||
@ -261,6 +267,7 @@ export function AdminPage() {
|
|||||||
authors={authors}
|
authors={authors}
|
||||||
availableCategoryIds={availableCategoryIds}
|
availableCategoryIds={availableCategoryIds}
|
||||||
availableCityIds={availableCityIds}
|
availableCityIds={availableCityIds}
|
||||||
|
onAfterSave={scrollToArticlesList} // Передаем функцию скроллинга напрямую
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{showGalleryModal && (
|
{showGalleryModal && (
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user