From 28816a0e86d828dfd10a6bc5a1b1647f90fcc322 Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Tue, 10 Jun 2025 21:05:22 +0200 Subject: [PATCH] Add login info + temporary work --- sql/01_username_is_not_unique.sql | 5 ++ sql/02_add_default_values.sql | 4 ++ sql/03_add_email.sql | 2 + sql/04_add_trigger.sql | 14 ++++++ xtablo-expo/app/(auth)/login.tsx | 2 +- xtablo-expo/app/(auth)/signup.tsx | 2 +- xtablo-expo/app/(home)/(tabs)/profile.tsx | 34 ++++--------- xtablo-expo/app/(home)/_layout.tsx | 22 ++++----- xtablo-expo/lib/database.types.ts | 6 +-- xtablo-expo/package-lock.json | 58 +++++++++++------------ xtablo-expo/package.json | 4 +- xtablo-expo/providers/UserProvider.tsx | 55 +++++++++++++++++++++ 12 files changed, 135 insertions(+), 73 deletions(-) create mode 100644 sql/01_username_is_not_unique.sql create mode 100644 sql/02_add_default_values.sql create mode 100644 sql/03_add_email.sql create mode 100644 sql/04_add_trigger.sql create mode 100644 xtablo-expo/providers/UserProvider.tsx diff --git a/sql/01_username_is_not_unique.sql b/sql/01_username_is_not_unique.sql new file mode 100644 index 0000000..93aeade --- /dev/null +++ b/sql/01_username_is_not_unique.sql @@ -0,0 +1,5 @@ +ALTER TABLE profiles +DROP CONSTRAINT IF EXISTS profiles_username_key; + +-- ALTER TABLE profiles +-- ADD CONSTRAINT profiles_username_key UNIQUE (username); diff --git a/sql/02_add_default_values.sql b/sql/02_add_default_values.sql new file mode 100644 index 0000000..ea53796 --- /dev/null +++ b/sql/02_add_default_values.sql @@ -0,0 +1,4 @@ +ALTER TABLE profiles +ALTER COLUMN full_name SET DEFAULT NULL, +ALTER COLUMN avatar_url SET DEFAULT NULL, +ALTER COLUMN updated_at SET DEFAULT CURRENT_TIMESTAMP; diff --git a/sql/03_add_email.sql b/sql/03_add_email.sql new file mode 100644 index 0000000..83aa586 --- /dev/null +++ b/sql/03_add_email.sql @@ -0,0 +1,2 @@ +ALTER TABLE profiles +ADD COLUMN email varchar; diff --git a/sql/04_add_trigger.sql b/sql/04_add_trigger.sql new file mode 100644 index 0000000..a6b7ca2 --- /dev/null +++ b/sql/04_add_trigger.sql @@ -0,0 +1,14 @@ +CREATE FUNCTION + public.create_profile_for_new_user() + RETURNS TRIGGER AS + $$ + BEGIN + INSERT INTO public.profiles (id, full_name, email) + VALUES ( + NEW.id, + NEW.raw_user_meta_data ->> 'user_name', + NEW.email + ); + RETURN NEW; + END; + $$ LANGUAGE plpgsql SECURITY DEFINER; \ No newline at end of file diff --git a/xtablo-expo/app/(auth)/login.tsx b/xtablo-expo/app/(auth)/login.tsx index 2ef0841..e1b42ec 100644 --- a/xtablo-expo/app/(auth)/login.tsx +++ b/xtablo-expo/app/(auth)/login.tsx @@ -1,6 +1,6 @@ import React, { useState } from "react"; import { StyleSheet, View, Text } from "react-native"; -import { Button, Input } from "@rneui/themed"; +import { Button, Input } from "@rn-vui/themed"; import { useAuth } from "@/stores/auth"; import { Link } from "expo-router"; diff --git a/xtablo-expo/app/(auth)/signup.tsx b/xtablo-expo/app/(auth)/signup.tsx index d98f690..6b699bc 100644 --- a/xtablo-expo/app/(auth)/signup.tsx +++ b/xtablo-expo/app/(auth)/signup.tsx @@ -1,6 +1,6 @@ import React, { useState } from "react"; import { StyleSheet, View, Text } from "react-native"; -import { Button, Input } from "@rneui/themed"; +import { Button, Input } from "@rn-vui/themed"; import { useAuth } from "@/stores/auth"; import { Link } from "expo-router"; diff --git a/xtablo-expo/app/(home)/(tabs)/profile.tsx b/xtablo-expo/app/(home)/(tabs)/profile.tsx index 7330363..51e4ee3 100644 --- a/xtablo-expo/app/(home)/(tabs)/profile.tsx +++ b/xtablo-expo/app/(home)/(tabs)/profile.tsx @@ -1,34 +1,18 @@ import { View, StyleSheet } from "react-native"; import { useAuth } from "@/stores/auth"; -import { Avatar, Button, Input } from "@rneui/themed"; -import { Card, ListItem } from "@rneui/themed"; +import { Avatar, Button, Input } from "@rn-vui/themed"; +import { Card, ListItem } from "@rn-vui/themed"; import { useState } from "react"; -import { useGetUser } from "@/hooks/user"; +import { useUser } from "@/providers/UserProvider"; export default function ProfileScreen() { const signOut = useAuth((state) => state.signOut); - const { user } = useGetUser(); + const user = useUser(); const [displayName, setDisplayName] = useState(user?.full_name || ""); const [isEditing, setIsEditing] = useState(false); - const handleSignOut = async () => { - await signOut(); - }; - - // const handleSaveDisplayName = async () => { - // if (setUser && user) { - // await setUser({ - // avatar_url: user.avatar_url || null, - // full_name: displayName || null, - // id: user.id, - // updated_at: user.updated_at || null, - // username: user.username || null, - // website: user.website || null, - // }); - // setIsEditing(false); - // } - // }; + console.log({ user }); return ( @@ -40,7 +24,7 @@ export default function ProfileScreen() { containerStyle={styles.avatar} /> - {user?.email} + {user?.full_name} @@ -72,7 +56,7 @@ export default function ProfileScreen() { /> ) : ( - {user?.displayName || "Not Set"} + {user?.full_name || "Not Set"} )} @@ -87,7 +71,7 @@ export default function ProfileScreen() { if (isEditing) { // handleSaveDisplayName(); } else { - setDisplayName(user?.displayName || ""); + setDisplayName(user?.full_name || ""); setIsEditing(true); } }} @@ -96,7 +80,7 @@ export default function ProfileScreen() {