import React, { useCallback } from 'react'; import { View, TouchableOpacity, StyleSheet, ActivityIndicator } from 'react-native'; import { MaterialCommunityIcons } from '@expo/vector-icons'; import { useRouter } from 'expo-router'; import Text from '../common/Text'; import { useAppColors, spacing, borderRadius } from '../../theme'; import type { PostRefSegmentData } from '../../types'; import * as hrefs from '../../navigation/hrefs'; interface PostRefCardProps { data: PostRefSegmentData; compact?: boolean; onPress?: (postId: string) => void; } const PostRefCard: React.FC = ({ data, compact = false, onPress }) => { const colors = useAppColors(); const router = useRouter(); const handlePress = useCallback(() => { if (onPress) { onPress(data.post_id); } else { router.push(hrefs.hrefPostDetail(data.post_id)); } }, [data.post_id, onPress, router]); const isDeleted = data.status === 'deleted'; const isHidden = data.status === 'hidden'; const isUnavailable = isDeleted || isHidden || !data.accessible; const authorName = data.author?.nickname || ''; if (isUnavailable) { return ( {isDeleted ? '该帖子已删除' : isHidden ? '该帖子不可见' : '请登录后查看'} ); } return ( {data.title || '帖子'} {authorName ? ( @{authorName} ) : null} ); }; const styles = StyleSheet.create({ container: { flexDirection: 'row', alignItems: 'center', borderWidth: 1, borderRadius: borderRadius.md, paddingVertical: spacing.sm, paddingHorizontal: spacing.md, marginTop: spacing.xs, marginBottom: spacing.xs, }, containerCompact: { paddingVertical: spacing.xs, paddingHorizontal: spacing.sm, }, iconWrap: { width: 24, height: 24, borderRadius: 4, alignItems: 'center', justifyContent: 'center', marginRight: spacing.sm, }, contentWrap: { flex: 1, justifyContent: 'center', }, title: { fontSize: 13, fontWeight: '500', lineHeight: 18, }, author: { fontSize: 11, lineHeight: 14, marginTop: 1, }, unavailableText: { fontSize: 13, marginLeft: spacing.sm, }, }); export default PostRefCard;