Skip to main content
Glama
SetUpOrganizationStepForm.tsx4.12 kB
'use client'; import { NoOrganizationView } from '@components/Dashboard/OrganizationForm/NoOrganizationView'; import { OrganizationCreationForm } from '@components/Dashboard/OrganizationForm/OrganizationCreationForm'; import { OrganizationList } from '@components/Dashboard/OrganizationForm/OrganizationList'; import type { OrganizationAPI } from '@intlayer/backend'; import { Form, H2, Loader, Modal, useForm } from '@intlayer/design-system'; import { useGetOrganizations, useSelectOrganization, useSession, } from '@intlayer/design-system/hooks'; import { useRouter, useSearchParams } from 'next/navigation'; import { useIntlayer } from 'next-intlayer'; import { type FC, useState } from 'react'; import { PagesRoutes } from '@/Routes'; import { StepLayout } from '../StepLayout'; import { Steps } from '../steps'; import { useStep } from '../useStep'; import { type SetUpOrganization, useSetUpOrganizationSchema, } from './useSetUpOrganizationSchema'; const OrganizationFormContent: FC<{ selectedOrganizationId?: OrganizationAPI['id'] | string; onSelectOrganization: (organization: OrganizationAPI) => void; }> = ({ onSelectOrganization, selectedOrganizationId }) => { const [isCreationModalOpen, setIsCreationModalOpen] = useState(false); const { data: organizations, isSuccess } = useGetOrganizations(); if ((organizations?.data ?? []).length > 0) { return ( <OrganizationList organizations={organizations?.data ?? []} onSelectOrganization={onSelectOrganization} selectedOrganizationId={selectedOrganizationId} /> ); } if (isSuccess) { return ( <> <Modal isOpen={isCreationModalOpen} onClose={() => setIsCreationModalOpen(false)} > <OrganizationCreationForm /> </Modal> <NoOrganizationView onClickCreateOrganization={() => setIsCreationModalOpen(true)} /> </> ); } return <Loader />; }; export const SetupOrganizationStepForm: FC = () => { const SetUpOrganizationSchema = useSetUpOrganizationSchema(); const { session } = useSession(); const router = useRouter(); const searchParams = useSearchParams(); const { mutate: selectOrganization } = useSelectOrganization(); const { formData, goNextStep, goPreviousStep, setFormData } = useStep( Steps.SetupOrganization ); const { form, isSubmitting } = useForm(SetUpOrganizationSchema, { defaultValues: { ...formData, organizationId: session?.organization?.id ? String(session?.organization?.id) : formData?.organizationId, }, }); const { title } = useIntlayer('set-up-organization-step'); const onSubmitSuccess = (data: SetUpOrganization) => { setFormData(data); if (String(data.organizationId) === String(session?.organization?.id)) { goNextStep(); } if (formData?.organizationId) { selectOrganization(formData.organizationId, { onSuccess: () => { goNextStep(); }, }); } }; return ( <Form schema={SetUpOrganizationSchema} onSubmitSuccess={onSubmitSuccess} {...form} > <StepLayout onGoToPreviousStep={() => { if (session?.user) { router.push( searchParams ? `${PagesRoutes.Pricing}?${searchParams.toString()}` : PagesRoutes.Pricing ); } else { goPreviousStep(); } }} isLoading={isSubmitting} isSkippable={Boolean(session?.organization?.id)} onSkipStep={goNextStep} > <H2>{title}</H2> <OrganizationFormContent onSelectOrganization={(organization) => { if (form.getValues().organizationId === String(organization.id)) { form.setValue('organizationId', null as unknown as string); } else { form.setValue('organizationId', String(organization.id)); } }} selectedOrganizationId={form.watch('organizationId')} /> </StepLayout> </Form> ); };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aymericzip/intlayer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server