import { sew } from "@/actions"; import { ServiceErrorException } from "@/lib/serviceError"; import { CodeHostType, isServiceError } from "@/lib/utils"; import { withAuthV2 } from "@/withAuthV2"; import Link from "next/link"; import { ConnectionsTable } from "./components/connectionsTable"; import { ConnectionSyncJobStatus } from "@prisma/client"; const DOCS_URL = "https://docs.sourcebot.dev/docs/connections/overview"; export default async function ConnectionsPage() { const _connections = await getConnectionsWithLatestJob(); if (isServiceError(_connections)) { throw new ServiceErrorException(_connections); } // Sort connections so that first time syncs are at the top. const connections = _connections .map((connection) => ({ ...connection, isFirstTimeSync: connection.syncedAt === null && connection.syncJobs.filter((job) => job.status === ConnectionSyncJobStatus.PENDING || job.status === ConnectionSyncJobStatus.IN_PROGRESS).length > 0, latestJobStatus: connection.syncJobs.length > 0 ? connection.syncJobs[0].status : null, })) .sort((a, b) => { if (a.isFirstTimeSync && !b.isFirstTimeSync) { return -1; } if (!a.isFirstTimeSync && b.isFirstTimeSync) { return 1; } return a.name.localeCompare(b.name); }); return (
Manage your connections to external code hosts. Learn more