Files
life-echo/app-ios/components/memoir/ChapterContent.tsx
penghanyuan 0030ea4a42 refactor: 更新应用名称与对话提示以增强用户体验
- 将应用名称从“岁月时书”更改为“岁月留书”,并在多个文件中更新相关文本。
- 在对话提示中将“回忆录助手”替换为“岁月知己”,以统一用户体验。
- 添加新的头像资源以匹配更新后的助手名称。
- 更新多个界面和文档中的文本,以反映新的品牌形象和功能。
2026-02-13 23:04:24 +01:00

140 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import React from 'react';
import { View, Text, StyleSheet, ScrollView } from 'react-native';
import { AppColors } from '@/constants/theme';
import { Chapter } from '@/data/mockData';
interface ChapterContentProps {
chapter: Chapter;
}
export function ChapterContent({ chapter }: ChapterContentProps) {
// Parse content to handle quotes
const renderContent = () => {
if (!chapter.content) {
return (
<Text style={styles.emptyText}>
</Text>
);
}
const parts = chapter.content.split('"');
return parts.map((part, index) => {
// Check if this part is a quote (starts and ends with quote marks in original)
if (part.startsWith('"') || (index > 0 && parts[index - 1].endsWith('"'))) {
return null;
}
// Check for quote pattern
const quoteMatch = chapter.content?.match(/"([^"]+)"/g);
const isQuote = quoteMatch && quoteMatch.some(q => q.includes(part) && part.length > 10);
if (part.trim().startsWith('"') && part.trim().endsWith('"')) {
return (
<View key={index} style={styles.quoteBlock}>
<Text style={styles.quoteText}>{part}</Text>
</View>
);
}
// Split by newlines and render paragraphs
return part.split('\n\n').map((paragraph, pIndex) => {
if (!paragraph.trim()) return null;
// Check if it's a quote
if (paragraph.trim().startsWith('"') && paragraph.trim().endsWith('"')) {
return (
<View key={`${index}-${pIndex}`} style={styles.quoteBlock}>
<Text style={styles.quoteText}>{paragraph.trim()}</Text>
</View>
);
}
return (
<Text key={`${index}-${pIndex}`} style={styles.paragraph}>
{paragraph.trim()}
</Text>
);
});
});
};
return (
<View style={styles.container}>
{/* Chapter Header */}
<View style={styles.header}>
<Text style={styles.chapterNumber}>
{['一', '二', '三', '四', '五', '六', '七', '八', '九', '十'][chapter.number - 1] || chapter.number}
</Text>
<Text style={styles.chapterTitle}>{chapter.title}</Text>
</View>
{/* Content */}
<ScrollView
style={styles.content}
showsVerticalScrollIndicator={false}
contentContainerStyle={styles.contentContainer}
>
{renderContent()}
</ScrollView>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
padding: 20,
},
header: {
marginBottom: 24,
},
chapterNumber: {
fontSize: 13,
color: AppColors.mediumPurple,
fontWeight: '500',
marginBottom: 4,
},
chapterTitle: {
fontSize: 26,
fontWeight: '600',
color: AppColors.deepPurple,
},
content: {
flex: 1,
},
contentContainer: {
paddingBottom: 100,
},
paragraph: {
fontSize: 16,
lineHeight: 30,
color: AppColors.deepPurple,
marginBottom: 20,
textAlign: 'justify',
},
quoteBlock: {
marginVertical: 24,
paddingVertical: 16,
paddingHorizontal: 20,
backgroundColor: AppColors.lavender,
borderLeftWidth: 3,
borderLeftColor: AppColors.mediumPurple,
borderTopRightRadius: 12,
borderBottomRightRadius: 12,
},
quoteText: {
fontSize: 15,
fontStyle: 'italic',
color: AppColors.deepPurple,
lineHeight: 24,
},
emptyText: {
fontSize: 15,
color: AppColors.slatePurple,
textAlign: 'center',
marginTop: 40,
},
});