@ovok/native/questionnaire-response-form

FHIR questionnaire forms: providers, navigation, item renderers and answer helpers.

  • Stable unknown
  • Release candidate since 1.16.1-rc.3
  • Development since 1.16.1-dev.2111+9796905

FHIR questionnaire forms: providers, navigation, item renderers and answer helpers.

Import from @ovok/native/questionnaire-response-form.

Components

QuestionnaireForm

const QuestionnaireForm: NamedExoticComponent<QuestionnaireFormProps> & object & object;

Form that renders a FHIR Questionnaire and submits a QuestionnaireResponse; compose it with the QuestionnaireForm.* sub-components.

Type Declaration

NameTypeDescription
ContentNamedExoticComponent<QuestionnaireContentProps> & object & objectRenders the current page or items.
HeaderNamedExoticComponent<QuestionnaireHeaderProps> & object & objectHeader showing progress through the questionnaire.
NavigationNamedExoticComponent<Omit<KeyboardAvoidingViewProps, "contentContainerStyle">> & object & objectBack, next and submit controls.

QuestionnaireFormProvider

const QuestionnaireFormProvider: MemoExoticComponent<(__namedParameters) => Element>;

Owns the Formik state, validation and submission for a questionnaire and provides it to descendants.


QuestionnaireNavigationProvider

const QuestionnaireNavigationProvider: React.FC<React.PropsWithChildren<QuestionnaireNavigationProviderProps>>;

Provides navigation state and next and previous handlers to the form controls.

Hooks

useQuestionnaireForm()

function useQuestionnaireForm(): QuestionnaireFormContextType;

Returns the questionnaire form context; must be used within a QuestionnaireFormProvider.

Returns

QuestionnaireFormContextType


useQuestionnaireNavigation()

function useQuestionnaireNavigation(): QuestionnaireNavigationContextType;

Returns the navigation state and handlers; must be used within a QuestionnaireNavigationProvider.

Returns

QuestionnaireNavigationContextType


useQuestionnaireNavigationState()

function useQuestionnaireNavigationState(
   currentItem,
   currentPageIndex,
   currentItemIndex,
   enabledItems,
   pages,
   values,
   allEnabledItems,
   renderItem?
): NavigationState;

Derives navigation flags and the item count from the current position and answers.

Parameters

ParameterType
currentItemExtendedQuestionnaireItem | undefined
currentPageIndexnumber
currentItemIndexnumber
enabledItemsExtendedQuestionnaireItem[]
pagesExtendedQuestionnaireItem[]
valuesQuestionnaireFormValues
allEnabledItemsExtendedQuestionnaireItem[]
renderItem?QuestionnaireItemRenderer

Returns

NavigationState

Classes

QuestionnaireSubmitUtils

Helpers for building and saving a QuestionnaireResponse.

Constructors

Constructor
new QuestionnaireSubmitUtils(): QuestionnaireSubmitUtils;
Returns

QuestionnaireSubmitUtils

Methods

createQuestionnaireResponse()
static createQuestionnaireResponse(
   responses,
   pages,
   questionnaire,
   renderItem?,
   resolver?,
   unitOptionsResolver?
): QuestionnaireResponse;

Builds a QuestionnaireResponse from the form values; its status is in-progress while required items are unanswered, otherwise completed.

Parameters
ParameterType
responsesResponseValues
pagesExtendedQuestionnaireItem[]
questionnaireQuestionnaire
renderItem?QuestionnaireItemRenderer
resolver?QuestionnaireConstraintResolver
unitOptionsResolver?QuestionnaireUnitOptionsResolver
Returns

QuestionnaireResponse

persistQuestionnaireResponse()
static persistQuestionnaireResponse(
   client,
   response,
   extractObservations
): Promise<QuestionnaireResponse>;

Saves the response idempotently by its identifier. When extractObservations is set, also creates the extracted Observations and marks the response completed in one transaction.

Parameters
ParameterType
clientOvok
responseQuestionnaireResponse
extractObservationsboolean
Returns

Promise<QuestionnaireResponse>

The saved QuestionnaireResponse.

Throws

Error with a translation key when the save, the extraction or the required transaction support fails.

questionnaireHasObservationExtraction()
static questionnaireHasObservationExtraction(questionnaire): boolean;

Whether the questionnaire, or any of its items, asks for Observations to be extracted from the response.

Parameters
ParameterType
questionnaireQuestionnaire
Returns

boolean

Functions

getQuestionnaireAnswerPickerOptions()

function getQuestionnaireAnswerPickerOptions(item, locale?): QuestionnaireAnswerPickerOption[];

Builds picker options from a choice item's answer options, in order.

Parameters

ParameterType
itemExtendedQuestionnaireItem
locale?string

Returns

QuestionnaireAnswerPickerOption[]


