BranchingPITRNotice.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { PermissionAction } from '@supabase/shared-types/out/constants'
  2. import { useParams } from 'common'
  3. import { Clock } from 'lucide-react'
  4. import Link from 'next/link'
  5. import { Button } from 'ui'
  6. import { ButtonTooltip } from '@/components/ui/ButtonTooltip'
  7. import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
  8. import { useAppStateSnapshot } from '@/state/app-state'
  9. export const BranchingPITRNotice = () => {
  10. const { ref } = useParams()
  11. const snap = useAppStateSnapshot()
  12. const { can: canUpdateSubscription } = useAsyncCheckPermissions(
  13. PermissionAction.BILLING_WRITE,
  14. 'stripe.subscriptions'
  15. )
  16. return (
  17. <div className="flex flex-row gap-4">
  18. <div>
  19. <figure className="w-10 h-10 rounded-md border flex items-center justify-center">
  20. <Clock className="text-warning-700" size={20} strokeWidth={2} />
  21. </figure>
  22. </div>
  23. <div className="flex grow items-center justify-between gap-4">
  24. <div className="flex flex-col gap-y-1">
  25. <p className="text-sm text-foreground">Consider enabling Point in Time Recovery (PITR)</p>
  26. <p className="text-sm text-foreground-light">
  27. This ensures you can recover production data if you merge a bad migration (e.g. delete a
  28. column).
  29. </p>
  30. </div>
  31. {!canUpdateSubscription ? (
  32. <ButtonTooltip
  33. disabled
  34. size="tiny"
  35. type="default"
  36. tooltip={{
  37. content: {
  38. side: 'bottom',
  39. text: 'You need additional permissions to amend subscriptions',
  40. },
  41. }}
  42. >
  43. Enable PITR add-on
  44. </ButtonTooltip>
  45. ) : (
  46. <Button size="tiny" type="default" asChild>
  47. <Link
  48. href={`/project/${ref}/settings/addons?panel=pitr`}
  49. onClick={() => snap.setShowCreateBranchModal(false)}
  50. >
  51. Enable PITR
  52. </Link>
  53. </Button>
  54. )}
  55. </div>
  56. </div>
  57. )
  58. }