diff --git a/client/src/pages/admin-products/ui/AdminProductsPage.tsx b/client/src/pages/admin-products/ui/AdminProductsPage.tsx index ac71b31..1f73960 100644 --- a/client/src/pages/admin-products/ui/AdminProductsPage.tsx +++ b/client/src/pages/admin-products/ui/AdminProductsPage.tsx @@ -1,4 +1,4 @@ -import { useRef, useState } from 'react' +import { useState } from 'react' import Alert from '@mui/material/Alert' import Box from '@mui/material/Box' import Button from '@mui/material/Button' @@ -31,10 +31,8 @@ import { fetchAdminProducts, fetchCategories, updateProduct, - uploadAdminProductImages, } from '@/entities/product/api/product-api' import type { Category, Product } from '@/entities/product/model/types' -import { formatAdminImageMaxSizeHint } from '@/shared/constants/upload-limits' import { formatPriceRub } from '@/shared/lib/format-price' import { getErrorMessage } from '@/shared/lib/get-error-message' import { invalidateQueryKeys } from '@/shared/lib/invalidate-query-keys' @@ -203,20 +201,7 @@ export function AdminProductsPage() { else createMut.mutate() } - const productImagesInputRef = useRef(null) - - const uploadImagesMut = useMutation({ - mutationFn: (picked: File[]) => uploadAdminProductImages(picked), - onSuccess: (urls) => { - const current = productForm.getValues('imageUrls') - productForm.setValue('imageUrls', [...current, ...urls], { shouldDirty: true }) - if (productImagesInputRef.current) { - productImagesInputRef.current.value = '' - } - }, - }) - - const mutationError = createMut.error ?? updateMut.error ?? deleteMut.error ?? uploadImagesMut.error + const mutationError = createMut.error ?? updateMut.error ?? deleteMut.error const removeImage = (url: string) => { const current = productForm.getValues('imageUrls') @@ -401,11 +386,11 @@ export function AdminProductsPage() { /> - Фото (загрузка) + Фото (из галереи) - PNG, JPEG или WebP, до {formatAdminImageMaxSizeHint()} на файл. Крестик на превью убирает фото только из - карточки; файл остаётся на сервере и в галерее. + Выберите обработанные изображения из галереи. Крестик на превью убирает фото только из карточки; файл + остаётся на сервере и в галерее. - - {uploadImagesMut.isPending && Загрузка…} - {uploadImagesMut.isError && Не удалось загрузить фото} {productForm.watch('imageUrls').length > 0 && ( @@ -558,6 +526,14 @@ export function AdminProductsPage() { {galleryForPickQuery.data?.items.length === 0 && !galleryForPickQuery.isLoading && ( В галерее пока нет файлов. Загрузите их в разделе «Галерея». )} + {galleryForPickQuery.data && + galleryForPickQuery.data.items.length > 0 && + galleryForPickQuery.data.items.filter((i) => i.isResized).length === 0 && + !galleryForPickQuery.isLoading && ( + + В галерее нет обработанных изображений. Сначала обработайте их в разделе «Галерея». + + )} - {(galleryForPickQuery.data?.items ?? []).map((item) => { - const alreadyInCard = productForm.watch('imageUrls').includes(item.url) - return ( - toggleGalleryPickUrl(item.url)} - /> - } - label={ - - item.isResized) + .map((item) => { + const alreadyInCard = productForm.watch('imageUrls').includes(item.url) + return ( + toggleGalleryPickUrl(item.url)} /> - - } - /> - ) - })} + } + label={ + + + + } + /> + ) + })}