mirror of
https://github.com/supabase/supabase.git
synced 2026-10-14 21:59:16 +03:00
* feat(profile): add self-serve editing of username and primary email Users can now update `username` and choose a `primary_email` directly in the Dashboard profile editor. Changes: - Add `username` and `primary_email` fields to the profile form. - Introduce `Select_Shadcn_` dropdown listing the user's identities (via `useProfileIdentitiesQuery`) for selecting a primary email. - Default `primary_email` selection is derived from the current profile. - Extend form submission to patch `username` and `primary_email` to the profile API. - Wire zod schema and react-hook-form defaults for new fields. * chore: remove unused variable * fix: disable username & primary_email modification for SSO users * Small refactors * Remove hard code * Refactor to use FormItemLayout * chore: add descriptions for primary_email and username * chore: fix format and lint error * chore: fix lint error * Use identities to derive user dropdown profile image, and remove profile image from useProfile hook --------- Co-authored-by: Chris Stockton <chris.stockton@supabase.io> Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
33 lines
976 B
TypeScript
33 lines
976 B
TypeScript
import type { UserIdentity } from '@supabase/supabase-js'
|
|
import { useQuery, UseQueryOptions } from '@tanstack/react-query'
|
|
|
|
import { auth } from 'lib/gotrue'
|
|
import { profileKeys } from './keys'
|
|
|
|
export async function getProfileIdentities() {
|
|
const { error, data } = await auth.getUser()
|
|
|
|
if (error) throw error
|
|
|
|
const { identities = [], new_email, email_change_sent_at } = data.user
|
|
return { identities, new_email, email_change_sent_at }
|
|
}
|
|
|
|
type ProfileIdentitiesData = {
|
|
identities: (UserIdentity & { email?: string })[]
|
|
new_email?: string
|
|
email_change_sent_at?: string
|
|
}
|
|
type ProfileIdentitiesError = any
|
|
|
|
export const useProfileIdentitiesQuery = <TData = ProfileIdentitiesData>({
|
|
enabled = true,
|
|
...options
|
|
}: UseQueryOptions<ProfileIdentitiesData, ProfileIdentitiesError, TData> = {}) => {
|
|
return useQuery<ProfileIdentitiesData, ProfileIdentitiesError, TData>(
|
|
profileKeys.identities(),
|
|
() => getProfileIdentities(),
|
|
{ ...options }
|
|
)
|
|
}
|