getQuestionnaireItemConstraints()

function getQuestionnaireItemConstraints(
   item,
   answers?,
   resolver?,
   unitOptionsResolver?
): QuestionnaireItemConstraints;

Reads the value, length, step and unit constraints from a questionnaire item's extensions.

Parameters

Returns

QuestionnaireItemConstraints


getQuestionnaireNumericPickerOptions()

function getQuestionnaireNumericPickerOptions(
   item,
   constraints,
   locale?,
   maximumOptions?
): QuestionnaireNumericPickerOption[];

Builds picker options from the item's min, max and step; returns an empty list when the range is missing, invalid or larger than maximumOptions.

Parameters

ParameterTypeDefault value
itemExtendedQuestionnaireItemundefined
constraintsQuestionnaireItemConstraintsundefined
locale?stringundefined
maximumOptions?number1000

Returns

QuestionnaireNumericPickerOption[]


useInitialSelectedValues()

function useInitialSelectedValues(
   pages,
   values,
   setFieldValue
): void;

Hook to handle initializing conditional questions with default values

Parameters

ParameterType
pagesExtendedQuestionnaireItem[]
valuesQuestionnaireFormValues
setFieldValue(field, value, shouldValidate?) => void

Returns

void


useNavigationHandlers()

function useNavigationHandlers(__namedParameters): object;

Provides navigation handlers for the questionnaire form

Parameters

ParameterType
__namedParametersUseNavigationHandlersProps

Returns

NameTypeDescription
handleNext()() => voidValidates the current item, then moves to the next item or page.
handlePrevious()() => voidMoves back to the previous item or page.

Interfaces

QuestionnaireFormContextType

Value of the questionnaire form context: Formik state plus questionnaire navigation state and helpers.

Extends

Properties

PropertyTypeDescription
allItemsExtendedQuestionnaireItem[]All enabled items in display order.
currentItemExtendedQuestionnaireItem | undefinedThe item currently shown, or undefined when there is none.
currentItemIndexnumberIndex of the current item within allItems.
currentPageExtendedQuestionnaireItemThe page (top-level group) currently shown.
currentPageIndexnumberIndex of the current page within pages.
errorMessagestring | nullValidation error to show for the current item, or null.
locale?stringLocale used for questionnaire text.
pagedbooleanWhether the questionnaire is shown one page at a time.
pagesExtendedQuestionnaireItem[]The pages of the questionnaire.
questionnaireQuestionnaireThe FHIR Questionnaire being filled in.
renderItem?QuestionnaireItemRendererCustom renderer for questionnaire items.
resolveQuestionnaireConstraint?QuestionnaireConstraintResolverResolves constraints (such as min and max values) for an item.
resolveQuestionnaireUnitOptions?QuestionnaireUnitOptionsResolverResolves the selectable units for a quantity item.
retrySubmit() => voidRetries the last failed submission.
setCurrentItemIndexDispatch<SetStateAction<number>>Sets the current item index.
setCurrentPageIndexDispatch<SetStateAction<number>>Sets the current page index.
setErrorMessageDispatch<SetStateAction<string | null>>Sets the validation error message.
submissionErrorstring | nullError from the last failed submission, or null.

QuestionnaireFormValues

Form values keyed by item linkId.

Indexable

[key: string]: QuestionnaireFormValue

Properties

PropertyTypeDescription
currentLinkId?stringlinkId of the item currently shown.

QuestionnaireHeaderProps

Props for QuestionnaireForm.Header; also accepts View props except style.

Extends

  • Omit<ViewProps, "style">

Properties

PropertyTypeDescriptionOverrides
children?ReactNodeHeader content, such as the title and subtitle.Omit.children
style?StyleProp<ViewStyle>Style for the header container.-

Type Aliases

ExtendedQuestionnaireItem

type ExtendedQuestionnaireItem = QuestionnaireItem & object;

A FHIR Questionnaire item with extra fields for translations, helper text and placeholders.

Type Declaration

NameTypeDescription
_helperText?ElementFHIR extension element for helperText (carries translations).
_isSyntheticPage?booleantrue for a page the SDK created to wrap items that are not in a group.
_placeholder?ElementFHIR extension element for placeholder (carries translations).
_prefix?ElementFHIR extension element for prefix (carries translations).
_text?ElementFHIR extension element for text (carries translations).
answerOption?ExtendedQuestionnaireItemAnswerOption[]Answer options, with optional preselection.
helperText?stringHelper text shown below the input.
placeholder?stringPlaceholder text for the input.

QuestionnaireAnswerPickerOption

type QuestionnaireAnswerPickerOption = object;

A picker option for a choice item, pairing a label with its answer.

Properties

label
label: string;

Display text for the option.

value
value: QuestionnaireResponseItemAnswer;

