import { useCallback, useMemo } from 'react' import { Helmet } from 'react-helmet-async' import { Navigate, useSearchParams } from 'react-router-dom' import { trpc } from '~/utils/trpc' import IVButton from '~/components/IVButton' import AuthPageHeader from '~/components/AuthPageHeader' import EnrollMFAForm from '~/components/AccountSettings/EnrollMFAForm' import { MeProvider, useMe } from '~/components/MeContext' import { commaSeparatedList } from '~/utils/text' import NotFound from '~/components/NotFound' function EnrollMFAContent({ onSubmit }: { onSubmit: () => void }) { const session = trpc.useQuery(['auth.session.session']) const integrations = trpc.useQuery(['dashboard.integrations']) const [searchParams] = useSearchParams() const { me, isLoading } = useMe() const userOrganizationAccess = me?.userOrganizationAccess const orgsRequiringMfa = useMemo(() => { if (!userOrganizationAccess) return [] return userOrganizationAccess .map(access => access.organization) .filter(org => org.requireMfa) }, [userOrganizationAccess]) const orgsNotRequiringMfa = useMemo(() => { if (!userOrganizationAccess) return [] return userOrganizationAccess .map(access => access.organization) .filter(org => !org.requireMfa) }, [userOrganizationAccess]) if (!integrations.isLoading && !integrations.data?.workos) { return } if (!isLoading && !me) { return } if ( !isLoading && me && (orgsRequiringMfa.length === 0 || session.data?.hasMfa) ) { const orgSlug = searchParams.get('orgSlug') return } return (
Set up multi-factor authentication | Interval

The{' '} {orgsRequiringMfa.length === 1 ? ( <>organization {orgsRequiringMfa[0].name} requires ) : ( <> organizations{' '} {commaSeparatedList( orgsRequiringMfa.map(org => org.name), 'and' )}{' '} require )}{' '} multi-factor authentication {' '} to be enabled for all members.

{orgsNotRequiringMfa.length > 0 && (
Switch to another organization:
    {orgsNotRequiringMfa.map(org => (
  • ))}
)}
) } export default function EnrollMFAPage() { const [searchParams] = useSearchParams() const { invalidateQueries } = trpc.useContext() const orgSlug = searchParams.get('orgSlug') const handleSubmit = useCallback(() => { invalidateQueries('auth.session.session') window.location.assign(orgSlug ? `/dashboard/${orgSlug}` : '/dashboard') }, [invalidateQueries, orgSlug]) return ( ) }