Integrations.utils.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import type { IntegrationsData } from '@/data/integrations/integrations-query'
  2. import type { IntegrationName } from '@/data/integrations/integrations.types'
  3. import type { Organization } from '@/types'
  4. export function getHasInstalledObject({
  5. integrationName,
  6. integrationData,
  7. organizationsData,
  8. installationId,
  9. }: {
  10. integrationName: IntegrationName
  11. integrationData: IntegrationsData
  12. organizationsData: Organization[]
  13. installationId?: string | number
  14. }): { [orgSlug: string]: boolean } {
  15. if (integrationName === 'Vercel') {
  16. return Object.fromEntries(
  17. organizationsData
  18. .map((org) => [
  19. org.slug,
  20. Boolean(
  21. integrationData.find(
  22. (integration) =>
  23. integration.organization.slug === org.slug &&
  24. integration.integration.name === 'Vercel'
  25. )
  26. ),
  27. ])
  28. .filter(([, v]) => Boolean(v))
  29. )
  30. }
  31. if (integrationName === 'GitHub') {
  32. return Object.fromEntries(
  33. organizationsData
  34. .map((org) => [
  35. org.slug,
  36. Boolean(
  37. integrationData.find(
  38. (integration) =>
  39. integration.organization.slug === org.slug &&
  40. integration.integration.name === 'GitHub' &&
  41. integration.metadata !== undefined &&
  42. 'installation_id' in (integration.metadata as any) &&
  43. String((integration.metadata as any).installation_id) === String(installationId)
  44. )
  45. ),
  46. ])
  47. .filter(([, v]) => Boolean(v))
  48. )
  49. }
  50. return {}
  51. }