import React, { memo, useCallback, useMemo } from 'react' import { View, StyleSheet } from 'react-native' import { LikeButton, LikeButtonProps } from './LikeButton' import { FavoriteButton, FavoriteButtonProps } from './FavoriteButton' export interface VideoSocialButtonProps { templateId: string liked?: boolean favorited?: boolean likeCount?: number favoriteCount?: number loading?: boolean onLike?: () => void onUnlike?: () => void onFavorite?: () => void onUnfavorite?: () => void testID?: string } const VideoSocialButtonComponent: React.FC = ({ templateId, liked = false, favorited = false, likeCount, favoriteCount, loading = false, onLike, onUnlike, onFavorite, onUnfavorite, testID, }) => { // 处理点赞按钮点击 const handleLikePress = useCallback(() => { if (!loading) { if (liked) { onUnlike?.() } else { onLike?.() } } }, [loading, liked, onLike, onUnlike]) // 处理收藏按钮点击 const handleFavoritePress = useCallback(() => { if (!loading) { if (favorited) { onUnfavorite?.() } else { onFavorite?.() } } }, [loading, favorited, onFavorite, onUnfavorite]) // LikeButton 的 props const likeButtonProps: LikeButtonProps = useMemo( () => ({ liked, loading, count: likeCount, onPress: handleLikePress, testID: testID ? `${testID}-like-button` : undefined, }), [liked, loading, likeCount, handleLikePress, testID] ) // FavoriteButton 的 props const favoriteButtonProps: FavoriteButtonProps = useMemo( () => ({ favorited, loading, count: favoriteCount, onPress: handleFavoritePress, testID: testID ? `${testID}-favorite-button` : undefined, }), [favorited, loading, favoriteCount, handleFavoritePress, testID] ) return ( {/* 点赞按钮 */} {/* 收藏按钮 */} ) } export const VideoSocialButton = memo(VideoSocialButtonComponent) const styles = StyleSheet.create({ container: { position: 'absolute', right: 13, bottom: 100, flexDirection: 'column', alignItems: 'center', gap: 16, }, button: { width: 48, height: 48, borderRadius: 24, backgroundColor: 'rgba(25, 27, 31, 0.8)', justifyContent: 'center', alignItems: 'center', borderWidth: 1, borderColor: 'rgba(47, 49, 52, 1)', }, })