Obanana_test/app/pages/profile/AccountAndSecurity.jsx

546 lines
16 KiB
React
Raw Permalink Normal View History

2024-02-12 08:58:57 +08:00
import {
faAngleDown,
faArrowLeft,
faEdit,
faPlus,
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-native-fontawesome";
import { useNavigation, useRoute } from "@react-navigation/native";
import React, { useEffect, useState } from "react";
import {
Image,
ScrollView,
StyleSheet,
Text,
TextInput,
TouchableOpacity,
View,
} from "react-native";
import * as ImagePicker from "expo-image-picker";
import {
get_barangays,
get_cities,
get_manila_cities,
get_provinces,
} from "../../services/addressApi/address";
import SelectDropdown from "react-native-select-dropdown";
import {
update_customer,
uploadImage,
} from "../../services/api/controllers/customers";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { useToast } from "react-native-toast-notifications";
const AccountAndSecurity = ({ route }) => {
const navigation = useNavigation();
const [unit, setunit] = useState("");
const { isrefresh, userData } = route.params ?? "";
const [street, setstreet] = useState("");
const [fName, setfName] = useState(userData.first_name ?? "");
const [lName, setlName] = useState(userData.last_name ?? "");
const [username, setusername] = useState(userData.user_login ?? "");
const [email, setemail] = useState(userData.user_email ?? "");
const [phone, setphone] = useState(userData.phone_number ?? "");
const [error, seterror] = useState("");
const [load, setload] = useState(false);
const toast = useToast();
const [selectedImage, setSelectedImage] = useState(null);
const [image, setimage] = useState(null);
// const route = useRoute();
// console.log("address " + address?.length);
const [user, setuser] = useState([]);
useEffect(() => {
/* ---------------Check for the user saved email--------------- */
AsyncStorage.getItem("userData")
.then((pass) => {
const userDataArray = JSON.parse(pass);
setuser(userDataArray);
console.log(pass);
})
.catch((error) => {
console.log(error + "weeewwww");
});
}, []);
console.log("addresss " + isrefresh);
const UpdateUser = () => {
console.log(userData._id);
setload(true);
if (image) {
uploadImage(image)
.then((result) => {
console.log("Image uploaded successfully:", result.data);
// Handle success (e.g., show success message)
// Alert.alert('Image uploaded successfully');
console.log(result.data.filename);
update_customer({
id: userData?._id ?? "",
body: {
first_name: fName,
last_name: lName,
user_login: username,
phone_number: phone,
customer_image: `https://api.obanana.shop/images/storage/customer_uploads/${result.data.filename}`,
},
})
.then((result3) => {
if (result3.error) {
seterror(result3.error);
} else {
// setaddreses(result3.data.addreses);
setload(false);
toast.show("Successfully updated user!", {
type: "success",
placement: "top",
duration: 2000,
offset: 30,
animationType: "slide-in",
});
navigation.navigate("AccountSettings", {
isrefresh: isrefresh === true ? false : true,
});
console.log(result3.data);
}
// update_customer({
// id: userData?._id ?? "",
// body: {
// last_name: lName,
// },
// })
// .then((result1) => {
// update_customer({
// id: userData?._id ?? "",
// body: {
// user_login: username,
// },
// })
// .then((result2) => {
// update_customer({
// id: userData?._id ?? "",
// body: {
// phone_number: phone,
// },
// })
// .then((result3) => {
// if (result3.error) {
// seterror(result3.error);
// } else {
// // setaddreses(result3.data.addreses);
// setload(false);
// navigation.navigate("AccountSettings", {
// isrefresh: isrefresh === true ? false : true,
// });
// console.log(result3.data);
// }
// })
// .catch((error) => {
// // setError(error.message);
// console.log(error.message);
// });
// })
// .catch((error) => {
// // setError(error.message);
// console.log(error.message);
// });
// })
// .catch((error) => {
// // setError(error.message);
// console.log(error.message);
// });
})
.catch((error) => {
// setError(error.message);
console.log(error.message);
})
.finally(() => {
// setprodIsLoading(false); // Set loading to false when done loading
// console.log(result.data);
});
})
.catch((error) => {
console.error("Error uploading image:", error);
// Handle error (e.g., show error message)
// Alert.alert('Error uploading image');
});
} else {
update_customer({
id: userData?._id ?? "",
body: {
first_name: fName,
last_name: lName,
user_login: username,
phone_number: phone,
// customer_image: `https://api.obanana.shop/images/storage/vendor_uploads/${result.filename}`,
},
})
.then((result3) => {
if (result3.error) {
seterror(result3.error);
} else {
// setaddreses(result3.data.addreses);
setload(false);
toast.show("Successfully updated user!", {
type: "success",
placement: "top",
duration: 2000,
offset: 30,
animationType: "slide-in",
});
navigation.navigate("AccountSettings", {
isrefresh: isrefresh === true ? false : true,
});
console.log(result3.data);
}
// update_customer({
// id: userData?._id ?? "",
// body: {
// last_name: lName,
// },
// })
// .then((result1) => {
// update_customer({
// id: userData?._id ?? "",
// body: {
// user_login: username,
// },
// })
// .then((result2) => {
// update_customer({
// id: userData?._id ?? "",
// body: {
// phone_number: phone,
// },
// })
// .then((result3) => {
// if (result3.error) {
// seterror(result3.error);
// } else {
// // setaddreses(result3.data.addreses);
// setload(false);
// navigation.navigate("AccountSettings", {
// isrefresh: isrefresh === true ? false : true,
// });
// console.log(result3.data);
// }
// })
// .catch((error) => {
// // setError(error.message);
// console.log(error.message);
// });
// })
// .catch((error) => {
// // setError(error.message);
// console.log(error.message);
// });
// })
// .catch((error) => {
// // setError(error.message);
// console.log(error.message);
// });
})
.catch((error) => {
// setError(error.message);
console.log(error.message);
})
.finally(() => {
// setprodIsLoading(false); // Set loading to false when done loading
// console.log(result.data);
});
}
};
const selectImage = async () => {
const permissionResult =
await ImagePicker.requestMediaLibraryPermissionsAsync();
if (permissionResult.granted === false) {
Alert.alert("Permission to access camera roll is required!");
return;
}
const pickerResult = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.Images,
allowsEditing: true,
aspect: [4, 3],
quality: 1,
});
if (!pickerResult.canceled) {
setSelectedImage({ localUri: pickerResult.assets[0].uri });
// Prepare image data for upload
const imageData = {
image_id: userData._id,
category: "customer",
imageFile: {
uri: pickerResult.assets[0].uri,
type: "image/jpeg", // Adjust the type if needed
name: "image.jpg", // Adjust the name if needed
},
};
setimage(imageData);
// Call your uploadImage function
console.log(imageData);
}
};
return (
<View style={styles.container}>
<View style={styles.header}>
<TouchableOpacity
onPress={() =>
navigation.navigate("AccountSettings", { isrefresh: { isrefresh } })
}
style={styles.backIcon}
>
<FontAwesomeIcon icon={faArrowLeft} color={"#d4c600"} size={25} />
</TouchableOpacity>
<Text style={styles.headerText}>Edit Profile</Text>
</View>
<ScrollView style={styles.wrapper}>
{/* <Text style={styles.text}>Content</Text> */}
<View style={styles.wrap}>
<View style={styles.accountPrev}>
<TouchableOpacity
style={styles.accountPrevWrap}
onPress={() => {
selectImage();
}}
>
{selectedImage ? (
<Image
style={{
width: 100,
height: 100,
resizeMode: "cover",
borderRadius: 100,
// marginLeft: 20,
}}
source={{
uri: selectedImage.localUri,
}}
/>
) : (
<Image
style={{
width: 100,
height: 100,
resizeMode: "cover",
borderRadius: 100,
// marginLeft: 20,
}}
source={{
uri:
userData.customer_image ??
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQyvLBxIU54Q3fueLL83PvG1eNSofzpwE-iwA&usqp=CAU",
}}
/>
)}
<View style={styles.editprof}>
<FontAwesomeIcon icon={faEdit} size={24} color={"#333"} />
</View>
</TouchableOpacity>
</View>
<View style={styles.wrapMiddleFormInput}>
<Text style={styles.inputText}>First Name:</Text>
<TextInput
style={styles.input}
onChangeText={(e) => {
setfName(e);
}}
value={fName}
placeholder=""
// keyboardType="numeric"
// secureTextEntry={true}
/>
</View>
<View style={styles.wrapMiddleFormInput}>
<Text style={styles.inputText}>Last Name:</Text>
<TextInput
style={styles.input}
onChangeText={(e) => {
setlName(e);
}}
value={lName}
placeholder=""
// keyboardType="numeric"
// secureTextEntry={true}
/>
</View>
<View style={styles.wrapMiddleFormInput}>
<Text style={styles.inputText}>Username:</Text>
<TextInput
style={styles.input}
onChangeText={(e) => {
setusername(e);
}}
value={username}
placeholder=""
// keyboardType="numeric"
// secureTextEntry={true}
/>
</View>
<View style={styles.wrapMiddleFormInput}>
<Text style={styles.inputText}>Phone Number:</Text>
{/* <View style={styles.inputNum}> */}
{/* <Text>+63 </Text> */}
<TextInput
style={styles.input}
onChangeText={(e) => {
setphone(e);
}}
value={phone}
// placeholder="9*********"
// keyboardType="numeric"
// secureTextEntry={true}
/>
{/* </View> */}
</View>
{/* <View style={styles.wrapMiddleFormInput}>
<Text style={styles.inputText}>Email:(optional)</Text>
<TextInput
style={styles.input}
onChangeText={(e) => {
setemail(e);
}}
value={email}
placeholder=""
// keyboardType="numeric"
// secureTextEntry={true}
/>
</View> */}
</View>
</ScrollView>
<View style={styles.footer}>
<TouchableOpacity style={styles.footerBtn} onPress={() => UpdateUser()}>
<Text style={styles.footerBtnText}>Save</Text>
</TouchableOpacity>
</View>
</View>
);
};
const styles = StyleSheet.create({
container: {
backgroundColor: "#ffff",
width: "100%",
height: "100%",
},
wrapper: {
height: "100%",
width: "100%",
marginBottom: 60,
},
wrap: {
height: "100%",
width: "100%",
justifyContent: "center",
alignItems: "center",
paddingTop: 30,
},
header: {
alignItems: "center",
width: "100%",
top: 0,
paddingLeft: 15,
flexDirection: "row",
borderColor: "#ddd",
paddingBottom: 15,
borderBottomWidth: 1,
},
headerText: {
fontSize: 16,
fontWeight: "600",
marginLeft: 25,
},
wrapMiddleFormInput: {
marginVertical: 6,
},
input: {
height: 50,
width: 300,
margin: 10,
borderWidth: 1,
padding: 15,
borderColor: "#bebebe",
borderRadius: 10,
backgroundColor: "#fff",
},
inputNum: {
height: 50,
width: 300,
margin: 5,
borderWidth: 1,
padding: 10,
borderColor: "#bebebe",
borderRadius: 10,
flexDirection: "row",
// justifyContent: "center",9
alignItems: "center",
backgroundColor: "#fff",
},
inputText: {
marginLeft: 15,
fontSize: 13,
fontWeight: "600",
},
footer: {
position: "absolute",
bottom: 0,
width: "100%",
justifyContent: "center",
alignItems: "center",
paddingVertical: 10,
},
footerBtn: {
backgroundColor: "#ff5e00",
width: "90%",
paddingVertical: 10,
justifyContent: "center",
borderRadius: 20,
alignItems: "center",
flexDirection: "row",
},
footerBtnText: {
color: "#fff",
fontSize: 16,
marginRight: 10,
},
selectBtnText: {
color: "#929292",
fontSize: 15,
marginRight: 10,
letterSpacing: 0.6,
},
editprof: {
position: "absolute",
right: 0,
bottom: 5,
},
accountPrev: {
marginBottom: 25,
},
accountPrevWrap: {
borderWidth: 4,
borderStyle: "dashed",
borderColor: "#ffaa00c0",
padding: 10,
margin: 15,
},
});
export default AccountAndSecurity;