useIsIndexAdvisorStatus.ts 1.1 KB

12345678910111213141516171819202122232425262728
  1. import { getIndexAdvisorExtensions } from '@/components/interfaces/QueryPerformance/IndexAdvisor/index-advisor.utils'
  2. import { useDatabaseExtensionsQuery } from '@/data/database-extensions/database-extensions-query'
  3. import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
  4. /**
  5. * Hook to get both index advisor availability and enabled status
  6. *
  7. * available if the index_advisor and hypopg extensions are available
  8. * enabled if the index_advisor and hypopg extensions are installed (their versions are not null)
  9. */
  10. export function useIndexAdvisorStatus() {
  11. const { data: project } = useSelectedProjectQuery()
  12. const { data: extensions } = useDatabaseExtensionsQuery({
  13. projectRef: project?.ref,
  14. connectionString: project?.connectionString,
  15. })
  16. const { hypopg, indexAdvisor } = getIndexAdvisorExtensions(extensions ?? [])
  17. const isIndexAdvisorAvailable = !!hypopg && !!indexAdvisor
  18. const isIndexAdvisorEnabled =
  19. isIndexAdvisorAvailable &&
  20. hypopg.installed_version !== null &&
  21. indexAdvisor.installed_version !== null
  22. return { isIndexAdvisorAvailable, isIndexAdvisorEnabled }
  23. }