Answer stored when the option is chosen.


QuestionnaireConstraintResolver

type QuestionnaireConstraintResolver = (constraint, item, answers) => unknown;

Resolves a calculated constraint extension to a concrete value; return undefined or null to fall back to the static value.

Parameters

ParameterType
constraintExtension
itemExtendedQuestionnaireItem
answersResponseValues

Returns

unknown


QuestionnaireFormProps

type QuestionnaireFormProps = (ViewProps | ScrollViewProps) & QuestionnaireFormProviderProps & object;

Props for QuestionnaireForm: View or ScrollView props plus the provider props.

Type Declaration

NameTypeDescription
nestedScrollEnabled?booleanWhether the non-paged form scrolls inside a parent scroll view; defaults to true.

QuestionnaireFormProviderProps

type QuestionnaireFormProviderProps = object & (
  | {
  onError?: (error) => void;
  onSubmit?: undefined;
  onSuccess?: (response) => void;
}
  | {
  onError?: undefined;
  onSubmit?: (values, formikHelpers?) => Promise<void>;
  onSuccess?: undefined;
});

Props for the questionnaire form provider; pass either onSubmit, or onSuccess and onError.

Type Declaration

NameTypeDescription
initialValues?Partial<QuestionnaireFormValues>Initial form values.
locale?stringLocale used for questionnaire text.
paged?booleanShow the questionnaire one page at a time.
questionnaireQuestionnaireThe FHIR Questionnaire to fill in.
renderItem?QuestionnaireItemRendererCustom renderer for questionnaire items.
resolveQuestionnaireConstraint?QuestionnaireConstraintResolverResolves SDC calculated min/max extensions. Integrations can use their FHIRPath/CQL engine without coupling the questionnaire controls to one.
resolveQuestionnaireUnitOptions?QuestionnaireUnitOptionsResolverResolves SDC unitValueSet canonicals to available unit choices.

QuestionnaireFormValue

type QuestionnaireFormValue =
  | QuestionnaireResponseItemAnswerValue
  | QuestionnaireResponseItemAnswer
  | null
  | undefined;

The answer stored for one questionnaire item.


QuestionnaireItemConstraints

type QuestionnaireItemConstraints = object;

Constraints derived from a questionnaire item's extensions.

Properties

maxLength?
maxLength?: number;

Maximum text length.

maxQuantity?
maxQuantity?: Quantity;

Maximum allowed quantity.

maxValue?
maxValue?: number | string;

Maximum allowed value.

minLength?
minLength?: number;

Minimum text length.

minQuantity?
minQuantity?: Quantity;

Minimum allowed quantity.

minValue?
minValue?: number | string;

Minimum allowed value.

step?
step?: number;

Slider step; only set when positive.

unitOpen?
unitOpen?: string;

Whether units outside the options are allowed; defaults to "optionsOnly".

unitOptions
unitOptions: Coding[];

Unit choices for quantity items, de-duplicated.

unitValueSet?
unitValueSet?: string;

Canonical of the value set providing unit choices.

unresolvedDynamicBounds
unresolvedDynamicBounds: ("minValue" | "maxValue" | "minQuantity" | "maxQuantity")[];

Bounds backed by a calculated value that the resolver did not resolve.

unresolvedUnitValueSet
unresolvedUnitValueSet: boolean;

true when a unit value set exists but the resolver did not expand it.


QuestionnaireItemRenderer

type QuestionnaireItemRenderer = (props) => ReactNode;

Renders a questionnaire item; used to override the built-in controls.

Parameters

Returns

ReactNode


QuestionnaireItemRenderProps

type QuestionnaireItemRenderProps = object;

Props passed to a custom questionnaire item renderer.

Properties

constraints
constraints: QuestionnaireItemConstraints;

Constraints derived from the item's extensions.

item
item: ExtendedQuestionnaireItem;

The questionnaire item to render.

locale?
locale?: string;

Locale used for item text.

onChange
onChange: (value) => void;

Call with the new answer when the user changes it.

Parameters
ParameterType
valueQuestionnaireFormValue
Returns

void

testID?
testID?: string;

Test identifier for the rendered item.

value?
value?: QuestionnaireFormValue;

Current answer for the item.


QuestionnaireNavigationProviderProps

type QuestionnaireNavigationProviderProps = object;

Props for the questionnaire navigation provider.

Properties

allEnabledItems
allEnabledItems: ExtendedQuestionnaireItem[];

Enabled items across all pages.

currentItem
currentItem: ExtendedQuestionnaireItem | undefined;

The item currently shown, or undefined when there is none.

currentItemIndex
currentItemIndex: number;

Index of the current item.

currentPage
currentPage: ExtendedQuestionnaireItem;

The page currently shown.

currentPageIndex
currentPageIndex: number;

Index of the current page.

