diff --git a/client/src/entities/product/api/product-api.ts b/client/src/entities/product/api/product-api.ts index 43ee36a..26e5641 100644 --- a/client/src/entities/product/api/product-api.ts +++ b/client/src/entities/product/api/product-api.ts @@ -1,6 +1,7 @@ import type { Category, Product } from '@/entities/product/model/types' import { apiClient } from '@/shared/api/client' import { apiBaseURL } from '@/shared/config' +import { ADMIN_UPLOAD_IMAGE_MAX_BYTES, formatAdminImageMaxSizeHint } from '@/shared/constants/upload-limits' export type PublicProductsResponse = { items: Product[] @@ -119,8 +120,16 @@ export async function deleteAdminCategory(id: string): Promise { /** FormData: не задавать Content-Type вручную (boundary задаёт браузер). */ export async function uploadAdminProductImages(files: FileList | readonly File[]): Promise { + const list = Array.from(files) + for (const f of list) { + if (f.size > ADMIN_UPLOAD_IMAGE_MAX_BYTES) { + throw new Error( + `Файл «${f.name}» слишком большой (максимум ${formatAdminImageMaxSizeHint()} на одно изображение).`, + ) + } + } const fd = new FormData() - for (const f of Array.from(files)) { + for (const f of list) { fd.append('files', f, f.name) } const token = localStorage.getItem('craftshop_auth_token') diff --git a/client/src/pages/admin-gallery/ui/AdminGalleryPage.tsx b/client/src/pages/admin-gallery/ui/AdminGalleryPage.tsx index 93ce407..91147bf 100644 --- a/client/src/pages/admin-gallery/ui/AdminGalleryPage.tsx +++ b/client/src/pages/admin-gallery/ui/AdminGalleryPage.tsx @@ -11,6 +11,7 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { fetchAdminCatalogSlider } from '@/entities/catalog-slider/api/catalog-slider-api' import { deleteGalleryImage, fetchAdminGallery } from '@/entities/gallery/api/gallery-api' import { uploadAdminProductImages } from '@/entities/product/api/product-api' +import { formatAdminImageMaxSizeHint } from '@/shared/constants/upload-limits' import { invalidateQueryKeys } from '@/shared/lib/invalidate-query-keys' import { GallerySliderSection } from './GallerySliderSection' @@ -80,6 +81,10 @@ export function AdminGalleryPage() { + + Форматы: PNG, JPEG, WebP. На один файл — до {formatAdminImageMaxSizeHint()}. + +