mirror of
https://github.com/supabase/supabase.git
synced 2026-10-11 20:35:07 +03:00
## Context Main fix is to adjust the new home page + connect dialog (and connect sheet) to render the project's custom domain if available <img width="471" height="255" alt="image" src="https://github.com/user-attachments/assets/3a208b2e-bdeb-43f5-a2e7-3495881dbaaa" /> <img width="1065" height="233" alt="image" src="https://github.com/user-attachments/assets/2a7b8f81-8c0b-4803-bf0a-fc16a2f1e0e1" /> ## Changes involved - Created a `useProjectApiUrl` hook that will return the API URL depending if custom domains is available, otherwise default to default project API URL - Refactored all the other places that were manually deriving the project's endpoint - Storage Explorer -> copy URL - Edge Functions - Integrations -> Data API + API Docs - Auth Providers -> Callback URL - Also updated the copy CTA for the addons page - Instead of just "Change xxx", make it a bit more actionable - For add ons with binary states (Custom domains, IPv4) - If not enabled yet, "Enable xxx", otherwise "Toggle xxx" - For PITR - If not enabled yet, "Enable PITR", otherwise "Change recovery duration" - Also added "Edit custom domain" CTA if enabled <img width="1144" height="518" alt="image" src="https://github.com/user-attachments/assets/4f152ea5-0cc7-412c-95e8-ad5bb37c19c3" /> ## To test - [ ] Verify that for a project with custom domain set up, all the affected UI mentioned in the above section look correct
65 lines
2.1 KiB
TypeScript
65 lines
2.1 KiB
TypeScript
import { useQuery } from '@tanstack/react-query'
|
|
import { components } from 'api-types'
|
|
import { useProjectApiUrl } from 'data/config/project-endpoint-query'
|
|
import { handleError } from 'data/fetchers'
|
|
import { createProjectSupabaseClient } from 'lib/project-supabase-client'
|
|
import type { ResponseError, UseCustomQueryOptions } from 'types'
|
|
|
|
import { useAuthConfigQuery } from '../auth/auth-config-query'
|
|
import { oauthServerAppKeys } from './keys'
|
|
|
|
export type OAuthServerAppsVariables = {
|
|
projectRef: string | undefined
|
|
page?: number
|
|
}
|
|
|
|
const APPS_PER_PAGE = 100
|
|
|
|
export type OAuthApp = components['schemas']['OAuthAppResponse']
|
|
|
|
export async function getOAuthServerApps({
|
|
projectRef,
|
|
clientEndpoint,
|
|
page = 1,
|
|
}: OAuthServerAppsVariables & { clientEndpoint: string | undefined }) {
|
|
if (!projectRef) throw new Error('Project reference is required')
|
|
if (!clientEndpoint) throw new Error('Client endpoint is required')
|
|
|
|
const supabaseClient = await createProjectSupabaseClient(projectRef, clientEndpoint)
|
|
|
|
const { data, error } = await supabaseClient.auth.admin.oauth.listClients({
|
|
page,
|
|
perPage: APPS_PER_PAGE,
|
|
})
|
|
|
|
if (error) handleError(error)
|
|
return data
|
|
}
|
|
|
|
export type OAuthServerAppsData = Awaited<ReturnType<typeof getOAuthServerApps>>
|
|
export type OAuthServerAppsError = ResponseError
|
|
|
|
export const useOAuthServerAppsQuery = <TData = OAuthServerAppsData>(
|
|
{ projectRef }: OAuthServerAppsVariables,
|
|
{
|
|
enabled = true,
|
|
...options
|
|
}: UseCustomQueryOptions<OAuthServerAppsData, OAuthServerAppsError, TData> = {}
|
|
) => {
|
|
const { hostEndpoint: clientEndpoint } = useProjectApiUrl({ projectRef })
|
|
const { data: authConfig, isSuccess: isSuccessConfig } = useAuthConfigQuery({ projectRef })
|
|
const isOAuthServerEnabled = !!authConfig?.OAUTH_SERVER_ENABLED
|
|
|
|
return useQuery<OAuthServerAppsData, OAuthServerAppsError, TData>({
|
|
queryKey: oauthServerAppKeys.list(projectRef, clientEndpoint),
|
|
queryFn: () => getOAuthServerApps({ projectRef, clientEndpoint }),
|
|
enabled:
|
|
enabled &&
|
|
typeof projectRef !== 'undefined' &&
|
|
!!clientEndpoint &&
|
|
isSuccessConfig &&
|
|
isOAuthServerEnabled,
|
|
...options,
|
|
})
|
|
}
|