@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
| Name | Type | Description |
|---|---|---|
Content | NamedExoticComponent<QuestionnaireContentProps> & object & object | Renders the current page or items. |
Header | NamedExoticComponent<QuestionnaireHeaderProps> & object & object | Header showing progress through the questionnaire. |
Navigation | NamedExoticComponent<Omit<KeyboardAvoidingViewProps, "contentContainerStyle">> & object & object | Back, 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
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
| Parameter | Type |
|---|---|
currentItem | ExtendedQuestionnaireItem | undefined |
currentPageIndex | number |
currentItemIndex | number |
enabledItems | ExtendedQuestionnaireItem[] |
pages | ExtendedQuestionnaireItem[] |
values | QuestionnaireFormValues |
allEnabledItems | ExtendedQuestionnaireItem[] |
renderItem? | QuestionnaireItemRenderer |
Returns
NavigationState
Classes
QuestionnaireSubmitUtils
Helpers for building and saving a QuestionnaireResponse.
Constructors
Constructor
new QuestionnaireSubmitUtils(): QuestionnaireSubmitUtils;Returns
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
| Parameter | Type |
|---|---|
responses | ResponseValues |
pages | ExtendedQuestionnaireItem[] |
questionnaire | Questionnaire |
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
| Parameter | Type |
|---|---|
client | Ovok |
response | QuestionnaireResponse |
extractObservations | boolean |
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
| Parameter | Type |
|---|---|
questionnaire | Questionnaire |
Returns
boolean
Functions
getQuestionnaireAnswerPickerOptions()
function getQuestionnaireAnswerPickerOptions(item, locale?): QuestionnaireAnswerPickerOption[];Builds picker options from a choice item's answer options, in order.
Parameters
| Parameter | Type |
|---|---|
item | ExtendedQuestionnaireItem |
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
| Parameter | Type |
|---|---|
item | ExtendedQuestionnaireItem |
answers? | ResponseValues |
resolver? | QuestionnaireConstraintResolver |
unitOptionsResolver? | QuestionnaireUnitOptionsResolver |
Returns
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
| Parameter | Type | Default value |
|---|---|---|
item | ExtendedQuestionnaireItem | undefined |
constraints | QuestionnaireItemConstraints | undefined |
locale? | string | undefined |
maximumOptions? | number | 1000 |
Returns
QuestionnaireNumericPickerOption[]
useInitialSelectedValues()
function useInitialSelectedValues(
pages,
values,
setFieldValue
): void;Hook to handle initializing conditional questions with default values
Parameters
| Parameter | Type |
|---|---|
pages | ExtendedQuestionnaireItem[] |
values | QuestionnaireFormValues |
setFieldValue | (field, value, shouldValidate?) => void |
Returns
void
useNavigationHandlers()
function useNavigationHandlers(__namedParameters): object;Provides navigation handlers for the questionnaire form
Parameters
| Parameter | Type |
|---|---|
__namedParameters | UseNavigationHandlersProps |
Returns
| Name | Type | Description |
|---|---|---|
handleNext() | () => void | Validates the current item, then moves to the next item or page. |
handlePrevious() | () => void | Moves back to the previous item or page. |
Interfaces
QuestionnaireFormContextType
Value of the questionnaire form context: Formik state plus questionnaire navigation state and helpers.
Extends
FormikProps<QuestionnaireFormValues>
Properties
| Property | Type | Description |
|---|---|---|
allItems | ExtendedQuestionnaireItem[] | All enabled items in display order. |
currentItem | ExtendedQuestionnaireItem | undefined | The item currently shown, or undefined when there is none. |
currentItemIndex | number | Index of the current item within allItems. |
currentPage | ExtendedQuestionnaireItem | The page (top-level group) currently shown. |
currentPageIndex | number | Index of the current page within pages. |
errorMessage | string | null | Validation error to show for the current item, or null. |
locale? | string | Locale used for questionnaire text. |
paged | boolean | Whether the questionnaire is shown one page at a time. |
pages | ExtendedQuestionnaireItem[] | The pages of the questionnaire. |
questionnaire | Questionnaire | The FHIR Questionnaire being filled in. |
renderItem? | QuestionnaireItemRenderer | Custom renderer for questionnaire items. |
resolveQuestionnaireConstraint? | QuestionnaireConstraintResolver | Resolves constraints (such as min and max values) for an item. |
resolveQuestionnaireUnitOptions? | QuestionnaireUnitOptionsResolver | Resolves the selectable units for a quantity item. |
retrySubmit | () => void | Retries the last failed submission. |
setCurrentItemIndex | Dispatch<SetStateAction<number>> | Sets the current item index. |
setCurrentPageIndex | Dispatch<SetStateAction<number>> | Sets the current page index. |
setErrorMessage | Dispatch<SetStateAction<string | null>> | Sets the validation error message. |
submissionError | string | null | Error from the last failed submission, or null. |
QuestionnaireFormValues
Form values keyed by item linkId.
Indexable
[key: string]: QuestionnaireFormValueProperties
QuestionnaireHeaderProps
Props for QuestionnaireForm.Header; also accepts View props except style.
Extends
Omit<ViewProps,"style">
Properties
| Property | Type | Description | Overrides |
|---|---|---|---|
children? | ReactNode | Header 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
| Name | Type | Description |
|---|---|---|
_helperText? | Element | FHIR extension element for helperText (carries translations). |
_isSyntheticPage? | boolean | true for a page the SDK created to wrap items that are not in a group. |
_placeholder? | Element | FHIR extension element for placeholder (carries translations). |
_prefix? | Element | FHIR extension element for prefix (carries translations). |
_text? | Element | FHIR extension element for text (carries translations). |
answerOption? | ExtendedQuestionnaireItemAnswerOption[] | Answer options, with optional preselection. |
helperText? | string | Helper text shown below the input. |
placeholder? | string | Placeholder 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
| Parameter | Type |
|---|---|
constraint | Extension |
item | ExtendedQuestionnaireItem |
answers | ResponseValues |
Returns
unknown
QuestionnaireFormProps
type QuestionnaireFormProps = (ViewProps | ScrollViewProps) & QuestionnaireFormProviderProps & object;Props for QuestionnaireForm: View or ScrollView props plus the provider props.
Type Declaration
| Name | Type | Description |
|---|---|---|
nestedScrollEnabled? | boolean | Whether 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
| Name | Type | Description |
|---|---|---|
initialValues? | Partial<QuestionnaireFormValues> | Initial form values. |
locale? | string | Locale used for questionnaire text. |
paged? | boolean | Show the questionnaire one page at a time. |
questionnaire | Questionnaire | The FHIR Questionnaire to fill in. |
renderItem? | QuestionnaireItemRenderer | Custom renderer for questionnaire items. |
resolveQuestionnaireConstraint? | QuestionnaireConstraintResolver | Resolves SDC calculated min/max extensions. Integrations can use their FHIRPath/CQL engine without coupling the questionnaire controls to one. |
resolveQuestionnaireUnitOptions? | QuestionnaireUnitOptionsResolver | Resolves 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
| Parameter | Type |
|---|---|
props | QuestionnaireItemRenderProps |
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
| Parameter | Type |
|---|---|
value | QuestionnaireFormValue |
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
| Parameter | Type |
|---|---|
valueSet | string |
item | ExtendedQuestionnaireItem |
answers | ResponseValues |
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