useIcebergWrapper.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import { INTEGRATIONS } from '@/components/interfaces/Integrations/Landing/Integrations.constants'
  2. import { useDatabaseExtensionsQuery } from '@/data/database-extensions/database-extensions-query'
  3. import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
  4. export const useIcebergWrapperExtension = () => {
  5. const { data: project } = useSelectedProjectQuery()
  6. const { data: extensionsData, isPending: isExtensionsLoading } = useDatabaseExtensionsQuery({
  7. projectRef: project?.ref,
  8. connectionString: project?.connectionString,
  9. })
  10. const integration = INTEGRATIONS.find((i) => i.id === 'iceberg_wrapper')
  11. if (!integration || integration.type !== 'wrapper') {
  12. // This should never happen
  13. return { extension: undefined, state: 'not-found' }
  14. }
  15. const wrapperMeta = integration.meta
  16. const wrappersExtension = extensionsData?.find((ext) => ext.name === 'wrappers')
  17. const isWrappersExtensionInstalled = !!wrappersExtension?.installed_version
  18. const hasRequiredVersion =
  19. (wrappersExtension?.installed_version ?? '') >= (wrapperMeta?.minimumExtensionVersion ?? '')
  20. const state: 'loading' | 'installed' | 'needs-upgrade' | 'not-installed' = isExtensionsLoading
  21. ? 'loading'
  22. : isWrappersExtensionInstalled
  23. ? hasRequiredVersion
  24. ? 'installed'
  25. : 'needs-upgrade'
  26. : 'not-installed'
  27. return { extension: wrappersExtension, state }
  28. }