import type { Coding, Questionnaire, QuestionnaireItem, QuestionnaireResponse, QuestionnaireResponseItemAnswer } from 'fhir/r4'; import type { ComponentType } from 'react'; import type { QItemOverrideComponentProps, SdcUiOverrideComponentProps } from '../interfaces'; import type { AnswerExpression } from '../interfaces/answerExpression.interface'; import type { AnswerOptionsToggleExpression } from '../interfaces/answerOptionsToggleExpression.interface'; import type { CalculatedExpression } from '../interfaces/calculatedExpression.interface'; import type { EnableWhenExpressions, EnableWhenItems } from '../interfaces/enableWhen.interface'; import type { InitialExpression } from '../interfaces/initialExpression.interface'; import type { Pages } from '../interfaces/page.interface'; import type { LaunchContext } from '../interfaces/populate.interface'; import type { Tabs } from '../interfaces/tab.interface'; import type { TargetConstraint } from '../interfaces/targetConstraint.interface'; import type { ProcessedValueSet } from '../interfaces/valueSet.interface'; import type { Variables } from '../interfaces/variables.interface'; /** * QuestionnaireStore properties and methods * Properties can be accessed for fine-grain details. * Methods are usually used internally, using them from an external source is not recommended. * * @property sourceQuestionnaire - FHIR R4 Questionnaire to render * @property itemMap - Key-value pair of item types `Record` * @property itemPreferredTerminologyServers - Key-value pair of item types `Record` * @property tabs - Key-value pair of tabs `Record` * @property currentTabIndex - Index of the current tab * @property pages - Key-value pair of pages `Record` * @property currentPageIndex - Index of the current page * @property variables - Questionnaire variables object containing FHIRPath and x-fhir-query variables * @property launchContexts - Key-value pair of launch contexts `Record` * @property initialExpressions - Key-value pair of initial expressions `Record` * @property answerExpressions - Key-value pair of answer expressions `Record` * @property calculatedExpressions - Key-value pair of calculated expressions `Record` * @property targetConstraints - Key-value pair of target constraints `Record` * @property targetConstraintLinkIds - Key-value pair of linkIds against target constraint key(s) `Record` * @property answerOptionsToggleExpressions - Key-value pair of answer options toggle expressions `Record` * @property enableWhenItems - EnableWhenItems object containing enableWhen items and their linked questions * @property enableWhenLinkedQuestions - Key-value pair of linked questions to enableWhen items `Record` * @property enableWhenIsActivated - Flag to turn enableWhen checks on/off * @property enableWhenExpressions - EnableWhenExpressions object containing enableWhen expressions * @property processedValueSets - Key-value pair of (pre-)processed value set codings `Record` * @property cachedValueSetCodings - Key-value pair of cached value set codings `Record` * @property fhirPathContext - Key-value pair of evaluated FHIRPath values `Record` * @property fhirPathTerminologyCache - Key-value pair of cached FHIRPath Terminology results `Record` * @property additionalContext - Key-value pair of additional/pre-populated FHIRPath values `Record` * @property qItemOverrideComponents - Key-value pair of React component overrides for Questionnaire Items via linkId `Record` * @property sdcUiOverrideComponents - Key-value pair of React component overrides for SDC UI Controls https://hl7.org/fhir/extensions/ValueSet-questionnaire-item-control.html `Record` * @property focusedLinkId - LinkId of the currently focused item * @property readOnly - Flag to set the form to read-only mode * @property buildSourceQuestionnaire - Used to build the source questionnaire with the provided questionnaire and optionally questionnaire response, additional variables, terminology server url and readyOnly flag * @property destroySourceQuestionnaire - Used to destroy the source questionnaire and reset all properties * @property switchTab - Used to switch the current tab index * @property switchPage - Used to switch the current page index * @property markTabAsComplete - Used to mark a tab index as complete * @property markPageAsComplete - Used to mark a page index as complete * @property resetToFirstVisibleTab - Used to reset the current tab to the first visible tab * @property resetToFirstVisiblePage - Used to reset the current page to the first visible page * @property updateEnableWhenItem - Used to update linked enableWhen items by updating a question with a new answer * @property mutateRepeatEnableWhenItems - Used to add or remove instances of repeating enableWhen items * @property toggleEnableWhenActivation - Used to toggle enableWhen checks on/off * @property updateExpressions - Used to update all SDC expressions based on the updated questionnaire response, initialUpdate flag is to ensure formChangesHistory is not updated during the first update after form build * @property addCodingToCache - Used to add a coding to the cached value set codings * @property onFocusLinkId - Used to set the focused linkId * @property setAdditionalContext - Optionally used to set additional context information for FHIRPath eval. Useful to pass pre-populated context into the renderer. If you are rebuilding the form on pre-populate, you don't need to use this. pass `additionalContext` directly into buildForm(). * @property setFormAsReadOnly - Used to set the form as read-only * * @author Sean Fong */ export interface QuestionnaireStoreType { sourceQuestionnaire: Questionnaire; itemMap: Record>; itemPreferredTerminologyServers: Record; tabs: Tabs; currentTabIndex: number; pages: Pages; currentPageIndex: number; variables: Variables; launchContexts: Record; initialExpressions: Record; answerExpressions: Record; calculatedExpressions: Record; targetConstraints: Record; targetConstraintLinkIds: Record; enableWhenItems: EnableWhenItems; enableWhenLinkedQuestions: Record; enableWhenIsActivated: boolean; enableWhenExpressions: EnableWhenExpressions; answerOptionsToggleExpressions: Record; processedValueSets: Record; cachedValueSetCodings: Record; fhirPathContext: Record; fhirPathTerminologyCache: Record; additionalContext: Record; qItemOverrideComponents: Record>; sdcUiOverrideComponents: Record>; focusedLinkId: string; readOnly: boolean; buildSourceQuestionnaire: (questionnaire: Questionnaire, questionnaireResponse?: QuestionnaireResponse, additionalContext?: Record, terminologyServerUrl?: string, readOnly?: boolean, qItemOverrideComponents?: Record>, sdcUiOverrideComponents?: Record>) => Promise; destroySourceQuestionnaire: () => void; switchTab: (newTabIndex: number) => void; switchPage: (newPageIndex: number) => void; markTabAsComplete: (tabLinkId: string) => void; markPageAsComplete: (pageLinkId: string) => void; resetToFirstVisibleTab: () => void; resetToFirstVisiblePage: () => void; updateEnableWhenItem: (linkId: string, newAnswer: QuestionnaireResponseItemAnswer[] | undefined, parentRepeatGroupIndex: number | null) => void; mutateRepeatEnableWhenItems: (parentRepeatGroupLinkId: string, parentRepeatGroupIndex: number, actionType: 'add' | 'remove') => void; toggleEnableWhenActivation: (isActivated: boolean) => void; updateExpressions: (updatedResponse: QuestionnaireResponse, isInitialUpdate: boolean) => Promise; addCodingToCache: (valueSetUrl: string, codings: Coding[]) => void; onFocusLinkId: (linkId: string) => void; setAdditionalContext: (additionalContext: Record) => void; setFormAsReadOnly: (readOnly: boolean) => void; } /** * Questionnaire state management store which contains all properties and methods to manage the state of the questionnaire. * This is the vanilla version of the store which can be used in non-React environments. * @see {@link QuestionnaireStoreType} for available properties and methods. * * @author Sean Fong */ export declare const questionnaireStore: import("zustand/vanilla").StoreApi; /** * Questionnaire state management store which contains all properties and methods to manage the state of the questionnaire. * This is the React version of the store which can be used as React hooks in React functional components. * @see {@link QuestionnaireStoreType} for available properties and methods. * @see {@link questionnaireStore} for the vanilla store. * * @author Sean Fong */ export declare const useQuestionnaireStore: import("zustand/vanilla").StoreApi & { use: { sourceQuestionnaire: () => Questionnaire; itemMap: () => Record>; itemPreferredTerminologyServers: () => Record; tabs: () => Tabs; currentTabIndex: () => number; pages: () => Pages; currentPageIndex: () => number; variables: () => Variables; launchContexts: () => Record; initialExpressions: () => Record; answerExpressions: () => Record; calculatedExpressions: () => Record; targetConstraints: () => Record; targetConstraintLinkIds: () => Record; enableWhenItems: () => EnableWhenItems; enableWhenLinkedQuestions: () => Record; enableWhenIsActivated: () => boolean; enableWhenExpressions: () => EnableWhenExpressions; answerOptionsToggleExpressions: () => Record; processedValueSets: () => Record; cachedValueSetCodings: () => Record; fhirPathContext: () => Record; fhirPathTerminologyCache: () => Record; additionalContext: () => Record; qItemOverrideComponents: () => Record>; sdcUiOverrideComponents: () => Record>; focusedLinkId: () => string; readOnly: () => boolean; buildSourceQuestionnaire: () => (questionnaire: Questionnaire, questionnaireResponse?: QuestionnaireResponse, additionalContext?: Record, terminologyServerUrl?: string, readOnly?: boolean, qItemOverrideComponents?: Record>, sdcUiOverrideComponents?: Record>) => Promise; destroySourceQuestionnaire: () => () => void; switchTab: () => (newTabIndex: number) => void; switchPage: () => (newPageIndex: number) => void; markTabAsComplete: () => (tabLinkId: string) => void; markPageAsComplete: () => (pageLinkId: string) => void; resetToFirstVisibleTab: () => () => void; resetToFirstVisiblePage: () => () => void; updateEnableWhenItem: () => (linkId: string, newAnswer: QuestionnaireResponseItemAnswer[] | undefined, parentRepeatGroupIndex: number | null) => void; mutateRepeatEnableWhenItems: () => (parentRepeatGroupLinkId: string, parentRepeatGroupIndex: number, actionType: "add" | "remove") => void; toggleEnableWhenActivation: () => (isActivated: boolean) => void; updateExpressions: () => (updatedResponse: QuestionnaireResponse, isInitialUpdate: boolean) => Promise; addCodingToCache: () => (valueSetUrl: string, codings: Coding[]) => void; onFocusLinkId: () => (linkId: string) => void; setAdditionalContext: () => (additionalContext: Record) => void; setFormAsReadOnly: () => (readOnly: boolean) => void; }; };