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; } );