diff options
author | Santo Cariotti <santo@dcariotti.me> | 2024-09-12 12:00:07 +0200 |
---|---|---|
committer | Santo Cariotti <santo@dcariotti.me> | 2024-09-12 12:00:07 +0200 |
commit | 036c178e7b0e665a15a592e43f132f3e2e6a50e8 (patch) | |
tree | bd46b9c3126dfd06db52a24b675fd909d6dc769b | |
parent | 267d33e7659e3d7fb8724e7584affde77f9af44c (diff) |
Get all the three areas for an alert
-rw-r--r-- | app/(tabs)/alerts/[id].tsx | 33 | ||||
-rw-r--r-- | app/(tabs)/alerts/index.tsx | 21 | ||||
-rw-r--r-- | app/(tabs)/notifications/[id].tsx | 37 |
3 files changed, 56 insertions, 35 deletions
diff --git a/app/(tabs)/alerts/[id].tsx b/app/(tabs)/alerts/[id].tsx index 92856b3..554c1ed 100644 --- a/app/(tabs)/alerts/[id].tsx +++ b/app/(tabs)/alerts/[id].tsx @@ -20,8 +20,8 @@ interface AlertData { userId: string; createdAt: string; area: string; - extendedArea: string; - level: string; + areaLevel2: string; + areaLevel3: string; } interface PolygonCoordinates { @@ -40,7 +40,8 @@ export default function AlertIdScreen() { longitudeDelta: 0.03, }); const [polygon, setPolygon] = useState<PolygonCoordinates[]>([]); - const [extendedPolygon, setExtendedPolygon] = useState<PolygonCoordinates[]>([]); + const [level2Polygon, setLevel2Polygon] = useState<PolygonCoordinates[]>([]); + const [level3Polygon, setLevel3Polygon] = useState<PolygonCoordinates[]>([]); const mapRef = useRef<MapView | null>(null); const checkAuth = useCallback(async () => { @@ -83,7 +84,7 @@ export default function AlertIdScreen() { 'Content-Type': 'application/json', }, body: JSON.stringify({ - query: `{ alerts(id: ${id}) { id, userId, createdAt, area, extendedArea, level } }`, + query: `{ alerts(id: ${id}) { id, userId, createdAt, area, areaLevel2, areaLevel3 } }`, }), } ); @@ -103,8 +104,17 @@ export default function AlertIdScreen() { latitude: parseFloat(pair[1]), })); - const extendedCoordinatesString = alertData.extendedArea.substring(9, alertData.extendedArea.length - 2); - const extendedCoordinates = extendedCoordinatesString + const level2CoordinatesString = alertData.areaLevel2.substring(9, alertData.areaLevel2.length - 2); + const level2Coordinates = level2CoordinatesString + .split(',') + .map((coord: string) => coord.trim().split(' ')) + .map((pair: string[]) => ({ + longitude: parseFloat(pair[0]), + latitude: parseFloat(pair[1]), + })); + + const level3CoordinatesString = alertData.areaLevel3.substring(9, alertData.areaLevel3.length - 2); + const level3Coordinates = level3CoordinatesString .split(',') .map((coord: string) => coord.trim().split(' ')) .map((pair: string[]) => ({ @@ -114,7 +124,8 @@ export default function AlertIdScreen() { setAlert(alertData); setPolygon(coordinates); - setExtendedPolygon(extendedCoordinates); + setLevel2Polygon(level2Coordinates); + setLevel3Polygon(level3Coordinates); setRegion({ latitude: coordinates[0]?.latitude || region.latitude, longitude: coordinates[0]?.longitude || region.longitude, @@ -188,7 +199,12 @@ export default function AlertIdScreen() { fillColor="rgba(192, 57, 43, 0.4)" /> <Polygon - coordinates={extendedPolygon} + coordinates={level2Polygon} + strokeColor="#c0392b" + fillColor="rgba(192, 57, 43, 0.4)" + /> + <Polygon + coordinates={level3Polygon} strokeColor="#c0392b" fillColor="rgba(192, 57, 43, 0.4)" /> @@ -210,7 +226,6 @@ export default function AlertIdScreen() { color={theme === 'light' ? Colors.light.text : Colors.dark.text} style={styles.icon} /> - <ThemedText>{alert.level}</ThemedText> </ThemedView> </> )} diff --git a/app/(tabs)/alerts/index.tsx b/app/(tabs)/alerts/index.tsx index 9ba2cce..214839e 100644 --- a/app/(tabs)/alerts/index.tsx +++ b/app/(tabs)/alerts/index.tsx @@ -19,8 +19,6 @@ interface AlertData { id: string; userId: string; createdAt: string; - area: string; - level: string; } export default function AlertsScreen() { @@ -42,7 +40,7 @@ export default function AlertsScreen() { 'Content-Type': 'application/json', }, body: JSON.stringify({ - query: `{ alerts { id, userId, createdAt, area, level } }`, + query: `{ alerts { id, userId, createdAt } }`, }), } ); @@ -115,18 +113,7 @@ export default function AlertsScreen() { const renderAlert = ({ item }: { item: AlertData }) => ( <ThemedView style={styles.alertContainer}> - <View - style={[ - styles.alertBox, - { - backgroundColor: item.level === 'ONE' - ? '#27ae60' - : item.level === 'TWO' - ? '#e67e22' - : '#c0392b', - }, - ]} - > + <View style={styles.alertBox}> <Link href={`/alerts/${item.id}`} style={{ width: '100%' }} @@ -135,7 +122,6 @@ export default function AlertsScreen() { <Ionicons name="calendar-outline" size={18} - color="white" style={styles.icon} /> <ThemedText style={styles.dateText}> @@ -190,6 +176,7 @@ const styles = StyleSheet.create({ shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.1, shadowRadius: 4, + backgroundColor: '#fff' }, dateRow: { flexDirection: 'row', @@ -199,7 +186,7 @@ const styles = StyleSheet.create({ marginRight: 8, }, dateText: { - color: '#fff', + color: '#000', }, listContent: { paddingBottom: 32, diff --git a/app/(tabs)/notifications/[id].tsx b/app/(tabs)/notifications/[id].tsx index e2d39ba..4ec6f1a 100644 --- a/app/(tabs)/notifications/[id].tsx +++ b/app/(tabs)/notifications/[id].tsx @@ -20,8 +20,8 @@ interface AlertData { userId: string; createdAt: string; area: string; - extendedArea: string; - level: string; + areaLevel2: string; + areaLevel3: string; } interface PositionData { @@ -38,6 +38,7 @@ interface NotificationData { alert: AlertData; position: PositionData; seen: boolean; + level: string; createdAt: string; } @@ -58,7 +59,8 @@ export default function NotificationIdScreen() { }); const [coordinates, setCoordinates] = useState({ latitude: 44.49738301084014, longitude: 11.356121722966094 }); const [polygon, setPolygon] = useState<PolygonCoordinates[]>([]); - const [extendedPolygon, setExtendedPolygon] = useState<PolygonCoordinates[]>([]); + const [level2Polygon, setLevel2Polygon] = useState<PolygonCoordinates[]>([]); + const [level3Polygon, setLevel3Polygon] = useState<PolygonCoordinates[]>([]); const mapRef = useRef<MapView | null>(null); const checkAuth = useCallback(async () => { @@ -130,9 +132,10 @@ export default function NotificationIdScreen() { body: JSON.stringify({ query: `{ notifications(id: ${id}) { id, - alert { id, userId, createdAt, area, extendedArea, level, reachedUsers }, + alert { id, userId, createdAt, area, areaLevel2, areaLevel3, reachedUsers }, position {id, userId, createdAt, latitude, longitude, movingActivity}, seen, + level, createdAt } }`, }), @@ -154,8 +157,17 @@ export default function NotificationIdScreen() { latitude: parseFloat(pair[1]), })); - const extendedCoordinatesString = notificationData.alert.extendedArea.substring(9, notificationData.alert.extendedArea.length - 2); - const extendedCoordinates = extendedCoordinatesString + const level2CoordinatesString = notificationData.alert.areaLevel2.substring(9, notificationData.alert.areaLevel2.length - 2); + const level2Coordinates = level2CoordinatesString + .split(',') + .map((coord: string) => coord.trim().split(' ')) + .map((pair: string[]) => ({ + longitude: parseFloat(pair[0]), + latitude: parseFloat(pair[1]), + })); + + const level3CoordinatesString = notificationData.alert.areaLevel3.substring(9, notificationData.alert.areaLevel3.length - 2); + const level3Coordinates = level3CoordinatesString .split(',') .map((coord: string) => coord.trim().split(' ')) .map((pair: string[]) => ({ @@ -163,10 +175,12 @@ export default function NotificationIdScreen() { latitude: parseFloat(pair[1]), })); + setCoordinates({ latitude: notificationData.position.latitude, longitude: notificationData.position.longitude }); setNotification(notificationData); setPolygon(coordinates); - setExtendedPolygon(extendedCoordinates); + setLevel2Polygon(level2Coordinates); + setLevel3Polygon(level3Coordinates); setRegion({ latitude: coordinates[0]?.latitude || region.latitude, longitude: coordinates[0]?.longitude || region.longitude, @@ -248,7 +262,12 @@ export default function NotificationIdScreen() { fillColor="rgba(192, 57, 43, 0.4)" /> <Polygon - coordinates={extendedPolygon} + coordinates={level2Polygon} + strokeColor="#c0392b" + fillColor="rgba(192, 57, 43, 0.4)" + /> + <Polygon + coordinates={level3Polygon} strokeColor="#c0392b" fillColor="rgba(192, 57, 43, 0.4)" /> @@ -279,7 +298,7 @@ export default function NotificationIdScreen() { color={theme === 'light' ? Colors.light.text : Colors.dark.text} style={styles.icon} /> - <ThemedText>Level of alert: {notification.alert.level}</ThemedText> + <ThemedText>Level of alert: {notification.level}</ThemedText> </ThemedView> </> )} |