IndexAdvisorNotice.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { LOCAL_STORAGE_KEYS } from 'common'
  2. import { useParams } from 'common/hooks'
  3. import { Button } from 'ui'
  4. import { Admonition } from 'ui-patterns'
  5. import { EnableIndexAdvisorButton } from './EnableIndexAdvisorButton'
  6. import { useIndexAdvisorStatus } from '@/components/interfaces/QueryPerformance/hooks/useIsIndexAdvisorStatus'
  7. import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage'
  8. import { BASE_PATH } from '@/lib/constants'
  9. export const IndexAdvisorNotice = () => {
  10. const { ref } = useParams()
  11. const { isIndexAdvisorAvailable, isIndexAdvisorEnabled } = useIndexAdvisorStatus()
  12. const [isDismissed, setIsDismissed] = useLocalStorageQuery(
  13. LOCAL_STORAGE_KEYS.INDEX_ADVISOR_NOTICE_DISMISSED(ref ?? ''),
  14. false
  15. )
  16. if (!isIndexAdvisorAvailable || isIndexAdvisorEnabled || isDismissed) return null
  17. return (
  18. <div className="px-6">
  19. <Admonition showIcon={false} type="tip" className="relative overflow-hidden mb-4">
  20. <div className="absolute -inset-16 z-0 opacity-50">
  21. <img
  22. src={`${BASE_PATH}/img/reports/bg-grafana-dark.svg`}
  23. alt="Index Advisor"
  24. className="w-full h-full object-cover object-right hidden dark:block"
  25. />
  26. <img
  27. src={`${BASE_PATH}/img/reports/bg-grafana-light.svg`}
  28. alt="Index Advisor"
  29. className="w-full h-full object-cover object-right dark:hidden"
  30. />
  31. <div className="absolute inset-0 bg-linear-to-r from-background-alternative to-transparent" />
  32. </div>
  33. <div className="relative z-10 flex flex-col md:flex-row md:items-center gap-y-2 md:gap-x-8 justify-between px-2 py-1">
  34. <div className="flex flex-col gap-y-0.5">
  35. <div className="flex flex-col gap-y-2 items-start">
  36. <p className="text-sm font-medium">Enable Index Advisor</p>
  37. </div>
  38. <p className="text-sm text-foreground-lighter text-balance">
  39. Recommends indexes to improve query performance.
  40. </p>
  41. </div>
  42. <div className="flex items-center gap-x-2">
  43. <Button
  44. type="default"
  45. size="tiny"
  46. onClick={() => setIsDismissed(true)}
  47. aria-label="Dismiss notification"
  48. >
  49. Dismiss
  50. </Button>
  51. <EnableIndexAdvisorButton />
  52. </div>
  53. </div>
  54. </Admonition>
  55. </div>
  56. )
  57. }