From c1769be91fca53d323a1a353e88060e279b45e98 Mon Sep 17 00:00:00 2001 From: Vlad0sEnIgma345 Date: Thu, 27 Nov 2025 10:13:52 +0300 Subject: [PATCH] =?UTF-8?q?chore:=20=D0=BD=D0=B5=D0=B7=D0=BD=D0=B0=D1=87?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BA=D0=B8=20=D1=81=D1=82=D0=B8=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/frontend/app/(tabs)/two.tsx | 7 +++--- apps/frontend/app/save/[id].tsx | 36 +++++++++++++++---------------- apps/frontend/app/user/[slug].tsx | 12 +++++------ 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/apps/frontend/app/(tabs)/two.tsx b/apps/frontend/app/(tabs)/two.tsx index 3752f9e..b6d80a3 100644 --- a/apps/frontend/app/(tabs)/two.tsx +++ b/apps/frontend/app/(tabs)/two.tsx @@ -31,12 +31,13 @@ export default function SearchScreen() { setLoading(true); try { const user = await usersApi.getUserByName(query); - // Переходим к профилю пользователя по его ID router.push(`/user/${user.id}` as any); setSearchQuery(''); - } catch (error: any) { + } + catch (error: any) { Alert.alert('Пользователь не найден', error.message || 'Пользователь с таким именем не существует'); - } finally { + } + finally { setLoading(false); } }; diff --git a/apps/frontend/app/save/[id].tsx b/apps/frontend/app/save/[id].tsx index 9feb462..0a71ecd 100644 --- a/apps/frontend/app/save/[id].tsx +++ b/apps/frontend/app/save/[id].tsx @@ -46,10 +46,12 @@ export default function SaveDetailScreen() { setDescription(data.description || ''); setTags(data.tags.join(', ') || ''); setVisibility(data.visibility); - } catch (error: any) { + } + catch (error: any) { Alert.alert('Ошибка', error.message || 'Не удалось загрузить сейв'); router.back(); - } finally { + } + finally { setLoading(false); } }; @@ -71,9 +73,11 @@ export default function SaveDetailScreen() { setSave(updated as SaveDetailResponse); setEditing(false); Alert.alert('Успех', 'Сейв обновлен'); - } catch (error: any) { + } + catch (error: any) { Alert.alert('Ошибка', error.message || 'Не удалось обновить сейв'); - } finally { + } + finally { setSaving(false); } }; @@ -105,7 +109,6 @@ export default function SaveDetailScreen() { const handleShare = async () => { if (!save) return; - // Используем прямой URL из S3 const shareUrl = save.url; if (shareUrl) { @@ -114,7 +117,8 @@ export default function SaveDetailScreen() { message: shareUrl, url: shareUrl, }); - } catch (error) { + } + catch (error) { console.error('Ошибка при попытке поделиться:', error); } } @@ -123,17 +127,15 @@ export default function SaveDetailScreen() { const handleCopyShareUrl = async () => { if (!save || !save.shareUrl) return; - // Формируем полный URL для доступа к сейву по share token const shareUrl = `${API_BASE_URL}/saves/${save.id}?share=${save.shareUrl}`; try { - // Используем Share API - на некоторых платформах это позволяет скопировать await Share.share({ message: `Ссылка для доступа к сейву: ${shareUrl}`, url: shareUrl, }); - } catch (error) { - // Если Share не работает, показываем Alert с URL для ручного копирования + } + catch (error) { Alert.alert( 'Ссылка для доступа', `Скопируйте эту ссылку:\n\n${shareUrl}`, @@ -149,21 +151,19 @@ export default function SaveDetailScreen() { router.push(`/user/${save.userId}` as any); }; - // Создаем видеоплеер (хуки должны вызываться до условных возвратов) const videoPlayer = useVideoPlayer( save?.type === 'video' ? save?.url ?? null : null, (player) => { - // Автоматически не запускаем воспроизведение player.muted = false; } ); - // Обновляем источник видео при изменении save useEffect(() => { const updateVideoSource = async () => { if (save?.type === 'video' && save?.url) { await videoPlayer.replaceAsync(save.url); - } else if (save && save.type !== 'video') { + } + else if (save && save.type !== 'video') { await videoPlayer.replaceAsync(null); } }; @@ -183,10 +183,8 @@ export default function SaveDetailScreen() { } const isOwner = user?.id === save.userId; - // Используем прямой URL из S3 вместо /download эндпоинта const mediaUrl = save.url; - // Компонент для отображения медиа const renderMedia = () => { if (save.type === 'video') { return ( @@ -198,7 +196,8 @@ export default function SaveDetailScreen() { fullscreenOptions={{ enable: true }} /> ); - } else if (save.type === 'image' || save.type === 'gif') { + } + else if (save.type === 'image' || save.type === 'gif') { return ( ); - } else { + } + else { return ( diff --git a/apps/frontend/app/user/[slug].tsx b/apps/frontend/app/user/[slug].tsx index 4c4f9d9..e2ced3c 100644 --- a/apps/frontend/app/user/[slug].tsx +++ b/apps/frontend/app/user/[slug].tsx @@ -31,9 +31,11 @@ export default function UserProfileScreen() { try { const data = await savesApi.getPublicSavesByUser(slug); setSaves(data); - } catch (error: any) { + } + catch (error: any) { Alert.alert('Ошибка', error.message || 'Не удалось загрузить сейвы'); - } finally { + } + finally { setLoading(false); setRefreshing(false); } @@ -54,18 +56,16 @@ export default function UserProfileScreen() { router.push(`/save/${save.id}`); }; - // Компонент для элемента списка const SaveItem = React.memo(({ item }: { item: SaveListItem }) => { if (!item) return null; const itemColorScheme = useColorScheme(); const itemColors = Colors[itemColorScheme ?? 'light']; - const videoPlayer = useVideoPlayer( item.type === 'video' ? item.url : null, (player) => { - player.muted = true; // Без звука в списке - player.loop = true; // Зацикливание для превью + player.muted = true; + player.loop = true; } );