feat: Add alerts toggle in Dashboard
This commit is contained in:
parent
a1f8c74ec8
commit
0e0b64f20f
59
App.js
59
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}
|
||||
</Text>
|
||||
</View>
|
||||
<Text style={styles.arrowIcon}>›</Text>
|
||||
<View style={styles.alertToggleContainer}>
|
||||
<Text style={styles.alertToggleLabel}>
|
||||
{plant.alerts_enabled !== false ? '알림 ON' : '알림 OFF'}
|
||||
</Text>
|
||||
<Switch
|
||||
value={plant.alerts_enabled !== false}
|
||||
onValueChange={(value) => handleToggleAlert(plant, value)}
|
||||
trackColor={{ false: '#D1D5DB', true: '#3B82F6' }}
|
||||
thumbColor={'#FFFFFF'}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
<View style={styles.cardBody}>
|
||||
|
|
@ -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,
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user