feat: Standort hinzugefügt
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import AsyncStorage from "@react-native-async-storage/async-storage";
|
||||
import * as LocalAuthentication from "expo-local-authentication";
|
||||
import * as Location from "expo-location";
|
||||
import { useRouter } from "expo-router";
|
||||
import * as SQLite from "expo-sqlite";
|
||||
import React, { useEffect, useState } from "react";
|
||||
@@ -22,6 +23,10 @@ interface User {
|
||||
email: string;
|
||||
firstName: string;
|
||||
lastName: string;
|
||||
residence: string;
|
||||
workplace: string;
|
||||
latitude: string;
|
||||
longitude: string;
|
||||
createdAt: string;
|
||||
}
|
||||
|
||||
@@ -37,6 +42,10 @@ export default function AuthScreen() {
|
||||
const [password, setPassword] = useState("");
|
||||
const [firstName, setFirstName] = useState("");
|
||||
const [lastName, setLastName] = useState("");
|
||||
const [residence, setResidence] = useState("");
|
||||
const [workplace, setWorkplace] = useState("");
|
||||
const [latitude, setLatitude] = useState<string | null>(null);
|
||||
const [longitude, setLongitude] = useState<string | null>(null);
|
||||
const [biometricSupported, setBiometricSupported] = useState(false);
|
||||
const [showCalendar, setShowCalendar] = useState(false);
|
||||
|
||||
@@ -61,6 +70,10 @@ export default function AuthScreen() {
|
||||
firstName TEXT NOT NULL,
|
||||
lastName TEXT NOT NULL,
|
||||
password TEXT NOT NULL,
|
||||
residence TEXT,
|
||||
workplace TEXT,
|
||||
latitude TEXT,
|
||||
longitude TEXT,
|
||||
createdAt TEXT NOT NULL
|
||||
)
|
||||
`);
|
||||
@@ -85,7 +98,14 @@ export default function AuthScreen() {
|
||||
};
|
||||
|
||||
const handleRegister = async () => {
|
||||
if (!email || !password || !firstName || !lastName) {
|
||||
if (
|
||||
!email ||
|
||||
!password ||
|
||||
!firstName ||
|
||||
!lastName ||
|
||||
!residence ||
|
||||
!workplace
|
||||
) {
|
||||
Alert.alert("Fehler", "Bitte füllen Sie alle Felder aus.");
|
||||
return;
|
||||
}
|
||||
@@ -105,8 +125,18 @@ export default function AuthScreen() {
|
||||
|
||||
const createdAt = new Date().toISOString();
|
||||
const result = await db.runAsync(
|
||||
"INSERT INTO users (email, firstName, lastName, password, createdAt) VALUES (?, ?, ?, ?, ?)",
|
||||
[email, firstName, lastName, password, createdAt]
|
||||
"INSERT INTO users (email, firstName, lastName, password, residence, workplace, latitude, longitude, createdAt) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||
[
|
||||
email,
|
||||
firstName,
|
||||
lastName,
|
||||
password,
|
||||
residence,
|
||||
workplace,
|
||||
latitude ?? "",
|
||||
longitude ?? "",
|
||||
createdAt,
|
||||
]
|
||||
);
|
||||
|
||||
const newUser: User = {
|
||||
@@ -114,6 +144,10 @@ export default function AuthScreen() {
|
||||
email,
|
||||
firstName,
|
||||
lastName,
|
||||
residence,
|
||||
workplace,
|
||||
latitude: latitude ?? "",
|
||||
longitude: longitude ?? "",
|
||||
createdAt,
|
||||
};
|
||||
|
||||
@@ -162,6 +196,10 @@ export default function AuthScreen() {
|
||||
email: result.email,
|
||||
firstName: result.firstName,
|
||||
lastName: result.lastName,
|
||||
residence: result.residence,
|
||||
workplace: result.workplace,
|
||||
latitude: result.latitude,
|
||||
longitude: result.longitude,
|
||||
createdAt: result.createdAt,
|
||||
};
|
||||
|
||||
@@ -202,6 +240,10 @@ export default function AuthScreen() {
|
||||
email: user.email,
|
||||
firstName: user.firstName,
|
||||
lastName: user.lastName,
|
||||
residence: user.residence,
|
||||
workplace: user.workplace,
|
||||
latitude: user.latitude,
|
||||
longitude: user.longitude,
|
||||
createdAt: user.createdAt,
|
||||
};
|
||||
|
||||
@@ -227,11 +269,37 @@ export default function AuthScreen() {
|
||||
setPassword("");
|
||||
setFirstName("");
|
||||
setLastName("");
|
||||
setResidence("");
|
||||
setWorkplace("");
|
||||
setLatitude(null);
|
||||
setLongitude(null);
|
||||
} catch (error) {
|
||||
Alert.alert("Fehler", "Abmeldung fehlgeschlagen.");
|
||||
}
|
||||
};
|
||||
|
||||
const handleUseLocation = async () => {
|
||||
try {
|
||||
const { status } = await Location.requestForegroundPermissionsAsync();
|
||||
if (status !== "granted") {
|
||||
Alert.alert("Fehler", "Standortberechtigung nicht erteilt.");
|
||||
return;
|
||||
}
|
||||
const loc = await Location.getCurrentPositionAsync({});
|
||||
setLatitude(loc.coords.latitude.toString());
|
||||
setLongitude(loc.coords.longitude.toString());
|
||||
const addr = await Location.reverseGeocodeAsync({
|
||||
latitude: loc.coords.latitude,
|
||||
longitude: loc.coords.longitude,
|
||||
});
|
||||
if (addr && addr.length > 0) {
|
||||
setResidence(addr[0].city || addr[0].region || "");
|
||||
}
|
||||
} catch (e) {
|
||||
Alert.alert("Fehler", "Standort konnte nicht ermittelt werden.");
|
||||
}
|
||||
};
|
||||
|
||||
if (loading) {
|
||||
return (
|
||||
<SafeAreaView style={styles.container}>
|
||||
@@ -305,6 +373,30 @@ export default function AuthScreen() {
|
||||
onChangeText={setLastName}
|
||||
autoCapitalize="words"
|
||||
/>
|
||||
|
||||
<TextInput
|
||||
style={styles.input}
|
||||
placeholder="Wohnort"
|
||||
value={residence}
|
||||
onChangeText={setResidence}
|
||||
/>
|
||||
<TextInput
|
||||
style={styles.input}
|
||||
placeholder="Arbeitsplatz / Uni / Schule"
|
||||
value={workplace}
|
||||
onChangeText={setWorkplace}
|
||||
/>
|
||||
<TouchableOpacity
|
||||
style={[
|
||||
styles.submitButton,
|
||||
{ backgroundColor: "#34C759", marginBottom: 10 },
|
||||
]}
|
||||
onPress={handleUseLocation}
|
||||
>
|
||||
<Text style={styles.submitButtonText}>
|
||||
Aktuellen Standort verwenden
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
</>
|
||||
)}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user