edgaras
05/30/2022, 6:56 PMjs
const getWriterData = async () => {
if (session) {
const { data: writerProfile, error } = await supabase
.from('writer_profiles')
.select('desired_title')
.eq('id', session.user.id)
.maybeSingle()
return writerProfile
}
}
useEffect(() => {
getWriterData().then((writerProfile) => {
setWriterData(writerProfile)
})
}, [getWriterData])
Needle
05/30/2022, 6:56 PMgaryaustin
05/30/2022, 7:53 PMNeedle
05/30/2022, 7:53 PMedgaras
05/30/2022, 8:02 PMjs
const getWriterData = async () => {
if (session) {
const { data, error } = await supabase
.from('writer_profiles')
.select('desired_title')
.eq('id', session.user.id)
.maybeSingle()
console.log(data)
setWriterData(data)
}
}
useEffect(() => {
getWriterData()
}, [session])
but I am not big fan of putting the setWriterData(data)
inside getWriterData function, because then it's specific to this particular page, and will be hard to move function to a seperate file later...RootKernel
05/30/2022, 8:19 PMjaitaiwan
05/30/2022, 9:54 PMferpintado
05/30/2022, 11:07 PMferpintado
05/30/2022, 11:11 PMjavascript
const { isLoading, isError, data: writerProfile, error } = useQuery('writerData', getWriterData)
edgaras
05/31/2022, 12:08 PMjs
useEffect(() => {
;(async () => {
if (session) {
const { data, error } = await postData<any>(
'/api/writer/get-or-create',
{},
session.access_token
)
}
})()
}, [session])
Is that weird? Also had to move the fetch logic to API route for security.
(postData is a helper function):
js
export async function postData<T>(
url: string,
body: unknown,
token?: string
): Promise<{
data: T | null
error: unknown | null
}> {
try {
const response = await axios.post(url, body, {
headers: {
'Content-Type': 'application/json',
token,
},
})
return {
data: response?.data ?? null,
error: null,
}
} catch (error) {
return {
data: null,
error: error,
}
}
}
jaitaiwan
05/31/2022, 2:08 PMedgaras
06/02/2022, 10:41 AMjaitaiwan
06/02/2022, 11:21 AM{} == {} // false
edgaras
06/02/2022, 3:05 PMsession
is defined as a useState const [session, setSession] = useState<Session | null>(null)
in user-context.tsx fileedgaras
06/02/2022, 3:06 PMsupabase.auth.session()
or supabase.auth.onAuthStateChange
is callededgaras
06/02/2022, 3:06 PMjsx
useEffect(() => {
const session = supabase.auth.session()
setSession(session)
setUser(
session?.user ? { id: session.user.id, email: session.user.email } : null
)
const { data: authListener } = supabase.auth.onAuthStateChange(
(event, session) => {
setSession(session)
setUser(
session?.user
? { id: session.user.id, email: session.user.email }
: null
)
}
)
return () => {
authListener?.unsubscribe()
}
}, [])
jaitaiwan
06/02/2022, 11:16 PMreturn authListener?.unsubscribe
seems it's a callable function.