BannerFreeMicroUpgrade.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { LOCAL_STORAGE_KEYS } from 'common'
  2. import { useParams } from 'common/hooks'
  3. import Link from 'next/link'
  4. import { Button } from 'ui'
  5. import { ComputeBadge } from 'ui-patterns/ComputeBadge'
  6. import { BannerCard } from '../BannerCard'
  7. import { BANNER_ID, useBannerStack } from '../BannerStackProvider'
  8. import { ChevronsUpAnimated } from '@/components/ui/ComputeBadgeWrapper'
  9. import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage'
  10. import { useTrack } from '@/lib/telemetry/track'
  11. export const BannerFreeMicroUpgrade = () => {
  12. const { ref } = useParams()
  13. const track = useTrack()
  14. const { dismissBanner } = useBannerStack()
  15. const [, setIsDismissed] = useLocalStorageQuery(
  16. LOCAL_STORAGE_KEYS.FREE_MICRO_UPGRADE_BANNER_DISMISSED(ref ?? ''),
  17. false
  18. )
  19. return (
  20. <BannerCard
  21. onDismiss={() => {
  22. setIsDismissed(true)
  23. dismissBanner(BANNER_ID.FREE_MICRO_UPGRADE)
  24. track('free_micro_upgrade_banner_dismissed')
  25. }}
  26. >
  27. <div className="flex flex-col gap-y-4">
  28. <div className="flex flex-col gap-y-2 items-start">
  29. <div className="animate-badge-pulse">
  30. <div className="relative inline-flex overflow-hidden rounded-sm">
  31. <ComputeBadge
  32. infraComputeSize="nano"
  33. icon={<ChevronsUpAnimated />}
  34. className="text-brand-600 border-brand-500 bg-brand/10 gap-1"
  35. />
  36. <span className="animate-badge-shimmer pointer-events-none absolute inset-0 bg-linear-to-br from-transparent via-brand/20 to-transparent blur-md" />
  37. </div>
  38. </div>
  39. </div>
  40. <div className="flex flex-col gap-y-1 mb-2">
  41. <p className="text-sm font-medium">Project low on resources</p>
  42. <p className="text-xs text-foreground-lighter text-balance">
  43. Your Nano compute is approaching its limits. Your Pro plan includes a free upgrade to
  44. Micro — double the memory at no extra cost.
  45. </p>
  46. </div>
  47. <div className="flex gap-2">
  48. <Button
  49. type="primary"
  50. size="tiny"
  51. asChild
  52. onClick={() => {
  53. setIsDismissed(true)
  54. dismissBanner(BANNER_ID.FREE_MICRO_UPGRADE)
  55. track('free_micro_upgrade_banner_cta_clicked')
  56. }}
  57. >
  58. <Link href={`/project/${ref}/settings/compute-and-disk?upgrade=micro`}>
  59. Upgrade for free
  60. </Link>
  61. </Button>
  62. </div>
  63. </div>
  64. </BannerCard>
  65. )
  66. }