organizationMembershipSettingsForm.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import {Fragment} from 'react';
  2. import cloneDeep from 'lodash/cloneDeep';
  3. import Feature from 'sentry/components/acl/feature';
  4. import {Alert} from 'sentry/components/core/alert';
  5. import JsonForm from 'sentry/components/forms/jsonForm';
  6. import type {Field, FieldObject} from 'sentry/components/forms/types';
  7. import {t} from 'sentry/locale';
  8. import type {MembershipSettingsProps} from 'sentry/types/hooks';
  9. function OrganizationMembershipSettingsForm({
  10. jsonFormSettings,
  11. forms,
  12. }: MembershipSettingsProps) {
  13. const disabled = ({features, access}: any) =>
  14. !access.has('org:write') || !features.has('invite-members');
  15. const formsCopy = cloneDeep(forms);
  16. formsCopy.forEach(group => {
  17. group.fields.forEach(field => {
  18. if (isField(field)) {
  19. field.disabled = field.disabled ?? disabled;
  20. if (field.name === 'defaultRole') {
  21. field.disabled = ({features, access}: any) =>
  22. !access.has('org:admin') || !features.has('invite-members');
  23. } else if (field.name === 'allowMemberProjectCreation') {
  24. field.disabled = ({features, access}: any) =>
  25. !access.has('org:write') || !features.has('team-roles');
  26. field.disabledReason = ({features}: any) =>
  27. !features.has('team-roles')
  28. ? t('You must be on a business plan to toggle this feature.')
  29. : undefined;
  30. }
  31. }
  32. });
  33. });
  34. return (
  35. <Fragment>
  36. <Feature features={['invite-members']}>
  37. {({hasFeature}) =>
  38. !hasFeature && (
  39. <Alert.Container>
  40. <Alert type="warning" showIcon>
  41. {t('You must be on a paid plan to invite additional members.')}
  42. </Alert>
  43. </Alert.Container>
  44. )
  45. }
  46. </Feature>
  47. <JsonForm {...jsonFormSettings} forms={formsCopy} />
  48. </Fragment>
  49. );
  50. }
  51. function isField(fieldObject: FieldObject): fieldObject is Field {
  52. return fieldObject.hasOwnProperty('name');
  53. }
  54. export default OrganizationMembershipSettingsForm;