From 137032684c290e288e84480003be9ca8b30f6f61 Mon Sep 17 00:00:00 2001 From: btoo <8883465+btoo@users.noreply.github.com> Date: Thu, 29 Dec 2022 01:47:35 -0500 Subject: [PATCH 1/2] fix several issues with nextjs-slack-clone: - fix session restoration in nextjs-slack-clone (setUser needs to be called from not only onAuthStateChange but also getSession) - fix message listener unmounting (supabase.removeChannel expects a RealtimeChannel, not a string) - fix fetchMessages order (ascending option must be provided within an options object) --- .../nextjs-slack-clone/lib/Store.js | 8 +++---- .../nextjs-slack-clone/pages/_app.js | 21 ++++++++----------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/examples/slack-clone/nextjs-slack-clone/lib/Store.js b/examples/slack-clone/nextjs-slack-clone/lib/Store.js index 5a3b8427bf9..974e2cbd9da 100644 --- a/examples/slack-clone/nextjs-slack-clone/lib/Store.js +++ b/examples/slack-clone/nextjs-slack-clone/lib/Store.js @@ -62,9 +62,9 @@ export const useStore = (props) => { .subscribe() // Cleanup on unmount return () => { - supabase.removeChannel('public:messages') - supabase.removeChannel('public:users') - supabase.removeChannel('public:channels') + supabase.removeChannel(supabase.channel('public:messages')) + supabase.removeChannel(supabase.channel('public:users')) + supabase.removeChannel(supabase.channel('public:channels')) } }, []) @@ -179,7 +179,7 @@ export const fetchMessages = async (channelId, setState) => { .from('messages') .select(`*, author:user_id(*)`) .eq('channel_id', channelId) - .order('inserted_at', true) + .order('inserted_at', { ascending: true }) if (setState) setState(data) return data } catch (error) { diff --git a/examples/slack-clone/nextjs-slack-clone/pages/_app.js b/examples/slack-clone/nextjs-slack-clone/pages/_app.js index 0331451de47..3db2d706fa3 100644 --- a/examples/slack-clone/nextjs-slack-clone/pages/_app.js +++ b/examples/slack-clone/nextjs-slack-clone/pages/_app.js @@ -12,17 +12,10 @@ export default function SupabaseSlackClone({ Component, pageProps }) { const router = useRouter() useEffect(() => { - supabase.auth.getSession().then(({ data: { session }}) => { - setSession(session) - setUserLoaded(session ? true : false) - if (session?.user) { - signIn() - router.push('/channels/[id]', '/channels/1') - } - }) - - - const { subscription: authListener } = supabase.auth.onAuthStateChange(async (event, session) => { + function saveSession( + /** @type {Awaited>['data']['session']} */ + session + ) { setSession(session) const currentUser = session?.user setUser(currentUser ?? null) @@ -31,7 +24,11 @@ export default function SupabaseSlackClone({ Component, pageProps }) { signIn(currentUser.id, currentUser.email) router.push('/channels/[id]', '/channels/1') } - }) + } + + supabase.auth.getSession().then(({ data: { session }}) => saveSession(session)) + + const { subscription: authListener } = supabase.auth.onAuthStateChange(async (event, session) => saveSession(session)) return () => { authListener.unsubscribe() From 480d5cefef30cc9ea1fd63bdd9e966568f98b38c Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Thu, 20 Apr 2023 12:29:27 +1000 Subject: [PATCH 2/2] fix: use existing channel variables --- examples/slack-clone/nextjs-slack-clone/lib/Store.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/slack-clone/nextjs-slack-clone/lib/Store.js b/examples/slack-clone/nextjs-slack-clone/lib/Store.js index 974e2cbd9da..a6e4623efda 100644 --- a/examples/slack-clone/nextjs-slack-clone/lib/Store.js +++ b/examples/slack-clone/nextjs-slack-clone/lib/Store.js @@ -62,9 +62,9 @@ export const useStore = (props) => { .subscribe() // Cleanup on unmount return () => { - supabase.removeChannel(supabase.channel('public:messages')) - supabase.removeChannel(supabase.channel('public:users')) - supabase.removeChannel(supabase.channel('public:channels')) + supabase.removeChannel(supabase.channel(messageListener)) + supabase.removeChannel(supabase.channel(userListener)) + supabase.removeChannel(supabase.channel(channelListener)) } }, [])