diff --git a/.claude/settings.local.json b/.claude/settings.local.json index d5b8e71..37eeadd 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -1,6 +1,5 @@ { "permissions": { - "defaultMode": "bypassPermissions", "allow": [ "Bash(npm install:*)", "Bash(mkdir -p:*)", @@ -8,8 +7,12 @@ "Bash(*:*)", "Bash(npm uninstall react-native-paper react-native-paper-dropdown)", "Bash(npm uninstall react-native-paper react-native-paper-dropdown --legacy-peer-deps)", - "Bash(npx react-native start --reset-cache)" + "Bash(npx react-native start --reset-cache)", + "Bash(npm run lint)" ], - "deny": ["WebSearch"] + "deny": [ + "WebSearch" + ], + "defaultMode": "bypassPermissions" } -} +} \ No newline at end of file diff --git a/src/components/TaskCard.tsx b/src/components/TaskCard.tsx index 68866c3..461ccb8 100644 --- a/src/components/TaskCard.tsx +++ b/src/components/TaskCard.tsx @@ -1,12 +1,11 @@ import React from 'react'; import { StyleSheet, TouchableOpacity } from 'react-native'; -import { Card, Text, Chip, useTheme } from '@rneui/themed'; +import { Card, Chip } from '@rneui/themed'; import { Task, TaskStatus } from '../types/task'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; interface TaskCardProps { task: Task; - onPress: (id: string) => void; + onPress: (task: Task) => void; } const statusColors: Record = { @@ -17,10 +16,9 @@ const statusColors: Record = { }; const TaskCard: React.FC = ({ task, onPress }) => { - const { theme } = useTheme(); return ( - onPress(task.id)} style={{ flex: 1, width: '50%' }}> + onPress(task)} style={styles.touchable}> {task.name} @@ -34,7 +32,7 @@ const TaskCard: React.FC = ({ task, onPress }) => { }} type="outline" containerStyle={styles.chip} - titleStyle={{ color: statusColors[task.status], fontSize: 12 }} + titleStyle={[styles.chipTitle, { color: statusColors[task.status] }]} buttonStyle={{ borderColor: statusColors[task.status] }} /> @@ -43,6 +41,10 @@ const TaskCard: React.FC = ({ task, onPress }) => { }; const styles = StyleSheet.create({ + touchable: { + flex: 1, + width: '50%', + }, card: { margin: 4, borderRadius: 8, @@ -55,6 +57,9 @@ const styles = StyleSheet.create({ chip: { alignSelf: 'flex-start', }, + chipTitle: { + fontSize: 12, + }, }); export default TaskCard; diff --git a/src/components/TaskForm.tsx b/src/components/TaskForm.tsx index 0b9ddab..7fa6fc7 100644 --- a/src/components/TaskForm.tsx +++ b/src/components/TaskForm.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; -import { View, StyleSheet, ScrollView, TouchableOpacity } from 'react-native'; -import { Input, BottomSheet, ListItem, Text } from '@rneui/themed'; +import { StyleSheet, ScrollView, TouchableOpacity } from 'react-native'; +import { Input, BottomSheet, ListItem } from '@rneui/themed'; import { Task, RobotAction } from '../types/task'; import { LOCATIONS, @@ -94,7 +94,7 @@ const TaskForm: React.FC = ({ task, onTaskChange }) => { {renderDropdown( 'locationBay', '库位', - task.parameters.locationBay, + task.parameters.locationBay || '', LOCATIONS_BAYS, )} diff --git a/src/screens/HomeScreen.tsx b/src/screens/HomeScreen.tsx index f9018cc..5329916 100644 --- a/src/screens/HomeScreen.tsx +++ b/src/screens/HomeScreen.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { StyleSheet, Text, View, Button, SafeAreaView } from 'react-native'; +import { StyleSheet, View, Button, SafeAreaView } from 'react-native'; export default function HomeScreen() { return ( diff --git a/src/screens/TaskEditScreen.tsx b/src/screens/TaskEditScreen.tsx index df612e1..ba05cf7 100644 --- a/src/screens/TaskEditScreen.tsx +++ b/src/screens/TaskEditScreen.tsx @@ -9,7 +9,7 @@ import { Task } from '../types/task'; import { Dialog } from '@rneui/themed'; type RootStackParamList = { - TaskEdit: { taskId: string }; + TaskEdit: { task: Task }; }; type TaskEditRouteProp = RouteProp; @@ -17,21 +17,21 @@ type TaskEditRouteProp = RouteProp; export default function TaskEditScreen() { const route = useRoute(); const navigation = useNavigation(); - const { taskId } = route.params; + const { task: initialTask } = route.params; - const { getTaskById, updateTask, runTask } = useTasks(); + const { updateTask, runTask } = useTasks(); - const [task, setTask] = useState(null); - const [originalTask, setOriginalTask] = useState(null); + const [task, setTask] = useState(initialTask); + const [originalTask, setOriginalTask] = useState(initialTask); const [isModified, setIsModified] = useState(false); useEffect(() => { - const foundTask = getTaskById(taskId); - if (foundTask) { - setTask(foundTask); - setOriginalTask(foundTask); + if (initialTask) { + setTask(initialTask); + setOriginalTask(initialTask); } - }, [taskId, getTaskById]); + }, [initialTask]); + const handleTaskChange = (updatedTask: Task) => { setTask(updatedTask); diff --git a/src/screens/TaskListScreen.tsx b/src/screens/TaskListScreen.tsx index ad5c63b..697a497 100644 --- a/src/screens/TaskListScreen.tsx +++ b/src/screens/TaskListScreen.tsx @@ -7,7 +7,7 @@ import TaskCard from '../components/TaskCard'; type RootStackParamList = { TaskList: undefined; - TaskEdit: { taskId: string }; + TaskEdit: { task: Task }; }; type TaskListNavigationProp = StackNavigationProp; @@ -16,15 +16,15 @@ export default function TaskListScreen() { const { tasks } = useTasks(); const navigation = useNavigation(); - const handlePressTask = (taskId: string) => { - navigation.navigate('TaskEdit', { taskId }); + const handlePressTask = (task: Task) => { + navigation.navigate('TaskEdit', { task }); }; return ( } + renderItem={({ item }) => handlePressTask(item)} />} keyExtractor={item => item.id} numColumns={2} contentContainerStyle={styles.list}