useProjectCreationAccess.tsx 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import {useMemo} from 'react';
  2. import {unassignedValue} from 'sentry/data/experimentConfig';
  3. import {Organization} from 'sentry/types';
  4. import {useExperiment} from 'sentry/utils/useExperiment';
  5. /**
  6. * Used to determine if viewer can see project creation button
  7. */
  8. export function useProjectCreationAccess(organization: Organization) {
  9. const {experimentAssignment, logExperiment} = useExperiment(
  10. 'ProjectCreationForAllExperiment',
  11. {
  12. logExperimentOnMount: false,
  13. }
  14. );
  15. const canCreateProject = useMemo(() => {
  16. if (
  17. organization.access.includes('project:admin') ||
  18. organization.access.includes('project:write')
  19. ) {
  20. return true;
  21. }
  22. if (!organization.features.includes('organizations:team-project-creation-all')) {
  23. return false;
  24. }
  25. if (experimentAssignment === unassignedValue) {
  26. return false;
  27. }
  28. logExperiment();
  29. return experimentAssignment === 1;
  30. }, [organization, experimentAssignment, logExperiment]);
  31. return {canCreateProject};
  32. }