import { AuthSession } from '@supabase/supabase-js' import { Component, createEffect, createSignal } from 'solid-js' import Avatar from './Avatar' import { supabase } from './supabaseClient' interface Props { session: AuthSession } const Account: Component = ({ session }) => { const [loading, setLoading] = createSignal(true) const [username, setUsername] = createSignal(null) const [website, setWebsite] = createSignal(null) const [avatarUrl, setAvatarUrl] = createSignal(null) createEffect(() => { getProfile() }) const getProfile = async () => { try { setLoading(true) const { user } = session let { data, error, status } = await supabase .from('profiles') .select(`username, website, avatar_url`) .eq('id', user.id) .single() if (error && status !== 406) { throw error } if (data) { setUsername(data.username) setWebsite(data.website) setAvatarUrl(data.avatar_url) } } catch (error) { if (error instanceof Error) { alert(error.message) } } finally { setLoading(false) } } const updateProfile = async (e: Event) => { e.preventDefault() try { setLoading(true) const { user } = session const updates = { id: user.id, username: username(), website: website(), avatar_url: avatarUrl(), updated_at: new Date().toISOString(), } let { error } = await supabase.from('profiles').upsert(updates) if (error) { throw error } } catch (error) { if (error instanceof Error) { alert(error.message) } } finally { setLoading(false) } } return (
{ setAvatarUrl(url) updateProfile(e) }} />
Email: {session.user.email}
setUsername(e.currentTarget.value)} />
setWebsite(e.currentTarget.value)} />
) } export default Account