import React, { useState } from 'react'; import { View, StyleSheet, ScrollView } from 'react-native'; import { TextInput, Menu, Button, Divider, Text } from 'react-native-paper'; import { Task, RobotAction } from '../types/task'; import { LOCATIONS, ROBOT_ACTIONS, PAYLOADS, LOCATIONS_BAYS } from '../data/mockData'; interface TaskFormProps { task: Task; onTaskChange: (updatedTask: Task) => void; } const TaskForm: React.FC = ({ task, onTaskChange }) => { const [menuVisible, setMenuVisible] = useState<{ [key: string]: boolean }>({}); const openMenu = (name: string) => setMenuVisible(prev => ({ ...prev, [name]: true })); const closeMenu = (name: string) => setMenuVisible(prev => ({ ...prev, [name]: false })); const handleParamChange = (field: string, value: string | RobotAction) => { const updatedTask = { ...task, parameters: { ...task.parameters, [field]: value, }, }; onTaskChange(updatedTask); }; const renderDropdown = ( name: string, label: string, value: string, items: { label: string, value: string }[] ) => ( {label} closeMenu(name)} anchor={ } > {items.map(item => ( { handleParamChange(name, item.value); closeMenu(name); }} title={item.label} /> ))} ); return ( onTaskChange({ ...task, name: text })} style={styles.input} mode="outlined" /> {renderDropdown('startLocation', '起点', task.parameters.startLocation, LOCATIONS)} {renderDropdown('endLocation', '终点', task.parameters.endLocation, LOCATIONS)} handleParamChange('waypoint', text)} style={styles.input} mode="outlined" /> {renderDropdown('robotAction', '机器人动作', task.parameters.robotAction, ROBOT_ACTIONS)} {renderDropdown('payload', '载荷', task.parameters.payload, PAYLOADS)} {renderDropdown('locationBay', '库位', task.parameters.locationBay, LOCATIONS_BAYS)} ); }; const styles = StyleSheet.create({ container: { padding: 16, }, input: { marginBottom: 16, }, }); export default TaskForm;