useInstalledIntegrations() — supabase Function Reference
Architecture documentation for the useInstalledIntegrations() function in useInstalledIntegrations.tsx from the supabase codebase.
Entity Profile
Dependency Diagram
graph TD fba47b05_cae2_d6c9_1d8a_9e04a88c4899["useInstalledIntegrations()"] a8362fd5_3334_9c84_743b_cb14d428271f["AvailableIntegrations()"] a8362fd5_3334_9c84_743b_cb14d428271f -->|calls| fba47b05_cae2_d6c9_1d8a_9e04a88c4899 538934e2_0020_151a_5d56_59c5341e4ff7["InstalledIntegrations()"] 538934e2_0020_151a_5d56_59c5341e4ff7 -->|calls| fba47b05_cae2_d6c9_1d8a_9e04a88c4899 f6fdda8f_575f_1739_f5a8_a5415e6d46f8["wrapperMetaComparator()"] fba47b05_cae2_d6c9_1d8a_9e04a88c4899 -->|calls| f6fdda8f_575f_1739_f5a8_a5415e6d46f8 style fba47b05_cae2_d6c9_1d8a_9e04a88c4899 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
apps/studio/components/interfaces/Integrations/Landing/useInstalledIntegrations.tsx lines 17–121
export const useInstalledIntegrations = () => {
const { data: project } = useSelectedProjectQuery()
const { integrationsWrappers } = useIsFeatureEnabled(['integrations:wrappers'])
const stripeSyncEnabled = useFlag('enableStripeSyncEngineIntegration')
const allIntegrations = useMemo(() => {
return INTEGRATIONS.filter((integration) => {
if (
!integrationsWrappers &&
(integration.type === 'wrapper' || integration.id.endsWith('_wrapper'))
) {
return false
}
if (!stripeSyncEnabled && integration.id === 'stripe_sync_engine') {
return false
}
return true
})
}, [integrationsWrappers, stripeSyncEnabled])
const {
data,
error: fdwError,
isError: isErrorFDWs,
isPending: isFDWLoading,
isSuccess: isSuccessFDWs,
} = useFDWsQuery({
projectRef: project?.ref,
connectionString: project?.connectionString,
})
const {
data: extensions,
error: extensionsError,
isError: isErrorExtensions,
isPending: isExtensionsLoading,
isSuccess: isSuccessExtensions,
} = useDatabaseExtensionsQuery({
projectRef: project?.ref,
connectionString: project?.connectionString,
})
const {
data: schemas,
error: schemasError,
isError: isErrorSchemas,
isPending: isSchemasLoading,
isSuccess: isSuccessSchemas,
} = useSchemasQuery({
projectRef: project?.ref,
connectionString: project?.connectionString,
})
const isHooksEnabled = schemas?.some((schema) => schema.name === 'supabase_functions')
const wrappers = useMemo(() => data ?? EMPTY_ARR, [data])
const installedIntegrations = useMemo(() => {
return allIntegrations
.filter((integration) => {
// special handling for supabase webhooks
if (integration.id === 'webhooks') {
return isHooksEnabled
}
if (integration.id === 'stripe_sync_engine') {
const stripeSchema = schemas?.find(({ name }) => name === 'stripe')
return (
!!stripeSchema?.comment?.startsWith(STRIPE_SCHEMA_COMMENT_PREFIX) &&
!!stripeSchema.comment?.includes(INSTALLATION_INSTALLED_SUFFIX)
)
}
if (integration.type === 'wrapper') {
return wrappers.find((w) => wrapperMetaComparator(integration.meta, w))
}
if (integration.type === 'postgres_extension') {
return integration.requiredExtensions.every((extName) => {
const foundExtension = (extensions ?? []).find((ext) => ext.name === extName)
return !!foundExtension?.installed_version
})
}
return false
})
.sort((a, b) => a.name.localeCompare(b.name))
}, [allIntegrations, wrappers, extensions, schemas, isHooksEnabled])
// available integrations are all integrations that can be installed. If an integration can't be installed (needed
// extensions are not available on this DB image), the UI will provide a tooltip explaining why.
const availableIntegrations = useMemo(
() => allIntegrations.sort((a, b) => a.name.localeCompare(b.name)),
[allIntegrations]
)
const error = fdwError || extensionsError || schemasError
const isLoading = isSchemasLoading || isFDWLoading || isExtensionsLoading
const isError = isErrorFDWs || isErrorExtensions || isErrorSchemas
const isSuccess = isSuccessFDWs && isSuccessExtensions && isSuccessSchemas
return {
// show all integrations at once instead of showing partial results
installedIntegrations: isLoading ? EMPTY_ARR : installedIntegrations,
availableIntegrations: isLoading ? EMPTY_ARR : availableIntegrations,
error,
isError,
isLoading,
isSuccess,
}
}
Domain
Subdomains
Calls
Source
Frequently Asked Questions
What does useInstalledIntegrations() do?
useInstalledIntegrations() is a function in the supabase codebase.
What does useInstalledIntegrations() call?
useInstalledIntegrations() calls 1 function(s): wrapperMetaComparator.
What calls useInstalledIntegrations()?
useInstalledIntegrations() is called by 2 function(s): AvailableIntegrations, InstalledIntegrations.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free