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,
},