@oneblink/apps-react 8.10.0 → 8.11.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/OneBlinkFormBase.js +1 -1
- package/dist/OneBlinkFormBase.js.map +1 -1
- package/dist/components/downloadable-files/index.js +25 -11
- package/dist/components/downloadable-files/index.js.map +1 -1
- package/dist/hooks/useDrafts.js +3 -3
- package/dist/hooks/useDrafts.js.map +1 -1
- package/dist/hooks/useDynamicOptionsLoaderState.d.ts +2 -1
- package/dist/hooks/useDynamicOptionsLoaderState.js +5 -5
- package/dist/hooks/useDynamicOptionsLoaderState.js.map +1 -1
- package/package.json +2 -2
package/dist/OneBlinkFormBase.js
CHANGED
@@ -698,7 +698,7 @@ function OneBlinkFormBase({ googleMapsApiKey, abnLookupAuthenticationGuid, captc
|
|
698
698
|
React.createElement(LocalizationProvider, { dateAdapter: AdapterDateFns },
|
699
699
|
React.createElement(ReplaceInjectablesOverridesContext.Provider, { value: replaceInjectablesOverrides },
|
700
700
|
React.createElement(FormDefinitionContext.Provider, { value: definition },
|
701
|
-
React.createElement(FormElementOptionsContextProvider,
|
701
|
+
React.createElement(FormElementOptionsContextProvider, { formIsReadOnly: isReadOnly },
|
702
702
|
React.createElement(FormElementLookupsContextProvider, null,
|
703
703
|
React.createElement(OneBlinkFormContainerContext.Provider, { value: obFormContainerHTMLElementRef.current },
|
704
704
|
React.createElement("div", { className: clsx('ob-form-container', {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"OneBlinkFormBase.js","sourceRoot":"","sources":["../src/OneBlinkFormBase.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { createTheme as createMuiTheme, ThemeProvider } from '@mui/material'\nimport Tooltip from './components/renderer/Tooltip'\nimport { Prompt, useHistory } from 'react-router-dom'\nimport clsx from 'clsx'\nimport * as bulmaToast from 'bulma-toast'\nimport {\n localisationService,\n submissionService,\n attachmentsService,\n} from '@oneblink/apps'\nimport {\n EnvironmentTypes,\n FormTypes,\n FormsAppsTypes,\n ScheduledTasksTypes,\n SubmissionTypes,\n} from '@oneblink/types'\nimport * as H from 'history'\nimport { LocalizationProvider } from '@mui/x-date-pickers'\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'\n\nimport Modal from './components/renderer/Modal'\nimport cleanFormSubmissionModel from './services/cleanFormSubmissionModel'\nimport PageFormElements from './components/renderer/PageFormElements'\nimport useFormValidation from './hooks/useFormValidation'\nimport useConditionalLogic from './hooks/useConditionalLogic'\nimport usePages from './hooks/usePages'\nimport useLookups from './hooks/useLookups'\nimport { FormDefinitionContext } from './hooks/useFormDefinition'\nimport {\n ReplaceInjectablesOverridesContext,\n ReplaceInjectablesOverrides,\n} from './hooks/useReplaceInjectablesOverrides'\nimport { InjectPagesContext } from './hooks/useInjectPages'\nimport { FormElementOptionsContextProvider } from './hooks/useDynamicOptionsLoaderState'\nimport { FormElementLookupsContextProvider } from './hooks/useFormElementLookups'\nimport { OneBlinkFormContainerContext } from './hooks/useOneBlinkFormContainer'\nimport { GoogleMapsApiKeyContext } from './hooks/useGoogleMapsApiKey'\nimport { AbnLookupAuthenticationGuidContext } from './hooks/useAbnLookupAuthenticationGuid'\nimport { CaptchaContext } from './hooks/useCaptcha'\nimport { FormIsReadOnlyContext } from './hooks/useFormIsReadOnly'\nimport { AttachmentBlobsProvider } from './hooks/attachments/useAttachmentBlobs'\nimport useIsOffline from './hooks/useIsOffline'\nimport CustomisableButtonInner from './components/renderer/CustomisableButtonInner'\nimport {\n CaptchaType,\n ExecutedLookups,\n FormElementsValidation,\n NestedFormElementValueChangeHandler,\n SetFormSubmission,\n SectionState,\n} from './types/form'\nimport checkBsbsAreInvalid from './services/checkBsbsAreInvalid'\nimport checkIfBsbsAreValidating from './services/checkIfBsbsAreValidating'\nimport checkIfAttachmentsExist from './services/checkIfAttachmentsExist'\nimport { injectDynamicElements } from './services/dynamic-elements'\nimport useAuth from './hooks/useAuth'\nimport { formElementsService } from '@oneblink/sdk-core'\nimport { TaskContext } from './hooks/useTaskContext'\nimport { OnUploadAttachmentContext } from './hooks/useOnUploadAttachment'\nimport { injectOptionsAcrossAllElements } from './services/injectableOptions'\nimport MaterialIcon from './components/MaterialIcon'\nimport ReCAPTCHA from 'react-google-recaptcha'\nimport ValidationErrorsCard from './components/ValidationErrorsCard'\nimport { sendGoogleAnalyticsEvent } from './utils/sendGoogleAnalyticsEvent'\nimport { useUserProfileForInjectablesOutsideContext } from './hooks/useUserProfileForInjectables'\nimport { ValidationIconConfigurationContext } from './hooks/useValidationIconConfiguration'\n\nexport type OneBlinkReadOnlyFormProps = {\n /**\n * A [Google Maps API\n * Key](https://developers.google.com/maps/documentation/javascript/get-api-key).\n * Required if the form contains a `location` form element.\n */\n googleMapsApiKey?: string\n /** Hex colour value for certain inputs (defaults to `#4c8da7`). */\n primaryColour?: string\n /**\n * Pass a task if the user was attempting to complete a scheduled task via a\n * form submission\n */\n task?: ScheduledTasksTypes.Task\n /**\n * Pass a task group if the user was attempting to complete a scheduled task\n * associated with a group via a form submission\n */\n taskGroup?: ScheduledTasksTypes.TaskGroup\n /**\n * Pass a task group instance if the user was attempting to complete a\n * scheduled task associated with a group via a form submission\n */\n taskGroupInstance?: ScheduledTasksTypes.TaskGroupInstance\n /**\n * Override the default behaviour when injecting values, such as in an info\n * element or a default value.\n */\n replaceInjectablesOverrides?: ReplaceInjectablesOverrides\n}\n\nexport type OneBlinkFormBaseProps = OneBlinkReadOnlyFormProps & {\n /** The function to call when the user cancels the form */\n onCancel: () => unknown\n /**\n * The function to call when the user submits the form with valid submission\n * data. See\n * [NewFormSubmission](https://oneblink.github.io/apps/modules/submissionService.html#NewFormSubmission)\n * for the structure of the argument.\n */\n onSubmit: (newFormSubmission: submissionService.NewFormSubmission) => unknown\n /** Whether the form is currently able to be submitted. False by default. */\n disabled?: boolean\n /** Whether the form is in preview mode. False by default. */\n isPreview?: boolean\n /**\n * An [ABN Lookup Authentication\n * Guid](https://abr.business.gov.au/Tools/WebServices). Required if the form\n * contains a `abn` form element.\n */\n abnLookupAuthenticationGuid?: string\n /**\n * A [reCAPTCHA Site Key](https://developers.google.com/recaptcha/intro).\n * Required if the form contains a `captcha` form element.\n */\n captchaSiteKey?: string\n /** Change properties for certain buttons on the form. */\n buttons?: FormsAppsTypes.FormsListStyles['buttons']\n /** Set a custom validation icon and accessible label. */\n validationIcon?: EnvironmentTypes.FormsAppEnvironmentStyles['validationIcon']\n /** Number of days attachments are retained for. */\n attachmentRetentionInDays?: number\n /**\n * If set to `false`, submission will be prevented while offline. If set to\n * `true`, the user will be prompted to allow them to continue with\n * attachments uploading in the background later.\n */\n isPendingQueueEnabled: boolean\n /**\n * The function to call when the user wishes to save their submission data as\n * a draft submission. If not specified, drafts cannot be saved. See\n * [NewDraftSubmission](https://oneblink.github.io/apps/modules/submissionService.html#NewDraftSubmission)\n * for the structure of the argument.\n */\n onSaveDraft?: (\n newDraftSubmission: submissionService.NewDraftSubmission,\n ) => unknown\n /**\n * The function to call when the user needs to navigate away from the form.\n * e.g. `history.push`\n */\n handleNavigateAway?: () => unknown\n /**\n * Determines whether the form is submittable or not. Info page type forms\n * show a \"Done\" button instead of a \"Submit\" button. Defaults to\n * \"CALCULATED\"\n */\n isInfoPage?: 'YES' | 'NO' | 'CALCULATED'\n /**\n * The function to call when a user uploads an attachment through an element\n * that allows attachment upload. See\n * [uploadAttachment](https://oneblink.github.io/apps/modules/attachmentsService.html#uploadAttachment)\n * for the structure of the argument and a sample function to be used.\n */\n onUploadAttachment?: typeof attachmentsService.uploadAttachment\n /**\n * Determines whether to use checkboxes or invisible recaptcha v2 for captcha\n * elements. Defaults to \"CHECKBOX\"\n */\n captchaType?: CaptchaType\n\n /**\n * Whether the form should use a navigable validation errors notification, or\n * a simple validation errors notification\n *\n * @default true\n */\n shouldUseNavigableValidationErrorsNotification?: boolean\n /** Various settings for the navigable validation errors notification */\n navigableValidationErrorsNotificationSettings?: {\n /**\n * A pixel offset for validation error navigation markers. Use this to\n * account for any headers your page might have. If not set, we will attempt\n * to calculate the offset for you. Please note: Calculating this value is\n * not supported when passing in a `scrollableContainerId`.\n */\n navigationTopOffset?: number\n /**\n * The HTML Element ID of the scrollable container your form resides in. If\n * not set, will scroll on the window.\n */\n scrollableContainerId?: string\n }\n}\n\nexport type OneBlinkFormUncontrolledProps = {\n /** The OneBlink Form to render */\n form: FormTypes.Form\n /** The initial submission data */\n initialSubmission?: SubmissionTypes.S3SubmissionData['submission']\n}\n\nexport type OneBlinkFormControlledProps = {\n definition: FormTypes.Form\n submission: SubmissionTypes.S3SubmissionData['submission']\n setFormSubmission: SetFormSubmission\n lastElementUpdated?: FormTypes.FormElement\n executedLookups: ExecutedLookups\n sectionState?: SectionState\n}\n\ntype Props = OneBlinkFormBaseProps &\n OneBlinkFormControlledProps & {\n isReadOnly: boolean\n }\n\nfunction OneBlinkFormBase({\n googleMapsApiKey,\n abnLookupAuthenticationGuid,\n captchaSiteKey,\n definition,\n disabled,\n isPreview,\n submission,\n isReadOnly,\n onCancel,\n onSubmit,\n onSaveDraft,\n setFormSubmission,\n buttons,\n validationIcon,\n primaryColour,\n attachmentRetentionInDays,\n isPendingQueueEnabled,\n handleNavigateAway,\n isInfoPage: isInfoPageProp,\n lastElementUpdated,\n executedLookups,\n task,\n taskGroup,\n taskGroupInstance,\n onUploadAttachment,\n captchaType,\n shouldUseNavigableValidationErrorsNotification = true,\n navigableValidationErrorsNotificationSettings,\n replaceInjectablesOverrides,\n sectionState,\n}: Props) {\n const isOffline = useIsOffline()\n const { isUsingFormsKey } = useAuth()\n const userProfileForInjectables = useUserProfileForInjectablesOutsideContext(\n replaceInjectablesOverrides?.getUserProfile,\n )\n const captchasRef = React.useRef<Array<ReCAPTCHA>>([])\n\n const theme = React.useMemo(\n () =>\n createMuiTheme({\n palette: {\n primary: {\n main: primaryColour || '#4c8da7',\n },\n success: {\n main: '#4caf50',\n },\n },\n }),\n [primaryColour],\n )\n\n const isInfoPage = React.useMemo(() => {\n if (!!isInfoPageProp && isInfoPageProp !== 'CALCULATED') {\n return isInfoPageProp === 'YES'\n }\n return formElementsService.determineIsInfoPage(definition)\n }, [definition, isInfoPageProp])\n\n const taskContextValue = React.useMemo(() => {\n return {\n task,\n taskGroup,\n taskGroupInstance,\n }\n }, [task, taskGroup, taskGroupInstance])\n\n //\n //\n // #region Form Definition\n\n const pages = React.useMemo<FormTypes.PageElement[]>(() => {\n if (definition.isMultiPage) {\n return definition.elements.reduce(\n (\n pageElements: FormTypes.PageElement[],\n formElement: FormTypes.FormElement,\n ) => {\n if (formElement.type === 'page') {\n pageElements.push(formElement)\n }\n return pageElements\n },\n [],\n )\n } else {\n return [\n {\n type: 'page',\n id: definition.id.toString(),\n label: definition.name,\n elements: definition.elements,\n conditionallyShow: false,\n requiresAllConditionallyShowPredicates: false,\n },\n ]\n }\n }, [\n definition.elements,\n definition.id,\n definition.isMultiPage,\n definition.name,\n ])\n\n const pagesWithDynamicElements = React.useMemo<\n FormTypes.PageElement[]\n >(() => {\n return injectDynamicElements(pages) as FormTypes.PageElement[]\n }, [pages])\n\n // #endregion\n //\n //\n\n //\n //\n // #region Unsaved Changed\n\n const history = useHistory()\n\n const [isPreparingToSubmit, setIsPreparingToSubmit] =\n React.useState<boolean>(false)\n const [\n { isDirty, isNavigationAllowed, hasConfirmedNavigation, goToLocation },\n setUnsavedChangesState,\n ] = React.useState<{\n isDirty: boolean\n isNavigationAllowed: boolean\n hasConfirmedNavigation: boolean | null\n goToLocation: H.Location | null\n }>({\n isDirty: false,\n isNavigationAllowed: false,\n hasConfirmedNavigation: null,\n goToLocation: null,\n })\n const [promptOfflineSubmissionAttempt, setPromptOfflineSubmissionAttempt] =\n React.useState<boolean>(false)\n const [promptUploadingAttachments, setPromptUploadingAttachments] =\n React.useState<boolean>(false)\n const handleBlockedNavigation = React.useCallback<\n (location: H.Location, action: H.Action) => string | boolean\n >((location) => {\n setUnsavedChangesState((current) => ({\n ...current,\n goToLocation: location,\n hasConfirmedNavigation: false,\n }))\n return false\n }, [])\n\n const handleKeepGoing = React.useCallback(() => {\n setUnsavedChangesState((current) => ({\n ...current,\n goToLocation: null,\n hasConfirmedNavigation: null,\n }))\n }, [])\n\n const handleDiscardUnsavedChanges = React.useCallback(() => {\n setUnsavedChangesState((current) => ({\n ...current,\n isNavigationAllowed: true,\n hasConfirmedNavigation: true,\n }))\n sendGoogleAnalyticsEvent('oneblink_form_abandon', {\n formId: definition.id,\n formName: definition.name,\n })\n }, [definition.id, definition.name])\n\n React.useEffect(() => {\n if (hasConfirmedNavigation) {\n // Navigate to the previous blocked location with your navigate function\n if (goToLocation) {\n history.push(`${goToLocation.pathname}${goToLocation.search}`)\n if (handleNavigateAway) {\n handleNavigateAway()\n }\n } else {\n onCancel()\n }\n }\n }, [\n goToLocation,\n handleNavigateAway,\n hasConfirmedNavigation,\n history,\n onCancel,\n ])\n\n const handleCancel = React.useCallback(() => {\n if (isDirty) {\n setUnsavedChangesState((current) => ({\n ...current,\n hasConfirmedNavigation: false,\n }))\n } else {\n sendGoogleAnalyticsEvent('oneblink_form_abandon', {\n formId: definition.id,\n formName: definition.name,\n })\n onCancel()\n }\n }, [definition.id, definition.name, isDirty, onCancel])\n\n const allowNavigation = React.useCallback(() => {\n setUnsavedChangesState((current) => ({\n ...current,\n isNavigationAllowed: true,\n }))\n }, [])\n\n // #endregion Unsaved Changed\n //\n //\n\n //\n //\n // #region Conditional Logic\n\n const {\n formElementsConditionallyShown,\n conditionalLogicError,\n submissionConditionallyEnabled,\n } = useConditionalLogic({\n formElements: pagesWithDynamicElements,\n submission,\n enableSubmission: definition.enableSubmission,\n })\n\n // #endregion\n //\n //\n\n //\n //\n // #region Validation\n\n const validationErrorToastFocusElementRef =\n React.useRef<HTMLButtonElement>(null)\n const [isShowingValidationErrorsCard, setIsShowingValidationErrorsCard] =\n React.useState(false)\n const { validate } = useFormValidation(pages)\n\n const recaptchaType = React.useMemo(\n () => captchaType ?? 'CHECKBOX',\n [captchaType],\n )\n\n const formElementsValidation = React.useMemo<\n FormElementsValidation | undefined\n >(\n () =>\n !isReadOnly\n ? validate(\n submission,\n formElementsConditionallyShown,\n executedLookups ?? {},\n recaptchaType,\n isOffline,\n )\n : undefined,\n [\n isReadOnly,\n validate,\n submission,\n formElementsConditionallyShown,\n executedLookups,\n recaptchaType,\n isOffline,\n ],\n )\n\n React.useEffect(() => {\n if (!formElementsValidation) {\n setIsShowingValidationErrorsCard(false)\n }\n }, [formElementsValidation])\n\n // #endregion\n //\n //\n\n //\n //\n // #region Pages\n\n const [hasAttemptedSubmit, setHasAttemptedSubmit] = React.useState(false)\n\n const {\n visiblePages,\n isFirstVisiblePage,\n isLastVisiblePage,\n isDisplayingCurrentPageError,\n isShowingMultiplePages,\n isStepsHeaderActive,\n toggleStepsNavigation,\n currentPageIndex,\n currentPage,\n currentPageNumber,\n checkDisplayPageError,\n setPageId,\n goToPreviousPage,\n goToNextPage,\n scrollToTopOfPageHTMLElementRef,\n } = usePages({\n hasAttemptedSubmit,\n pages,\n formElementsValidation,\n formElementsConditionallyShown,\n })\n\n // #endregion\n //\n //\n\n //\n //\n // #region Submissions\n\n const getCurrentSubmissionData = React.useCallback(\n (stripBinaryData: boolean) => {\n const { model, captchaTokens } = cleanFormSubmissionModel(\n submission,\n definition.elements,\n formElementsConditionallyShown,\n stripBinaryData,\n )\n return {\n submission: model,\n captchaTokens,\n }\n },\n [definition.elements, formElementsConditionallyShown, submission],\n )\n\n const obFormContainerHTMLElementRef = React.useRef<HTMLDivElement>(null)\n React.useEffect(() => {\n const obFormContainerHTMLElement = obFormContainerHTMLElementRef.current\n if (obFormContainerHTMLElement) {\n console.log(\n 'Setting toast notifications to be appended to HTML Element',\n obFormContainerHTMLElement,\n )\n bulmaToast.setDefaults({\n position: 'bottom-right',\n opacity: 0.95,\n appendTo: obFormContainerHTMLElement,\n })\n }\n return () => {\n bulmaToast.resetDefaults()\n }\n }, [])\n\n const checkAttachmentsCanBeSubmitted = React.useCallback(\n (submission: SubmissionTypes.S3SubmissionData['submission']) => {\n // Prevent submission until all attachment uploads are finished\n // Unless the user is offline, in which case, the uploads will\n // be taken care of by a pending queue if enabled, otherwise\n // the user will be prompted to try again or save a draft.\n if (isOffline) {\n return true\n }\n const attachmentsAreUploading =\n attachmentsService.checkIfAttachmentsAreUploading(\n definition,\n submission,\n )\n\n if (attachmentsAreUploading) {\n if (isUsingFormsKey || !isPendingQueueEnabled) {\n bulmaToast.toast({\n message:\n 'Attachments are still uploading, please wait for them to finish before trying again.',\n type: 'is-primary',\n extraClasses: 'ob-toast cypress-still-uploading-toast',\n duration: 4000,\n pauseOnHover: true,\n closeOnClick: true,\n })\n return false\n } else {\n setPromptUploadingAttachments(true)\n return false\n }\n }\n\n return true\n },\n [definition, isOffline, isPendingQueueEnabled, isUsingFormsKey],\n )\n\n const checkBsbsCanBeSubmitted = React.useCallback(\n (submission: SubmissionTypes.S3SubmissionData['submission']) => {\n return !checkBsbsAreInvalid(definition, submission)\n },\n [definition],\n )\n\n const checkBsbAreValidating = React.useCallback(\n (submission: SubmissionTypes.S3SubmissionData['submission']) => {\n if (checkIfBsbsAreValidating(definition, submission)) {\n bulmaToast.toast({\n message:\n 'Bsb(s) are still being validated, please wait for them to finish before trying again.',\n type: 'is-primary',\n extraClasses: 'ob-toast cypress-still-validating-toast',\n duration: 4000,\n pauseOnHover: true,\n closeOnClick: true,\n })\n return false\n }\n\n return true\n },\n [definition],\n )\n\n const addCaptchaRef = React.useCallback((recaptcha: ReCAPTCHA) => {\n captchasRef.current.push(recaptcha)\n // this allows the FormElementCaptcha element to unregister any captchas\n return () => {\n captchasRef.current = captchasRef.current.filter(\n (recaptchaInstance) => recaptchaInstance !== recaptcha,\n )\n }\n }, [])\n\n const captchaContextValue = React.useMemo(\n () => ({\n captchaSiteKey,\n captchaType: recaptchaType,\n addCaptchaRef,\n }),\n [addCaptchaRef, captchaSiteKey, recaptchaType],\n )\n\n const resetRecaptchas = React.useCallback(() => {\n // unset the submission model value for each captcha element\n const updatedModel = { ...submission }\n formElementsService.forEachFormElement(definition.elements, (element) => {\n if (element.type === 'captcha') {\n updatedModel[element.name] = undefined\n }\n })\n // reset each captcha\n if (captchaType === 'CHECKBOX') {\n captchasRef.current.forEach((captcha) => {\n captcha.reset()\n })\n }\n\n setHasAttemptedSubmit(false)\n setFormSubmission((current) => {\n return { ...current, submission: updatedModel }\n })\n }, [definition.elements, setFormSubmission, submission, captchaType])\n\n const prepareSubmission = React.useCallback(\n async (\n continueWhilstAttachmentsAreUploading: boolean,\n ): Promise<ReturnType<typeof getCurrentSubmissionData> | undefined> => {\n const submissionData = getCurrentSubmissionData(false)\n if (!checkBsbAreValidating(submissionData.submission)) {\n return\n }\n if (formElementsValidation) {\n console.log('Validation errors', formElementsValidation)\n if (!shouldUseNavigableValidationErrorsNotification) {\n bulmaToast.toast({\n message: 'Please fix validation errors',\n type: 'is-danger',\n extraClasses: 'ob-toast cypress-invalid-submit-attempt',\n duration: 4000,\n pauseOnHover: true,\n closeOnClick: true,\n })\n }\n setIsShowingValidationErrorsCard(true)\n validationErrorToastFocusElementRef.current?.focus()\n return\n }\n if (!checkBsbsCanBeSubmitted(submissionData.submission)) {\n return\n }\n if (\n !continueWhilstAttachmentsAreUploading &&\n !checkAttachmentsCanBeSubmitted(submissionData.submission)\n ) {\n return\n }\n\n if (captchaType === 'INVISIBLE') {\n if (captchasRef.current.length) {\n if (isOffline) {\n setPromptOfflineSubmissionAttempt(true)\n return\n }\n const tokenResults = await Promise.allSettled(\n captchasRef.current.map((captcha) => captcha.executeAsync()),\n )\n\n const captchaTokens: string[] = []\n\n for (const result of tokenResults) {\n if (result.status === 'rejected' || !result.value) {\n console.log('Captcha token failure')\n bulmaToast.toast({\n message: 'Failed to get a captcha token',\n type: 'is-danger',\n extraClasses: 'ob-toast cypress-failed-captcha-token-creation',\n duration: 4000,\n pauseOnHover: true,\n closeOnClick: true,\n })\n return\n }\n captchaTokens.push(result.value)\n }\n\n submissionData.captchaTokens = captchaTokens\n }\n }\n\n // check if attachments exist\n const newSubmission = checkIfAttachmentsExist(\n definition,\n submissionData.submission,\n attachmentRetentionInDays,\n )\n if (newSubmission) {\n setFormSubmission((currentFormSubmission) => ({\n ...currentFormSubmission,\n submission: newSubmission,\n }))\n bulmaToast.toast({\n message:\n \"Some files that were included in your submission have been removed based on your administrator's data retention policy, please remove them and upload them again.\",\n type: 'is-danger',\n extraClasses: 'ob-toast cypress-invalid-submit-attempt',\n duration: 4000,\n pauseOnHover: true,\n closeOnClick: true,\n })\n return\n }\n\n if (isOffline && !isPendingQueueEnabled) {\n console.log('User is offline and form does not support a pending queue')\n setPromptOfflineSubmissionAttempt(true)\n return\n }\n return submissionData\n },\n [\n attachmentRetentionInDays,\n captchaType,\n checkAttachmentsCanBeSubmitted,\n checkBsbAreValidating,\n checkBsbsCanBeSubmitted,\n definition,\n formElementsValidation,\n getCurrentSubmissionData,\n isOffline,\n isPendingQueueEnabled,\n setFormSubmission,\n shouldUseNavigableValidationErrorsNotification,\n ],\n )\n\n const handleSubmit = React.useCallback(\n async (\n event:\n | React.FormEvent<HTMLFormElement>\n | React.MouseEvent<HTMLButtonElement, MouseEvent>,\n continueWhilstAttachmentsAreUploading: boolean,\n ) => {\n event.preventDefault()\n if (disabled || isReadOnly) return\n setHasAttemptedSubmit(true)\n\n setIsPreparingToSubmit(true)\n\n const submissionData = await prepareSubmission(\n continueWhilstAttachmentsAreUploading,\n )\n\n if (!submissionData) {\n setIsPreparingToSubmit(false)\n return\n }\n\n allowNavigation()\n\n // transplant injected options on the definition\n const elementsWithInjectedOptions = injectOptionsAcrossAllElements({\n contextElements: definition.elements,\n elements: definition.elements,\n submission: submissionData.submission,\n taskContext: taskContextValue,\n userProfile: userProfileForInjectables,\n })\n setIsPreparingToSubmit(false)\n resetRecaptchas()\n onSubmit({\n definition: {\n ...definition,\n elements: elementsWithInjectedOptions,\n },\n submission: submissionData.submission,\n recaptchas: submissionData.captchaTokens.map((token) => ({\n token,\n siteKey: captchaSiteKey as string,\n })),\n })\n sendGoogleAnalyticsEvent('oneblink_form_submit', {\n formId: definition.id,\n formName: definition.name,\n })\n },\n [\n disabled,\n isReadOnly,\n prepareSubmission,\n allowNavigation,\n definition,\n taskContextValue,\n userProfileForInjectables,\n resetRecaptchas,\n onSubmit,\n captchaSiteKey,\n ],\n )\n\n const handleSaveDraft = React.useCallback(\n (continueWhilstAttachmentsAreUploading: boolean) => {\n if (disabled) return\n if (onSaveDraft) {\n allowNavigation()\n\n // For drafts we don't need to save the captcha tokens,\n // they will need to prove they are not robot again\n const { submission } = getCurrentSubmissionData(false)\n if (!checkBsbAreValidating(submission)) {\n return\n }\n if (\n !continueWhilstAttachmentsAreUploading &&\n !checkAttachmentsCanBeSubmitted(submission)\n ) {\n return\n }\n onSaveDraft({\n definition,\n submission,\n backgroundUpload: continueWhilstAttachmentsAreUploading,\n lastElementUpdated,\n sectionState,\n })\n }\n },\n [\n allowNavigation,\n checkAttachmentsCanBeSubmitted,\n definition,\n disabled,\n getCurrentSubmissionData,\n onSaveDraft,\n checkBsbAreValidating,\n lastElementUpdated,\n sectionState,\n ],\n )\n\n const handleContinueWithAttachments = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setPromptUploadingAttachments(false)\n if (hasAttemptedSubmit) {\n handleSubmit(e, true)\n } else {\n handleSaveDraft(true)\n }\n },\n [\n handleSubmit,\n setPromptUploadingAttachments,\n hasAttemptedSubmit,\n handleSaveDraft,\n ],\n )\n const handleWaitForAttachments = React.useCallback(() => {\n setPromptUploadingAttachments(false)\n }, [setPromptUploadingAttachments])\n\n // #endregion\n //\n //\n\n //\n //\n // #region Lookups\n\n const { handlePagesLookupResult } = useLookups(\n definition.id,\n setFormSubmission,\n )\n\n // #endregion\n //\n //\n\n //\n //\n // #region Submission/Definition Changes\n\n const handleChange = React.useCallback<NestedFormElementValueChangeHandler>(\n (element, { value, executedLookups, deleteSection, sectionState }) => {\n if (\n //This will ensure on a read only form that the summary and calculation elements\n //can still be displayed as it needs handleChange so it can render\n //due to the dynamic nature of the summary element.\n (disabled &&\n element.type !== 'summary' &&\n element.type !== 'calculation') ||\n element.type === 'page'\n ) {\n return\n }\n\n switch (element.type) {\n case 'section': {\n setFormSubmission((currentFormSubmission) => {\n const currentSectionState = currentFormSubmission.sectionState || []\n const existingSectionIndex = currentSectionState.findIndex(\n (section) => section.id === element.id,\n )\n const sectionIsInState = existingSectionIndex >= 0\n let newSectionState: SectionState\n if (sectionIsInState && deleteSection) {\n newSectionState = currentSectionState.filter(\n (section) => section.id !== element.id,\n )\n } else if (sectionIsInState) {\n // Update state of the section\n newSectionState = currentSectionState.map((section, index) =>\n index === existingSectionIndex\n ? {\n ...section,\n state:\n section.state === 'COLLAPSED'\n ? 'EXPANDED'\n : 'COLLAPSED',\n }\n : section,\n )\n } else {\n // Add the section to state\n newSectionState = [\n ...currentSectionState,\n {\n id: element.id,\n state: element.isCollapsed ? 'EXPANDED' : 'COLLAPSED',\n },\n ]\n }\n\n return {\n ...currentFormSubmission,\n sectionState: newSectionState,\n }\n })\n break\n }\n // Don't update the last element updated for elements the user cannot set the value of\n case 'summary':\n case 'calculation': {\n setFormSubmission((currentFormSubmission) => ({\n ...currentFormSubmission,\n submission: {\n ...currentFormSubmission.submission,\n [element.name]:\n typeof value === 'function'\n ? value(currentFormSubmission.submission[element.name])\n : value,\n },\n }))\n break\n }\n default: {\n setUnsavedChangesState((current) => ({\n ...current,\n isDirty: true,\n }))\n\n setFormSubmission((currentFormSubmission) => {\n return {\n ...currentFormSubmission,\n submission: {\n ...currentFormSubmission.submission,\n [element.name]:\n typeof value === 'function'\n ? value(currentFormSubmission.submission[element.name])\n : value,\n },\n lastElementUpdated: element,\n executedLookups: {\n ...currentFormSubmission.executedLookups,\n [element.name]:\n typeof executedLookups === 'function'\n ? executedLookups(\n currentFormSubmission.executedLookups?.[element.name],\n )\n : executedLookups,\n },\n sectionState: sectionState\n ? typeof sectionState === 'function'\n ? sectionState(currentFormSubmission.sectionState)\n : sectionState\n : currentFormSubmission.sectionState,\n }\n })\n }\n }\n },\n [disabled, setFormSubmission],\n )\n\n // #endregion\n //\n //\n\n const lastElementUpdatedExistsOnForm = React.useMemo(() => {\n return !!formElementsService.findFormElement(\n definition.elements,\n (el) => el.id === lastElementUpdated?.id,\n )\n }, [definition.elements, lastElementUpdated])\n\n const lastElementUpdatedPage = React.useMemo(() => {\n return definition.elements.find((pageElement: FormTypes.FormElement) => {\n if (pageElement.type === 'page') {\n return formElementsService.findFormElement(\n pageElement.elements,\n (el) => el.id === lastElementUpdated?.id,\n )\n }\n })\n }, [lastElementUpdated, definition])\n\n const [hasResumed, setHasResumed] = React.useState(false)\n React.useEffect(() => {\n if (!hasResumed) {\n if (lastElementUpdated && lastElementUpdatedExistsOnForm) {\n if (lastElementUpdatedPage) {\n setPageId(lastElementUpdatedPage.id)\n }\n const element = document.querySelector(\n `[data-element-id=\"${lastElementUpdated.id}\"]`,\n )\n if (element) {\n window.requestAnimationFrame(() => {\n element.scrollIntoView({ behavior: 'smooth' })\n })\n }\n }\n if (sectionState) {\n {\n setFormSubmission((currentFormSubmission) => ({\n ...currentFormSubmission,\n sectionState,\n }))\n }\n }\n setHasResumed(true)\n }\n }, [\n lastElementUpdated,\n hasResumed,\n lastElementUpdatedPage,\n lastElementUpdatedExistsOnForm,\n setPageId,\n sectionState,\n setFormSubmission,\n ])\n\n if (conditionalLogicError) {\n return (\n <>\n <div className=\"has-text-centered\">\n <MaterialIcon className=\"has-text-warning icon-x-large\">\n error\n </MaterialIcon>\n <h3 className=\"title is-3\">Bad Form Configuration</h3>\n <p className=\"cypress-conditional-logic-error-message\">\n {conditionalLogicError.message}\n </p>\n <p className=\"has-text-grey\">\n {localisationService.formatDatetimeLong(new Date())}\n </p>\n </div>\n </>\n )\n }\n\n return (\n <ThemeProvider theme={theme}>\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <ReplaceInjectablesOverridesContext.Provider\n value={replaceInjectablesOverrides}\n >\n <FormDefinitionContext.Provider value={definition}>\n <FormElementOptionsContextProvider>\n <FormElementLookupsContextProvider>\n <OneBlinkFormContainerContext.Provider\n value={obFormContainerHTMLElementRef.current}\n >\n <div\n className={clsx('ob-form-container', {\n 'is-showing-pages': isShowingMultiplePages,\n })}\n ref={obFormContainerHTMLElementRef}\n >\n <form\n name=\"obForm\"\n className={`ob-form cypress-ob-form ob-form__page-${\n currentPageIndex + 1\n }`}\n noValidate\n onSubmit={(e) => handleSubmit(e, false)}\n >\n <div>\n <div ref={scrollToTopOfPageHTMLElementRef} />\n {isShowingMultiplePages && (\n <div\n className={clsx('ob-steps-navigation', {\n 'is-active': isStepsHeaderActive,\n })}\n >\n <div\n className={clsx('ob-steps-navigation__header', {\n 'is-active': isStepsHeaderActive,\n })}\n onClick={toggleStepsNavigation}\n >\n <span className=\"icon is-invisible\">\n <MaterialIcon>keyboard_arrow_down</MaterialIcon>\n </span>\n <div className=\"steps-header-active-page\">\n {isDisplayingCurrentPageError ? (\n <span className=\"icon\">\n <MaterialIcon className=\"has-text-danger is-size-4\">\n warning\n </MaterialIcon>\n </span>\n ) : (\n <span className=\"steps-header-active-page-icon\">\n {currentPageNumber}\n </span>\n )}\n <span className=\"steps-header-active-page-label cypress-tablet-step-title\">\n {currentPage ? currentPage.label : ''}\n </span>\n </div>\n <span className=\"dropdown icon\">\n <MaterialIcon>keyboard_arrow_down</MaterialIcon>\n </span>\n </div>\n\n <div\n className={clsx('ob-steps-navigation__steps', {\n 'is-active': isStepsHeaderActive,\n })}\n >\n <div className=\"steps is-small is-horizontal-tablet cypress-steps\">\n {visiblePages.map(\n (\n page: FormTypes.PageElement,\n index: number,\n ) => {\n const hasErrors =\n checkDisplayPageError(page)\n return (\n <div\n key={page.id}\n id={`steps-navigation-step-${page.id}`}\n className={clsx(\n 'step-item cypress-step-item',\n {\n 'is-active':\n currentPage.id === page.id,\n 'is-completed':\n currentPageIndex > index,\n 'is-error': hasErrors,\n },\n )}\n onClick={(e) => {\n e.stopPropagation()\n if (page.id !== currentPage.id) {\n setPageId(page.id)\n }\n }}\n >\n <div\n className=\"step-marker step-marker-error ob-step-marker cypress-step-marker\"\n // @ts-expect-error ???\n name={`cypress-page-stepper-${index + 1}`}\n value={index + 1}\n >\n {hasErrors ? (\n <Tooltip title=\"Page has errors\">\n <span className=\"icon tooltip has-tooltip-top cypress-page-error\">\n <MaterialIcon className=\"has-text-danger is-size-3\">\n warning\n </MaterialIcon>\n </span>\n </Tooltip>\n ) : (\n <span>{index + 1}</span>\n )}\n </div>\n <div className=\"step-details ob-step-details\">\n <p\n className=\"step-title ob-step-title cypress-desktop-step-title\"\n id={`steps-navigation-step-label-${page.id}`}\n >\n {page.label}\n </p>\n </div>\n </div>\n )\n },\n )}\n </div>\n </div>\n </div>\n )}\n\n <div\n className={clsx('ob-steps-navigation__background', {\n 'is-active': isStepsHeaderActive,\n })}\n onClick={toggleStepsNavigation}\n />\n\n <div className=\"steps\">\n <div\n className={clsx('steps-content', {\n 'is-single-step': !isShowingMultiplePages,\n })}\n >\n <InjectPagesContext.Provider\n value={handlePagesLookupResult}\n >\n <GoogleMapsApiKeyContext.Provider\n value={googleMapsApiKey}\n >\n <AbnLookupAuthenticationGuidContext.Provider\n value={abnLookupAuthenticationGuid}\n >\n <ValidationIconConfigurationContext.Provider\n value={validationIcon}\n >\n <CaptchaContext.Provider\n value={captchaContextValue}\n >\n <AttachmentBlobsProvider>\n <FormIsReadOnlyContext.Provider\n value={isReadOnly}\n >\n <TaskContext.Provider\n value={taskContextValue}\n >\n <OnUploadAttachmentContext.Provider\n value={onUploadAttachment}\n >\n {visiblePages.map(\n (\n pageElement: FormTypes.PageElement,\n ) => (\n <PageFormElements\n key={pageElement.id}\n isActive={\n pageElement.id ===\n currentPage.id\n }\n formId={definition.id}\n formElementsConditionallyShown={\n formElementsConditionallyShown\n }\n formElementsValidation={\n formElementsValidation\n }\n displayValidationMessages={\n hasAttemptedSubmit ||\n isDisplayingCurrentPageError\n }\n pageElement={pageElement}\n onChange={handleChange}\n model={submission}\n setFormSubmission={\n setFormSubmission\n }\n sectionState={sectionState}\n />\n ),\n )}\n </OnUploadAttachmentContext.Provider>\n </TaskContext.Provider>\n </FormIsReadOnlyContext.Provider>\n </AttachmentBlobsProvider>\n </CaptchaContext.Provider>\n </ValidationIconConfigurationContext.Provider>\n </AbnLookupAuthenticationGuidContext.Provider>\n </GoogleMapsApiKeyContext.Provider>\n </InjectPagesContext.Provider>\n </div>\n\n {isShowingMultiplePages && (\n <div className=\"steps-actions\">\n <div className=\"steps-action\">\n <button\n type=\"button\"\n onClick={goToPreviousPage}\n disabled={isFirstVisiblePage}\n className=\"button is-light cypress-pages-previous\"\n >\n <span className=\"icon\">\n <MaterialIcon>\n keyboard_arrow_left\n </MaterialIcon>\n </span>\n <span>Back</span>\n </button>\n </div>\n <div className=\"step-progress-mobile cypress-steps-mobile\">\n {visiblePages.map(\n (page: FormTypes.PageElement, index) => (\n <div\n key={page.id}\n className={clsx(\n 'step-progress-mobile-dot',\n {\n 'is-active':\n currentPage.id === page.id,\n 'is-completed':\n currentPageIndex > index,\n 'has-background-danger':\n currentPage.id !== page.id &&\n checkDisplayPageError(page),\n },\n )}\n />\n ),\n )}\n </div>\n <div className=\"steps-action\">\n <button\n type=\"button\"\n onClick={goToNextPage}\n disabled={isLastVisiblePage}\n className=\"button is-light cypress-pages-next\"\n >\n <span>Next</span>\n <span className=\"icon\">\n <MaterialIcon>\n keyboard_arrow_right\n </MaterialIcon>\n </span>\n </button>\n </div>\n </div>\n )}\n </div>\n {!isReadOnly && (\n <div className=\"buttons ob-buttons ob-buttons-submit\">\n {onSaveDraft && !isInfoPage && (\n <button\n type=\"button\"\n className=\"button ob-button is-primary ob-button-save-draft cypress-save-draft-form\"\n onClick={() => handleSaveDraft(false)}\n disabled={isPreview || disabled}\n >\n <CustomisableButtonInner\n label={\n buttons?.saveDraft?.label || 'Save Draft'\n }\n icon={buttons?.saveDraft?.icon}\n />\n </button>\n )}\n <span className=\"ob-buttons-submit__spacer\"></span>\n {!isInfoPage && (\n <button\n type=\"button\"\n className=\"button ob-button is-light ob-button-submit-cancel cypress-cancel-form\"\n onClick={handleCancel}\n disabled={isPreview || disabled}\n >\n <CustomisableButtonInner\n label={buttons?.cancel?.label || 'Cancel'}\n icon={buttons?.cancel?.icon}\n />\n </button>\n )}\n {isLastVisiblePage && (\n <Tooltip\n title={\n submissionConditionallyEnabled\n ? ''\n : 'Submission disabled: Your inputs have not met the criteria for submission'\n }\n >\n <button\n type=\"submit\"\n className={clsx(\n 'button ob-button is-success ob-button-submit cypress-submit-form-button cypress-submit-form',\n { 'is-loading': isPreparingToSubmit },\n {\n 'ob-button-submit-is-disabled':\n submissionConditionallyEnabled,\n },\n )}\n disabled={\n isPreview ||\n disabled ||\n isPreparingToSubmit ||\n !submissionConditionallyEnabled\n }\n >\n <CustomisableButtonInner\n label={\n isInfoPage\n ? 'Done'\n : buttons?.submit?.label || 'Submit'\n }\n icon={buttons?.submit?.icon}\n />\n </button>\n </Tooltip>\n )}\n </div>\n )}\n </div>\n </form>\n\n {!isReadOnly && !isPreview && (\n <React.Fragment>\n <Prompt\n when={isDirty && !isNavigationAllowed}\n message={handleBlockedNavigation}\n />\n <Modal\n isOpen={hasConfirmedNavigation === false}\n title=\"Unsaved Changes\"\n cardClassName=\"cypress-cancel-confirm\"\n titleClassName=\"cypress-cancel-confirm-title\"\n bodyClassName=\"cypress-cancel-confirm-body\"\n actions={\n <>\n {onSaveDraft && (\n <button\n type=\"button\"\n className=\"button ob-button is-success cypress-cancel-confirm-save-draft\"\n onClick={() => handleSaveDraft(false)}\n >\n <CustomisableButtonInner\n label={\n buttons?.saveDraft?.label || 'Save Draft'\n }\n icon={buttons?.saveDraft?.icon}\n />\n </button>\n )}\n <span style={{ flex: 1 }}></span>\n <button\n type=\"button\"\n className=\"button ob-button is-light cypress-cancel-confirm-back\"\n onClick={handleKeepGoing}\n >\n <CustomisableButtonInner\n label={\n buttons?.cancelPromptNo?.label || 'Back'\n }\n icon={buttons?.cancelPromptNo?.icon}\n />\n </button>\n <button\n type=\"button\"\n className=\"button ob-button is-primary cypress-cancel-confirm-discard\"\n onClick={handleDiscardUnsavedChanges}\n autoFocus\n >\n <CustomisableButtonInner\n label={\n buttons?.cancelPromptYes?.label || 'Discard'\n }\n icon={buttons?.cancelPromptYes?.icon}\n />\n </button>\n </>\n }\n >\n <p>\n You have unsaved changes, are you sure you want\n discard them?\n </p>\n </Modal>\n <Modal\n isOpen={promptUploadingAttachments === true}\n title=\"Attachment upload in progress\"\n cardClassName=\"cypress-attachments-wait-continue\"\n titleClassName=\"cypress-attachments-confirm-wait-title\"\n bodyClassName=\"cypress-attachments-confirm-wait-body\"\n actions={\n <>\n <span style={{ flex: 1 }}></span>\n <button\n type=\"button\"\n className=\"button ob-button is-light cypress-attachments-confirm-wait\"\n onClick={handleWaitForAttachments}\n >\n Wait\n </button>\n <button\n type=\"button\"\n className=\"button ob-button is-primary cypress-attachments-confirm-continue\"\n onClick={handleContinueWithAttachments}\n autoFocus\n >\n Continue\n </button>\n </>\n }\n >\n <p>\n Your attachments are still uploading, do you want to\n wait for the uploads to complete or continue using\n the app? If you click continue the attachments will\n upload in the background. Do not close the app until\n the upload has been completed.\n </p>\n </Modal>\n\n <Modal\n isOpen={promptOfflineSubmissionAttempt}\n title=\"It looks like you're Offline\"\n className=\"ob-modal__offline-submission-attempt\"\n cardClassName=\"cypress-submission-offline has-text-centered\"\n titleClassName=\"cypress-offline-title\"\n bodyClassName=\"cypress-offline-body\"\n actions={\n <>\n {onSaveDraft && (\n <button\n type=\"button\"\n className=\"button ob-button ob-button__offline-submission-attempt-save-draft is-success\"\n onClick={() => handleSaveDraft(false)}\n >\n <CustomisableButtonInner\n label={\n buttons?.saveDraft?.label || 'Save Draft'\n }\n icon={buttons?.saveDraft?.icon}\n />\n </button>\n )}\n <span style={{ flex: 1 }}></span>\n <button\n className=\"button ob-button ob-button__offline-submission-attempt-cancel is-light\"\n onClick={() =>\n setPromptOfflineSubmissionAttempt(false)\n }\n >\n Cancel\n </button>\n <button\n className=\"button ob-button ob-button__offline-submission-attempt-try-again is-primary\"\n onClick={(e) => {\n setPromptOfflineSubmissionAttempt(false)\n handleSubmit(e, false)\n }}\n autoFocus\n >\n Try Again\n </button>\n </>\n }\n >\n <p className=\"ob-modal__offline-submission-attempt-message\">\n You cannot submit this form while offline, please\n try again when connectivity is restored.\n {onSaveDraft && (\n <span className=\"ob-modal__offline-submission-attempt-save-draft-message\">\n {' '}\n Alternatively, click the{' '}\n <b>\n {buttons?.saveDraft?.label || 'Save Draft'}\n </b>{' '}\n button below to come back to this later.\n </span>\n )}\n </p>\n <MaterialIcon className=\"has-text-warning icon-x-large ob-modal__offline-submission-attempt-icon\">\n wifi_off\n </MaterialIcon>\n </Modal>\n </React.Fragment>\n )}\n {shouldUseNavigableValidationErrorsNotification &&\n isShowingValidationErrorsCard && (\n <ValidationErrorsCard\n visiblePages={visiblePages}\n formElementsValidation={formElementsValidation}\n setPageId={setPageId}\n currentPage={currentPage}\n navigationTopOffset={\n navigableValidationErrorsNotificationSettings?.navigationTopOffset ??\n 'CALCULATE'\n }\n scrollableContainerId={\n navigableValidationErrorsNotificationSettings?.scrollableContainerId\n }\n validationErrorToastFocusElementRef={\n validationErrorToastFocusElementRef\n }\n />\n )}\n </div>\n </OneBlinkFormContainerContext.Provider>\n </FormElementLookupsContextProvider>\n </FormElementOptionsContextProvider>\n </FormDefinitionContext.Provider>\n </ReplaceInjectablesOverridesContext.Provider>\n </LocalizationProvider>\n </ThemeProvider>\n )\n}\n\nexport default React.memo(OneBlinkFormBase)\n"]}
|
1
|
+
{"version":3,"file":"OneBlinkFormBase.js","sourceRoot":"","sources":["../src/OneBlinkFormBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,OAAO,MAAM,+BAA+B,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AACzC,OAAO,EACL,mBAAmB,EAEnB,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AASvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAEnE,OAAO,KAAK,MAAM,6BAA6B,CAAA;AAC/C,OAAO,wBAAwB,MAAM,qCAAqC,CAAA;AAC1E,OAAO,gBAAgB,MAAM,wCAAwC,CAAA;AACrE,OAAO,iBAAiB,MAAM,2BAA2B,CAAA;AACzD,OAAO,mBAAmB,MAAM,6BAA6B,CAAA;AAC7D,OAAO,QAAQ,MAAM,kBAAkB,CAAA;AACvC,OAAO,UAAU,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EACL,kCAAkC,GAEnC,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,iCAAiC,EAAE,MAAM,sCAAsC,CAAA;AACxF,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAA;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,kCAAkC,EAAE,MAAM,wCAAwC,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAChF,OAAO,YAAY,MAAM,sBAAsB,CAAA;AAC/C,OAAO,uBAAuB,MAAM,+CAA+C,CAAA;AASnF,OAAO,mBAAmB,MAAM,gCAAgC,CAAA;AAChE,OAAO,wBAAwB,MAAM,qCAAqC,CAAA;AAC1E,OAAO,uBAAuB,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,OAAO,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAA;AAC7E,OAAO,YAAY,MAAM,2BAA2B,CAAA;AAEpD,OAAO,oBAAoB,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAC3E,OAAO,EAAE,0CAA0C,EAAE,MAAM,sCAAsC,CAAA;AACjG,OAAO,EAAE,kCAAkC,EAAE,MAAM,wCAAwC,CAAA;AAoJ3F,SAAS,gBAAgB,CAAC,EACxB,gBAAgB,EAChB,2BAA2B,EAC3B,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EAAE,cAAc,EAC1B,kBAAkB,EAClB,eAAe,EACf,IAAI,EACJ,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,8CAA8C,GAAG,IAAI,EACrD,6CAA6C,EAC7C,2BAA2B,EAC3B,YAAY,GACN;;IACN,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,EAAE,CAAA;IACrC,MAAM,yBAAyB,GAAG,0CAA0C,CAC1E,2BAA2B,aAA3B,2BAA2B,uBAA3B,2BAA2B,CAAE,cAAc,CAC5C,CAAA;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAmB,EAAE,CAAC,CAAA;IAEtD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CACH,cAAc,CAAC;QACb,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,IAAI,EAAE,aAAa,IAAI,SAAS;aACjC;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS;aAChB;SACF;KACF,CAAC,EACJ,CAAC,aAAa,CAAC,CAChB,CAAA;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACpC,IAAI,CAAC,CAAC,cAAc,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;YACxD,OAAO,cAAc,KAAK,KAAK,CAAA;QACjC,CAAC;QACD,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAC5D,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAA;IAEhC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1C,OAAO;YACL,IAAI;YACJ,SAAS;YACT,iBAAiB;SAClB,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAExC,EAAE;IACF,EAAE;IACF,0BAA0B;IAE1B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAA0B,GAAG,EAAE;QACxD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC3B,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,CAC/B,CACE,YAAqC,EACrC,WAAkC,EAClC,EAAE;gBACF,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAChC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAChC,CAAC;gBACD,OAAO,YAAY,CAAA;YACrB,CAAC,EACD,EAAE,CACH,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO;gBACL;oBACE,IAAI,EAAE,MAAM;oBACZ,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;oBAC5B,KAAK,EAAE,UAAU,CAAC,IAAI;oBACtB,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,iBAAiB,EAAE,KAAK;oBACxB,sCAAsC,EAAE,KAAK;iBAC9C;aACF,CAAA;QACH,CAAC;IACH,CAAC,EAAE;QACD,UAAU,CAAC,QAAQ;QACnB,UAAU,CAAC,EAAE;QACb,UAAU,CAAC,WAAW;QACtB,UAAU,CAAC,IAAI;KAChB,CAAC,CAAA;IAEF,MAAM,wBAAwB,GAAG,KAAK,CAAC,OAAO,CAE5C,GAAG,EAAE;QACL,OAAO,qBAAqB,CAAC,KAAK,CAA4B,CAAA;IAChE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,0BAA0B;IAE1B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAE5B,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GACjD,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,CAAA;IAChC,MAAM,CACJ,EAAE,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,YAAY,EAAE,EACtE,sBAAsB,EACvB,GAAG,KAAK,CAAC,QAAQ,CAKf;QACD,OAAO,EAAE,KAAK;QACd,mBAAmB,EAAE,KAAK;QAC1B,sBAAsB,EAAE,IAAI;QAC5B,YAAY,EAAE,IAAI;KACnB,CAAC,CAAA;IACF,MAAM,CAAC,8BAA8B,EAAE,iCAAiC,CAAC,GACvE,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,CAAA;IAChC,MAAM,CAAC,0BAA0B,EAAE,6BAA6B,CAAC,GAC/D,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,CAAA;IAChC,MAAM,uBAAuB,GAAG,KAAK,CAAC,WAAW,CAE/C,CAAC,QAAQ,EAAE,EAAE;QACb,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,OAAO;YACV,YAAY,EAAE,QAAQ;YACtB,sBAAsB,EAAE,KAAK;SAC9B,CAAC,CAAC,CAAA;QACH,OAAO,KAAK,CAAA;IACd,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7C,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,OAAO;YACV,YAAY,EAAE,IAAI;YAClB,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CAAC,CAAA;IACL,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,2BAA2B,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACzD,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,OAAO;YACV,mBAAmB,EAAE,IAAI;YACzB,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CAAC,CAAA;QACH,wBAAwB,CAAC,uBAAuB,EAAE;YAChD,MAAM,EAAE,UAAU,CAAC,EAAE;YACrB,QAAQ,EAAE,UAAU,CAAC,IAAI;SAC1B,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;IAEpC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,sBAAsB,EAAE,CAAC;YAC3B,wEAAwE;YACxE,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;gBAC9D,IAAI,kBAAkB,EAAE,CAAC;oBACvB,kBAAkB,EAAE,CAAA;gBACtB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,QAAQ,EAAE,CAAA;YACZ,CAAC;QACH,CAAC;IACH,CAAC,EAAE;QACD,YAAY;QACZ,kBAAkB;QAClB,sBAAsB;QACtB,OAAO;QACP,QAAQ;KACT,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACnC,GAAG,OAAO;gBACV,sBAAsB,EAAE,KAAK;aAC9B,CAAC,CAAC,CAAA;QACL,CAAC;aAAM,CAAC;YACN,wBAAwB,CAAC,uBAAuB,EAAE;gBAChD,MAAM,EAAE,UAAU,CAAC,EAAE;gBACrB,QAAQ,EAAE,UAAU,CAAC,IAAI;aAC1B,CAAC,CAAA;YACF,QAAQ,EAAE,CAAA;QACZ,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEvD,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7C,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,OAAO;YACV,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC,CAAA;IACL,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,6BAA6B;IAC7B,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,4BAA4B;IAE5B,MAAM,EACJ,8BAA8B,EAC9B,qBAAqB,EACrB,8BAA8B,GAC/B,GAAG,mBAAmB,CAAC;QACtB,YAAY,EAAE,wBAAwB;QACtC,UAAU;QACV,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;KAC9C,CAAC,CAAA;IAEF,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,qBAAqB;IAErB,MAAM,mCAAmC,GACvC,KAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAA;IACvC,MAAM,CAAC,6BAA6B,EAAE,gCAAgC,CAAC,GACrE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAE7C,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CACjC,GAAG,EAAE,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,UAAU,EAC/B,CAAC,WAAW,CAAC,CACd,CAAA;IAED,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,CAG1C,GAAG,EAAE,CACH,CAAC,UAAU;QACT,CAAC,CAAC,QAAQ,CACN,UAAU,EACV,8BAA8B,EAC9B,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,EAAE,EACrB,aAAa,EACb,SAAS,CACV;QACH,CAAC,CAAC,SAAS,EACf;QACE,UAAU;QACV,QAAQ;QACR,UAAU;QACV,8BAA8B;QAC9B,eAAe;QACf,aAAa;QACb,SAAS;KACV,CACF,CAAA;IAED,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,gCAAgC,CAAC,KAAK,CAAC,CAAA;QACzC,CAAC;IACH,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAA;IAE5B,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,gBAAgB;IAEhB,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEzE,MAAM,EACJ,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,+BAA+B,GAChC,GAAG,QAAQ,CAAC;QACX,kBAAkB;QAClB,KAAK;QACL,sBAAsB;QACtB,8BAA8B;KAC/B,CAAC,CAAA;IAEF,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,sBAAsB;IAEtB,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAChD,CAAC,eAAwB,EAAE,EAAE;QAC3B,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,wBAAwB,CACvD,UAAU,EACV,UAAU,CAAC,QAAQ,EACnB,8BAA8B,EAC9B,eAAe,CAChB,CAAA;QACD,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,aAAa;SACd,CAAA;IACH,CAAC,EACD,CAAC,UAAU,CAAC,QAAQ,EAAE,8BAA8B,EAAE,UAAU,CAAC,CAClE,CAAA;IAED,MAAM,6BAA6B,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,0BAA0B,GAAG,6BAA6B,CAAC,OAAO,CAAA;QACxE,IAAI,0BAA0B,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CACT,4DAA4D,EAC5D,0BAA0B,CAC3B,CAAA;YACD,UAAU,CAAC,WAAW,CAAC;gBACrB,QAAQ,EAAE,cAAc;gBACxB,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,0BAA0B;aACrC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,aAAa,EAAE,CAAA;QAC5B,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,8BAA8B,GAAG,KAAK,CAAC,WAAW,CACtD,CAAC,UAA0D,EAAE,EAAE;QAC7D,+DAA+D;QAC/D,8DAA8D;QAC9D,4DAA4D;QAC5D,0DAA0D;QAC1D,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,uBAAuB,GAC3B,kBAAkB,CAAC,8BAA8B,CAC/C,UAAU,EACV,UAAU,CACX,CAAA;QAEH,IAAI,uBAAuB,EAAE,CAAC;YAC5B,IAAI,eAAe,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC9C,UAAU,CAAC,KAAK,CAAC;oBACf,OAAO,EACL,sFAAsF;oBACxF,IAAI,EAAE,YAAY;oBAClB,YAAY,EAAE,wCAAwC;oBACtD,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,IAAI;oBAClB,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAA;gBACF,OAAO,KAAK,CAAA;YACd,CAAC;iBAAM,CAAC;gBACN,6BAA6B,CAAC,IAAI,CAAC,CAAA;gBACnC,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC,EACD,CAAC,UAAU,EAAE,SAAS,EAAE,qBAAqB,EAAE,eAAe,CAAC,CAChE,CAAA;IAED,MAAM,uBAAuB,GAAG,KAAK,CAAC,WAAW,CAC/C,CAAC,UAA0D,EAAE,EAAE;QAC7D,OAAO,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IACrD,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAA;IAED,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAC7C,CAAC,UAA0D,EAAE,EAAE;QAC7D,IAAI,wBAAwB,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;YACrD,UAAU,CAAC,KAAK,CAAC;gBACf,OAAO,EACL,uFAAuF;gBACzF,IAAI,EAAE,YAAY;gBAClB,YAAY,EAAE,yCAAyC;gBACvD,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAA;YACF,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAA;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,SAAoB,EAAE,EAAE;QAC/D,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACnC,wEAAwE;QACxE,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAC9C,CAAC,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,KAAK,SAAS,CACvD,CAAA;QACH,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CACvC,GAAG,EAAE,CAAC,CAAC;QACL,cAAc;QACd,WAAW,EAAE,aAAa;QAC1B,aAAa;KACd,CAAC,EACF,CAAC,aAAa,EAAE,cAAc,EAAE,aAAa,CAAC,CAC/C,CAAA;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7C,4DAA4D;QAC5D,MAAM,YAAY,GAAG,EAAE,GAAG,UAAU,EAAE,CAAA;QACtC,mBAAmB,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;YACtE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;YACxC,CAAC;QACH,CAAC,CAAC,CAAA;QACF,qBAAqB;QACrB,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;YAC/B,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBACtC,OAAO,CAAC,KAAK,EAAE,CAAA;YACjB,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,qBAAqB,CAAC,KAAK,CAAC,CAAA;QAC5B,iBAAiB,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,OAAO,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA;QACjD,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;IAErE,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CACzC,KAAK,EACH,qCAA8C,EACoB,EAAE;;QACpE,MAAM,cAAc,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAA;QACtD,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,OAAM;QACR,CAAC;QACD,IAAI,sBAAsB,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAA;YACxD,IAAI,CAAC,8CAA8C,EAAE,CAAC;gBACpD,UAAU,CAAC,KAAK,CAAC;oBACf,OAAO,EAAE,8BAA8B;oBACvC,IAAI,EAAE,WAAW;oBACjB,YAAY,EAAE,yCAAyC;oBACvD,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,IAAI;oBAClB,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAA;YACJ,CAAC;YACD,gCAAgC,CAAC,IAAI,CAAC,CAAA;YACtC,MAAA,mCAAmC,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAA;YACpD,OAAM;QACR,CAAC;QACD,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,OAAM;QACR,CAAC;QACD,IACE,CAAC,qCAAqC;YACtC,CAAC,8BAA8B,CAAC,cAAc,CAAC,UAAU,CAAC,EAC1D,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;YAChC,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC/B,IAAI,SAAS,EAAE,CAAC;oBACd,iCAAiC,CAAC,IAAI,CAAC,CAAA;oBACvC,OAAM;gBACR,CAAC;gBACD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,UAAU,CAC3C,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAC7D,CAAA;gBAED,MAAM,aAAa,GAAa,EAAE,CAAA;gBAElC,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;oBAClC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;wBAClD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;wBACpC,UAAU,CAAC,KAAK,CAAC;4BACf,OAAO,EAAE,+BAA+B;4BACxC,IAAI,EAAE,WAAW;4BACjB,YAAY,EAAE,gDAAgD;4BAC9D,QAAQ,EAAE,IAAI;4BACd,YAAY,EAAE,IAAI;4BAClB,YAAY,EAAE,IAAI;yBACnB,CAAC,CAAA;wBACF,OAAM;oBACR,CAAC;oBACD,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAClC,CAAC;gBAED,cAAc,CAAC,aAAa,GAAG,aAAa,CAAA;YAC9C,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,aAAa,GAAG,uBAAuB,CAC3C,UAAU,EACV,cAAc,CAAC,UAAU,EACzB,yBAAyB,CAC1B,CAAA;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,iBAAiB,CAAC,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;gBAC5C,GAAG,qBAAqB;gBACxB,UAAU,EAAE,aAAa;aAC1B,CAAC,CAAC,CAAA;YACH,UAAU,CAAC,KAAK,CAAC;gBACf,OAAO,EACL,mKAAmK;gBACrK,IAAI,EAAE,WAAW;gBACjB,YAAY,EAAE,yCAAyC;gBACvD,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,IAAI,SAAS,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAA;YACxE,iCAAiC,CAAC,IAAI,CAAC,CAAA;YACvC,OAAM;QACR,CAAC;QACD,OAAO,cAAc,CAAA;IACvB,CAAC,EACD;QACE,yBAAyB;QACzB,WAAW;QACX,8BAA8B;QAC9B,qBAAqB;QACrB,uBAAuB;QACvB,UAAU;QACV,sBAAsB;QACtB,wBAAwB;QACxB,SAAS;QACT,qBAAqB;QACrB,iBAAiB;QACjB,8CAA8C;KAC/C,CACF,CAAA;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CACpC,KAAK,EACH,KAEmD,EACnD,qCAA8C,EAC9C,EAAE;QACF,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,IAAI,QAAQ,IAAI,UAAU;YAAE,OAAM;QAClC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAE3B,sBAAsB,CAAC,IAAI,CAAC,CAAA;QAE5B,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAC5C,qCAAqC,CACtC,CAAA;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,sBAAsB,CAAC,KAAK,CAAC,CAAA;YAC7B,OAAM;QACR,CAAC;QAED,eAAe,EAAE,CAAA;QAEjB,gDAAgD;QAChD,MAAM,2BAA2B,GAAG,8BAA8B,CAAC;YACjE,eAAe,EAAE,UAAU,CAAC,QAAQ;YACpC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,yBAAyB;SACvC,CAAC,CAAA;QACF,sBAAsB,CAAC,KAAK,CAAC,CAAA;QAC7B,eAAe,EAAE,CAAA;QACjB,QAAQ,CAAC;YACP,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,QAAQ,EAAE,2BAA2B;aACtC;YACD,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,UAAU,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACvD,KAAK;gBACL,OAAO,EAAE,cAAwB;aAClC,CAAC,CAAC;SACJ,CAAC,CAAA;QACF,wBAAwB,CAAC,sBAAsB,EAAE;YAC/C,MAAM,EAAE,UAAU,CAAC,EAAE;YACrB,QAAQ,EAAE,UAAU,CAAC,IAAI;SAC1B,CAAC,CAAA;IACJ,CAAC,EACD;QACE,QAAQ;QACR,UAAU;QACV,iBAAiB;QACjB,eAAe;QACf,UAAU;QACV,gBAAgB;QAChB,yBAAyB;QACzB,eAAe;QACf,QAAQ;QACR,cAAc;KACf,CACF,CAAA;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CACvC,CAAC,qCAA8C,EAAE,EAAE;QACjD,IAAI,QAAQ;YAAE,OAAM;QACpB,IAAI,WAAW,EAAE,CAAC;YAChB,eAAe,EAAE,CAAA;YAEjB,uDAAuD;YACvD,mDAAmD;YACnD,MAAM,EAAE,UAAU,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAA;YACtD,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvC,OAAM;YACR,CAAC;YACD,IACE,CAAC,qCAAqC;gBACtC,CAAC,8BAA8B,CAAC,UAAU,CAAC,EAC3C,CAAC;gBACD,OAAM;YACR,CAAC;YACD,WAAW,CAAC;gBACV,UAAU;gBACV,UAAU;gBACV,gBAAgB,EAAE,qCAAqC;gBACvD,kBAAkB;gBAClB,YAAY;aACb,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,EACD;QACE,eAAe;QACf,8BAA8B;QAC9B,UAAU;QACV,QAAQ;QACR,wBAAwB;QACxB,WAAW;QACX,qBAAqB;QACrB,kBAAkB;QAClB,YAAY;KACb,CACF,CAAA;IAED,MAAM,6BAA6B,GAAG,KAAK,CAAC,WAAW,CACrD,CAAC,CAAkD,EAAE,EAAE;QACrD,6BAA6B,CAAC,KAAK,CAAC,CAAA;QACpC,IAAI,kBAAkB,EAAE,CAAC;YACvB,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC;IACH,CAAC,EACD;QACE,YAAY;QACZ,6BAA6B;QAC7B,kBAAkB;QAClB,eAAe;KAChB,CACF,CAAA;IACD,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACtD,6BAA6B,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,CAAA;IAEnC,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,kBAAkB;IAElB,MAAM,EAAE,uBAAuB,EAAE,GAAG,UAAU,CAC5C,UAAU,CAAC,EAAE,EACb,iBAAiB,CAClB,CAAA;IAED,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,wCAAwC;IAExC,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CACpC,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;QACnE;QACE,gFAAgF;QAChF,kEAAkE;QAClE,mDAAmD;QACnD,CAAC,QAAQ;YACP,OAAO,CAAC,IAAI,KAAK,SAAS;YAC1B,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC;YACjC,OAAO,CAAC,IAAI,KAAK,MAAM,EACvB,CAAC;YACD,OAAM;QACR,CAAC;QAED,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,iBAAiB,CAAC,CAAC,qBAAqB,EAAE,EAAE;oBAC1C,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,YAAY,IAAI,EAAE,CAAA;oBACpE,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,SAAS,CACxD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CACvC,CAAA;oBACD,MAAM,gBAAgB,GAAG,oBAAoB,IAAI,CAAC,CAAA;oBAClD,IAAI,eAA6B,CAAA;oBACjC,IAAI,gBAAgB,IAAI,aAAa,EAAE,CAAC;wBACtC,eAAe,GAAG,mBAAmB,CAAC,MAAM,CAC1C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CACvC,CAAA;oBACH,CAAC;yBAAM,IAAI,gBAAgB,EAAE,CAAC;wBAC5B,8BAA8B;wBAC9B,eAAe,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAC3D,KAAK,KAAK,oBAAoB;4BAC5B,CAAC,CAAC;gCACE,GAAG,OAAO;gCACV,KAAK,EACH,OAAO,CAAC,KAAK,KAAK,WAAW;oCAC3B,CAAC,CAAC,UAAU;oCACZ,CAAC,CAAC,WAAW;6BAClB;4BACH,CAAC,CAAC,OAAO,CACZ,CAAA;oBACH,CAAC;yBAAM,CAAC;wBACN,2BAA2B;wBAC3B,eAAe,GAAG;4BAChB,GAAG,mBAAmB;4BACtB;gCACE,EAAE,EAAE,OAAO,CAAC,EAAE;gCACd,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW;6BACtD;yBACF,CAAA;oBACH,CAAC;oBAED,OAAO;wBACL,GAAG,qBAAqB;wBACxB,YAAY,EAAE,eAAe;qBAC9B,CAAA;gBACH,CAAC,CAAC,CAAA;gBACF,MAAK;YACP,CAAC;YACD,sFAAsF;YACtF,KAAK,SAAS,CAAC;YACf,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,iBAAiB,CAAC,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;oBAC5C,GAAG,qBAAqB;oBACxB,UAAU,EAAE;wBACV,GAAG,qBAAqB,CAAC,UAAU;wBACnC,CAAC,OAAO,CAAC,IAAI,CAAC,EACZ,OAAO,KAAK,KAAK,UAAU;4BACzB,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;4BACvD,CAAC,CAAC,KAAK;qBACZ;iBACF,CAAC,CAAC,CAAA;gBACH,MAAK;YACP,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACnC,GAAG,OAAO;oBACV,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC,CAAA;gBAEH,iBAAiB,CAAC,CAAC,qBAAqB,EAAE,EAAE;;oBAC1C,OAAO;wBACL,GAAG,qBAAqB;wBACxB,UAAU,EAAE;4BACV,GAAG,qBAAqB,CAAC,UAAU;4BACnC,CAAC,OAAO,CAAC,IAAI,CAAC,EACZ,OAAO,KAAK,KAAK,UAAU;gCACzB,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gCACvD,CAAC,CAAC,KAAK;yBACZ;wBACD,kBAAkB,EAAE,OAAO;wBAC3B,eAAe,EAAE;4BACf,GAAG,qBAAqB,CAAC,eAAe;4BACxC,CAAC,OAAO,CAAC,IAAI,CAAC,EACZ,OAAO,eAAe,KAAK,UAAU;gCACnC,CAAC,CAAC,eAAe,CACb,MAAA,qBAAqB,CAAC,eAAe,0CAAG,OAAO,CAAC,IAAI,CAAC,CACtD;gCACH,CAAC,CAAC,eAAe;yBACtB;wBACD,YAAY,EAAE,YAAY;4BACxB,CAAC,CAAC,OAAO,YAAY,KAAK,UAAU;gCAClC,CAAC,CAAC,YAAY,CAAC,qBAAqB,CAAC,YAAY,CAAC;gCAClD,CAAC,CAAC,YAAY;4BAChB,CAAC,CAAC,qBAAqB,CAAC,YAAY;qBACvC,CAAA;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAC9B,CAAA;IAED,aAAa;IACb,EAAE;IACF,EAAE;IAEF,MAAM,8BAA8B,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACxD,OAAO,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAC1C,UAAU,CAAC,QAAQ,EACnB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAK,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,EAAE,CAAA,CACzC,CAAA;IACH,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAA;IAE7C,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAkC,EAAE,EAAE;YACrE,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAChC,OAAO,mBAAmB,CAAC,eAAe,CACxC,WAAW,CAAC,QAAQ,EACpB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAK,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,EAAE,CAAA,CACzC,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC,CAAA;IAEpC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACzD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,kBAAkB,IAAI,8BAA8B,EAAE,CAAC;gBACzD,IAAI,sBAAsB,EAAE,CAAC;oBAC3B,SAAS,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAA;gBACtC,CAAC;gBACD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CACpC,qBAAqB,kBAAkB,CAAC,EAAE,IAAI,CAC/C,CAAA;gBACD,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;wBAChC,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;oBAChD,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,CAAC;oBACC,iBAAiB,CAAC,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;wBAC5C,GAAG,qBAAqB;wBACxB,YAAY;qBACb,CAAC,CAAC,CAAA;gBACL,CAAC;YACH,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,EAAE;QACD,kBAAkB;QAClB,UAAU;QACV,sBAAsB;QACtB,8BAA8B;QAC9B,SAAS;QACT,YAAY;QACZ,iBAAiB;KAClB,CAAC,CAAA;IAEF,IAAI,qBAAqB,EAAE,CAAC;QAC1B,OAAO,CACL;YACE,6BAAK,SAAS,EAAC,mBAAmB;gBAChC,oBAAC,YAAY,IAAC,SAAS,EAAC,+BAA+B,YAExC;gBACf,4BAAI,SAAS,EAAC,YAAY,6BAA4B;gBACtD,2BAAG,SAAS,EAAC,yCAAyC,IACnD,qBAAqB,CAAC,OAAO,CAC5B;gBACJ,2BAAG,SAAS,EAAC,eAAe,IACzB,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,IAAI,EAAE,CAAC,CACjD,CACA,CACL,CACJ,CAAA;IACH,CAAC;IAED,OAAO,CACL,oBAAC,aAAa,IAAC,KAAK,EAAE,KAAK;QACzB,oBAAC,oBAAoB,IAAC,WAAW,EAAE,cAAc;YAC/C,oBAAC,kCAAkC,CAAC,QAAQ,IAC1C,KAAK,EAAE,2BAA2B;gBAElC,oBAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,UAAU;oBAC/C,oBAAC,iCAAiC,IAAC,cAAc,EAAE,UAAU;wBAC3D,oBAAC,iCAAiC;4BAChC,oBAAC,4BAA4B,CAAC,QAAQ,IACpC,KAAK,EAAE,6BAA6B,CAAC,OAAO;gCAE5C,6BACE,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE;wCACnC,kBAAkB,EAAE,sBAAsB;qCAC3C,CAAC,EACF,GAAG,EAAE,6BAA6B;oCAElC,8BACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,yCACT,gBAAgB,GAAG,CACrB,EAAE,EACF,UAAU,QACV,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;wCAEvC;4CACE,6BAAK,GAAG,EAAE,+BAA+B,GAAI;4CAC5C,sBAAsB,IAAI,CACzB,6BACE,SAAS,EAAE,IAAI,CAAC,qBAAqB,EAAE;oDACrC,WAAW,EAAE,mBAAmB;iDACjC,CAAC;gDAEF,6BACE,SAAS,EAAE,IAAI,CAAC,6BAA6B,EAAE;wDAC7C,WAAW,EAAE,mBAAmB;qDACjC,CAAC,EACF,OAAO,EAAE,qBAAqB;oDAE9B,8BAAM,SAAS,EAAC,mBAAmB;wDACjC,oBAAC,YAAY,8BAAmC,CAC3C;oDACP,6BAAK,SAAS,EAAC,0BAA0B;wDACtC,4BAA4B,CAAC,CAAC,CAAC,CAC9B,8BAAM,SAAS,EAAC,MAAM;4DACpB,oBAAC,YAAY,IAAC,SAAS,EAAC,2BAA2B,cAEpC,CACV,CACR,CAAC,CAAC,CAAC,CACF,8BAAM,SAAS,EAAC,+BAA+B,IAC5C,iBAAiB,CACb,CACR;wDACD,8BAAM,SAAS,EAAC,0DAA0D,IACvE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAChC,CACH;oDACN,8BAAM,SAAS,EAAC,eAAe;wDAC7B,oBAAC,YAAY,8BAAmC,CAC3C,CACH;gDAEN,6BACE,SAAS,EAAE,IAAI,CAAC,4BAA4B,EAAE;wDAC5C,WAAW,EAAE,mBAAmB;qDACjC,CAAC;oDAEF,6BAAK,SAAS,EAAC,mDAAmD,IAC/D,YAAY,CAAC,GAAG,CACf,CACE,IAA2B,EAC3B,KAAa,EACb,EAAE;wDACF,MAAM,SAAS,GACb,qBAAqB,CAAC,IAAI,CAAC,CAAA;wDAC7B,OAAO,CACL,6BACE,GAAG,EAAE,IAAI,CAAC,EAAE,EACZ,EAAE,EAAE,yBAAyB,IAAI,CAAC,EAAE,EAAE,EACtC,SAAS,EAAE,IAAI,CACb,6BAA6B,EAC7B;gEACE,WAAW,EACT,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;gEAC5B,cAAc,EACZ,gBAAgB,GAAG,KAAK;gEAC1B,UAAU,EAAE,SAAS;6DACtB,CACF,EACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gEACb,CAAC,CAAC,eAAe,EAAE,CAAA;gEACnB,IAAI,IAAI,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,EAAE,CAAC;oEAC/B,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gEACpB,CAAC;4DACH,CAAC;4DAED,6BACE,SAAS,EAAC,kEAAkE;gEAC5E,uBAAuB;gEACvB,IAAI,EAAE,wBAAwB,KAAK,GAAG,CAAC,EAAE,EACzC,KAAK,EAAE,KAAK,GAAG,CAAC,IAEf,SAAS,CAAC,CAAC,CAAC,CACX,oBAAC,OAAO,IAAC,KAAK,EAAC,iBAAiB;gEAC9B,8BAAM,SAAS,EAAC,iDAAiD;oEAC/D,oBAAC,YAAY,IAAC,SAAS,EAAC,2BAA2B,cAEpC,CACV,CACC,CACX,CAAC,CAAC,CAAC,CACF,kCAAO,KAAK,GAAG,CAAC,CAAQ,CACzB,CACG;4DACN,6BAAK,SAAS,EAAC,8BAA8B;gEAC3C,2BACE,SAAS,EAAC,qDAAqD,EAC/D,EAAE,EAAE,+BAA+B,IAAI,CAAC,EAAE,EAAE,IAE3C,IAAI,CAAC,KAAK,CACT,CACA,CACF,CACP,CAAA;oDACH,CAAC,CACF,CACG,CACF,CACF,CACP;4CAED,6BACE,SAAS,EAAE,IAAI,CAAC,iCAAiC,EAAE;oDACjD,WAAW,EAAE,mBAAmB;iDACjC,CAAC,EACF,OAAO,EAAE,qBAAqB,GAC9B;4CAEF,6BAAK,SAAS,EAAC,OAAO;gDACpB,6BACE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE;wDAC/B,gBAAgB,EAAE,CAAC,sBAAsB;qDAC1C,CAAC;oDAEF,oBAAC,kBAAkB,CAAC,QAAQ,IAC1B,KAAK,EAAE,uBAAuB;wDAE9B,oBAAC,uBAAuB,CAAC,QAAQ,IAC/B,KAAK,EAAE,gBAAgB;4DAEvB,oBAAC,kCAAkC,CAAC,QAAQ,IAC1C,KAAK,EAAE,2BAA2B;gEAElC,oBAAC,kCAAkC,CAAC,QAAQ,IAC1C,KAAK,EAAE,cAAc;oEAErB,oBAAC,cAAc,CAAC,QAAQ,IACtB,KAAK,EAAE,mBAAmB;wEAE1B,oBAAC,uBAAuB;4EACtB,oBAAC,qBAAqB,CAAC,QAAQ,IAC7B,KAAK,EAAE,UAAU;gFAEjB,oBAAC,WAAW,CAAC,QAAQ,IACnB,KAAK,EAAE,gBAAgB;oFAEvB,oBAAC,yBAAyB,CAAC,QAAQ,IACjC,KAAK,EAAE,kBAAkB,IAExB,YAAY,CAAC,GAAG,CACf,CACE,WAAkC,EAClC,EAAE,CAAC,CACH,oBAAC,gBAAgB,IACf,GAAG,EAAE,WAAW,CAAC,EAAE,EACnB,QAAQ,EACN,WAAW,CAAC,EAAE;4FACd,WAAW,CAAC,EAAE,EAEhB,MAAM,EAAE,UAAU,CAAC,EAAE,EACrB,8BAA8B,EAC5B,8BAA8B,EAEhC,sBAAsB,EACpB,sBAAsB,EAExB,yBAAyB,EACvB,kBAAkB;4FAClB,4BAA4B,EAE9B,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,UAAU,EACjB,iBAAiB,EACf,iBAAiB,EAEnB,YAAY,EAAE,YAAY,GAC1B,CACH,CACF,CACkC,CAChB,CACQ,CACT,CACF,CACkB,CACF,CACb,CACP,CAC1B;gDAEL,sBAAsB,IAAI,CACzB,6BAAK,SAAS,EAAC,eAAe;oDAC5B,6BAAK,SAAS,EAAC,cAAc;wDAC3B,gCACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAC,wCAAwC;4DAElD,8BAAM,SAAS,EAAC,MAAM;gEACpB,oBAAC,YAAY,8BAEE,CACV;4DACP,yCAAiB,CACV,CACL;oDACN,6BAAK,SAAS,EAAC,2CAA2C,IACvD,YAAY,CAAC,GAAG,CACf,CAAC,IAA2B,EAAE,KAAK,EAAE,EAAE,CAAC,CACtC,6BACE,GAAG,EAAE,IAAI,CAAC,EAAE,EACZ,SAAS,EAAE,IAAI,CACb,0BAA0B,EAC1B;4DACE,WAAW,EACT,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;4DAC5B,cAAc,EACZ,gBAAgB,GAAG,KAAK;4DAC1B,uBAAuB,EACrB,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;gEAC1B,qBAAqB,CAAC,IAAI,CAAC;yDAC9B,CACF,GACD,CACH,CACF,CACG;oDACN,6BAAK,SAAS,EAAC,cAAc;wDAC3B,gCACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAC,oCAAoC;4DAE9C,yCAAiB;4DACjB,8BAAM,SAAS,EAAC,MAAM;gEACpB,oBAAC,YAAY,+BAEE,CACV,CACA,CACL,CACF,CACP,CACG;4CACL,CAAC,UAAU,IAAI,CACd,6BAAK,SAAS,EAAC,sCAAsC;gDAClD,WAAW,IAAI,CAAC,UAAU,IAAI,CAC7B,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0EAA0E,EACpF,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EACrC,QAAQ,EAAE,SAAS,IAAI,QAAQ;oDAE/B,oBAAC,uBAAuB,IACtB,KAAK,EACH,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,KAAK,KAAI,YAAY,EAE3C,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,IAAI,GAC9B,CACK,CACV;gDACD,8BAAM,SAAS,EAAC,2BAA2B,GAAQ;gDAClD,CAAC,UAAU,IAAI,CACd,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uEAAuE,EACjF,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,SAAS,IAAI,QAAQ;oDAE/B,oBAAC,uBAAuB,IACtB,KAAK,EAAE,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,KAAK,KAAI,QAAQ,EACzC,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,IAAI,GAC3B,CACK,CACV;gDACA,iBAAiB,IAAI,CACpB,oBAAC,OAAO,IACN,KAAK,EACH,8BAA8B;wDAC5B,CAAC,CAAC,EAAE;wDACJ,CAAC,CAAC,2EAA2E;oDAGjF,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,IAAI,CACb,6FAA6F,EAC7F,EAAE,YAAY,EAAE,mBAAmB,EAAE,EACrC;4DACE,8BAA8B,EAC5B,8BAA8B;yDACjC,CACF,EACD,QAAQ,EACN,SAAS;4DACT,QAAQ;4DACR,mBAAmB;4DACnB,CAAC,8BAA8B;wDAGjC,oBAAC,uBAAuB,IACtB,KAAK,EACH,UAAU;gEACR,CAAC,CAAC,MAAM;gEACR,CAAC,CAAC,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,KAAK,KAAI,QAAQ,EAExC,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,IAAI,GAC3B,CACK,CACD,CACX,CACG,CACP,CACG,CACD;oCAEN,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAC5B,oBAAC,KAAK,CAAC,QAAQ;wCACb,oBAAC,MAAM,IACL,IAAI,EAAE,OAAO,IAAI,CAAC,mBAAmB,EACrC,OAAO,EAAE,uBAAuB,GAChC;wCACF,oBAAC,KAAK,IACJ,MAAM,EAAE,sBAAsB,KAAK,KAAK,EACxC,KAAK,EAAC,iBAAiB,EACvB,aAAa,EAAC,wBAAwB,EACtC,cAAc,EAAC,8BAA8B,EAC7C,aAAa,EAAC,6BAA6B,EAC3C,OAAO,EACL;gDACG,WAAW,IAAI,CACd,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+DAA+D,EACzE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;oDAErC,oBAAC,uBAAuB,IACtB,KAAK,EACH,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,KAAK,KAAI,YAAY,EAE3C,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,IAAI,GAC9B,CACK,CACV;gDACD,8BAAM,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAS;gDACjC,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uDAAuD,EACjE,OAAO,EAAE,eAAe;oDAExB,oBAAC,uBAAuB,IACtB,KAAK,EACH,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,0CAAE,KAAK,KAAI,MAAM,EAE1C,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,0CAAE,IAAI,GACnC,CACK;gDACT,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,4DAA4D,EACtE,OAAO,EAAE,2BAA2B,EACpC,SAAS;oDAET,oBAAC,uBAAuB,IACtB,KAAK,EACH,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,0CAAE,KAAK,KAAI,SAAS,EAE9C,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,0CAAE,IAAI,GACpC,CACK,CACR;4CAGL,+FAGI,CACE;wCACR,oBAAC,KAAK,IACJ,MAAM,EAAE,0BAA0B,KAAK,IAAI,EAC3C,KAAK,EAAC,+BAA+B,EACrC,aAAa,EAAC,mCAAmC,EACjD,cAAc,EAAC,wCAAwC,EACvD,aAAa,EAAC,uCAAuC,EACrD,OAAO,EACL;gDACE,8BAAM,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAS;gDACjC,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,4DAA4D,EACtE,OAAO,EAAE,wBAAwB,WAG1B;gDACT,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,kEAAkE,EAC5E,OAAO,EAAE,6BAA6B,EACtC,SAAS,qBAGF,CACR;4CAGL,iRAMI,CACE;wCAER,oBAAC,KAAK,IACJ,MAAM,EAAE,8BAA8B,EACtC,KAAK,EAAC,8BAA8B,EACpC,SAAS,EAAC,sCAAsC,EAChD,aAAa,EAAC,8CAA8C,EAC5D,cAAc,EAAC,uBAAuB,EACtC,aAAa,EAAC,sBAAsB,EACpC,OAAO,EACL;gDACG,WAAW,IAAI,CACd,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,8EAA8E,EACxF,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;oDAErC,oBAAC,uBAAuB,IACtB,KAAK,EACH,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,KAAK,KAAI,YAAY,EAE3C,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,IAAI,GAC9B,CACK,CACV;gDACD,8BAAM,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAS;gDACjC,gCACE,SAAS,EAAC,wEAAwE,EAClF,OAAO,EAAE,GAAG,EAAE,CACZ,iCAAiC,CAAC,KAAK,CAAC,aAInC;gDACT,gCACE,SAAS,EAAC,6EAA6E,EACvF,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;wDACb,iCAAiC,CAAC,KAAK,CAAC,CAAA;wDACxC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;oDACxB,CAAC,EACD,SAAS,sBAGF,CACR;4CAGL,2BAAG,SAAS,EAAC,8CAA8C;;gDAGxD,WAAW,IAAI,CACd,8BAAM,SAAS,EAAC,yDAAyD;oDACtE,GAAG;;oDACqB,GAAG;oDAC5B,+BACG,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,KAAK,KAAI,YAAY,CACxC;oDAAC,GAAG;+FAEH,CACR,CACC;4CACJ,oBAAC,YAAY,IAAC,SAAS,EAAC,yEAAyE,eAElF,CACT,CACO,CAClB;oCACA,8CAA8C;wCAC7C,6BAA6B,IAAI,CAC/B,oBAAC,oBAAoB,IACnB,YAAY,EAAE,YAAY,EAC1B,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,mBAAmB,EACjB,MAAA,6CAA6C,aAA7C,6CAA6C,uBAA7C,6CAA6C,CAAE,mBAAmB,mCAClE,WAAW,EAEb,qBAAqB,EACnB,6CAA6C,aAA7C,6CAA6C,uBAA7C,6CAA6C,CAAE,qBAAqB,EAEtE,mCAAmC,EACjC,mCAAmC,GAErC,CACH,CACC,CACgC,CACN,CACF,CACL,CACW,CACzB,CACT,CACjB,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA","sourcesContent":["import * as React from 'react'\nimport { createTheme as createMuiTheme, ThemeProvider } from '@mui/material'\nimport Tooltip from './components/renderer/Tooltip'\nimport { Prompt, useHistory } from 'react-router-dom'\nimport clsx from 'clsx'\nimport * as bulmaToast from 'bulma-toast'\nimport {\n localisationService,\n submissionService,\n attachmentsService,\n} from '@oneblink/apps'\nimport {\n EnvironmentTypes,\n FormTypes,\n FormsAppsTypes,\n ScheduledTasksTypes,\n SubmissionTypes,\n} from '@oneblink/types'\nimport * as H from 'history'\nimport { LocalizationProvider } from '@mui/x-date-pickers'\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'\n\nimport Modal from './components/renderer/Modal'\nimport cleanFormSubmissionModel from './services/cleanFormSubmissionModel'\nimport PageFormElements from './components/renderer/PageFormElements'\nimport useFormValidation from './hooks/useFormValidation'\nimport useConditionalLogic from './hooks/useConditionalLogic'\nimport usePages from './hooks/usePages'\nimport useLookups from './hooks/useLookups'\nimport { FormDefinitionContext } from './hooks/useFormDefinition'\nimport {\n ReplaceInjectablesOverridesContext,\n ReplaceInjectablesOverrides,\n} from './hooks/useReplaceInjectablesOverrides'\nimport { InjectPagesContext } from './hooks/useInjectPages'\nimport { FormElementOptionsContextProvider } from './hooks/useDynamicOptionsLoaderState'\nimport { FormElementLookupsContextProvider } from './hooks/useFormElementLookups'\nimport { OneBlinkFormContainerContext } from './hooks/useOneBlinkFormContainer'\nimport { GoogleMapsApiKeyContext } from './hooks/useGoogleMapsApiKey'\nimport { AbnLookupAuthenticationGuidContext } from './hooks/useAbnLookupAuthenticationGuid'\nimport { CaptchaContext } from './hooks/useCaptcha'\nimport { FormIsReadOnlyContext } from './hooks/useFormIsReadOnly'\nimport { AttachmentBlobsProvider } from './hooks/attachments/useAttachmentBlobs'\nimport useIsOffline from './hooks/useIsOffline'\nimport CustomisableButtonInner from './components/renderer/CustomisableButtonInner'\nimport {\n CaptchaType,\n ExecutedLookups,\n FormElementsValidation,\n NestedFormElementValueChangeHandler,\n SetFormSubmission,\n SectionState,\n} from './types/form'\nimport checkBsbsAreInvalid from './services/checkBsbsAreInvalid'\nimport checkIfBsbsAreValidating from './services/checkIfBsbsAreValidating'\nimport checkIfAttachmentsExist from './services/checkIfAttachmentsExist'\nimport { injectDynamicElements } from './services/dynamic-elements'\nimport useAuth from './hooks/useAuth'\nimport { formElementsService } from '@oneblink/sdk-core'\nimport { TaskContext } from './hooks/useTaskContext'\nimport { OnUploadAttachmentContext } from './hooks/useOnUploadAttachment'\nimport { injectOptionsAcrossAllElements } from './services/injectableOptions'\nimport MaterialIcon from './components/MaterialIcon'\nimport ReCAPTCHA from 'react-google-recaptcha'\nimport ValidationErrorsCard from './components/ValidationErrorsCard'\nimport { sendGoogleAnalyticsEvent } from './utils/sendGoogleAnalyticsEvent'\nimport { useUserProfileForInjectablesOutsideContext } from './hooks/useUserProfileForInjectables'\nimport { ValidationIconConfigurationContext } from './hooks/useValidationIconConfiguration'\n\nexport type OneBlinkReadOnlyFormProps = {\n /**\n * A [Google Maps API\n * Key](https://developers.google.com/maps/documentation/javascript/get-api-key).\n * Required if the form contains a `location` form element.\n */\n googleMapsApiKey?: string\n /** Hex colour value for certain inputs (defaults to `#4c8da7`). */\n primaryColour?: string\n /**\n * Pass a task if the user was attempting to complete a scheduled task via a\n * form submission\n */\n task?: ScheduledTasksTypes.Task\n /**\n * Pass a task group if the user was attempting to complete a scheduled task\n * associated with a group via a form submission\n */\n taskGroup?: ScheduledTasksTypes.TaskGroup\n /**\n * Pass a task group instance if the user was attempting to complete a\n * scheduled task associated with a group via a form submission\n */\n taskGroupInstance?: ScheduledTasksTypes.TaskGroupInstance\n /**\n * Override the default behaviour when injecting values, such as in an info\n * element or a default value.\n */\n replaceInjectablesOverrides?: ReplaceInjectablesOverrides\n}\n\nexport type OneBlinkFormBaseProps = OneBlinkReadOnlyFormProps & {\n /** The function to call when the user cancels the form */\n onCancel: () => unknown\n /**\n * The function to call when the user submits the form with valid submission\n * data. See\n * [NewFormSubmission](https://oneblink.github.io/apps/modules/submissionService.html#NewFormSubmission)\n * for the structure of the argument.\n */\n onSubmit: (newFormSubmission: submissionService.NewFormSubmission) => unknown\n /** Whether the form is currently able to be submitted. False by default. */\n disabled?: boolean\n /** Whether the form is in preview mode. False by default. */\n isPreview?: boolean\n /**\n * An [ABN Lookup Authentication\n * Guid](https://abr.business.gov.au/Tools/WebServices). Required if the form\n * contains a `abn` form element.\n */\n abnLookupAuthenticationGuid?: string\n /**\n * A [reCAPTCHA Site Key](https://developers.google.com/recaptcha/intro).\n * Required if the form contains a `captcha` form element.\n */\n captchaSiteKey?: string\n /** Change properties for certain buttons on the form. */\n buttons?: FormsAppsTypes.FormsListStyles['buttons']\n /** Set a custom validation icon and accessible label. */\n validationIcon?: EnvironmentTypes.FormsAppEnvironmentStyles['validationIcon']\n /** Number of days attachments are retained for. */\n attachmentRetentionInDays?: number\n /**\n * If set to `false`, submission will be prevented while offline. If set to\n * `true`, the user will be prompted to allow them to continue with\n * attachments uploading in the background later.\n */\n isPendingQueueEnabled: boolean\n /**\n * The function to call when the user wishes to save their submission data as\n * a draft submission. If not specified, drafts cannot be saved. See\n * [NewDraftSubmission](https://oneblink.github.io/apps/modules/submissionService.html#NewDraftSubmission)\n * for the structure of the argument.\n */\n onSaveDraft?: (\n newDraftSubmission: submissionService.NewDraftSubmission,\n ) => unknown\n /**\n * The function to call when the user needs to navigate away from the form.\n * e.g. `history.push`\n */\n handleNavigateAway?: () => unknown\n /**\n * Determines whether the form is submittable or not. Info page type forms\n * show a \"Done\" button instead of a \"Submit\" button. Defaults to\n * \"CALCULATED\"\n */\n isInfoPage?: 'YES' | 'NO' | 'CALCULATED'\n /**\n * The function to call when a user uploads an attachment through an element\n * that allows attachment upload. See\n * [uploadAttachment](https://oneblink.github.io/apps/modules/attachmentsService.html#uploadAttachment)\n * for the structure of the argument and a sample function to be used.\n */\n onUploadAttachment?: typeof attachmentsService.uploadAttachment\n /**\n * Determines whether to use checkboxes or invisible recaptcha v2 for captcha\n * elements. Defaults to \"CHECKBOX\"\n */\n captchaType?: CaptchaType\n\n /**\n * Whether the form should use a navigable validation errors notification, or\n * a simple validation errors notification\n *\n * @default true\n */\n shouldUseNavigableValidationErrorsNotification?: boolean\n /** Various settings for the navigable validation errors notification */\n navigableValidationErrorsNotificationSettings?: {\n /**\n * A pixel offset for validation error navigation markers. Use this to\n * account for any headers your page might have. If not set, we will attempt\n * to calculate the offset for you. Please note: Calculating this value is\n * not supported when passing in a `scrollableContainerId`.\n */\n navigationTopOffset?: number\n /**\n * The HTML Element ID of the scrollable container your form resides in. If\n * not set, will scroll on the window.\n */\n scrollableContainerId?: string\n }\n}\n\nexport type OneBlinkFormUncontrolledProps = {\n /** The OneBlink Form to render */\n form: FormTypes.Form\n /** The initial submission data */\n initialSubmission?: SubmissionTypes.S3SubmissionData['submission']\n}\n\nexport type OneBlinkFormControlledProps = {\n definition: FormTypes.Form\n submission: SubmissionTypes.S3SubmissionData['submission']\n setFormSubmission: SetFormSubmission\n lastElementUpdated?: FormTypes.FormElement\n executedLookups: ExecutedLookups\n sectionState?: SectionState\n}\n\ntype Props = OneBlinkFormBaseProps &\n OneBlinkFormControlledProps & {\n isReadOnly: boolean\n }\n\nfunction OneBlinkFormBase({\n googleMapsApiKey,\n abnLookupAuthenticationGuid,\n captchaSiteKey,\n definition,\n disabled,\n isPreview,\n submission,\n isReadOnly,\n onCancel,\n onSubmit,\n onSaveDraft,\n setFormSubmission,\n buttons,\n validationIcon,\n primaryColour,\n attachmentRetentionInDays,\n isPendingQueueEnabled,\n handleNavigateAway,\n isInfoPage: isInfoPageProp,\n lastElementUpdated,\n executedLookups,\n task,\n taskGroup,\n taskGroupInstance,\n onUploadAttachment,\n captchaType,\n shouldUseNavigableValidationErrorsNotification = true,\n navigableValidationErrorsNotificationSettings,\n replaceInjectablesOverrides,\n sectionState,\n}: Props) {\n const isOffline = useIsOffline()\n const { isUsingFormsKey } = useAuth()\n const userProfileForInjectables = useUserProfileForInjectablesOutsideContext(\n replaceInjectablesOverrides?.getUserProfile,\n )\n const captchasRef = React.useRef<Array<ReCAPTCHA>>([])\n\n const theme = React.useMemo(\n () =>\n createMuiTheme({\n palette: {\n primary: {\n main: primaryColour || '#4c8da7',\n },\n success: {\n main: '#4caf50',\n },\n },\n }),\n [primaryColour],\n )\n\n const isInfoPage = React.useMemo(() => {\n if (!!isInfoPageProp && isInfoPageProp !== 'CALCULATED') {\n return isInfoPageProp === 'YES'\n }\n return formElementsService.determineIsInfoPage(definition)\n }, [definition, isInfoPageProp])\n\n const taskContextValue = React.useMemo(() => {\n return {\n task,\n taskGroup,\n taskGroupInstance,\n }\n }, [task, taskGroup, taskGroupInstance])\n\n //\n //\n // #region Form Definition\n\n const pages = React.useMemo<FormTypes.PageElement[]>(() => {\n if (definition.isMultiPage) {\n return definition.elements.reduce(\n (\n pageElements: FormTypes.PageElement[],\n formElement: FormTypes.FormElement,\n ) => {\n if (formElement.type === 'page') {\n pageElements.push(formElement)\n }\n return pageElements\n },\n [],\n )\n } else {\n return [\n {\n type: 'page',\n id: definition.id.toString(),\n label: definition.name,\n elements: definition.elements,\n conditionallyShow: false,\n requiresAllConditionallyShowPredicates: false,\n },\n ]\n }\n }, [\n definition.elements,\n definition.id,\n definition.isMultiPage,\n definition.name,\n ])\n\n const pagesWithDynamicElements = React.useMemo<\n FormTypes.PageElement[]\n >(() => {\n return injectDynamicElements(pages) as FormTypes.PageElement[]\n }, [pages])\n\n // #endregion\n //\n //\n\n //\n //\n // #region Unsaved Changed\n\n const history = useHistory()\n\n const [isPreparingToSubmit, setIsPreparingToSubmit] =\n React.useState<boolean>(false)\n const [\n { isDirty, isNavigationAllowed, hasConfirmedNavigation, goToLocation },\n setUnsavedChangesState,\n ] = React.useState<{\n isDirty: boolean\n isNavigationAllowed: boolean\n hasConfirmedNavigation: boolean | null\n goToLocation: H.Location | null\n }>({\n isDirty: false,\n isNavigationAllowed: false,\n hasConfirmedNavigation: null,\n goToLocation: null,\n })\n const [promptOfflineSubmissionAttempt, setPromptOfflineSubmissionAttempt] =\n React.useState<boolean>(false)\n const [promptUploadingAttachments, setPromptUploadingAttachments] =\n React.useState<boolean>(false)\n const handleBlockedNavigation = React.useCallback<\n (location: H.Location, action: H.Action) => string | boolean\n >((location) => {\n setUnsavedChangesState((current) => ({\n ...current,\n goToLocation: location,\n hasConfirmedNavigation: false,\n }))\n return false\n }, [])\n\n const handleKeepGoing = React.useCallback(() => {\n setUnsavedChangesState((current) => ({\n ...current,\n goToLocation: null,\n hasConfirmedNavigation: null,\n }))\n }, [])\n\n const handleDiscardUnsavedChanges = React.useCallback(() => {\n setUnsavedChangesState((current) => ({\n ...current,\n isNavigationAllowed: true,\n hasConfirmedNavigation: true,\n }))\n sendGoogleAnalyticsEvent('oneblink_form_abandon', {\n formId: definition.id,\n formName: definition.name,\n })\n }, [definition.id, definition.name])\n\n React.useEffect(() => {\n if (hasConfirmedNavigation) {\n // Navigate to the previous blocked location with your navigate function\n if (goToLocation) {\n history.push(`${goToLocation.pathname}${goToLocation.search}`)\n if (handleNavigateAway) {\n handleNavigateAway()\n }\n } else {\n onCancel()\n }\n }\n }, [\n goToLocation,\n handleNavigateAway,\n hasConfirmedNavigation,\n history,\n onCancel,\n ])\n\n const handleCancel = React.useCallback(() => {\n if (isDirty) {\n setUnsavedChangesState((current) => ({\n ...current,\n hasConfirmedNavigation: false,\n }))\n } else {\n sendGoogleAnalyticsEvent('oneblink_form_abandon', {\n formId: definition.id,\n formName: definition.name,\n })\n onCancel()\n }\n }, [definition.id, definition.name, isDirty, onCancel])\n\n const allowNavigation = React.useCallback(() => {\n setUnsavedChangesState((current) => ({\n ...current,\n isNavigationAllowed: true,\n }))\n }, [])\n\n // #endregion Unsaved Changed\n //\n //\n\n //\n //\n // #region Conditional Logic\n\n const {\n formElementsConditionallyShown,\n conditionalLogicError,\n submissionConditionallyEnabled,\n } = useConditionalLogic({\n formElements: pagesWithDynamicElements,\n submission,\n enableSubmission: definition.enableSubmission,\n })\n\n // #endregion\n //\n //\n\n //\n //\n // #region Validation\n\n const validationErrorToastFocusElementRef =\n React.useRef<HTMLButtonElement>(null)\n const [isShowingValidationErrorsCard, setIsShowingValidationErrorsCard] =\n React.useState(false)\n const { validate } = useFormValidation(pages)\n\n const recaptchaType = React.useMemo(\n () => captchaType ?? 'CHECKBOX',\n [captchaType],\n )\n\n const formElementsValidation = React.useMemo<\n FormElementsValidation | undefined\n >(\n () =>\n !isReadOnly\n ? validate(\n submission,\n formElementsConditionallyShown,\n executedLookups ?? {},\n recaptchaType,\n isOffline,\n )\n : undefined,\n [\n isReadOnly,\n validate,\n submission,\n formElementsConditionallyShown,\n executedLookups,\n recaptchaType,\n isOffline,\n ],\n )\n\n React.useEffect(() => {\n if (!formElementsValidation) {\n setIsShowingValidationErrorsCard(false)\n }\n }, [formElementsValidation])\n\n // #endregion\n //\n //\n\n //\n //\n // #region Pages\n\n const [hasAttemptedSubmit, setHasAttemptedSubmit] = React.useState(false)\n\n const {\n visiblePages,\n isFirstVisiblePage,\n isLastVisiblePage,\n isDisplayingCurrentPageError,\n isShowingMultiplePages,\n isStepsHeaderActive,\n toggleStepsNavigation,\n currentPageIndex,\n currentPage,\n currentPageNumber,\n checkDisplayPageError,\n setPageId,\n goToPreviousPage,\n goToNextPage,\n scrollToTopOfPageHTMLElementRef,\n } = usePages({\n hasAttemptedSubmit,\n pages,\n formElementsValidation,\n formElementsConditionallyShown,\n })\n\n // #endregion\n //\n //\n\n //\n //\n // #region Submissions\n\n const getCurrentSubmissionData = React.useCallback(\n (stripBinaryData: boolean) => {\n const { model, captchaTokens } = cleanFormSubmissionModel(\n submission,\n definition.elements,\n formElementsConditionallyShown,\n stripBinaryData,\n )\n return {\n submission: model,\n captchaTokens,\n }\n },\n [definition.elements, formElementsConditionallyShown, submission],\n )\n\n const obFormContainerHTMLElementRef = React.useRef<HTMLDivElement>(null)\n React.useEffect(() => {\n const obFormContainerHTMLElement = obFormContainerHTMLElementRef.current\n if (obFormContainerHTMLElement) {\n console.log(\n 'Setting toast notifications to be appended to HTML Element',\n obFormContainerHTMLElement,\n )\n bulmaToast.setDefaults({\n position: 'bottom-right',\n opacity: 0.95,\n appendTo: obFormContainerHTMLElement,\n })\n }\n return () => {\n bulmaToast.resetDefaults()\n }\n }, [])\n\n const checkAttachmentsCanBeSubmitted = React.useCallback(\n (submission: SubmissionTypes.S3SubmissionData['submission']) => {\n // Prevent submission until all attachment uploads are finished\n // Unless the user is offline, in which case, the uploads will\n // be taken care of by a pending queue if enabled, otherwise\n // the user will be prompted to try again or save a draft.\n if (isOffline) {\n return true\n }\n const attachmentsAreUploading =\n attachmentsService.checkIfAttachmentsAreUploading(\n definition,\n submission,\n )\n\n if (attachmentsAreUploading) {\n if (isUsingFormsKey || !isPendingQueueEnabled) {\n bulmaToast.toast({\n message:\n 'Attachments are still uploading, please wait for them to finish before trying again.',\n type: 'is-primary',\n extraClasses: 'ob-toast cypress-still-uploading-toast',\n duration: 4000,\n pauseOnHover: true,\n closeOnClick: true,\n })\n return false\n } else {\n setPromptUploadingAttachments(true)\n return false\n }\n }\n\n return true\n },\n [definition, isOffline, isPendingQueueEnabled, isUsingFormsKey],\n )\n\n const checkBsbsCanBeSubmitted = React.useCallback(\n (submission: SubmissionTypes.S3SubmissionData['submission']) => {\n return !checkBsbsAreInvalid(definition, submission)\n },\n [definition],\n )\n\n const checkBsbAreValidating = React.useCallback(\n (submission: SubmissionTypes.S3SubmissionData['submission']) => {\n if (checkIfBsbsAreValidating(definition, submission)) {\n bulmaToast.toast({\n message:\n 'Bsb(s) are still being validated, please wait for them to finish before trying again.',\n type: 'is-primary',\n extraClasses: 'ob-toast cypress-still-validating-toast',\n duration: 4000,\n pauseOnHover: true,\n closeOnClick: true,\n })\n return false\n }\n\n return true\n },\n [definition],\n )\n\n const addCaptchaRef = React.useCallback((recaptcha: ReCAPTCHA) => {\n captchasRef.current.push(recaptcha)\n // this allows the FormElementCaptcha element to unregister any captchas\n return () => {\n captchasRef.current = captchasRef.current.filter(\n (recaptchaInstance) => recaptchaInstance !== recaptcha,\n )\n }\n }, [])\n\n const captchaContextValue = React.useMemo(\n () => ({\n captchaSiteKey,\n captchaType: recaptchaType,\n addCaptchaRef,\n }),\n [addCaptchaRef, captchaSiteKey, recaptchaType],\n )\n\n const resetRecaptchas = React.useCallback(() => {\n // unset the submission model value for each captcha element\n const updatedModel = { ...submission }\n formElementsService.forEachFormElement(definition.elements, (element) => {\n if (element.type === 'captcha') {\n updatedModel[element.name] = undefined\n }\n })\n // reset each captcha\n if (captchaType === 'CHECKBOX') {\n captchasRef.current.forEach((captcha) => {\n captcha.reset()\n })\n }\n\n setHasAttemptedSubmit(false)\n setFormSubmission((current) => {\n return { ...current, submission: updatedModel }\n })\n }, [definition.elements, setFormSubmission, submission, captchaType])\n\n const prepareSubmission = React.useCallback(\n async (\n continueWhilstAttachmentsAreUploading: boolean,\n ): Promise<ReturnType<typeof getCurrentSubmissionData> | undefined> => {\n const submissionData = getCurrentSubmissionData(false)\n if (!checkBsbAreValidating(submissionData.submission)) {\n return\n }\n if (formElementsValidation) {\n console.log('Validation errors', formElementsValidation)\n if (!shouldUseNavigableValidationErrorsNotification) {\n bulmaToast.toast({\n message: 'Please fix validation errors',\n type: 'is-danger',\n extraClasses: 'ob-toast cypress-invalid-submit-attempt',\n duration: 4000,\n pauseOnHover: true,\n closeOnClick: true,\n })\n }\n setIsShowingValidationErrorsCard(true)\n validationErrorToastFocusElementRef.current?.focus()\n return\n }\n if (!checkBsbsCanBeSubmitted(submissionData.submission)) {\n return\n }\n if (\n !continueWhilstAttachmentsAreUploading &&\n !checkAttachmentsCanBeSubmitted(submissionData.submission)\n ) {\n return\n }\n\n if (captchaType === 'INVISIBLE') {\n if (captchasRef.current.length) {\n if (isOffline) {\n setPromptOfflineSubmissionAttempt(true)\n return\n }\n const tokenResults = await Promise.allSettled(\n captchasRef.current.map((captcha) => captcha.executeAsync()),\n )\n\n const captchaTokens: string[] = []\n\n for (const result of tokenResults) {\n if (result.status === 'rejected' || !result.value) {\n console.log('Captcha token failure')\n bulmaToast.toast({\n message: 'Failed to get a captcha token',\n type: 'is-danger',\n extraClasses: 'ob-toast cypress-failed-captcha-token-creation',\n duration: 4000,\n pauseOnHover: true,\n closeOnClick: true,\n })\n return\n }\n captchaTokens.push(result.value)\n }\n\n submissionData.captchaTokens = captchaTokens\n }\n }\n\n // check if attachments exist\n const newSubmission = checkIfAttachmentsExist(\n definition,\n submissionData.submission,\n attachmentRetentionInDays,\n )\n if (newSubmission) {\n setFormSubmission((currentFormSubmission) => ({\n ...currentFormSubmission,\n submission: newSubmission,\n }))\n bulmaToast.toast({\n message:\n \"Some files that were included in your submission have been removed based on your administrator's data retention policy, please remove them and upload them again.\",\n type: 'is-danger',\n extraClasses: 'ob-toast cypress-invalid-submit-attempt',\n duration: 4000,\n pauseOnHover: true,\n closeOnClick: true,\n })\n return\n }\n\n if (isOffline && !isPendingQueueEnabled) {\n console.log('User is offline and form does not support a pending queue')\n setPromptOfflineSubmissionAttempt(true)\n return\n }\n return submissionData\n },\n [\n attachmentRetentionInDays,\n captchaType,\n checkAttachmentsCanBeSubmitted,\n checkBsbAreValidating,\n checkBsbsCanBeSubmitted,\n definition,\n formElementsValidation,\n getCurrentSubmissionData,\n isOffline,\n isPendingQueueEnabled,\n setFormSubmission,\n shouldUseNavigableValidationErrorsNotification,\n ],\n )\n\n const handleSubmit = React.useCallback(\n async (\n event:\n | React.FormEvent<HTMLFormElement>\n | React.MouseEvent<HTMLButtonElement, MouseEvent>,\n continueWhilstAttachmentsAreUploading: boolean,\n ) => {\n event.preventDefault()\n if (disabled || isReadOnly) return\n setHasAttemptedSubmit(true)\n\n setIsPreparingToSubmit(true)\n\n const submissionData = await prepareSubmission(\n continueWhilstAttachmentsAreUploading,\n )\n\n if (!submissionData) {\n setIsPreparingToSubmit(false)\n return\n }\n\n allowNavigation()\n\n // transplant injected options on the definition\n const elementsWithInjectedOptions = injectOptionsAcrossAllElements({\n contextElements: definition.elements,\n elements: definition.elements,\n submission: submissionData.submission,\n taskContext: taskContextValue,\n userProfile: userProfileForInjectables,\n })\n setIsPreparingToSubmit(false)\n resetRecaptchas()\n onSubmit({\n definition: {\n ...definition,\n elements: elementsWithInjectedOptions,\n },\n submission: submissionData.submission,\n recaptchas: submissionData.captchaTokens.map((token) => ({\n token,\n siteKey: captchaSiteKey as string,\n })),\n })\n sendGoogleAnalyticsEvent('oneblink_form_submit', {\n formId: definition.id,\n formName: definition.name,\n })\n },\n [\n disabled,\n isReadOnly,\n prepareSubmission,\n allowNavigation,\n definition,\n taskContextValue,\n userProfileForInjectables,\n resetRecaptchas,\n onSubmit,\n captchaSiteKey,\n ],\n )\n\n const handleSaveDraft = React.useCallback(\n (continueWhilstAttachmentsAreUploading: boolean) => {\n if (disabled) return\n if (onSaveDraft) {\n allowNavigation()\n\n // For drafts we don't need to save the captcha tokens,\n // they will need to prove they are not robot again\n const { submission } = getCurrentSubmissionData(false)\n if (!checkBsbAreValidating(submission)) {\n return\n }\n if (\n !continueWhilstAttachmentsAreUploading &&\n !checkAttachmentsCanBeSubmitted(submission)\n ) {\n return\n }\n onSaveDraft({\n definition,\n submission,\n backgroundUpload: continueWhilstAttachmentsAreUploading,\n lastElementUpdated,\n sectionState,\n })\n }\n },\n [\n allowNavigation,\n checkAttachmentsCanBeSubmitted,\n definition,\n disabled,\n getCurrentSubmissionData,\n onSaveDraft,\n checkBsbAreValidating,\n lastElementUpdated,\n sectionState,\n ],\n )\n\n const handleContinueWithAttachments = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n setPromptUploadingAttachments(false)\n if (hasAttemptedSubmit) {\n handleSubmit(e, true)\n } else {\n handleSaveDraft(true)\n }\n },\n [\n handleSubmit,\n setPromptUploadingAttachments,\n hasAttemptedSubmit,\n handleSaveDraft,\n ],\n )\n const handleWaitForAttachments = React.useCallback(() => {\n setPromptUploadingAttachments(false)\n }, [setPromptUploadingAttachments])\n\n // #endregion\n //\n //\n\n //\n //\n // #region Lookups\n\n const { handlePagesLookupResult } = useLookups(\n definition.id,\n setFormSubmission,\n )\n\n // #endregion\n //\n //\n\n //\n //\n // #region Submission/Definition Changes\n\n const handleChange = React.useCallback<NestedFormElementValueChangeHandler>(\n (element, { value, executedLookups, deleteSection, sectionState }) => {\n if (\n //This will ensure on a read only form that the summary and calculation elements\n //can still be displayed as it needs handleChange so it can render\n //due to the dynamic nature of the summary element.\n (disabled &&\n element.type !== 'summary' &&\n element.type !== 'calculation') ||\n element.type === 'page'\n ) {\n return\n }\n\n switch (element.type) {\n case 'section': {\n setFormSubmission((currentFormSubmission) => {\n const currentSectionState = currentFormSubmission.sectionState || []\n const existingSectionIndex = currentSectionState.findIndex(\n (section) => section.id === element.id,\n )\n const sectionIsInState = existingSectionIndex >= 0\n let newSectionState: SectionState\n if (sectionIsInState && deleteSection) {\n newSectionState = currentSectionState.filter(\n (section) => section.id !== element.id,\n )\n } else if (sectionIsInState) {\n // Update state of the section\n newSectionState = currentSectionState.map((section, index) =>\n index === existingSectionIndex\n ? {\n ...section,\n state:\n section.state === 'COLLAPSED'\n ? 'EXPANDED'\n : 'COLLAPSED',\n }\n : section,\n )\n } else {\n // Add the section to state\n newSectionState = [\n ...currentSectionState,\n {\n id: element.id,\n state: element.isCollapsed ? 'EXPANDED' : 'COLLAPSED',\n },\n ]\n }\n\n return {\n ...currentFormSubmission,\n sectionState: newSectionState,\n }\n })\n break\n }\n // Don't update the last element updated for elements the user cannot set the value of\n case 'summary':\n case 'calculation': {\n setFormSubmission((currentFormSubmission) => ({\n ...currentFormSubmission,\n submission: {\n ...currentFormSubmission.submission,\n [element.name]:\n typeof value === 'function'\n ? value(currentFormSubmission.submission[element.name])\n : value,\n },\n }))\n break\n }\n default: {\n setUnsavedChangesState((current) => ({\n ...current,\n isDirty: true,\n }))\n\n setFormSubmission((currentFormSubmission) => {\n return {\n ...currentFormSubmission,\n submission: {\n ...currentFormSubmission.submission,\n [element.name]:\n typeof value === 'function'\n ? value(currentFormSubmission.submission[element.name])\n : value,\n },\n lastElementUpdated: element,\n executedLookups: {\n ...currentFormSubmission.executedLookups,\n [element.name]:\n typeof executedLookups === 'function'\n ? executedLookups(\n currentFormSubmission.executedLookups?.[element.name],\n )\n : executedLookups,\n },\n sectionState: sectionState\n ? typeof sectionState === 'function'\n ? sectionState(currentFormSubmission.sectionState)\n : sectionState\n : currentFormSubmission.sectionState,\n }\n })\n }\n }\n },\n [disabled, setFormSubmission],\n )\n\n // #endregion\n //\n //\n\n const lastElementUpdatedExistsOnForm = React.useMemo(() => {\n return !!formElementsService.findFormElement(\n definition.elements,\n (el) => el.id === lastElementUpdated?.id,\n )\n }, [definition.elements, lastElementUpdated])\n\n const lastElementUpdatedPage = React.useMemo(() => {\n return definition.elements.find((pageElement: FormTypes.FormElement) => {\n if (pageElement.type === 'page') {\n return formElementsService.findFormElement(\n pageElement.elements,\n (el) => el.id === lastElementUpdated?.id,\n )\n }\n })\n }, [lastElementUpdated, definition])\n\n const [hasResumed, setHasResumed] = React.useState(false)\n React.useEffect(() => {\n if (!hasResumed) {\n if (lastElementUpdated && lastElementUpdatedExistsOnForm) {\n if (lastElementUpdatedPage) {\n setPageId(lastElementUpdatedPage.id)\n }\n const element = document.querySelector(\n `[data-element-id=\"${lastElementUpdated.id}\"]`,\n )\n if (element) {\n window.requestAnimationFrame(() => {\n element.scrollIntoView({ behavior: 'smooth' })\n })\n }\n }\n if (sectionState) {\n {\n setFormSubmission((currentFormSubmission) => ({\n ...currentFormSubmission,\n sectionState,\n }))\n }\n }\n setHasResumed(true)\n }\n }, [\n lastElementUpdated,\n hasResumed,\n lastElementUpdatedPage,\n lastElementUpdatedExistsOnForm,\n setPageId,\n sectionState,\n setFormSubmission,\n ])\n\n if (conditionalLogicError) {\n return (\n <>\n <div className=\"has-text-centered\">\n <MaterialIcon className=\"has-text-warning icon-x-large\">\n error\n </MaterialIcon>\n <h3 className=\"title is-3\">Bad Form Configuration</h3>\n <p className=\"cypress-conditional-logic-error-message\">\n {conditionalLogicError.message}\n </p>\n <p className=\"has-text-grey\">\n {localisationService.formatDatetimeLong(new Date())}\n </p>\n </div>\n </>\n )\n }\n\n return (\n <ThemeProvider theme={theme}>\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <ReplaceInjectablesOverridesContext.Provider\n value={replaceInjectablesOverrides}\n >\n <FormDefinitionContext.Provider value={definition}>\n <FormElementOptionsContextProvider formIsReadOnly={isReadOnly}>\n <FormElementLookupsContextProvider>\n <OneBlinkFormContainerContext.Provider\n value={obFormContainerHTMLElementRef.current}\n >\n <div\n className={clsx('ob-form-container', {\n 'is-showing-pages': isShowingMultiplePages,\n })}\n ref={obFormContainerHTMLElementRef}\n >\n <form\n name=\"obForm\"\n className={`ob-form cypress-ob-form ob-form__page-${\n currentPageIndex + 1\n }`}\n noValidate\n onSubmit={(e) => handleSubmit(e, false)}\n >\n <div>\n <div ref={scrollToTopOfPageHTMLElementRef} />\n {isShowingMultiplePages && (\n <div\n className={clsx('ob-steps-navigation', {\n 'is-active': isStepsHeaderActive,\n })}\n >\n <div\n className={clsx('ob-steps-navigation__header', {\n 'is-active': isStepsHeaderActive,\n })}\n onClick={toggleStepsNavigation}\n >\n <span className=\"icon is-invisible\">\n <MaterialIcon>keyboard_arrow_down</MaterialIcon>\n </span>\n <div className=\"steps-header-active-page\">\n {isDisplayingCurrentPageError ? (\n <span className=\"icon\">\n <MaterialIcon className=\"has-text-danger is-size-4\">\n warning\n </MaterialIcon>\n </span>\n ) : (\n <span className=\"steps-header-active-page-icon\">\n {currentPageNumber}\n </span>\n )}\n <span className=\"steps-header-active-page-label cypress-tablet-step-title\">\n {currentPage ? currentPage.label : ''}\n </span>\n </div>\n <span className=\"dropdown icon\">\n <MaterialIcon>keyboard_arrow_down</MaterialIcon>\n </span>\n </div>\n\n <div\n className={clsx('ob-steps-navigation__steps', {\n 'is-active': isStepsHeaderActive,\n })}\n >\n <div className=\"steps is-small is-horizontal-tablet cypress-steps\">\n {visiblePages.map(\n (\n page: FormTypes.PageElement,\n index: number,\n ) => {\n const hasErrors =\n checkDisplayPageError(page)\n return (\n <div\n key={page.id}\n id={`steps-navigation-step-${page.id}`}\n className={clsx(\n 'step-item cypress-step-item',\n {\n 'is-active':\n currentPage.id === page.id,\n 'is-completed':\n currentPageIndex > index,\n 'is-error': hasErrors,\n },\n )}\n onClick={(e) => {\n e.stopPropagation()\n if (page.id !== currentPage.id) {\n setPageId(page.id)\n }\n }}\n >\n <div\n className=\"step-marker step-marker-error ob-step-marker cypress-step-marker\"\n // @ts-expect-error ???\n name={`cypress-page-stepper-${index + 1}`}\n value={index + 1}\n >\n {hasErrors ? (\n <Tooltip title=\"Page has errors\">\n <span className=\"icon tooltip has-tooltip-top cypress-page-error\">\n <MaterialIcon className=\"has-text-danger is-size-3\">\n warning\n </MaterialIcon>\n </span>\n </Tooltip>\n ) : (\n <span>{index + 1}</span>\n )}\n </div>\n <div className=\"step-details ob-step-details\">\n <p\n className=\"step-title ob-step-title cypress-desktop-step-title\"\n id={`steps-navigation-step-label-${page.id}`}\n >\n {page.label}\n </p>\n </div>\n </div>\n )\n },\n )}\n </div>\n </div>\n </div>\n )}\n\n <div\n className={clsx('ob-steps-navigation__background', {\n 'is-active': isStepsHeaderActive,\n })}\n onClick={toggleStepsNavigation}\n />\n\n <div className=\"steps\">\n <div\n className={clsx('steps-content', {\n 'is-single-step': !isShowingMultiplePages,\n })}\n >\n <InjectPagesContext.Provider\n value={handlePagesLookupResult}\n >\n <GoogleMapsApiKeyContext.Provider\n value={googleMapsApiKey}\n >\n <AbnLookupAuthenticationGuidContext.Provider\n value={abnLookupAuthenticationGuid}\n >\n <ValidationIconConfigurationContext.Provider\n value={validationIcon}\n >\n <CaptchaContext.Provider\n value={captchaContextValue}\n >\n <AttachmentBlobsProvider>\n <FormIsReadOnlyContext.Provider\n value={isReadOnly}\n >\n <TaskContext.Provider\n value={taskContextValue}\n >\n <OnUploadAttachmentContext.Provider\n value={onUploadAttachment}\n >\n {visiblePages.map(\n (\n pageElement: FormTypes.PageElement,\n ) => (\n <PageFormElements\n key={pageElement.id}\n isActive={\n pageElement.id ===\n currentPage.id\n }\n formId={definition.id}\n formElementsConditionallyShown={\n formElementsConditionallyShown\n }\n formElementsValidation={\n formElementsValidation\n }\n displayValidationMessages={\n hasAttemptedSubmit ||\n isDisplayingCurrentPageError\n }\n pageElement={pageElement}\n onChange={handleChange}\n model={submission}\n setFormSubmission={\n setFormSubmission\n }\n sectionState={sectionState}\n />\n ),\n )}\n </OnUploadAttachmentContext.Provider>\n </TaskContext.Provider>\n </FormIsReadOnlyContext.Provider>\n </AttachmentBlobsProvider>\n </CaptchaContext.Provider>\n </ValidationIconConfigurationContext.Provider>\n </AbnLookupAuthenticationGuidContext.Provider>\n </GoogleMapsApiKeyContext.Provider>\n </InjectPagesContext.Provider>\n </div>\n\n {isShowingMultiplePages && (\n <div className=\"steps-actions\">\n <div className=\"steps-action\">\n <button\n type=\"button\"\n onClick={goToPreviousPage}\n disabled={isFirstVisiblePage}\n className=\"button is-light cypress-pages-previous\"\n >\n <span className=\"icon\">\n <MaterialIcon>\n keyboard_arrow_left\n </MaterialIcon>\n </span>\n <span>Back</span>\n </button>\n </div>\n <div className=\"step-progress-mobile cypress-steps-mobile\">\n {visiblePages.map(\n (page: FormTypes.PageElement, index) => (\n <div\n key={page.id}\n className={clsx(\n 'step-progress-mobile-dot',\n {\n 'is-active':\n currentPage.id === page.id,\n 'is-completed':\n currentPageIndex > index,\n 'has-background-danger':\n currentPage.id !== page.id &&\n checkDisplayPageError(page),\n },\n )}\n />\n ),\n )}\n </div>\n <div className=\"steps-action\">\n <button\n type=\"button\"\n onClick={goToNextPage}\n disabled={isLastVisiblePage}\n className=\"button is-light cypress-pages-next\"\n >\n <span>Next</span>\n <span className=\"icon\">\n <MaterialIcon>\n keyboard_arrow_right\n </MaterialIcon>\n </span>\n </button>\n </div>\n </div>\n )}\n </div>\n {!isReadOnly && (\n <div className=\"buttons ob-buttons ob-buttons-submit\">\n {onSaveDraft && !isInfoPage && (\n <button\n type=\"button\"\n className=\"button ob-button is-primary ob-button-save-draft cypress-save-draft-form\"\n onClick={() => handleSaveDraft(false)}\n disabled={isPreview || disabled}\n >\n <CustomisableButtonInner\n label={\n buttons?.saveDraft?.label || 'Save Draft'\n }\n icon={buttons?.saveDraft?.icon}\n />\n </button>\n )}\n <span className=\"ob-buttons-submit__spacer\"></span>\n {!isInfoPage && (\n <button\n type=\"button\"\n className=\"button ob-button is-light ob-button-submit-cancel cypress-cancel-form\"\n onClick={handleCancel}\n disabled={isPreview || disabled}\n >\n <CustomisableButtonInner\n label={buttons?.cancel?.label || 'Cancel'}\n icon={buttons?.cancel?.icon}\n />\n </button>\n )}\n {isLastVisiblePage && (\n <Tooltip\n title={\n submissionConditionallyEnabled\n ? ''\n : 'Submission disabled: Your inputs have not met the criteria for submission'\n }\n >\n <button\n type=\"submit\"\n className={clsx(\n 'button ob-button is-success ob-button-submit cypress-submit-form-button cypress-submit-form',\n { 'is-loading': isPreparingToSubmit },\n {\n 'ob-button-submit-is-disabled':\n submissionConditionallyEnabled,\n },\n )}\n disabled={\n isPreview ||\n disabled ||\n isPreparingToSubmit ||\n !submissionConditionallyEnabled\n }\n >\n <CustomisableButtonInner\n label={\n isInfoPage\n ? 'Done'\n : buttons?.submit?.label || 'Submit'\n }\n icon={buttons?.submit?.icon}\n />\n </button>\n </Tooltip>\n )}\n </div>\n )}\n </div>\n </form>\n\n {!isReadOnly && !isPreview && (\n <React.Fragment>\n <Prompt\n when={isDirty && !isNavigationAllowed}\n message={handleBlockedNavigation}\n />\n <Modal\n isOpen={hasConfirmedNavigation === false}\n title=\"Unsaved Changes\"\n cardClassName=\"cypress-cancel-confirm\"\n titleClassName=\"cypress-cancel-confirm-title\"\n bodyClassName=\"cypress-cancel-confirm-body\"\n actions={\n <>\n {onSaveDraft && (\n <button\n type=\"button\"\n className=\"button ob-button is-success cypress-cancel-confirm-save-draft\"\n onClick={() => handleSaveDraft(false)}\n >\n <CustomisableButtonInner\n label={\n buttons?.saveDraft?.label || 'Save Draft'\n }\n icon={buttons?.saveDraft?.icon}\n />\n </button>\n )}\n <span style={{ flex: 1 }}></span>\n <button\n type=\"button\"\n className=\"button ob-button is-light cypress-cancel-confirm-back\"\n onClick={handleKeepGoing}\n >\n <CustomisableButtonInner\n label={\n buttons?.cancelPromptNo?.label || 'Back'\n }\n icon={buttons?.cancelPromptNo?.icon}\n />\n </button>\n <button\n type=\"button\"\n className=\"button ob-button is-primary cypress-cancel-confirm-discard\"\n onClick={handleDiscardUnsavedChanges}\n autoFocus\n >\n <CustomisableButtonInner\n label={\n buttons?.cancelPromptYes?.label || 'Discard'\n }\n icon={buttons?.cancelPromptYes?.icon}\n />\n </button>\n </>\n }\n >\n <p>\n You have unsaved changes, are you sure you want\n discard them?\n </p>\n </Modal>\n <Modal\n isOpen={promptUploadingAttachments === true}\n title=\"Attachment upload in progress\"\n cardClassName=\"cypress-attachments-wait-continue\"\n titleClassName=\"cypress-attachments-confirm-wait-title\"\n bodyClassName=\"cypress-attachments-confirm-wait-body\"\n actions={\n <>\n <span style={{ flex: 1 }}></span>\n <button\n type=\"button\"\n className=\"button ob-button is-light cypress-attachments-confirm-wait\"\n onClick={handleWaitForAttachments}\n >\n Wait\n </button>\n <button\n type=\"button\"\n className=\"button ob-button is-primary cypress-attachments-confirm-continue\"\n onClick={handleContinueWithAttachments}\n autoFocus\n >\n Continue\n </button>\n </>\n }\n >\n <p>\n Your attachments are still uploading, do you want to\n wait for the uploads to complete or continue using\n the app? If you click continue the attachments will\n upload in the background. Do not close the app until\n the upload has been completed.\n </p>\n </Modal>\n\n <Modal\n isOpen={promptOfflineSubmissionAttempt}\n title=\"It looks like you're Offline\"\n className=\"ob-modal__offline-submission-attempt\"\n cardClassName=\"cypress-submission-offline has-text-centered\"\n titleClassName=\"cypress-offline-title\"\n bodyClassName=\"cypress-offline-body\"\n actions={\n <>\n {onSaveDraft && (\n <button\n type=\"button\"\n className=\"button ob-button ob-button__offline-submission-attempt-save-draft is-success\"\n onClick={() => handleSaveDraft(false)}\n >\n <CustomisableButtonInner\n label={\n buttons?.saveDraft?.label || 'Save Draft'\n }\n icon={buttons?.saveDraft?.icon}\n />\n </button>\n )}\n <span style={{ flex: 1 }}></span>\n <button\n className=\"button ob-button ob-button__offline-submission-attempt-cancel is-light\"\n onClick={() =>\n setPromptOfflineSubmissionAttempt(false)\n }\n >\n Cancel\n </button>\n <button\n className=\"button ob-button ob-button__offline-submission-attempt-try-again is-primary\"\n onClick={(e) => {\n setPromptOfflineSubmissionAttempt(false)\n handleSubmit(e, false)\n }}\n autoFocus\n >\n Try Again\n </button>\n </>\n }\n >\n <p className=\"ob-modal__offline-submission-attempt-message\">\n You cannot submit this form while offline, please\n try again when connectivity is restored.\n {onSaveDraft && (\n <span className=\"ob-modal__offline-submission-attempt-save-draft-message\">\n {' '}\n Alternatively, click the{' '}\n <b>\n {buttons?.saveDraft?.label || 'Save Draft'}\n </b>{' '}\n button below to come back to this later.\n </span>\n )}\n </p>\n <MaterialIcon className=\"has-text-warning icon-x-large ob-modal__offline-submission-attempt-icon\">\n wifi_off\n </MaterialIcon>\n </Modal>\n </React.Fragment>\n )}\n {shouldUseNavigableValidationErrorsNotification &&\n isShowingValidationErrorsCard && (\n <ValidationErrorsCard\n visiblePages={visiblePages}\n formElementsValidation={formElementsValidation}\n setPageId={setPageId}\n currentPage={currentPage}\n navigationTopOffset={\n navigableValidationErrorsNotificationSettings?.navigationTopOffset ??\n 'CALCULATE'\n }\n scrollableContainerId={\n navigableValidationErrorsNotificationSettings?.scrollableContainerId\n }\n validationErrorToastFocusElementRef={\n validationErrorToastFocusElementRef\n }\n />\n )}\n </div>\n </OneBlinkFormContainerContext.Provider>\n </FormElementLookupsContextProvider>\n </FormElementOptionsContextProvider>\n </FormDefinitionContext.Provider>\n </ReplaceInjectablesOverridesContext.Provider>\n </LocalizationProvider>\n </ThemeProvider>\n )\n}\n\nexport default React.memo(OneBlinkFormBase)\n"]}
|
@@ -1,18 +1,32 @@
|
|
1
1
|
import * as React from 'react';
|
2
|
+
import { localisationService, authService, } from '@oneblink/apps';
|
2
3
|
import { OnlyPDFDisplay, LoadAndDisplayAttachments, SingleFileDisplay, } from './resource-components';
|
3
4
|
import { LayoutProvider } from './LayoutProvider';
|
4
5
|
function DownloadableFiles({ formSubmissionResult, divider, layout, }) {
|
5
|
-
const
|
6
|
-
var _a, _b, _c;
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
6
|
+
const submissionPDFFileName = React.useMemo(() => {
|
7
|
+
var _a, _b, _c, _d, _e;
|
8
|
+
const customFileName = (_b = (_a = formSubmissionResult.definition.postSubmissionReceipt) === null || _a === void 0 ? void 0 : _a.allowPDFDownload) === null || _b === void 0 ? void 0 : _b.pdfFileName;
|
9
|
+
if (!customFileName) {
|
10
|
+
return 'Submission';
|
11
|
+
}
|
12
|
+
return localisationService.replaceInjectablesWithSubmissionValues(customFileName, {
|
13
|
+
previousApprovalId: formSubmissionResult.previousFormSubmissionApprovalId,
|
14
|
+
form: formSubmissionResult.definition,
|
15
|
+
submission: formSubmissionResult.submission,
|
16
|
+
submissionId: formSubmissionResult.submissionId || '',
|
17
|
+
submissionTimestamp: formSubmissionResult.submissionTimestamp || '',
|
18
|
+
externalId: formSubmissionResult.externalId || undefined,
|
19
|
+
userProfile: authService.getUserProfile() || undefined,
|
20
|
+
task: (_c = formSubmissionResult.taskCompletion) === null || _c === void 0 ? void 0 : _c.task,
|
21
|
+
taskGroup: (_d = formSubmissionResult.taskCompletion) === null || _d === void 0 ? void 0 : _d.taskGroup,
|
22
|
+
taskGroupInstance: (_e = formSubmissionResult.taskCompletion) === null || _e === void 0 ? void 0 : _e.taskGroupInstance,
|
23
|
+
}).text;
|
24
|
+
}, [formSubmissionResult]);
|
25
|
+
const pdfFileNode = React.useMemo(() => !formSubmissionResult.downloadSubmissionPdfUrl ? undefined : (React.createElement(SingleFileDisplay, { attachment: {
|
26
|
+
filename: submissionPDFFileName,
|
27
|
+
signedUrl: formSubmissionResult.downloadSubmissionPdfUrl,
|
28
|
+
contentType: 'application/pdf',
|
29
|
+
}, className: "cypress-receipt-download-pdf-button" })), [formSubmissionResult.downloadSubmissionPdfUrl, submissionPDFFileName]);
|
16
30
|
if (!formSubmissionResult.attachmentsAccessToken && !pdfFileNode) {
|
17
31
|
return null;
|
18
32
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/downloadable-files/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/downloadable-files/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAEL,mBAAmB,EACnB,WAAW,GACZ,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAc,MAAM,kBAAkB,CAAA;AAE7D,SAAS,iBAAiB,CAAC,EACzB,oBAAoB,EACpB,OAAO,EACP,MAAM,GAYP;IACC,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;;QAC/C,MAAM,cAAc,GAClB,MAAA,MAAA,oBAAoB,CAAC,UAAU,CAAC,qBAAqB,0CAAE,gBAAgB,0CACnE,WAAW,CAAA;QACjB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,YAAY,CAAA;QACrB,CAAC;QAED,OAAO,mBAAmB,CAAC,sCAAsC,CAC/D,cAAc,EACd;YACE,kBAAkB,EAChB,oBAAoB,CAAC,gCAAgC;YACvD,IAAI,EAAE,oBAAoB,CAAC,UAAU;YACrC,UAAU,EAAE,oBAAoB,CAAC,UAAU;YAC3C,YAAY,EAAE,oBAAoB,CAAC,YAAY,IAAI,EAAE;YACrD,mBAAmB,EAAE,oBAAoB,CAAC,mBAAmB,IAAI,EAAE;YACnE,UAAU,EAAE,oBAAoB,CAAC,UAAU,IAAI,SAAS;YACxD,WAAW,EAAE,WAAW,CAAC,cAAc,EAAE,IAAI,SAAS;YACtD,IAAI,EAAE,MAAA,oBAAoB,CAAC,cAAc,0CAAE,IAAI;YAC/C,SAAS,EAAE,MAAA,oBAAoB,CAAC,cAAc,0CAAE,SAAS;YACzD,iBAAiB,EACf,MAAA,oBAAoB,CAAC,cAAc,0CAAE,iBAAiB;SACzD,CACF,CAAC,IAAI,CAAA;IACR,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAA;IAE1B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAC/B,GAAG,EAAE,CACH,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAC3D,oBAAC,iBAAiB,IAChB,UAAU,EAAE;YACV,QAAQ,EAAE,qBAAqB;YAC/B,SAAS,EAAE,oBAAoB,CAAC,wBAAwB;YACxD,WAAW,EAAE,iBAAiB;SAC/B,EACD,SAAS,EAAC,qCAAqC,GAC/C,CACH,EACH,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,qBAAqB,CAAC,CACvE,CAAA;IAED,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,6BAAK,SAAS,EAAC,gCAAgC;QAC7C,oBAAC,cAAc,IAAC,MAAM,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,MAAM;YACrC,OAAO,IAAI,4BAAI,SAAS,EAAC,SAAS,GAAG;YACrC,WAAW,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAC7D,oBAAC,cAAc,QAAE,WAAW,CAAkB,CAC/C,CAAC,CAAC,CAAC,CACF,oBAAC,yBAAyB,IACxB,oBAAoB,EAAE,oBAAoB,EAC1C,WAAW,EAAE,WAAW,GACxB,CACH,CACc,CACb,CACP,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,eAAe,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA","sourcesContent":["import * as React from 'react'\nimport {\n submissionService,\n localisationService,\n authService,\n} from '@oneblink/apps'\nimport {\n OnlyPDFDisplay,\n LoadAndDisplayAttachments,\n SingleFileDisplay,\n} from './resource-components'\nimport { LayoutProvider, LayoutType } from './LayoutProvider'\n\nfunction DownloadableFiles({\n formSubmissionResult,\n divider,\n layout,\n}: {\n /** The form submission with the pdf and/or attachments config on it. */\n formSubmissionResult: submissionService.FormSubmissionResult\n /** Whether to render a divider above the content. */\n divider?: boolean\n /**\n * The layout to use for the downloadable files. Options are `GRID` and\n * `LIST`. Defaults to `GRID`. `GRID` will render files next to each other at\n * some screen sizes. `LIST` will always render each file on a new line.\n */\n layout?: LayoutType\n}) {\n const submissionPDFFileName = React.useMemo(() => {\n const customFileName =\n formSubmissionResult.definition.postSubmissionReceipt?.allowPDFDownload\n ?.pdfFileName\n if (!customFileName) {\n return 'Submission'\n }\n\n return localisationService.replaceInjectablesWithSubmissionValues(\n customFileName,\n {\n previousApprovalId:\n formSubmissionResult.previousFormSubmissionApprovalId,\n form: formSubmissionResult.definition,\n submission: formSubmissionResult.submission,\n submissionId: formSubmissionResult.submissionId || '',\n submissionTimestamp: formSubmissionResult.submissionTimestamp || '',\n externalId: formSubmissionResult.externalId || undefined,\n userProfile: authService.getUserProfile() || undefined,\n task: formSubmissionResult.taskCompletion?.task,\n taskGroup: formSubmissionResult.taskCompletion?.taskGroup,\n taskGroupInstance:\n formSubmissionResult.taskCompletion?.taskGroupInstance,\n },\n ).text\n }, [formSubmissionResult])\n\n const pdfFileNode = React.useMemo(\n () =>\n !formSubmissionResult.downloadSubmissionPdfUrl ? undefined : (\n <SingleFileDisplay\n attachment={{\n filename: submissionPDFFileName,\n signedUrl: formSubmissionResult.downloadSubmissionPdfUrl,\n contentType: 'application/pdf',\n }}\n className=\"cypress-receipt-download-pdf-button\"\n />\n ),\n [formSubmissionResult.downloadSubmissionPdfUrl, submissionPDFFileName],\n )\n\n if (!formSubmissionResult.attachmentsAccessToken && !pdfFileNode) {\n return null\n }\n\n return (\n <div className=\"ob-downloadable-files__wrapper\">\n <LayoutProvider layout={layout ?? 'GRID'}>\n {divider && <hr className=\"divider\" />}\n {pdfFileNode && !formSubmissionResult.attachmentsAccessToken ? (\n <OnlyPDFDisplay>{pdfFileNode}</OnlyPDFDisplay>\n ) : (\n <LoadAndDisplayAttachments\n formSubmissionResult={formSubmissionResult}\n pdfFileNode={pdfFileNode}\n />\n )}\n </LayoutProvider>\n </div>\n )\n}\n\n/**\n * Component for rendering post-submission downloadable files such as PDFs and\n * attachments. The only thing required is the `formSubmissionResult`.\n *\n * It is also recommended to import the `css` from this library as well.\n *\n * ```js\n * import { DownloadableFiles } from '@oneblink/apps-react'\n * import '@oneblink/apps-react/dist/styles.css'\n * ```\n *\n * #### Example\n *\n * ```tsx\n * import React from 'react'\n * import ReactDOM from 'react-dom'\n * import { DownloadableFiles } from '@oneblink/apps-react'\n * import '@oneblink/apps-react/dist/styles.css'\n *\n * function SubmissionContainer() {\n *\n * const [state, setState] = useState(null)\n *\n * const handleSubmit = React.useCallback(async () => {\n * ...\n * setState(result)\n * }, [])\n *\n * return (\n * <div>\n * ...\n * {state && (\n * <DownloadableFiles formSubmissionResult={state} />\n * )}\n * </div>\n * )\n * }\n *\n * function App() {\n * return (\n * <IsOfflineContextProvider>\n * <SubmissionContainer />\n * </IsOfflineContextProvider>\n * )\n * }\n *\n * const root = document.getElementById('root')\n * if (root) {\n * ReactDOM.render(<App />, root)\n * }\n * ```\n *\n * @param props\n * @returns\n * @group Components\n */\nexport default React.memo(DownloadableFiles)\n"]}
|
package/dist/hooks/useDrafts.js
CHANGED
@@ -51,7 +51,7 @@ isDraftsEnabled,
|
|
51
51
|
children, }) {
|
52
52
|
const isMounted = useIsMounted();
|
53
53
|
const isOffline = useIsOffline();
|
54
|
-
const {
|
54
|
+
const { isUsingFormsKey } = useAuth();
|
55
55
|
const [syncState, setSyncState] = React.useState({
|
56
56
|
lastSyncTime: null,
|
57
57
|
isSyncing: false,
|
@@ -64,7 +64,7 @@ children, }) {
|
|
64
64
|
}));
|
65
65
|
}, []);
|
66
66
|
const syncDrafts = React.useCallback(async (abortSignal) => {
|
67
|
-
if (!isDraftsEnabled ||
|
67
|
+
if (!isDraftsEnabled || isUsingFormsKey) {
|
68
68
|
return;
|
69
69
|
}
|
70
70
|
if (isMounted.current) {
|
@@ -92,7 +92,7 @@ children, }) {
|
|
92
92
|
syncError: newError,
|
93
93
|
});
|
94
94
|
}
|
95
|
-
}, [formsAppId, isDraftsEnabled,
|
95
|
+
}, [formsAppId, isDraftsEnabled, isMounted, isUsingFormsKey]);
|
96
96
|
const [drafts, setDrafts] = React.useState(null);
|
97
97
|
const deleteDraft = React.useCallback((draftId) => {
|
98
98
|
return draftService.deleteDraft(draftId, formsAppId);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useDrafts.js","sourceRoot":"","sources":["../../src/hooks/useDrafts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAyBzC,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CACvC,SAAS,CACV,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,qBAAqB,CAAC;AACpC,yEAAyE;AACzE,UAAU;AACV;;;GAGG;AACH,eAAe;AACf,kCAAkC;AAClC,QAAQ,GAKT;IACC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,EAAE,
|
1
|
+
{"version":3,"file":"useDrafts.js","sourceRoot":"","sources":["../../src/hooks/useDrafts.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { draftService, submissionService } from '@oneblink/apps'\nimport useAuth from './useAuth'\nimport useIsMounted from './useIsMounted'\nimport useIsOffline from './useIsOffline'\n\n/** The value returned from `useDrafts()` hook */\nexport type DraftsContextValue = {\n /** `true` if drafts are currently loading for the first time. */\n isLoading: boolean\n /** The incomplete submissions that were saved for later */\n drafts: draftService.LocalFormSubmissionDraft[]\n /** `true` drafts are syncing with other devices */\n isSyncing: boolean\n /**\n * The date when the sync process last completed successfully, will be `null`\n * until it has completed the first time.\n */\n lastSyncTime: Date | null\n /** A function to trigger syncing of the drafts */\n syncDrafts: (abortSignal: AbortSignal | undefined) => Promise<void>\n /** An Error object if syncing drafts fails */\n syncError: Error | null\n /** A function to clear Error object from syncing drafts */\n clearSyncError: () => void\n /** A function to remove a draft */\n deleteDraft: (formSubmissionDraftId: string) => Promise<void>\n}\n\nconst DraftsContext = React.createContext<DraftsContextValue | undefined>(\n undefined,\n)\n\n/**\n * React Component that provides the context for the `useDrafts()` hook to be\n * used by components further down your component tree. **It should only be\n * included in your component tree once and ideally at the root of the\n * application.**\n *\n * #### Example\n *\n * ```jsx\n * import * as React from 'react'\n * import { DraftsContextProvider, useDrafts } from '@oneblink/apps-react'\n *\n * function Component() {\n * const draftsContext = useDrafts()\n * // use drafts here\n * }\n *\n * function App() {\n * return (\n * <DraftsContextProvider>\n * <Component />\n * </DraftsContextProvider>\n * )\n * }\n *\n * const root = document.getElementById('root')\n * if (root) {\n * ReactDOM.render(<App />, root)\n * }\n * ```\n *\n * @param props\n * @returns\n * @group Components\n */\nexport function DraftsContextProvider({\n /** The identifier for the forms app associated with the user's drafts */\n formsAppId,\n /**\n * `true` if drafts are enabled, otherwise `false`. Can be used for account\n * tier validation.\n */\n isDraftsEnabled,\n /** Your application components */\n children,\n}: {\n formsAppId: number\n isDraftsEnabled: boolean\n children: React.ReactNode\n}) {\n const isMounted = useIsMounted()\n const isOffline = useIsOffline()\n const { isUsingFormsKey } = useAuth()\n\n const [syncState, setSyncState] = React.useState<{\n lastSyncTime: Date | null\n isSyncing: boolean\n syncError: Error | null\n }>({\n lastSyncTime: null,\n isSyncing: false,\n syncError: null,\n })\n const clearSyncError = React.useCallback(() => {\n setSyncState((currentState) => ({\n ...currentState,\n syncError: null,\n }))\n }, [])\n const syncDrafts = React.useCallback(\n async (abortSignal: AbortSignal | undefined) => {\n if (!isDraftsEnabled || isUsingFormsKey) {\n return\n }\n\n if (isMounted.current) {\n setSyncState((currentState) => ({\n ...currentState,\n isSyncing: true,\n syncError: null,\n }))\n }\n\n let newError = null\n\n try {\n await draftService.syncDrafts({\n formsAppId,\n throwError: true,\n abortSignal,\n })\n } catch (error) {\n newError = error as Error\n }\n\n if (isMounted.current) {\n setSyncState({\n lastSyncTime: new Date(),\n isSyncing: false,\n syncError: newError,\n })\n }\n },\n [formsAppId, isDraftsEnabled, isMounted, isUsingFormsKey],\n )\n\n const [drafts, setDrafts] = React.useState<\n draftService.LocalFormSubmissionDraft[] | null\n >(null)\n\n const deleteDraft = React.useCallback(\n (draftId) => {\n return draftService.deleteDraft(draftId, formsAppId)\n },\n [formsAppId],\n )\n\n const value = React.useMemo<DraftsContextValue>(\n () => ({\n // Sync\n syncDrafts,\n isSyncing: syncState.isSyncing,\n syncError: syncState.syncError,\n lastSyncTime: syncState.lastSyncTime,\n clearSyncError,\n // Load\n isLoading: !drafts,\n drafts: drafts || [],\n // Delete,\n deleteDraft,\n }),\n [\n syncDrafts,\n syncState.isSyncing,\n syncState.syncError,\n syncState.lastSyncTime,\n clearSyncError,\n drafts,\n deleteDraft,\n ],\n )\n\n React.useEffect(() => {\n const abortController = new AbortController()\n const unregisterPendingQueueListener =\n submissionService.registerPendingQueueListener(() =>\n syncDrafts(undefined),\n )\n const unregisterDraftsListener =\n draftService.registerDraftsListener(setDrafts)\n return () => {\n abortController.abort()\n unregisterPendingQueueListener()\n unregisterDraftsListener()\n }\n }, [syncDrafts])\n\n React.useEffect(() => {\n if (!isOffline) {\n const abortController = new AbortController()\n syncDrafts(abortController.signal)\n return () => {\n abortController.abort()\n }\n }\n }, [isOffline, syncDrafts])\n\n return (\n <DraftsContext.Provider value={value}>{children}</DraftsContext.Provider>\n )\n}\n\n/**\n * React hook to get the context value for Drafts. Will throw an Error if used\n * outside of the `<DraftsContextProvider />` component.\n *\n * @returns\n * @group Hooks\n */\nexport default function useDrafts(): DraftsContextValue {\n const value = React.useContext(DraftsContext)\n if (!value) {\n throw new Error(\n `\"useDrafts\" hook was used outside of the \"<DraftsContextProvider />\" component's children.`,\n )\n }\n return value\n}\n"]}
|
@@ -9,7 +9,8 @@ type OptionsSetResult = {
|
|
9
9
|
};
|
10
10
|
export declare const FormElementOptionsContext: React.Context<OptionsSetResult[]>;
|
11
11
|
export declare const FreshdeskFieldsStateContext: React.Context<LoadDataState<FreshdeskTypes.FreshdeskField[]> | undefined>;
|
12
|
-
export declare function FormElementOptionsContextProvider({ children, }: {
|
12
|
+
export declare function FormElementOptionsContextProvider({ formIsReadOnly, children, }: {
|
13
|
+
formIsReadOnly: boolean;
|
13
14
|
children: React.ReactNode;
|
14
15
|
}): React.JSX.Element;
|
15
16
|
export declare function useLoadDynamicOptionsEffect(formElement: FormTypes.FormElementWithOptions, onUpdateFormElements: UpdateFormElementsHandler): void;
|
@@ -7,7 +7,7 @@ import useFormDefinition from './useFormDefinition';
|
|
7
7
|
import MaterialIcon from '../components/MaterialIcon';
|
8
8
|
export const FormElementOptionsContext = React.createContext([]);
|
9
9
|
export const FreshdeskFieldsStateContext = React.createContext(undefined);
|
10
|
-
export function FormElementOptionsContextProvider({ children, }) {
|
10
|
+
export function FormElementOptionsContextProvider({ formIsReadOnly, children, }) {
|
11
11
|
const form = useFormDefinition();
|
12
12
|
const hasFreshdeskFields = React.useMemo(() => {
|
13
13
|
return !!formElementsService.findFormElement(form.elements, (formElement) => {
|
@@ -17,11 +17,11 @@ export function FormElementOptionsContextProvider({ children, }) {
|
|
17
17
|
});
|
18
18
|
}, [form.elements]);
|
19
19
|
const loadFreshdeskFields = React.useCallback(async (abortSignal) => {
|
20
|
-
if (hasFreshdeskFields) {
|
20
|
+
if (hasFreshdeskFields && !formIsReadOnly) {
|
21
21
|
return await formService.getFreshdeskFields(form.id, abortSignal);
|
22
22
|
}
|
23
23
|
return [];
|
24
|
-
}, [form.id, hasFreshdeskFields]);
|
24
|
+
}, [form.id, hasFreshdeskFields, formIsReadOnly]);
|
25
25
|
const [freshdeskFieldsState] = useLoadDataState(loadFreshdeskFields);
|
26
26
|
const hasOptionsSets = React.useMemo(() => {
|
27
27
|
return !!formElementsService.findFormElement(form.elements, (formElement) => {
|
@@ -31,14 +31,14 @@ export function FormElementOptionsContextProvider({ children, }) {
|
|
31
31
|
});
|
32
32
|
}, [form.elements]);
|
33
33
|
const loadFormElementOptionsSets = React.useCallback(async (abortSignal) => {
|
34
|
-
if (!hasOptionsSets) {
|
34
|
+
if (!hasOptionsSets || formIsReadOnly) {
|
35
35
|
return [];
|
36
36
|
}
|
37
37
|
const formElementOptionsSets = await formService.getFormElementOptionsSets(form.organisationId, abortSignal);
|
38
38
|
return formElementOptionsSets.map((formElementOptionsSet) => ({
|
39
39
|
formElementOptionsSet,
|
40
40
|
}));
|
41
|
-
}, [form.organisationId, hasOptionsSets]);
|
41
|
+
}, [form.organisationId, hasOptionsSets, formIsReadOnly]);
|
42
42
|
const [optionsSetResultsState, , setOptionsSetResults] = useLoadDataState(loadFormElementOptionsSets);
|
43
43
|
const optionsSetResults = React.useMemo(() => {
|
44
44
|
if (optionsSetResultsState.status === 'SUCCESS') {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useDynamicOptionsLoaderState.js","sourceRoot":"","sources":["../../src/hooks/useDynamicOptionsLoaderState.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { formElementsService, typeCastService } from '@oneblink/sdk-core'\nimport {\n formService,\n localisationService,\n OneBlinkAppsError,\n} from '@oneblink/apps'\nimport { FormTypes, FreshdeskTypes } from '@oneblink/types'\nimport useLoadDataState, { LoadDataState } from './useLoadDataState'\nimport OneBlinkAppsErrorOriginalMessage from '../components/renderer/OneBlinkAppsErrorOriginalMessage'\nimport useFormDefinition from './useFormDefinition'\nimport MaterialIcon from '../components/MaterialIcon'\nimport { UpdateFormElementsHandler } from '../types/form'\n\ntype OptionsSetResult = {\n formElementOptionsSet: FormTypes.FormElementOptionSet\n result?: formService.FormElementOptionsSetResult\n}\n\nexport const FormElementOptionsContext = React.createContext<\n OptionsSetResult[]\n>([])\nexport const FreshdeskFieldsStateContext = React.createContext<\n LoadDataState<FreshdeskTypes.FreshdeskField[]> | undefined\n>(undefined)\n\nexport function FormElementOptionsContextProvider({\n children,\n}: {\n children: React.ReactNode\n}) {\n const form = useFormDefinition()\n\n const hasFreshdeskFields = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n return (\n formElementWithOptions?.optionsType === 'FRESHDESK_FIELD' &&\n !!formElementWithOptions.freshdeskFieldName\n )\n },\n )\n }, [form.elements])\n\n const loadFreshdeskFields = React.useCallback(\n async (abortSignal): Promise<FreshdeskTypes.FreshdeskField[]> => {\n if (hasFreshdeskFields) {\n return await formService.getFreshdeskFields(form.id, abortSignal)\n }\n return []\n },\n [form.id, hasFreshdeskFields],\n )\n\n const [freshdeskFieldsState] = useLoadDataState(loadFreshdeskFields)\n\n const hasOptionsSets = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n return (\n formElementWithOptions?.optionsType === 'DYNAMIC' &&\n !!formElementWithOptions.dynamicOptionSetId\n )\n },\n )\n }, [form.elements])\n\n const loadFormElementOptionsSets = React.useCallback(\n async (abortSignal): Promise<OptionsSetResult[]> => {\n if (!hasOptionsSets) {\n return []\n }\n const formElementOptionsSets =\n await formService.getFormElementOptionsSets(\n form.organisationId,\n abortSignal,\n )\n return formElementOptionsSets.map<OptionsSetResult>(\n (formElementOptionsSet) => ({\n formElementOptionsSet,\n }),\n )\n },\n [form.organisationId, hasOptionsSets],\n )\n\n const [optionsSetResultsState, , setOptionsSetResults] = useLoadDataState(\n loadFormElementOptionsSets,\n )\n\n const optionsSetResults = React.useMemo(() => {\n if (optionsSetResultsState.status === 'SUCCESS') {\n return optionsSetResultsState.result\n }\n return []\n }, [optionsSetResultsState])\n\n const error = React.useMemo<OneBlinkAppsError | undefined>(() => {\n if (freshdeskFieldsState.status === 'ERROR') {\n return freshdeskFieldsState.error instanceof OneBlinkAppsError\n ? freshdeskFieldsState.error\n : new OneBlinkAppsError('An unknown error has occurred', {\n originalError: freshdeskFieldsState.error,\n })\n }\n if (optionsSetResultsState.status === 'ERROR') {\n return optionsSetResultsState.error instanceof OneBlinkAppsError\n ? optionsSetResultsState.error\n : new OneBlinkAppsError('An unknown error has occurred', {\n originalError: optionsSetResultsState.error,\n })\n }\n for (const optionsSetResult of optionsSetResults) {\n if (optionsSetResult.result?.type === 'ERROR') {\n return optionsSetResult.result.error\n }\n }\n }, [freshdeskFieldsState, optionsSetResults, optionsSetResultsState])\n\n if (error) {\n return (\n <>\n <div className=\"has-text-centered\">\n <MaterialIcon className=\"has-text-warning icon-x-large\">\n error\n </MaterialIcon>\n <h3 className=\"title is-3\">{error.title}</h3>\n <p>{error.message}</p>\n <p className=\"has-text-grey\">\n {localisationService.formatDatetimeLong(new Date())}\n </p>\n </div>\n\n <OneBlinkAppsErrorOriginalMessage error={error.originalError} />\n </>\n )\n }\n\n return (\n <>\n {optionsSetResults.map((optionsSetResult) => (\n <React.Fragment key={optionsSetResult.formElementOptionsSet.id}>\n <LoadOptionsSet\n optionsSetResult={optionsSetResult}\n form={form}\n setOptionsSetResults={setOptionsSetResults}\n />\n </React.Fragment>\n ))}\n <FormElementOptionsContext.Provider value={optionsSetResults}>\n <FreshdeskFieldsStateContext.Provider value={freshdeskFieldsState}>\n {children}\n </FreshdeskFieldsStateContext.Provider>\n </FormElementOptionsContext.Provider>\n </>\n )\n}\n\nconst LoadOptionsSet = React.memo(function LoadOptionsSet({\n form,\n optionsSetResult,\n setOptionsSetResults,\n}: {\n form: FormTypes.Form\n optionsSetResult: OptionsSetResult\n setOptionsSetResults: React.Dispatch<React.SetStateAction<OptionsSetResult[]>>\n}) {\n const hasOptionsSet = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n\n return (\n formElementWithOptions?.optionsType === 'DYNAMIC' &&\n !formElementWithOptions.options?.length &&\n formElementWithOptions.dynamicOptionSetId ===\n optionsSetResult.formElementOptionsSet.id\n )\n },\n )\n }, [form.elements, optionsSetResult.formElementOptionsSet.id])\n\n const setOptionsSetResult = React.useCallback(\n (result: OptionsSetResult['result']) => {\n setOptionsSetResults((currentOptionsSetResults) => {\n return currentOptionsSetResults.map((currentOptionsSetResult) => {\n if (\n currentOptionsSetResult.formElementOptionsSet.id ===\n optionsSetResult.formElementOptionsSet.id\n ) {\n return {\n ...optionsSetResult,\n result,\n }\n } else {\n return currentOptionsSetResult\n }\n })\n })\n },\n [optionsSetResult, setOptionsSetResults],\n )\n\n React.useEffect(() => {\n if (!hasOptionsSet || optionsSetResult.result) {\n return\n }\n\n const abortController = new AbortController()\n\n ;(async () => {\n try {\n const result = await formService.getFormElementOptionsSetOptions(\n optionsSetResult.formElementOptionsSet,\n {\n formId: form.id,\n formsAppEnvironmentId: form.formsAppEnvironmentId,\n },\n abortController.signal,\n )\n if (!abortController.signal.aborted) {\n setOptionsSetResult(result)\n }\n } catch (error) {\n if (!abortController.signal.aborted) {\n setOptionsSetResult({\n type: 'ERROR',\n error: new OneBlinkAppsError(\n error instanceof Error\n ? error.message\n : 'An unknown error has occurred',\n {\n originalError: error instanceof Error ? error : undefined,\n },\n ),\n })\n }\n }\n })()\n\n return () => {\n abortController.abort()\n }\n }, [\n form.formsAppEnvironmentId,\n form.id,\n hasOptionsSet,\n optionsSetResult.formElementOptionsSet,\n optionsSetResult.result,\n setOptionsSetResult,\n ])\n\n return <></>\n})\n\nexport function useLoadDynamicOptionsEffect(\n formElement: FormTypes.FormElementWithOptions,\n onUpdateFormElements: UpdateFormElementsHandler,\n) {\n const form = useFormDefinition()\n const optionsSetResults = React.useContext(FormElementOptionsContext)\n const freshdeskFieldsState = React.useContext(FreshdeskFieldsStateContext)\n\n const freshdeskFieldOptionsResult = React.useMemo(() => {\n if (\n freshdeskFieldsState?.status === 'SUCCESS' &&\n // We can stop here if the options are not coming from freshdesk\n formElement.optionsType === 'FRESHDESK_FIELD' &&\n // If the element already has options, we don't need to set them again\n !Array.isArray(formElement.options)\n ) {\n return formService.parseFreshdeskFieldOptions(\n freshdeskFieldsState.result,\n formElement,\n )\n }\n }, [formElement, freshdeskFieldsState])\n\n const optionsSetResult = React.useMemo<OptionsSetResult | undefined>(() => {\n if (\n // We can stop here if the options are not dynamic\n formElement.optionsType !== 'DYNAMIC' ||\n // If the element already has options, we don't need to set them again\n Array.isArray(formElement.options)\n ) {\n return\n }\n return optionsSetResults.find(\n (optionsSetResult) =>\n optionsSetResult.formElementOptionsSet.id ===\n formElement.dynamicOptionSetId && optionsSetResult.result,\n )\n }, [\n formElement.dynamicOptionSetId,\n formElement.options,\n formElement.optionsType,\n optionsSetResults,\n ])\n\n React.useEffect(() => {\n if (!optionsSetResult && !freshdeskFieldOptionsResult) {\n return\n }\n\n onUpdateFormElements((formElements) => {\n return formElements.map((existingFormElement) => {\n if (existingFormElement.id === formElement.id) {\n switch (optionsSetResult?.result?.type) {\n case 'SEARCH': {\n if (formElement.type === 'autocomplete') {\n return {\n ...existingFormElement,\n optionsType: 'SEARCH',\n searchUrl: optionsSetResult.result.url,\n searchQuerystringParameter:\n optionsSetResult.result.searchQuerystringParameter,\n }\n }\n break\n }\n case 'OPTIONS': {\n return formService.parseFormElementOptions(\n form,\n formElement,\n optionsSetResult.result.options,\n )\n }\n }\n\n if (freshdeskFieldOptionsResult) {\n return {\n ...existingFormElement,\n options:\n freshdeskFieldOptionsResult.type === 'OPTIONS'\n ? freshdeskFieldOptionsResult.options\n : [],\n }\n }\n }\n\n return existingFormElement\n })\n })\n }, [\n form,\n formElement,\n freshdeskFieldOptionsResult,\n onUpdateFormElements,\n optionsSetResult,\n ])\n}\n"]}
|
1
|
+
{"version":3,"file":"useDynamicOptionsLoaderState.js","sourceRoot":"","sources":["../../src/hooks/useDynamicOptionsLoaderState.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { formElementsService, typeCastService } from '@oneblink/sdk-core'\nimport {\n formService,\n localisationService,\n OneBlinkAppsError,\n} from '@oneblink/apps'\nimport { FormTypes, FreshdeskTypes } from '@oneblink/types'\nimport useLoadDataState, { LoadDataState } from './useLoadDataState'\nimport OneBlinkAppsErrorOriginalMessage from '../components/renderer/OneBlinkAppsErrorOriginalMessage'\nimport useFormDefinition from './useFormDefinition'\nimport MaterialIcon from '../components/MaterialIcon'\nimport { UpdateFormElementsHandler } from '../types/form'\n\ntype OptionsSetResult = {\n formElementOptionsSet: FormTypes.FormElementOptionSet\n result?: formService.FormElementOptionsSetResult\n}\n\nexport const FormElementOptionsContext = React.createContext<\n OptionsSetResult[]\n>([])\nexport const FreshdeskFieldsStateContext = React.createContext<\n LoadDataState<FreshdeskTypes.FreshdeskField[]> | undefined\n>(undefined)\n\nexport function FormElementOptionsContextProvider({\n formIsReadOnly,\n children,\n}: {\n formIsReadOnly: boolean\n children: React.ReactNode\n}) {\n const form = useFormDefinition()\n\n const hasFreshdeskFields = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n return (\n formElementWithOptions?.optionsType === 'FRESHDESK_FIELD' &&\n !!formElementWithOptions.freshdeskFieldName\n )\n },\n )\n }, [form.elements])\n\n const loadFreshdeskFields = React.useCallback(\n async (abortSignal): Promise<FreshdeskTypes.FreshdeskField[]> => {\n if (hasFreshdeskFields && !formIsReadOnly) {\n return await formService.getFreshdeskFields(form.id, abortSignal)\n }\n return []\n },\n [form.id, hasFreshdeskFields, formIsReadOnly],\n )\n\n const [freshdeskFieldsState] = useLoadDataState(loadFreshdeskFields)\n\n const hasOptionsSets = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n return (\n formElementWithOptions?.optionsType === 'DYNAMIC' &&\n !!formElementWithOptions.dynamicOptionSetId\n )\n },\n )\n }, [form.elements])\n\n const loadFormElementOptionsSets = React.useCallback(\n async (abortSignal): Promise<OptionsSetResult[]> => {\n if (!hasOptionsSets || formIsReadOnly) {\n return []\n }\n const formElementOptionsSets =\n await formService.getFormElementOptionsSets(\n form.organisationId,\n abortSignal,\n )\n return formElementOptionsSets.map<OptionsSetResult>(\n (formElementOptionsSet) => ({\n formElementOptionsSet,\n }),\n )\n },\n [form.organisationId, hasOptionsSets, formIsReadOnly],\n )\n\n const [optionsSetResultsState, , setOptionsSetResults] = useLoadDataState(\n loadFormElementOptionsSets,\n )\n\n const optionsSetResults = React.useMemo(() => {\n if (optionsSetResultsState.status === 'SUCCESS') {\n return optionsSetResultsState.result\n }\n return []\n }, [optionsSetResultsState])\n\n const error = React.useMemo<OneBlinkAppsError | undefined>(() => {\n if (freshdeskFieldsState.status === 'ERROR') {\n return freshdeskFieldsState.error instanceof OneBlinkAppsError\n ? freshdeskFieldsState.error\n : new OneBlinkAppsError('An unknown error has occurred', {\n originalError: freshdeskFieldsState.error,\n })\n }\n if (optionsSetResultsState.status === 'ERROR') {\n return optionsSetResultsState.error instanceof OneBlinkAppsError\n ? optionsSetResultsState.error\n : new OneBlinkAppsError('An unknown error has occurred', {\n originalError: optionsSetResultsState.error,\n })\n }\n for (const optionsSetResult of optionsSetResults) {\n if (optionsSetResult.result?.type === 'ERROR') {\n return optionsSetResult.result.error\n }\n }\n }, [freshdeskFieldsState, optionsSetResults, optionsSetResultsState])\n\n if (error) {\n return (\n <>\n <div className=\"has-text-centered\">\n <MaterialIcon className=\"has-text-warning icon-x-large\">\n error\n </MaterialIcon>\n <h3 className=\"title is-3\">{error.title}</h3>\n <p>{error.message}</p>\n <p className=\"has-text-grey\">\n {localisationService.formatDatetimeLong(new Date())}\n </p>\n </div>\n\n <OneBlinkAppsErrorOriginalMessage error={error.originalError} />\n </>\n )\n }\n\n return (\n <>\n {optionsSetResults.map((optionsSetResult) => (\n <React.Fragment key={optionsSetResult.formElementOptionsSet.id}>\n <LoadOptionsSet\n optionsSetResult={optionsSetResult}\n form={form}\n setOptionsSetResults={setOptionsSetResults}\n />\n </React.Fragment>\n ))}\n <FormElementOptionsContext.Provider value={optionsSetResults}>\n <FreshdeskFieldsStateContext.Provider value={freshdeskFieldsState}>\n {children}\n </FreshdeskFieldsStateContext.Provider>\n </FormElementOptionsContext.Provider>\n </>\n )\n}\n\nconst LoadOptionsSet = React.memo(function LoadOptionsSet({\n form,\n optionsSetResult,\n setOptionsSetResults,\n}: {\n form: FormTypes.Form\n optionsSetResult: OptionsSetResult\n setOptionsSetResults: React.Dispatch<React.SetStateAction<OptionsSetResult[]>>\n}) {\n const hasOptionsSet = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n\n return (\n formElementWithOptions?.optionsType === 'DYNAMIC' &&\n !formElementWithOptions.options?.length &&\n formElementWithOptions.dynamicOptionSetId ===\n optionsSetResult.formElementOptionsSet.id\n )\n },\n )\n }, [form.elements, optionsSetResult.formElementOptionsSet.id])\n\n const setOptionsSetResult = React.useCallback(\n (result: OptionsSetResult['result']) => {\n setOptionsSetResults((currentOptionsSetResults) => {\n return currentOptionsSetResults.map((currentOptionsSetResult) => {\n if (\n currentOptionsSetResult.formElementOptionsSet.id ===\n optionsSetResult.formElementOptionsSet.id\n ) {\n return {\n ...optionsSetResult,\n result,\n }\n } else {\n return currentOptionsSetResult\n }\n })\n })\n },\n [optionsSetResult, setOptionsSetResults],\n )\n\n React.useEffect(() => {\n if (!hasOptionsSet || optionsSetResult.result) {\n return\n }\n\n const abortController = new AbortController()\n\n ;(async () => {\n try {\n const result = await formService.getFormElementOptionsSetOptions(\n optionsSetResult.formElementOptionsSet,\n {\n formId: form.id,\n formsAppEnvironmentId: form.formsAppEnvironmentId,\n },\n abortController.signal,\n )\n if (!abortController.signal.aborted) {\n setOptionsSetResult(result)\n }\n } catch (error) {\n if (!abortController.signal.aborted) {\n setOptionsSetResult({\n type: 'ERROR',\n error: new OneBlinkAppsError(\n error instanceof Error\n ? error.message\n : 'An unknown error has occurred',\n {\n originalError: error instanceof Error ? error : undefined,\n },\n ),\n })\n }\n }\n })()\n\n return () => {\n abortController.abort()\n }\n }, [\n form.formsAppEnvironmentId,\n form.id,\n hasOptionsSet,\n optionsSetResult.formElementOptionsSet,\n optionsSetResult.result,\n setOptionsSetResult,\n ])\n\n return <></>\n})\n\nexport function useLoadDynamicOptionsEffect(\n formElement: FormTypes.FormElementWithOptions,\n onUpdateFormElements: UpdateFormElementsHandler,\n) {\n const form = useFormDefinition()\n const optionsSetResults = React.useContext(FormElementOptionsContext)\n const freshdeskFieldsState = React.useContext(FreshdeskFieldsStateContext)\n\n const freshdeskFieldOptionsResult = React.useMemo(() => {\n if (\n freshdeskFieldsState?.status === 'SUCCESS' &&\n // We can stop here if the options are not coming from freshdesk\n formElement.optionsType === 'FRESHDESK_FIELD' &&\n // If the element already has options, we don't need to set them again\n !Array.isArray(formElement.options)\n ) {\n return formService.parseFreshdeskFieldOptions(\n freshdeskFieldsState.result,\n formElement,\n )\n }\n }, [formElement, freshdeskFieldsState])\n\n const optionsSetResult = React.useMemo<OptionsSetResult | undefined>(() => {\n if (\n // We can stop here if the options are not dynamic\n formElement.optionsType !== 'DYNAMIC' ||\n // If the element already has options, we don't need to set them again\n Array.isArray(formElement.options)\n ) {\n return\n }\n return optionsSetResults.find(\n (optionsSetResult) =>\n optionsSetResult.formElementOptionsSet.id ===\n formElement.dynamicOptionSetId && optionsSetResult.result,\n )\n }, [\n formElement.dynamicOptionSetId,\n formElement.options,\n formElement.optionsType,\n optionsSetResults,\n ])\n\n React.useEffect(() => {\n if (!optionsSetResult && !freshdeskFieldOptionsResult) {\n return\n }\n\n onUpdateFormElements((formElements) => {\n return formElements.map((existingFormElement) => {\n if (existingFormElement.id === formElement.id) {\n switch (optionsSetResult?.result?.type) {\n case 'SEARCH': {\n if (formElement.type === 'autocomplete') {\n return {\n ...existingFormElement,\n optionsType: 'SEARCH',\n searchUrl: optionsSetResult.result.url,\n searchQuerystringParameter:\n optionsSetResult.result.searchQuerystringParameter,\n }\n }\n break\n }\n case 'OPTIONS': {\n return formService.parseFormElementOptions(\n form,\n formElement,\n optionsSetResult.result.options,\n )\n }\n }\n\n if (freshdeskFieldOptionsResult) {\n return {\n ...existingFormElement,\n options:\n freshdeskFieldOptionsResult.type === 'OPTIONS'\n ? freshdeskFieldOptionsResult.options\n : [],\n }\n }\n }\n\n return existingFormElement\n })\n })\n }, [\n form,\n formElement,\n freshdeskFieldOptionsResult,\n onUpdateFormElements,\n optionsSetResult,\n ])\n}\n"]}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@oneblink/apps-react",
|
3
3
|
"description": "Helper functions for OneBlink apps in ReactJS.",
|
4
|
-
"version": "8.
|
4
|
+
"version": "8.11.0-beta.1",
|
5
5
|
"author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
|
6
6
|
"bugs": {
|
7
7
|
"url": "https://github.com/oneblink/apps-react/issues"
|
@@ -48,7 +48,7 @@
|
|
48
48
|
"@mui/lab": "^5.0.0-alpha.152",
|
49
49
|
"@mui/material": "^5.15.6",
|
50
50
|
"@mui/x-date-pickers": "^6.20.2",
|
51
|
-
"@oneblink/apps": "^23.
|
51
|
+
"@oneblink/apps": "^23.4.0-beta.1",
|
52
52
|
"@oneblink/release-cli": "^3.4.0-beta.1",
|
53
53
|
"@oneblink/types": "github:oneblink/types",
|
54
54
|
"@types/blueimp-load-image": "^5.16.6",
|