useProjectSdkNeedsUpdate.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import {Organization} from 'sentry/types';
  2. import {useProjectSdkUpdates} from 'sentry/utils/useProjectSdkUpdates';
  3. import {semverCompare} from 'sentry/utils/versions';
  4. type Opts = {
  5. minVersion: string;
  6. organization: Organization;
  7. projectId: string[];
  8. };
  9. function useProjectSdkNeedsUpdate({minVersion, organization, projectId}: Opts):
  10. | {
  11. isFetching: true;
  12. needsUpdate: undefined;
  13. }
  14. | {
  15. isFetching: false;
  16. needsUpdate: boolean;
  17. } {
  18. const sdkUpdates = useProjectSdkUpdates({
  19. organization,
  20. projectId: null,
  21. });
  22. if (sdkUpdates.type !== 'resolved') {
  23. return {isFetching: true, needsUpdate: undefined};
  24. }
  25. if (!sdkUpdates.data?.length) {
  26. return {isFetching: true, needsUpdate: undefined};
  27. }
  28. const selectedProjects = sdkUpdates.data.filter(sdkUpdate =>
  29. projectId.includes(sdkUpdate.projectId)
  30. );
  31. const needsUpdate =
  32. selectedProjects.length > 0 &&
  33. selectedProjects.every(
  34. sdkUpdate => semverCompare(sdkUpdate.sdkVersion || '', minVersion) === -1
  35. );
  36. return {isFetching: false, needsUpdate};
  37. }
  38. export default useProjectSdkNeedsUpdate;