import { useLocale } from "@calcom/lib/hooks/useLocale"; import { userMetadata } from "@calcom/prisma/zod-utils"; import { trpc } from "@calcom/trpc/react"; import useMeQuery from "@calcom/trpc/react/hooks/useMeQuery"; import classNames from "@calcom/ui/classNames"; import { Button } from "@calcom/ui/components/button"; import { List } from "@calcom/ui/components/list"; import { AppConnectionItem } from "../components/AppConnectionItem"; import { StepConnectionLoader } from "../components/StepConnectionLoader"; interface ConnectedAppStepProps { nextStep: () => void; isPageLoading: boolean; } const ConnectedVideoStep = (props: ConnectedAppStepProps) => { const { nextStep, isPageLoading } = props; const { data: queryConnectedVideoApps, isPending } = trpc.viewer.apps.integrations.useQuery({ variant: "conferencing", onlyInstalled: false, /** * Both props together sort by most popular first, then by installed first. * So, installed apps are always shown at the top, followed by remaining apps sorted by descending popularity. * * This is done because there could be not so popular app already installed by the admin(e.g. through Delegation Credential) * and we want to show it at the top so that user can set it as default if he wants to. */ sortByMostPopular: true, sortByInstalledFirst: true, }); const { data } = useMeQuery(); const { t } = useLocale(); const metadata = userMetadata.parse(data?.metadata); const hasAnyInstalledVideoApps = queryConnectedVideoApps?.items.some( (item) => item.userCredentialIds.length > 0 ); const defaultConferencingApp = metadata?.defaultConferencingApp?.appSlug; return ( <> {!isPending && ( {queryConnectedVideoApps?.items && queryConnectedVideoApps?.items.map((item) => { if (item.slug === "daily-video") return null; // we dont want to show daily here as it is installed by default return (
  • {item.name && item.logo && ( 0} defaultInstall={ !defaultConferencingApp && item.appData?.location?.linkType === "dynamic" } /> )}
  • ); })}
    )} {isPending && } ); }; export { ConnectedVideoStep };