Skip to main content
Glama
QuestionnaireFormStepper.tsx1.91 kB
// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors // SPDX-License-Identifier: Apache-2.0 import { Button, Group, Stepper } from '@mantine/core'; import type { QuestionnaireFormPaginationState } from '@medplum/react-hooks'; import type { JSX } from 'react'; import { SubmitButton } from '../Form/SubmitButton'; export interface QuestionnaireFormStepperProps { readonly formState: QuestionnaireFormPaginationState; readonly submitButtonText?: string; readonly excludeButtons?: boolean; readonly children?: React.ReactNode; } export function QuestionnaireFormStepper(props: QuestionnaireFormStepperProps): JSX.Element { const { formState, submitButtonText, excludeButtons, children } = props; const pages = formState.pages; const activePage = formState.activePage; const showBackButton = activePage > 0; const showNextButton = activePage < pages.length - 1; const showSubmitButton = activePage === pages.length - 1; return ( <> <Stepper active={activePage} allowNextStepsSelect={false} p={6}> {pages.map((page, index) => ( <Stepper.Step key={page.linkId} label={page.title}> {index === activePage && children} </Stepper.Step> ))} </Stepper> {!excludeButtons && ( <Group justify="flex-end" mt="xl" gap="xs"> {showBackButton && <Button onClick={formState.onPrevPage}>Back</Button>} {showNextButton && ( <Button onClick={(e) => { const form = e.currentTarget.closest('form') as HTMLFormElement; if (form.reportValidity()) { formState.onNextPage(); } }} > Next </Button> )} {showSubmitButton && <SubmitButton>{submitButtonText ?? 'Submit'}</SubmitButton>} </Group> )} </> ); }

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/medplum/medplum'

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