import { Avatar, Button, Card, Colors, Dialog, FloatingButton, PanningProvider, Picker, Text, TextField, TouchableOpacity, View, } from "react-native-ui-lib"; import React, {useState} from "react"; import {ScrollView, StyleSheet} from "react-native"; import {PickerSingleValue} from "react-native-ui-lib/src/components/picker/types"; import {useCreateSubUser} from "@/hooks/firebase/useCreateSubUser"; import {ProfileType} from "@/contexts/AuthContext"; import {useGetFamilyMembers} from "@/hooks/firebase/useGetFamilyMembers"; import UserMenu from "@/components/pages/settings/user_settings_views/UserMenu"; import {uuidv4} from "@firebase/util"; const MyGroup = () => { const [showAddUserDialog, setShowAddUserDialog] = useState(false); const [showNewUserInfoDialog, setShowNewUserInfoDialog] = useState(false); const [selectedStatus, setSelectedStatus] = useState< string | PickerSingleValue >(ProfileType.CHILD); const [firstName, setFirstName] = useState(""); const [lastName, setLastName] = useState(""); const [email, setEmail] = useState(""); const [showQRCodeDialog, setShowQRCodeDialog] = useState(""); const {mutateAsync: createSubUser, isLoading, isError} = useCreateSubUser(); const {data: familyMembers} = useGetFamilyMembers(true); const parents = familyMembers?.filter((x) => x.userType === ProfileType.PARENT) ?? []; const children = familyMembers?.filter((x) => x.userType === ProfileType.CHILD) ?? []; const caregivers = familyMembers?.filter((x) => x.userType === ProfileType.CAREGIVER) ?? []; const familyDevices = familyMembers?.filter((x) => x.userType === ProfileType.FAMILY_DEVICE) ?? []; const handleCreateSubUser = async () => { if (!firstName || (selectedStatus !== ProfileType.FAMILY_DEVICE && !lastName)) { console.error("First name and last name are required"); return; } if (selectedStatus !== ProfileType.FAMILY_DEVICE && !email) { console.error("Email is required for non-family device users"); return; } if (email && !email.includes("@")) { console.error("Invalid email address"); return; } const res = await createSubUser({ firstName, lastName: selectedStatus === ProfileType.FAMILY_DEVICE ? "" : lastName, email: email || `placeholder_${uuidv4().split("-")[0]}@family.device`, password: uuidv4(), userType: selectedStatus as ProfileType, }); console.log(res) if (!isError) { setShowNewUserInfoDialog(false); if(res?.data?.userId) { setTimeout(() => { setShowQRCodeDialog(res.data.userId) }, 500) } } }; return ( {!parents.length && !children.length && !caregivers.length && ( {isLoading ? "Loading...." : "No user devices added"} )} {(!!parents.length || !!children.length) && ( <> Family {[...parents, ...children]?.map((member, index) => ( {member.firstName} {member.lastName} {member.userType === ProfileType.PARENT ? "Admin (You)" : "Child"} setShowQRCodeDialog("")} showQRCodeDialog={showQRCodeDialog === member?.uid} userId={member?.uid!}/> ))} )} {!!caregivers.length && ( <> Caregivers {caregivers?.map((member) => ( {member.firstName} {member.lastName} Caregiver setShowQRCodeDialog("")} showQRCodeDialog={showQRCodeDialog === member?.uid} userId={member?.uid!}/> ))} )} {!!familyDevices.length && ( <> Family Devices {familyDevices?.map((member, index) => ( {member.firstName} Family Device setShowQRCodeDialog("")} showQRCodeDialog={showQRCodeDialog === member?.uid} userId={member?.uid!}/> ))} )} setShowAddUserDialog(true), }} /> setShowAddUserDialog(false)} panDirection={PanningProvider.Directions.DOWN} > Add a new user device setShowAddUserDialog(false)} center> Return to user settings setShowNewUserInfoDialog(false)} > New User Information setShowAddUserDialog(false)}> X { }}> Upload User Profile Photo Member Status setSelectedStatus(item)} style={styles.picker} showSearch floatingPlaceholder > {selectedStatus === ProfileType.FAMILY_DEVICE ? "Device Name" : "First Name"} {selectedStatus !== ProfileType.FAMILY_DEVICE && ( <> Last Name )} {selectedStatus !== ProfileType.FAMILY_DEVICE && ( <> Email Address (Optional) )} ); }; const styles = StyleSheet.create({ card: { marginVertical: 15, backgroundColor: "white", width: "100%", borderRadius: 15, padding: 20, }, familyCard: { marginBottom: 10, borderRadius: 10, backgroundColor: Colors.white, width: "100%", }, inputField: { borderRadius: 50, paddingVertical: 12, paddingHorizontal: 16, backgroundColor: Colors.grey80, marginBottom: 16, borderColor: Colors.grey50, borderWidth: 1, height: 40, }, picker: { borderRadius: 50, paddingVertical: 12, paddingHorizontal: 16, backgroundColor: Colors.grey80, marginBottom: 16, borderColor: Colors.grey50, borderWidth: 1, marginTop: -20, height: 40, }, label: { marginBottom: 5, fontSize: 12, color: Colors.grey40, }, dialogCard: { borderRadius: 10, gap: 10, }, }); export default MyGroup;