usePlanMigrations.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import type {Organization} from 'sentry/types/organization';
  2. import type {User} from 'sentry/types/user';
  3. import {useApiQuery} from 'sentry/utils/queryClient';
  4. import useOrganization from 'sentry/utils/useOrganization';
  5. import {useUser} from 'sentry/utils/useUser';
  6. import type {PlanMigration} from 'getsentry/types';
  7. const hasBillingAccess = ({access}: Organization) => access?.includes('org:billing');
  8. interface PlanMigrationsHook {
  9. isLoading: boolean;
  10. planMigrations: PlanMigration[];
  11. }
  12. export function usePlanMigrations(): PlanMigrationsHook {
  13. const organization = useOrganization();
  14. const user: User = useUser();
  15. const enabled = hasBillingAccess(organization) || user.isStaff;
  16. const {data: planMigrations, isPending} = useApiQuery<PlanMigration[]>(
  17. [
  18. `/customers/${organization.slug}/plan-migrations/`,
  19. {query: {scheduled: 1, applied: 0}},
  20. ],
  21. {
  22. staleTime: Infinity,
  23. enabled,
  24. retry: false,
  25. notifyOnChangeProps: ['isLoading', 'data'],
  26. }
  27. );
  28. return {
  29. planMigrations: planMigrations ?? [],
  30. isLoading: enabled ? isPending : false,
  31. };
  32. }