diff --git a/App.js b/App.js index cb3877f..34e3c6b 100644 --- a/App.js +++ b/App.js @@ -8,6 +8,7 @@ import { ActivityIndicator, useWindowDimensions, RefreshControl, + Switch, } from 'react-native'; import { StatusBar } from 'expo-status-bar'; import { NavigationContainer } from '@react-navigation/native'; @@ -50,6 +51,42 @@ function DashboardScreen({ navigation }) { fetchData(); }, [fetchData]); + const handleToggleAlert = async (plant, newValue) => { + try { + setData((prev) => { + if (!prev) return prev; + const newData = { ...prev }; + newData.data = newData.data.map(p => + p.id === plant.id ? { ...p, alerts_enabled: newValue } : p + ); + return newData; + }); + + const response = await fetch(`https://solorpower.dadot.net/plants/${plant.company_id || 1}/${plant.id}/alerts`, { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ alerts_enabled: newValue }), + }); + + if (!response.ok) { + throw new Error('Failed to update alert settings'); + } + } catch (err) { + console.error(err); + setData((prev) => { + if (!prev) return prev; + const newData = { ...prev }; + newData.data = newData.data.map(p => + p.id === plant.id ? { ...p, alerts_enabled: !newValue } : p + ); + return newData; + }); + alert('알림 설정 변경에 실패했습니다.'); + } + }; + const onRefresh = useCallback(() => { setRefreshing(true); fetchData(); @@ -218,7 +255,17 @@ function DashboardScreen({ navigation }) { {statusInfo.label} - + + + {plant.alerts_enabled !== false ? '알림 ON' : '알림 OFF'} + + handleToggleAlert(plant, value)} + trackColor={{ false: '#D1D5DB', true: '#3B82F6' }} + thumbColor={'#FFFFFF'} + /> + @@ -457,6 +504,16 @@ const styles = StyleSheet.create({ color: '#9CA3AF', fontWeight: '300', }, + alertToggleContainer: { + flexDirection: 'row', + alignItems: 'center', + gap: 8, + }, + alertToggleLabel: { + fontSize: 12, + color: '#6B7280', + fontWeight: '500', + }, cardBody: { gap: 8, },