From 38f073c5ac6c4f169727c1675c0dfc95ddc203e3 Mon Sep 17 00:00:00 2001 From: gibbyb Date: Thu, 10 Oct 2024 13:02:09 -0500 Subject: [PATCH] Update home screen. --- app/(tabs)/_layout.tsx | 2 +- app/(tabs)/index.tsx | 135 +++++++++--------- app/(tabs)/messages.tsx | 15 +- assets/images/default-profile.png | Bin 0 -> 30925 bytes components/auth/SignInScreen.tsx | 7 - components/chat/CustomView.tsx | 3 +- components/home/TestPush.tsx | 89 ++++++++++++ .../services/securestorage/UserData.tsx | 7 - 8 files changed, 167 insertions(+), 91 deletions(-) create mode 100644 assets/images/default-profile.png create mode 100644 components/home/TestPush.tsx diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx index 3c4359c..3e9277e 100644 --- a/app/(tabs)/_layout.tsx +++ b/app/(tabs)/_layout.tsx @@ -10,7 +10,7 @@ const TabLayout = () => { { const scheme = useColorScheme() ?? 'light'; - const [pushToken, setPushToken] = useState(null); + const [userData, setUserData] = useState(null); useEffect(() => { const fetchUserData = async () => { - const userData = await getUserData(); - if (userData) { - setPushToken(userData.pushToken); + try { + const data = await getUserData(); + setUserData(data); + } catch (error) { + console.error("Error fetching user data:", error); + Alert.alert("Error", "Failed to load user data"); } }; + fetchUserData(); }, []); - const sendPushNotification = async () => { - if (!pushToken) { - Alert.alert('Error', 'Push token not available'); - return; + const handleUpdateProfilePicture = async () => { + const permissionResult = await ImagePicker.requestMediaLibraryPermissionsAsync(); + + if (permissionResult.granted === false) { + Alert.alert("Permission Required", "You need to grant permission to access your photos"); + return; } - const message = { - to: pushToken, - sound: 'default', - title: 'Hey Baby!', - body: 'Are you ready for push notifications?!?', - data: { - someData: 'goes here' - }, - }; + const result = await ImagePicker.launchImageLibraryAsync({ + mediaTypes: ImagePicker.MediaTypeOptions.Images, + allowsEditing: true, + aspect: [1, 1], + quality: 1, + }); - try { - const response = await fetch(`https://exp.host/--/api/v2/push/send`, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Accept-encoding': 'gzip, deflate', - 'Content-Type': 'application/json', - }, - body: JSON.stringify(message), - }); - - const result = await response.json(); - console.log('Result:', result); - Alert.alert('Success', 'Push notification sent successfully'); - - } catch (error) { - console.error('Error sending push notification:', error); - Alert.alert('Error', 'Failed to send push notification'); + if (!result.canceled) { + // Here you would typically upload the image to your server + // and update the user's profile picture URL + console.log("Selected image:", result.assets[0].uri); + // For now, let's just update the local state + setUserData(prevData => prevData ? {...prevData, pfpURL: result.assets[0].uri} : null); } }; return ( - - Home Screen - + {userData ? ( + + + + + {userData.fullName} + {userData.appleEmail} + + ) : ( + Loading user data... + )} - + {/* Add your relationship request button or other components here */} ); } + export default Index; const styles = StyleSheet.create({ container: { flex: 1, alignItems: 'center', - justifyContent: 'center', }, - text: { + profileContainer: { + alignItems: 'center', + marginTop: 20, + marginBottom: 20, + }, + profilePicture: { + width: 100, + height: 100, + borderRadius: 50, + marginBottom: 10, + }, + name: { fontSize: 24, + fontWeight: 'bold', + marginBottom: 5, + }, + email: { + fontSize: 16, + marginBottom: 20, }, footerContainer: { flex: 1 / 3, alignItems: 'center', }, - buttonLabel: { - fontSize: 16, - }, - buttonIcon: { - paddingRight: 8, - }, }); diff --git a/app/(tabs)/messages.tsx b/app/(tabs)/messages.tsx index cc95d10..6c35b87 100644 --- a/app/(tabs)/messages.tsx +++ b/app/(tabs)/messages.tsx @@ -11,25 +11,19 @@ import { SystemMessage, } from 'react-native-gifted-chat' import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context' -import NavBar from '@/components/chat/NavBar' import AccessoryBar from '@/components/chat/AccessoryBar' import CustomActions from '@/components/chat/CustomActions' import CustomView from '@/components/chat/CustomView' import earlierMessages from '@/components/chat/data/earlierMessages' import messagesData from '@/components/chat/data/messages' import * as Clipboard from 'expo-clipboard' +//import NavBar from '@/components/chat/NavBar' const user = { _id: 1, name: 'Developer', } -// const otherUser = { -// _id: 2, -// name: 'React Native', -// avatar: 'https://facebook.github.io/react/img/logo_og.png', -// } - interface IState { messages: any[] step: number @@ -125,7 +119,7 @@ const App = () => { { pattern: /#(\w+)/, style: { textDecorationLine: 'underline', color: 'darkorange' }, - onPress: () => Linking.openURL('http://gifted.chat'), + onPress: () => Linking.openURL('https://gbrown.org'), }, ] }, []) @@ -264,7 +258,6 @@ const App = () => { return ( - { fontWeight: '200', }} renderQuickReplySend={renderQuickReplySend} - renderAccessory={renderAccessory} + //renderAccessory={renderAccessory} renderActions={renderCustomActions} renderSystemMessage={renderSystemMessage} renderCustomView={renderCustomView} @@ -315,6 +308,8 @@ const styles = StyleSheet.create({ fill: { flex: 1, }, + sendLine: { + } }) export default AppWrapper diff --git a/assets/images/default-profile.png b/assets/images/default-profile.png new file mode 100644 index 0000000000000000000000000000000000000000..0f5b1ff24152d632fe39d97e6ee1766273b3deed GIT binary patch literal 30925 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 literal 0 HcmV?d00001 diff --git a/components/auth/SignInScreen.tsx b/components/auth/SignInScreen.tsx index 645a2f9..5812d66 100644 --- a/components/auth/SignInScreen.tsx +++ b/components/auth/SignInScreen.tsx @@ -7,13 +7,6 @@ import * as Notifications from 'expo-notifications'; import Constants from 'expo-constants'; import { saveUserData } from '@/components/services/securestorage/UserData'; -type UserData = { - appleId: string; - appleEmail: string; - fullName: string; - pushToken: string; -}; - export default function SignInScreen({ onSignIn }: { onSignIn: () => void }) { const scheme = useColorScheme() ?? 'light'; diff --git a/components/chat/CustomView.tsx b/components/chat/CustomView.tsx index 98a8e81..ec0bd7a 100644 --- a/components/chat/CustomView.tsx +++ b/components/chat/CustomView.tsx @@ -82,7 +82,8 @@ const CustomView = ({ export default CustomView const styles = StyleSheet.create({ - container: {}, + container: { + }, mapView: { width: 150, height: 100, diff --git a/components/home/TestPush.tsx b/components/home/TestPush.tsx new file mode 100644 index 0000000..0884e77 --- /dev/null +++ b/components/home/TestPush.tsx @@ -0,0 +1,89 @@ +import React, { useEffect, useState } from "react"; +import { StyleSheet, Alert } from "react-native"; +import { ThemedText } from "@/components/ThemedText"; +import { Colors } from '@/constants/Colors'; +import { useColorScheme } from '@/hooks/useColorScheme'; +import FontAwesome from "@expo/vector-icons/FontAwesome"; +import Button from "@/components/buttons/Button"; +import { getUserData } from "@/components/services/securestorage/UserData"; + +const TestPush = () => { + const scheme = useColorScheme() ?? 'light'; + const [pushToken, setPushToken] = useState(null); + + useEffect(() => { + const fetchUserData = async () => { + const userData = await getUserData(); + if (userData) { + setPushToken(userData.pushToken); + } + }; + fetchUserData(); + }, []); + + const sendPushNotification = async () => { + if (!pushToken) { + Alert.alert('Error', 'Push token not available'); + return; + } + + const message = { + to: pushToken, + sound: 'default', + title: 'Hey Baby!', + body: 'Are you ready for push notifications?!?', + data: { + someData: 'goes here' + }, + }; + + try { + const response = await fetch(`https://exp.host/--/api/v2/push/send`, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Accept-encoding': 'gzip, deflate', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(message), + }); + + const result = await response.json(); + console.log('Result:', result); + Alert.alert('Success', 'Push notification sent successfully'); + + } catch (error) { + console.error('Error sending push notification:', error); + Alert.alert('Error', 'Failed to send push notification'); + } + }; + + return ( + + ); + +}; +export default TestPush; + +const styles = StyleSheet.create({ + buttonLabel: { + fontSize: 16, + }, + buttonIcon: { + paddingRight: 8, + }, +}); diff --git a/components/services/securestorage/UserData.tsx b/components/services/securestorage/UserData.tsx index 6268a12..22ba941 100644 --- a/components/services/securestorage/UserData.tsx +++ b/components/services/securestorage/UserData.tsx @@ -1,12 +1,5 @@ import * as SecureStore from 'expo-secure-store'; -type UserData = { - appleId: string; - appleEmail: string; - fullName: string; - pushToken: string; -}; - export const saveUserData = async (userData: any) => { try { await SecureStore.setItemAsync('userData', JSON.stringify(userData));