@oneblink/apps-react 8.6.0-beta.4 → 8.6.0-beta.5

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.
@@ -496,6 +496,7 @@ function OneBlinkFormBase({ googleMapsApiKey, abnLookupAuthenticationGuid, captc
496
496
  submission,
497
497
  backgroundUpload: continueWhilstAttachmentsAreUploading,
498
498
  lastElementUpdated,
499
+ sectionState,
499
500
  });
500
501
  }
501
502
  }, [
@@ -507,6 +508,7 @@ function OneBlinkFormBase({ googleMapsApiKey, abnLookupAuthenticationGuid, captc
507
508
  onSaveDraft,
508
509
  checkBsbAreValidating,
509
510
  lastElementUpdated,
511
+ sectionState,
510
512
  ]);
511
513
  const handleContinueWithAttachments = React.useCallback((e) => {
512
514
  setPromptUploadingAttachments(false);
@@ -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 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'\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 /** 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 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 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 })\n }\n },\n [\n allowNavigation,\n checkAttachmentsCanBeSubmitted,\n definition,\n disabled,\n getCurrentSubmissionData,\n onSaveDraft,\n checkBsbAreValidating,\n lastElementUpdated,\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 }) => {\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 setUnsavedChangesState((current) => ({\n ...current,\n isDirty: true,\n }))\n if (element.type === '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) {\n // Update state of the section\n newSectionState = currentSectionState.map((section, index) =>\n index === existingSectionIndex\n ? {\n ...section,\n state:\n section.state === 'COLLAPSED' ? 'EXPANDED' : '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 }\n // dont update the last element updated for elements the user cannot set the value of\n else if (element.type === 'summary' || element.type === '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 } else {\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 }\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 setHasResumed(true)\n }\n }, [\n lastElementUpdated,\n hasResumed,\n lastElementUpdatedPage,\n lastElementUpdatedExistsOnForm,\n setPageId,\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 <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 </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":"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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 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'\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 /** 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 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 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 }) => {\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 setUnsavedChangesState((current) => ({\n ...current,\n isDirty: true,\n }))\n if (element.type === '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) {\n // Update state of the section\n newSectionState = currentSectionState.map((section, index) =>\n index === existingSectionIndex\n ? {\n ...section,\n state:\n section.state === 'COLLAPSED' ? 'EXPANDED' : '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 }\n // dont update the last element updated for elements the user cannot set the value of\n else if (element.type === 'summary' || element.type === '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 } else {\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 }\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 setHasResumed(true)\n }\n }, [\n lastElementUpdated,\n hasResumed,\n lastElementUpdatedPage,\n lastElementUpdatedExistsOnForm,\n setPageId,\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 <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 </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"]}
@@ -57,16 +57,11 @@ const validationExtensions = {
57
57
  },
58
58
  nestedElements(value, { formElement, formElements, formElementsConditionallyShown, executedLookups, captchaType, isOffline, }) {
59
59
  if (formElements) {
60
- const executedLookupsValue = executedLookups !== undefined &&
60
+ const nestedExecutedLookupsValue = executedLookups !== undefined &&
61
61
  typeof executedLookups !== 'boolean' &&
62
62
  !Array.isArray(executedLookups)
63
63
  ? executedLookups[formElement.name]
64
64
  : {};
65
- const nestedExecutedLookups = executedLookupsValue !== undefined &&
66
- typeof executedLookupsValue !== 'boolean' &&
67
- !Array.isArray(executedLookupsValue)
68
- ? executedLookupsValue[formElement.name]
69
- : {};
70
65
  const formElementConditionallyShown = formElementsConditionallyShown === null || formElementsConditionallyShown === void 0 ? void 0 : formElementsConditionallyShown[formElement.name];
71
66
  const errors = validateSubmission({
72
67
  elements: formElements,
@@ -74,9 +69,9 @@ const validationExtensions = {
74
69
  formElementsConditionallyShown: (formElementConditionallyShown === null || formElementConditionallyShown === void 0 ? void 0 : formElementConditionallyShown.type) === 'formElements'
75
70
  ? formElementConditionallyShown.formElements
76
71
  : undefined,
77
- executedLookups: typeof nestedExecutedLookups !== 'boolean' &&
78
- !Array.isArray(nestedExecutedLookups)
79
- ? nestedExecutedLookups
72
+ executedLookups: typeof nestedExecutedLookupsValue !== 'boolean' &&
73
+ !Array.isArray(nestedExecutedLookupsValue)
74
+ ? nestedExecutedLookupsValue
80
75
  : {},
81
76
  captchaType,
82
77
  isOffline,
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../../src/services/form-validation/extensions.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { FormElementBinaryStorageValue } from '../../types/attachments'\nimport {\n CaptchaType,\n ExecutedLookups,\n FormElementsConditionallyShown,\n} from '../../types/form'\nimport validateSubmission from './validateSubmission'\nimport {\n generateLookupValidationMessage,\n getInvalidAttachment,\n validateAttachments,\n} from './validators'\nimport { validators } from './validate-dot-js'\nimport { Value as FormElementComplianceValue } from '../../form-elements/FormElementCompliance'\n\nconst validationExtensions = {\n lookups({\n executedLookups,\n formElement,\n }: {\n formElement: FormTypes.LookupFormElement & FormTypes.FormElementRequired\n executedLookups: ExecutedLookups\n }): string[] {\n if (!formElement.isDataLookup && !formElement.isElementLookup) {\n return []\n }\n\n // Lookups must only be executed on required form elements\n if (formElement && !formElement.required) {\n return []\n }\n\n const elementExecutedLookups = executedLookups?.[formElement.name]\n if (elementExecutedLookups === true) {\n return []\n }\n\n return [generateLookupValidationMessage(formElement.lookupButton)]\n },\n\n presence(\n value: unknown,\n { required, requiredMessage }: FormTypes.FormElementRequired,\n message: string,\n ) {\n if (required) {\n return validators.presence(value, {\n message: requiredMessage || message,\n })\n }\n return []\n },\n\n regex<DefaultValue>(\n value: unknown,\n formElement: FormTypes.FormElementWithInput<DefaultValue>,\n ) {\n if (formElement.regexPattern) {\n return validators.regexValidation(value, {\n pattern: formElement.regexPattern,\n flags: formElement.regexFlags,\n message: formElement.regexMessage,\n })\n }\n return []\n },\n\n attachment(value: unknown): string[] {\n const attachmentError = getInvalidAttachment(value)\n if (attachmentError) {\n return [attachmentError.errorMessage]\n }\n return []\n },\n\n attachments(\n value:\n | FormElementBinaryStorageValue[]\n | FormElementComplianceValue\n | undefined,\n ) {\n if (Array.isArray(value)) {\n return validateAttachments(value)\n }\n return validateAttachments(\n value?.files as FormElementBinaryStorageValue[] | undefined,\n )\n },\n\n numberRegex(value: unknown, formElement: FormTypes.NumberElement) {\n if (\n formElement.regexPattern &&\n typeof value === 'number' &&\n !Number.isNaN(value)\n ) {\n return validationExtensions.regex(value.toString(), formElement)\n }\n return []\n },\n\n nestedElements(\n value: unknown,\n {\n formElement,\n formElements,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n }: {\n formElement: FormTypes.FormElementWithName\n formElements: FormTypes.FormElementWithName[] | undefined\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n executedLookups: ExecutedLookups\n captchaType: CaptchaType\n isOffline: boolean\n },\n ) {\n if (formElements) {\n const executedLookupsValue =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups)\n ? executedLookups[formElement.name]\n : {}\n const nestedExecutedLookups =\n executedLookupsValue !== undefined &&\n typeof executedLookupsValue !== 'boolean' &&\n !Array.isArray(executedLookupsValue)\n ? executedLookupsValue[formElement.name]\n : {}\n const formElementConditionallyShown =\n formElementsConditionallyShown?.[formElement.name]\n const errors = validateSubmission({\n elements: formElements as FormTypes.FormElementWithName[],\n submission: value as SubmissionTypes.S3SubmissionData['submission'],\n formElementsConditionallyShown:\n formElementConditionallyShown?.type === 'formElements'\n ? formElementConditionallyShown.formElements\n : undefined,\n executedLookups:\n typeof nestedExecutedLookups !== 'boolean' &&\n !Array.isArray(nestedExecutedLookups)\n ? nestedExecutedLookups\n : {},\n captchaType,\n isOffline,\n })\n if (errors) {\n return {\n type: 'formElements' as const,\n formElements: errors,\n }\n }\n }\n },\n\n offline(isOffline: boolean, message: string) {\n return isOffline ? [message] : []\n },\n}\n\nexport default validationExtensions\n"]}
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../../src/services/form-validation/extensions.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { FormElementBinaryStorageValue } from '../../types/attachments'\nimport {\n CaptchaType,\n ExecutedLookups,\n FormElementsConditionallyShown,\n} from '../../types/form'\nimport validateSubmission from './validateSubmission'\nimport {\n generateLookupValidationMessage,\n getInvalidAttachment,\n validateAttachments,\n} from './validators'\nimport { validators } from './validate-dot-js'\nimport { Value as FormElementComplianceValue } from '../../form-elements/FormElementCompliance'\n\nconst validationExtensions = {\n lookups({\n executedLookups,\n formElement,\n }: {\n formElement: FormTypes.LookupFormElement & FormTypes.FormElementRequired\n executedLookups: ExecutedLookups\n }): string[] {\n if (!formElement.isDataLookup && !formElement.isElementLookup) {\n return []\n }\n\n // Lookups must only be executed on required form elements\n if (formElement && !formElement.required) {\n return []\n }\n\n const elementExecutedLookups = executedLookups?.[formElement.name]\n if (elementExecutedLookups === true) {\n return []\n }\n\n return [generateLookupValidationMessage(formElement.lookupButton)]\n },\n\n presence(\n value: unknown,\n { required, requiredMessage }: FormTypes.FormElementRequired,\n message: string,\n ) {\n if (required) {\n return validators.presence(value, {\n message: requiredMessage || message,\n })\n }\n return []\n },\n\n regex<DefaultValue>(\n value: unknown,\n formElement: FormTypes.FormElementWithInput<DefaultValue>,\n ) {\n if (formElement.regexPattern) {\n return validators.regexValidation(value, {\n pattern: formElement.regexPattern,\n flags: formElement.regexFlags,\n message: formElement.regexMessage,\n })\n }\n return []\n },\n\n attachment(value: unknown): string[] {\n const attachmentError = getInvalidAttachment(value)\n if (attachmentError) {\n return [attachmentError.errorMessage]\n }\n return []\n },\n\n attachments(\n value:\n | FormElementBinaryStorageValue[]\n | FormElementComplianceValue\n | undefined,\n ) {\n if (Array.isArray(value)) {\n return validateAttachments(value)\n }\n return validateAttachments(\n value?.files as FormElementBinaryStorageValue[] | undefined,\n )\n },\n\n numberRegex(value: unknown, formElement: FormTypes.NumberElement) {\n if (\n formElement.regexPattern &&\n typeof value === 'number' &&\n !Number.isNaN(value)\n ) {\n return validationExtensions.regex(value.toString(), formElement)\n }\n return []\n },\n\n nestedElements(\n value: unknown,\n {\n formElement,\n formElements,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n }: {\n formElement: FormTypes.FormElementWithName\n formElements: FormTypes.FormElementWithName[] | undefined\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n executedLookups: ExecutedLookups\n captchaType: CaptchaType\n isOffline: boolean\n },\n ) {\n if (formElements) {\n const nestedExecutedLookupsValue =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups)\n ? executedLookups[formElement.name]\n : {}\n\n const formElementConditionallyShown =\n formElementsConditionallyShown?.[formElement.name]\n const errors = validateSubmission({\n elements: formElements as FormTypes.FormElementWithName[],\n submission: value as SubmissionTypes.S3SubmissionData['submission'],\n formElementsConditionallyShown:\n formElementConditionallyShown?.type === 'formElements'\n ? formElementConditionallyShown.formElements\n : undefined,\n executedLookups:\n typeof nestedExecutedLookupsValue !== 'boolean' &&\n !Array.isArray(nestedExecutedLookupsValue)\n ? nestedExecutedLookupsValue\n : {},\n captchaType,\n isOffline,\n })\n if (errors) {\n return {\n type: 'formElements' as const,\n formElements: errors,\n }\n }\n }\n },\n\n offline(isOffline: boolean, message: string) {\n return isOffline ? [message] : []\n },\n}\n\nexport default validationExtensions\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.6.0-beta.4",
4
+ "version": "8.6.0-beta.5",
5
5
  "author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
6
6
  "bugs": {
7
7
  "url": "https://github.com/oneblink/apps-react/issues"
@@ -47,7 +47,7 @@
47
47
  "@mui/lab": "^5.0.0-alpha.152",
48
48
  "@mui/material": "^5.15.6",
49
49
  "@mui/x-date-pickers": "^6.20.2",
50
- "@oneblink/apps": "^22.2.0-beta.3",
50
+ "@oneblink/apps": "^23.0.0-beta.3",
51
51
  "@oneblink/release-cli": "^3.3.1-beta.4",
52
52
  "@oneblink/types": "github:oneblink/types",
53
53
  "@types/blueimp-load-image": "^5.16.6",