import React, { useState } from 'react'; import { View, Text, ScrollView, StyleSheet, TextInput, TouchableOpacity, Alert, ActivityIndicator, } from 'react-native'; import { useRouter } from 'expo-router'; import api from '../src/services/api'; export default function AddDeviceScreen() { const router = useRouter(); const [isLoading, setIsLoading] = useState(false); const [formData, setFormData] = useState({ name: '', mac: '', ip: '', netmask: '255.255.255.0', broadcast: '', secureOnPassword: '', port: '9', }); const handleSave = async () => { if (!formData.name || !formData.mac || !formData.ip) { Alert.alert('Error', 'Please fill in all required fields'); return; } setIsLoading(true); try { await api.createDevice({ name: formData.name, mac: formData.mac, ip: formData.ip, netmask: formData.netmask, broadcast: formData.broadcast, secureOnPassword: formData.secureOnPassword, port: parseInt(formData.port) || 9, groups: [], status: 'offline', }); Alert.alert('Success', 'Device added successfully'); router.back(); } catch (error: any) { Alert.alert('Error', error.message || 'Failed to add device'); } finally { setIsLoading(false); } }; return ( Add New Device Device Name * setFormData({ ...formData, name: text })} placeholder="My PC" autoCapitalize="words" /> MAC Address * setFormData({ ...formData, mac: text })} placeholder="00:11:22:33:44:55" autoCapitalize="characters" /> Format: XX:XX:XX:XX:XX:XX IP Address * setFormData({ ...formData, ip: text })} placeholder="192.168.1.100" keyboardType="numeric" /> Netmask setFormData({ ...formData, netmask: text })} placeholder="255.255.255.0" keyboardType="numeric" /> Broadcast Address setFormData({ ...formData, broadcast: text })} placeholder="192.168.1.255" keyboardType="numeric" /> Optional: Auto-calculated if left blank SecureOn Password setFormData({ ...formData, secureOnPassword: text })} placeholder="Optional password" secureTextEntry /> Optional: For SecureOn enabled NICs Port setFormData({ ...formData, port: text })} placeholder="9" keyboardType="numeric" /> Default: 9 (Standard Wake-on-LAN port) router.back()} disabled={isLoading} > Cancel {isLoading ? 'Adding...' : 'Add Device'} ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#f5f5f5', }, content: { padding: 20, }, header: { fontSize: 24, fontWeight: 'bold', color: '#333', marginBottom: 20, textAlign: 'center', }, form: { gap: 20, }, inputGroup: { gap: 8, }, label: { fontSize: 14, fontWeight: '600', color: '#333', }, input: { backgroundColor: '#fff', borderWidth: 1, borderColor: '#ddd', borderRadius: 8, padding: 12, fontSize: 16, }, hint: { fontSize: 12, color: '#666', }, buttonGroup: { flexDirection: 'row', gap: 10, marginTop: 10, }, button: { flex: 1, paddingVertical: 15, borderRadius: 8, alignItems: 'center', }, cancelButton: { backgroundColor: '#999', }, saveButton: { backgroundColor: '#4CAF50', }, buttonText: { color: '#fff', fontSize: 16, fontWeight: 'bold', }, });