enabledItems
enabledItems: ExtendedQuestionnaireItem[];

Enabled items of the current page.

formik
formik: object;

Subset of Formik state the navigation depends on.

isSubmitting
isSubmitting: boolean;

Whether the form is being submitted.

values
values: QuestionnaireFormValues;

Current form values.

pages
pages: ExtendedQuestionnaireItem[];

The pages of the questionnaire.

renderItem?
renderItem?: QuestionnaireItemRenderer;

Custom renderer for questionnaire items.

resolveQuestionnaireConstraint?
resolveQuestionnaireConstraint?: QuestionnaireConstraintResolver;

Resolves constraints (such as min and max values) for an item.

resolveQuestionnaireUnitOptions?
resolveQuestionnaireUnitOptions?: QuestionnaireUnitOptionsResolver;

Resolves the selectable units for a quantity item.

setCurrentItemIndex
setCurrentItemIndex: React.Dispatch<React.SetStateAction<number>>;

Sets the current item index.

setCurrentPageIndex
setCurrentPageIndex: React.Dispatch<React.SetStateAction<number>>;

Sets the current page index.

setErrorMessage
setErrorMessage: React.Dispatch<React.SetStateAction<string | null>>;

Sets the validation error message.

values
values: QuestionnaireFormValues;

Current form values.


QuestionnaireNumericPickerOption

type QuestionnaireNumericPickerOption = object;

A picker option for a numeric item, pairing a formatted label with its number.

Properties

label
label: string;

Formatted number shown for the option.

value
value: number;

Numeric value of the option.


QuestionnaireUnitOptionsResolver

type QuestionnaireUnitOptionsResolver = (valueSet, item, answers) => Coding[] | undefined;

Resolves a unitValueSet canonical to its unit codings, or undefined when it cannot be resolved.

Parameters

ParameterType
valueSetstring
itemExtendedQuestionnaireItem
answersResponseValues

Returns

Coding[] | undefined


ResponseValues

type ResponseValues = Record<string, QuestionnaireFormValue>;

Form values keyed by item linkId.

Variables

QuestionnaireFormContext

const QuestionnaireFormContext: Context<
  | QuestionnaireFormContextType
| undefined>;

Context holding the questionnaire form state.


QuestionnaireNavigationContext

const QuestionnaireNavigationContext: Context<QuestionnaireNavigationContextType | undefined>;

Context holding the questionnaire navigation state and handlers.

Last updated on

On this page

ComponentsQuestionnaireFormType DeclarationQuestionnaireFormProviderQuestionnaireNavigationProviderHooksuseQuestionnaireForm()ReturnsuseQuestionnaireNavigation()ReturnsuseQuestionnaireNavigationState()ParametersReturnsClassesQuestionnaireSubmitUtilsConstructorsConstructorReturnsMethodscreateQuestionnaireResponse()ParametersReturnspersistQuestionnaireResponse()ParametersReturnsThrowsquestionnaireHasObservationExtraction()ParametersReturnsFunctionsgetQuestionnaireAnswerPickerOptions()ParametersReturnsgetQuestionnaireItemConstraints()ParametersReturnsgetQuestionnaireNumericPickerOptions()ParametersReturnsuseInitialSelectedValues()ParametersReturnsuseNavigationHandlers()ParametersReturnsInterfacesQuestionnaireFormContextTypeExtendsPropertiesQuestionnaireFormValuesIndexablePropertiesQuestionnaireHeaderPropsExtendsPropertiesType AliasesExtendedQuestionnaireItemType DeclarationQuestionnaireAnswerPickerOptionPropertieslabelvalueQuestionnaireConstraintResolverParametersReturnsQuestionnaireFormPropsType DeclarationQuestionnaireFormProviderPropsType DeclarationQuestionnaireFormValueQuestionnaireItemConstraintsPropertiesmaxLength?maxQuantity?maxValue?minLength?minQuantity?minValue?step?unitOpen?unitOptionsunitValueSet?unresolvedDynamicBoundsunresolvedUnitValueSetQuestionnaireItemRendererParametersReturnsQuestionnaireItemRenderPropsPropertiesconstraintsitemlocale?onChangeParametersReturnstestID?value?QuestionnaireNavigationProviderPropsPropertiesallEnabledItemscurrentItemcurrentItemIndexcurrentPagecurrentPageIndexenabledItemsformikisSubmittingvaluespagesrenderItem?resolveQuestionnaireConstraint?resolveQuestionnaireUnitOptions?setCurrentItemIndexsetCurrentPageIndexsetErrorMessagevaluesQuestionnaireNumericPickerOptionPropertieslabelvalueQuestionnaireUnitOptionsResolverParametersReturnsResponseValuesVariablesQuestionnaireFormContextQuestionnaireNavigationContext