feat: 更新 CLAUDE.md 文件及多个组件以优化用户体验和功能
- 更新 CLAUDE.md 文件,重构架构部分,增加认证和数据层的描述 - 在 GoalsScreen 中新增目标模板选择功能,支持用户选择和创建目标 - 在 CreateGoalModal 中添加初始数据支持,优化目标创建体验 - 新增 GoalTemplateModal 组件,提供目标模板选择界面 - 更新 NotificationHelpers,支持构建深度链接以便于导航 - 在 CoachScreen 中处理路由参数,增强用户交互体验 - 更新多个组件的样式和逻辑,提升整体用户体验 - 删除不再使用的中文回复规则文档
This commit is contained in:
@@ -4,7 +4,7 @@ import { CreateGoalRequest, GoalPriority, RepeatType } from '@/types/goals';
|
||||
import { Ionicons } from '@expo/vector-icons';
|
||||
import DateTimePicker from '@react-native-community/datetimepicker';
|
||||
import { LinearGradient } from 'expo-linear-gradient';
|
||||
import React, { useState } from 'react';
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import {
|
||||
Alert,
|
||||
Image,
|
||||
@@ -26,6 +26,7 @@ interface CreateGoalModalProps {
|
||||
onSubmit: (goalData: CreateGoalRequest) => void;
|
||||
onSuccess?: () => void;
|
||||
loading?: boolean;
|
||||
initialData?: Partial<CreateGoalRequest>;
|
||||
}
|
||||
|
||||
const REPEAT_TYPE_OPTIONS: { value: RepeatType; label: string }[] = [
|
||||
@@ -42,28 +43,49 @@ export const CreateGoalModal: React.FC<CreateGoalModalProps> = ({
|
||||
onSubmit,
|
||||
onSuccess,
|
||||
loading = false,
|
||||
initialData,
|
||||
}) => {
|
||||
const theme = (useColorScheme() ?? 'light') as 'light' | 'dark';
|
||||
const colorTokens = Colors[theme];
|
||||
|
||||
// 表单状态
|
||||
const [title, setTitle] = useState('');
|
||||
const [description, setDescription] = useState('');
|
||||
const [repeatType, setRepeatType] = useState<RepeatType>('daily');
|
||||
const [frequency, setFrequency] = useState(1);
|
||||
const [hasReminder, setHasReminder] = useState(false);
|
||||
const [title, setTitle] = useState(initialData?.title || '');
|
||||
const [description, setDescription] = useState(initialData?.description || '');
|
||||
const [repeatType, setRepeatType] = useState<RepeatType>(initialData?.repeatType || 'daily');
|
||||
const [frequency, setFrequency] = useState(initialData?.frequency || 1);
|
||||
const [hasReminder, setHasReminder] = useState(initialData?.hasReminder || false);
|
||||
const [showFrequencyPicker, setShowFrequencyPicker] = useState(false);
|
||||
const [showRepeatTypePicker, setShowRepeatTypePicker] = useState(false);
|
||||
const [reminderTime, setReminderTime] = useState('20:00');
|
||||
const [category, setCategory] = useState('');
|
||||
const [priority, setPriority] = useState<GoalPriority>(5);
|
||||
const [reminderTime, setReminderTime] = useState(initialData?.reminderTime || '20:00');
|
||||
const [category, setCategory] = useState(initialData?.category || '');
|
||||
const [priority, setPriority] = useState<GoalPriority>(initialData?.priority || 5);
|
||||
const [showTimePicker, setShowTimePicker] = useState(false);
|
||||
const [tempSelectedTime, setTempSelectedTime] = useState<Date | null>(null);
|
||||
|
||||
// 周几选择状态
|
||||
const [selectedWeekdays, setSelectedWeekdays] = useState<number[]>([1, 2, 3, 4, 5]); // 默认周一到周五
|
||||
const [selectedWeekdays, setSelectedWeekdays] = useState<number[]>(
|
||||
initialData?.customRepeatRule?.weekdays || [1, 2, 3, 4, 5]
|
||||
); // 默认周一到周五
|
||||
// 每月日期选择状态
|
||||
const [selectedMonthDays, setSelectedMonthDays] = useState<number[]>([1, 15]); // 默认1号和15号
|
||||
const [selectedMonthDays, setSelectedMonthDays] = useState<number[]>(
|
||||
initialData?.customRepeatRule?.dayOfMonth || [1, 15]
|
||||
); // 默认1号和15号
|
||||
|
||||
// 当 initialData 变化时更新表单状态
|
||||
useEffect(() => {
|
||||
if (initialData) {
|
||||
setTitle(initialData.title || '');
|
||||
setDescription(initialData.description || '');
|
||||
setRepeatType(initialData.repeatType || 'daily');
|
||||
setFrequency(initialData.frequency || 1);
|
||||
setHasReminder(initialData.hasReminder || false);
|
||||
setReminderTime(initialData.reminderTime || '20:00');
|
||||
setCategory(initialData.category || '');
|
||||
setPriority(initialData.priority || 5);
|
||||
setSelectedWeekdays(initialData.customRepeatRule?.weekdays || [1, 2, 3, 4, 5]);
|
||||
setSelectedMonthDays(initialData.customRepeatRule?.dayOfMonth || [1, 15]);
|
||||
}
|
||||
}, [initialData]);
|
||||
|
||||
// 重置表单
|
||||
const resetForm = () => {
|
||||
|
||||
Reference in New Issue
Block a user