From 0193aaee7a45f73a0ba69ef28e862bf8ab7ebfb8 Mon Sep 17 00:00:00 2001 From: "Terentev A. A." Date: Mon, 18 Aug 2025 08:31:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20=D0=B8=20=D0=BE?= =?UTF-8?q?=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B8=20=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Реализована обработка файлов для иконки и фона профиля: добавлена поддержка передачи новых файлов или использование текущих при их отсутствии. Также улучшена надежность загрузки текущих изображений и добавлено указание необходимости обновления изображений через `needUpdateImages`. --- src/entities/ProfileCard/ui/ProfileCard.tsx | 1 + .../edit-profile-form/ui/EditProfileForm.tsx | 47 +++++++++++++++---- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/entities/ProfileCard/ui/ProfileCard.tsx b/src/entities/ProfileCard/ui/ProfileCard.tsx index ff985920..701ca07d 100644 --- a/src/entities/ProfileCard/ui/ProfileCard.tsx +++ b/src/entities/ProfileCard/ui/ProfileCard.tsx @@ -61,6 +61,7 @@ export const ProfileCard = ({ profile }: ProfileCardParams) => { formUpdate.append('jvmArguments', profile?.jvmArguments); formUpdate.append('gameArguments', profile?.gameArguments); formUpdate.append('priority', profile?.priority?.toString() ?? '0'); + formUpdate.append('recommendedRam', (profile?.recommendedRam ?? 1024).toString()); // Обработка загрузки иконки if (body.icon && body.icon[0]) { diff --git a/src/features/edit-profile-form/ui/EditProfileForm.tsx b/src/features/edit-profile-form/ui/EditProfileForm.tsx index 8e62e1c5..47c57a38 100644 --- a/src/features/edit-profile-form/ui/EditProfileForm.tsx +++ b/src/features/edit-profile-form/ui/EditProfileForm.tsx @@ -4,11 +4,7 @@ import { SubmitHandler, useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { useEditProfile } from '@/shared/hooks'; -import { - EditProfileFormSchemaType, - EditProfileSchema, - ProfileExtendedBaseEntity, -} from '@/shared/api/contracts'; +import { EditProfileFormSchemaType, EditProfileSchema, ProfileExtendedBaseEntity } from '@/shared/api/contracts'; import { Form, FormField, FormMessage } from '@/shared/ui/form'; import { Input } from '@/shared/ui/input'; import { Textarea } from '@/shared/ui/textarea'; @@ -52,15 +48,50 @@ export const EditProfileForm = (props: EditProfileFormProps) => { formUpdate.append('displayName', body.displayName); formUpdate.append('originalName', profile?.profileName || ''); formUpdate.append('description', body.description); - formUpdate.append('icon', body.icon?.[0]); + + const iconFile = + body.icon && typeof body.icon !== 'string' && body.icon[0] instanceof File + ? body.icon[0] + : undefined; + if (iconFile) { + formUpdate.append('icon', iconFile); + } else if (profile?.iconBase64) { + try { + const iconBlob = await fetch(`data:image/png;base64,${profile.iconBase64}`).then((r) => + r.blob(), + ); + formUpdate.append('icon', new File([iconBlob], 'icon.png', { type: 'image/png' })); + } catch (e) { + console.error('Error converting existing icon to file:', e); + } + } + formUpdate.append('enabled', body.isEnabled?.toString() ?? 'true'); formUpdate.append('priority', body.priority?.toString() ?? '0'); formUpdate.append('recommendedRam', body.recommendedRam?.toString() ?? '50'); - if (body.background && body.background[0]) { - formUpdate.append('background', body.background[0]); + const backgroundFile = + body.background && typeof body.background !== 'string' && body.background[0] instanceof File + ? body.background[0] + : undefined; + if (backgroundFile) { + formUpdate.append('background', backgroundFile); + } else if (profile?.background && profile.background.trim() !== '') { + try { + const backgroundResponse = await fetch(profile.background); + const backgroundBlob = await backgroundResponse.blob(); + formUpdate.append( + 'background', + new File([backgroundBlob], 'background.png', { type: 'image/png' }), + ); + } catch (error) { + console.error('Error fetching existing background image:', error); + } } + const needUpdateImages = Boolean(iconFile) || Boolean(backgroundFile); + formUpdate.append('needUpdateImages', needUpdateImages.toString()); + if (body.jvmArguments) { formUpdate.append('jvmArguments', body.jvmArguments); }