MembersExceedLimitModal.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { Button, Modal } from 'ui'
  2. import { useFreeProjectLimitCheckQuery } from '@/data/organizations/free-project-limit-check-query'
  3. import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization'
  4. export interface MembersExceedLimitModalProps {
  5. visible: boolean
  6. onClose: () => void
  7. }
  8. const MembersExceedLimitModal = ({ visible, onClose }: MembersExceedLimitModalProps) => {
  9. const { data: selectedOrganization } = useSelectedOrganizationQuery()
  10. const slug = selectedOrganization?.slug
  11. const { data: membersExceededLimit } = useFreeProjectLimitCheckQuery(
  12. { slug },
  13. { enabled: visible }
  14. )
  15. return (
  16. <Modal
  17. hideFooter
  18. visible={visible}
  19. size="medium"
  20. header="Your organization has members who have exceeded their free project limits"
  21. onCancel={onClose}
  22. >
  23. <Modal.Content>
  24. <div className="space-y-2">
  25. <p className="text-sm text-foreground-light">
  26. The following members have reached their maximum limits for the number of active free
  27. plan projects within organizations where they are an administrator or owner:
  28. </p>
  29. <ul className="pl-5 text-sm list-disc text-foreground-light">
  30. {(membersExceededLimit || []).map((member, idx: number) => (
  31. <li key={`member-${idx}`}>
  32. {member.username || member.primary_email} (Limit: {member.free_project_limit} free
  33. projects)
  34. </li>
  35. ))}
  36. </ul>
  37. <p className="text-sm text-foreground-light">
  38. These members will need to either delete, pause, or upgrade one or more of these
  39. projects before you're able to downgrade this project.
  40. </p>
  41. </div>
  42. </Modal.Content>
  43. <Modal.Separator />
  44. <Modal.Content className="flex items-center gap-2">
  45. <Button htmlType="button" type="default" onClick={onClose} block>
  46. Understood
  47. </Button>
  48. </Modal.Content>
  49. </Modal>
  50. )
  51. }
  52. export default MembersExceedLimitModal