@oneblink/apps-react 5.12.2-beta.3 → 5.12.2-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.
- package/dist/OneBlinkFormBase.js +16 -2
- package/dist/OneBlinkFormBase.js.map +1 -1
- package/dist/components/renderer/OneBlinkFormElements.js +1 -1
- package/dist/components/renderer/OneBlinkFormElements.js.map +1 -1
- package/dist/components/renderer/PageFormElements.d.ts +3 -2
- package/dist/components/renderer/PageFormElements.js +3 -3
- package/dist/components/renderer/PageFormElements.js.map +1 -1
- package/dist/form-elements/FormElementCaptcha.d.ts +2 -1
- package/dist/form-elements/FormElementCaptcha.js +11 -2
- package/dist/form-elements/FormElementCaptcha.js.map +1 -1
- package/package.json +1 -1
    
        package/dist/OneBlinkFormBase.js
    CHANGED
    
    | @@ -272,6 +272,18 @@ function OneBlinkFormBase({ googleMapsApiKey, abnLookupAuthenticationGuid, captc | |
| 272 272 | 
             
                    }
         | 
| 273 273 | 
             
                    return true;
         | 
| 274 274 | 
             
                }, [definition]);
         | 
| 275 | 
            +
                const resetRecaptchas = React.useCallback(() => {
         | 
| 276 | 
            +
                    const updatedModel = { ...submission };
         | 
| 277 | 
            +
                    formElementsService.forEachFormElement(definition.elements, (element) => {
         | 
| 278 | 
            +
                        if (element.type === 'captcha') {
         | 
| 279 | 
            +
                            updatedModel[element.name] = undefined;
         | 
| 280 | 
            +
                        }
         | 
| 281 | 
            +
                    });
         | 
| 282 | 
            +
                    setHasAttemptedSubmit(false);
         | 
| 283 | 
            +
                    setFormSubmission((current) => {
         | 
| 284 | 
            +
                        return { ...current, submission: updatedModel };
         | 
| 285 | 
            +
                    });
         | 
| 286 | 
            +
                }, [definition.elements, setFormSubmission, submission]);
         | 
| 275 287 | 
             
                const handleSubmit = React.useCallback((event, continueWhilstAttachmentsAreUploading) => {
         | 
| 276 288 | 
             
                    event.preventDefault();
         | 
| 277 289 | 
             
                    if (disabled || isReadOnly)
         | 
| @@ -338,6 +350,7 @@ function OneBlinkFormBase({ googleMapsApiKey, abnLookupAuthenticationGuid, captc | |
| 338 350 | 
             
                        submission: submissionData.submission,
         | 
| 339 351 | 
             
                        captchaTokens: submissionData.captchaTokens,
         | 
| 340 352 | 
             
                    });
         | 
| 353 | 
            +
                    resetRecaptchas();
         | 
| 341 354 | 
             
                }, [
         | 
| 342 355 | 
             
                    disabled,
         | 
| 343 356 | 
             
                    isReadOnly,
         | 
| @@ -354,6 +367,7 @@ function OneBlinkFormBase({ googleMapsApiKey, abnLookupAuthenticationGuid, captc | |
| 354 367 | 
             
                    taskContextValue,
         | 
| 355 368 | 
             
                    userProfile,
         | 
| 356 369 | 
             
                    onSubmit,
         | 
| 370 | 
            +
                    resetRecaptchas,
         | 
| 357 371 | 
             
                    setFormSubmission,
         | 
| 358 372 | 
             
                ]);
         | 
| 359 373 | 
             
                const handleSaveDraft = React.useCallback((continueWhilstAttachmentsAreUploading) => {
         | 
| @@ -571,8 +585,8 @@ function OneBlinkFormBase({ googleMapsApiKey, abnLookupAuthenticationGuid, captc | |
| 571 585 | 
             
                                                                    React.createElement(AttachmentBlobsProvider, null,
         | 
| 572 586 | 
             
                                                                        React.createElement(FormIsReadOnlyContext.Provider, { value: isReadOnly },
         | 
| 573 587 | 
             
                                                                            React.createElement(TaskContext.Provider, { value: taskContextValue },
         | 
| 574 | 
            -
                                                                                React.createElement(OnUploadAttachmentContext.Provider, { value: onUploadAttachment }, visiblePages.map((pageElement) => (React.createElement(PageFormElements, { key: pageElement.id, isActive: pageElement.id === currentPage.id, formId: definition.id, formElementsConditionallyShown: formElementsConditionallyShown, formElementsValidation: formElementsValidation, displayValidationMessages: hasAttemptedSubmit ||
         | 
| 575 | 
            -
                                                                                        isDisplayingCurrentPageError, pageElement: pageElement, isFormReadOnly: isReadOnly, onChange: handleChange, model: submission, setFormSubmission: setFormSubmission })))))))))))),
         | 
| 588 | 
            +
                                                                                React.createElement(OnUploadAttachmentContext.Provider, { value: onUploadAttachment }, visiblePages.map((pageElement, index) => (React.createElement(PageFormElements, { key: pageElement.id, isActive: pageElement.id === currentPage.id, formId: definition.id, formElementsConditionallyShown: formElementsConditionallyShown, formElementsValidation: formElementsValidation, displayValidationMessages: hasAttemptedSubmit ||
         | 
| 589 | 
            +
                                                                                        isDisplayingCurrentPageError, pageElement: pageElement, isFormReadOnly: isReadOnly, onChange: handleChange, model: submission, setFormSubmission: setFormSubmission, isFirstPage: index === 0 })))))))))))),
         | 
| 576 590 | 
             
                                                isShowingMultiplePages && (React.createElement("div", { className: "steps-actions" },
         | 
| 577 591 | 
             
                                                    React.createElement("div", { className: "steps-action" },
         | 
| 578 592 | 
             
                                                        React.createElement("button", { type: "button", onClick: goToPreviousPage, disabled: isFirstVisiblePage, className: "button is-light cypress-pages-previous" },
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"OneBlinkFormBase.js","sourceRoot":"","sources":["../src/OneBlinkFormBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EACL,WAAW,IAAI,cAAc,EAC7B,aAAa,EACb,OAAO,GACR,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAqB,MAAM,gBAAgB,CAAA;AAOvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAGnD,OAAO,KAAK,MAAM,6BAA6B,CAAA;AAC/C,OAAO,wBAAwB,MAAM,qCAAqC,CAAA;AAC1E,OAAO,gBAAgB,MAAM,wCAAwC,CAAA;AACrE,OAAO,iBAAiB,MAAM,2BAA2B,CAAA;AACzD,OAAO,mBAAmB,MAAM,6BAA6B,CAAA;AAC7D,OAAO,QAAQ,MAAM,kBAAkB,CAAA;AACvC,OAAO,UAAU,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,iCAAiC,EAAE,MAAM,sCAAsC,CAAA;AACxF,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAA;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,kCAAkC,EAAE,MAAM,wCAAwC,CAAA;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAA;AAChF,OAAO,YAAY,MAAM,sBAAsB,CAAA;AAC/C,OAAO,uBAAuB,MAAM,+CAA+C,CAAA;AAOnF,OAAO,mBAAmB,MAAM,gCAAgC,CAAA;AAChE,OAAO,wBAAwB,MAAM,qCAAqC,CAAA;AAC1E,OAAO,uBAAuB,MAAM,oCAAoC,CAAA;AACxE,OAAO,OAAO,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AACzE,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAA;AAC7E,OAAO,YAAY,MAAM,2BAA2B,CAAA;AAgHpD,SAAS,gBAAgB,CAAC,EACxB,gBAAgB,EAChB,2BAA2B,EAC3B,cAAc,EACd,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EAAE,cAAc,EAC1B,kBAAkB,EAClB,eAAe,EACf,IAAI,EACJ,SAAS,EACT,iBAAiB,EACjB,kBAAkB,GACZ;;IACN,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAA;IAElD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CACzB,GAAG,EAAE,CACH,cAAc,CAAC;QACb,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,IAAI,EAAE,aAAa,IAAI,SAAS;aACjC;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS;aAChB;SACF;KACF,CAAC,EACJ,CAAC,aAAa,CAAC,CAChB,CAAA;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACpC,IAAI,CAAC,CAAC,cAAc,IAAI,cAAc,KAAK,YAAY,EAAE;YACvD,OAAO,cAAc,KAAK,KAAK,CAAA;SAChC;QACD,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAC5D,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAA;IAEhC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC1C,OAAO;YACL,IAAI;YACJ,SAAS;YACT,iBAAiB;SAClB,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAExC,EAAE;IACF,EAAE;IACF,0BAA0B;IAE1B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAA0B,GAAG,EAAE;QACxD,IAAI,UAAU,CAAC,WAAW,EAAE;YAC1B,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,CAC/B,CACE,YAAqC,EACrC,WAAkC,EAClC,EAAE;gBACF,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE;oBAC/B,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;iBAC/B;gBACD,OAAO,YAAY,CAAA;YACrB,CAAC,EACD,EAAE,CACH,CAAA;SACF;aAAM;YACL,OAAO;gBACL;oBACE,IAAI,EAAE,MAAM;oBACZ,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;oBAC5B,KAAK,EAAE,UAAU,CAAC,IAAI;oBACtB,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,iBAAiB,EAAE,KAAK;oBACxB,sCAAsC,EAAE,KAAK;iBAC9C;aACF,CAAA;SACF;IACH,CAAC,EAAE;QACD,UAAU,CAAC,QAAQ;QACnB,UAAU,CAAC,EAAE;QACb,UAAU,CAAC,WAAW;QACtB,UAAU,CAAC,IAAI;KAChB,CAAC,CAAA;IAEF,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,0BAA0B;IAE1B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAE5B,MAAM,CACJ,EAAE,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,YAAY,EAAE,EACtE,sBAAsB,EACvB,GAAG,KAAK,CAAC,QAAQ,CAKf;QACD,OAAO,EAAE,KAAK;QACd,mBAAmB,EAAE,KAAK;QAC1B,sBAAsB,EAAE,IAAI;QAC5B,YAAY,EAAE,IAAI;KACnB,CAAC,CAAA;IACF,MAAM,CAAC,8BAA8B,EAAE,iCAAiC,CAAC,GACvE,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,CAAA;IAChC,MAAM,CAAC,0BAA0B,EAAE,6BAA6B,CAAC,GAC/D,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,CAAA;IAChC,MAAM,uBAAuB,GAAG,KAAK,CAAC,WAAW,CAE/C,CAAC,QAAQ,EAAE,EAAE;QACb,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,OAAO;YACV,YAAY,EAAE,QAAQ;YACtB,sBAAsB,EAAE,KAAK;SAC9B,CAAC,CAAC,CAAA;QACH,OAAO,KAAK,CAAA;IACd,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7C,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,OAAO;YACV,YAAY,EAAE,IAAI;YAClB,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CAAC,CAAA;IACL,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,2BAA2B,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACzD,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,OAAO;YACV,mBAAmB,EAAE,IAAI;YACzB,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CAAC,CAAA;IACL,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,sBAAsB,EAAE;YAC1B,wEAAwE;YACxE,IAAI,YAAY,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;gBAC9D,IAAI,kBAAkB,EAAE;oBACtB,kBAAkB,EAAE,CAAA;iBACrB;aACF;iBAAM;gBACL,QAAQ,EAAE,CAAA;aACX;SACF;IACH,CAAC,EAAE;QACD,YAAY;QACZ,kBAAkB;QAClB,sBAAsB;QACtB,OAAO;QACP,QAAQ;KACT,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC1C,IAAI,OAAO,EAAE;YACX,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACnC,GAAG,OAAO;gBACV,sBAAsB,EAAE,KAAK;aAC9B,CAAC,CAAC,CAAA;SACJ;aAAM;YACL,QAAQ,EAAE,CAAA;SACX;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEvB,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7C,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,OAAO;YACV,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC,CAAA;IACL,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,6BAA6B;IAC7B,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,4BAA4B;IAE5B,MAAM,EAAE,8BAA8B,EAAE,qBAAqB,EAAE,GAC7D,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IAE7C,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,qBAAqB;IAErB,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAE7C,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,CAG1C,GAAG,EAAE,CACH,CAAC,UAAU;QACT,CAAC,CAAC,QAAQ,CACN,UAAU,EACV,8BAA8B,EAC9B,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,EAAE,CACtB;QACH,CAAC,CAAC,SAAS,EACf;QACE,8BAA8B;QAC9B,UAAU;QACV,UAAU;QACV,QAAQ;QACR,eAAe;KAChB,CACF,CAAA;IAED,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,gBAAgB;IAEhB,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEzE,MAAM,EACJ,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,+BAA+B,GAChC,GAAG,QAAQ,CAAC;QACX,kBAAkB;QAClB,KAAK;QACL,sBAAsB;QACtB,8BAA8B;KAC/B,CAAC,CAAA;IAEF,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,sBAAsB;IAEtB,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAChD,CAAC,eAAwB,EAAE,EAAE;QAC3B,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,wBAAwB,CACvD,UAAU,EACV,UAAU,CAAC,QAAQ,EACnB,8BAA8B,EAC9B,eAAe,CAChB,CAAA;QACD,OAAO;YACL,UAAU,EAAE,KAAK;YACjB,aAAa;SACd,CAAA;IACH,CAAC,EACD,CAAC,UAAU,CAAC,QAAQ,EAAE,8BAA8B,EAAE,UAAU,CAAC,CAClE,CAAA;IAED,MAAM,6BAA6B,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,0BAA0B,GAAG,6BAA6B,CAAC,OAAO,CAAA;QACxE,IAAI,0BAA0B,EAAE;YAC9B,OAAO,CAAC,GAAG,CACT,4DAA4D,EAC5D,0BAA0B,CAC3B,CAAA;YACD,UAAU,CAAC,WAAW,CAAC;gBACrB,QAAQ,EAAE,cAAc;gBACxB,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,0BAA0B;aACrC,CAAC,CAAA;SACH;QACD,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,aAAa,EAAE,CAAA;QAC5B,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,8BAA8B,GAAG,KAAK,CAAC,WAAW,CACtD,CAAC,UAA0D,EAAE,EAAE;QAC7D,+DAA+D;QAC/D,8DAA8D;QAC9D,4DAA4D;QAC5D,0DAA0D;QAC1D,IAAI,SAAS,EAAE;YACb,OAAO,IAAI,CAAA;SACZ;QACD,MAAM,uBAAuB,GAC3B,kBAAkB,CAAC,8BAA8B,CAC/C,UAAU,EACV,UAAU,CACX,CAAA;QAEH,IAAI,uBAAuB,EAAE;YAC3B,IAAI,eAAe,IAAI,CAAC,qBAAqB,EAAE;gBAC7C,UAAU,CAAC,KAAK,CAAC;oBACf,OAAO,EACL,sFAAsF;oBACxF,IAAI,EAAE,YAAY;oBAClB,YAAY,EAAE,wCAAwC;oBACtD,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,IAAI;oBAClB,YAAY,EAAE,IAAI;iBACnB,CAAC,CAAA;gBACF,OAAO,KAAK,CAAA;aACb;iBAAM;gBACL,6BAA6B,CAAC,IAAI,CAAC,CAAA;gBACnC,OAAO,KAAK,CAAA;aACb;SACF;QAED,OAAO,IAAI,CAAA;IACb,CAAC,EACD,CAAC,UAAU,EAAE,SAAS,EAAE,qBAAqB,EAAE,eAAe,CAAC,CAChE,CAAA;IAED,MAAM,uBAAuB,GAAG,KAAK,CAAC,WAAW,CAC/C,CAAC,UAA0D,EAAE,EAAE;QAC7D,OAAO,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IACrD,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAA;IAED,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAC7C,CAAC,UAA0D,EAAE,EAAE;QAC7D,IAAI,wBAAwB,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE;YACpD,UAAU,CAAC,KAAK,CAAC;gBACf,OAAO,EACL,uFAAuF;gBACzF,IAAI,EAAE,YAAY;gBAClB,YAAY,EAAE,yCAAyC;gBACvD,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAA;YACF,OAAO,KAAK,CAAA;SACb;QAED,OAAO,IAAI,CAAA;IACb,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAA;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CACpC,CACE,KAEmD,EACnD,qCAA8C,EAC9C,EAAE;QACF,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,IAAI,QAAQ,IAAI,UAAU;YAAE,OAAM;QAClC,qBAAqB,CAAC,IAAI,CAAC,CAAA;QAE3B,MAAM,cAAc,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAA;QACtD,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACrD,OAAM;SACP;QACD,IAAI,sBAAsB,EAAE;YAC1B,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAA;YACxD,UAAU,CAAC,KAAK,CAAC;gBACf,OAAO,EAAE,8BAA8B;gBACvC,IAAI,EAAE,WAAW;gBACjB,YAAY,EAAE,yCAAyC;gBACvD,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAA;YACF,OAAM;SACP;QACD,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACvD,OAAM;SACP;QACD,IACE,CAAC,qCAAqC;YACtC,CAAC,8BAA8B,CAAC,cAAc,CAAC,UAAU,CAAC,EAC1D;YACA,OAAM;SACP;QACD,6BAA6B;QAC7B,MAAM,aAAa,GAAG,uBAAuB,CAC3C,UAAU,EACV,cAAc,CAAC,UAAU,EACzB,yBAAyB,CAC1B,CAAA;QACD,IAAI,aAAa,EAAE;YACjB,iBAAiB,CAAC,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;gBAC5C,GAAG,qBAAqB;gBACxB,UAAU,EAAE,aAAa;aAC1B,CAAC,CAAC,CAAA;YACH,UAAU,CAAC,KAAK,CAAC;gBACf,OAAO,EACL,mKAAmK;gBACrK,IAAI,EAAE,WAAW;gBACjB,YAAY,EAAE,yCAAyC;gBACvD,QAAQ,EAAE,IAAI;gBACd,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAA;YACF,OAAM;SACP;QAED,IAAI,SAAS,IAAI,CAAC,qBAAqB,EAAE;YACvC,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAA;YACxE,iCAAiC,CAAC,IAAI,CAAC,CAAA;YACvC,OAAM;SACP;QAED,eAAe,EAAE,CAAA;QAEjB,gDAAgD;QAChD,MAAM,2BAA2B,GAAG,8BAA8B,CAAC;YACjE,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,SAAS;SACtC,CAAC,CAAA;QACF,QAAQ,CAAC;YACP,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,QAAQ,EAAE,2BAA2B;aACtC;YACD,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,aAAa,EAAE,cAAc,CAAC,aAAa;SAC5C,CAAC,CAAA;IACJ,CAAC,EACD;QACE,QAAQ;QACR,UAAU;QACV,wBAAwB;QACxB,qBAAqB;QACrB,sBAAsB;QACtB,uBAAuB;QACvB,8BAA8B;QAC9B,UAAU;QACV,yBAAyB;QACzB,SAAS;QACT,qBAAqB;QACrB,eAAe;QACf,gBAAgB;QAChB,WAAW;QACX,QAAQ;QACR,iBAAiB;KAClB,CACF,CAAA;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CACvC,CAAC,qCAA8C,EAAE,EAAE;QACjD,IAAI,QAAQ;YAAE,OAAM;QACpB,IAAI,WAAW,EAAE;YACf,eAAe,EAAE,CAAA;YAEjB,uDAAuD;YACvD,mDAAmD;YACnD,MAAM,EAAE,UAAU,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAA;YACtD,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE;gBACtC,OAAM;aACP;YACD,IACE,CAAC,qCAAqC;gBACtC,CAAC,8BAA8B,CAAC,UAAU,CAAC,EAC3C;gBACA,OAAM;aACP;YACD,WAAW,CAAC;gBACV,UAAU;gBACV,UAAU;gBACV,gBAAgB,EAAE,qCAAqC;gBACvD,kBAAkB;aACnB,CAAC,CAAA;SACH;IACH,CAAC,EACD;QACE,eAAe;QACf,8BAA8B;QAC9B,UAAU;QACV,QAAQ;QACR,wBAAwB;QACxB,WAAW;QACX,qBAAqB;QACrB,kBAAkB;KACnB,CACF,CAAA;IAED,MAAM,6BAA6B,GAAG,KAAK,CAAC,WAAW,CACrD,CAAC,CAAkD,EAAE,EAAE;QACrD,6BAA6B,CAAC,KAAK,CAAC,CAAA;QACpC,IAAI,kBAAkB,EAAE;YACtB,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;SACtB;aAAM;YACL,eAAe,CAAC,IAAI,CAAC,CAAA;SACtB;IACH,CAAC,EACD;QACE,YAAY;QACZ,6BAA6B;QAC7B,kBAAkB;QAClB,eAAe;KAChB,CACF,CAAA;IACD,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACtD,6BAA6B,CAAC,KAAK,CAAC,CAAA;IACtC,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,CAAA;IAEnC,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,kBAAkB;IAElB,MAAM,EAAE,uBAAuB,EAAE,GAAG,UAAU,CAC5C,UAAU,CAAC,EAAE,EACb,iBAAiB,CAClB,CAAA;IAED,aAAa;IACb,EAAE;IACF,EAAE;IAEF,EAAE;IACF,EAAE;IACF,wCAAwC;IAExC,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CACpC,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE;QACtC;QACE,gFAAgF;QAChF,kEAAkE;QAClE,mDAAmD;QACnD,CAAC,QAAQ;YACP,OAAO,CAAC,IAAI,KAAK,SAAS;YAC1B,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC;YACjC,OAAO,CAAC,IAAI,KAAK,MAAM;YACvB,OAAO,CAAC,IAAI,KAAK,SAAS,EAC1B;YACA,OAAM;SACP;QAED,sBAAsB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,OAAO;YACV,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,CAAA;QACH,qFAAqF;QACrF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE;YAChE,iBAAiB,CAAC,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;gBAC5C,GAAG,qBAAqB;gBACxB,UAAU,EAAE;oBACV,GAAG,qBAAqB,CAAC,UAAU;oBACnC,CAAC,OAAO,CAAC,IAAI,CAAC,EACZ,OAAO,KAAK,KAAK,UAAU;wBACzB,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACvD,CAAC,CAAC,KAAK;iBACZ;aACF,CAAC,CAAC,CAAA;SACJ;aAAM;YACL,iBAAiB,CAAC,CAAC,qBAAqB,EAAE,EAAE;;gBAC1C,OAAO;oBACL,GAAG,qBAAqB;oBACxB,UAAU,EAAE;wBACV,GAAG,qBAAqB,CAAC,UAAU;wBACnC,CAAC,OAAO,CAAC,IAAI,CAAC,EACZ,OAAO,KAAK,KAAK,UAAU;4BACzB,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;4BACvD,CAAC,CAAC,KAAK;qBACZ;oBACD,kBAAkB,EAAE,OAAO;oBAC3B,eAAe,EAAE;wBACf,GAAG,qBAAqB,CAAC,eAAe;wBACxC,CAAC,OAAO,CAAC,IAAI,CAAC,EACZ,OAAO,eAAe,KAAK,UAAU;4BACnC,CAAC,CAAC,eAAe,CACb,MAAA,qBAAqB,CAAC,eAAe,0CAAG,OAAO,CAAC,IAAI,CAAC,CACtD;4BACH,CAAC,CAAC,eAAe;qBACtB;iBACF,CAAA;YACH,CAAC,CAAC,CAAA;SACH;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAC9B,CAAA;IAED,aAAa;IACb,EAAE;IACF,EAAE;IAEF,MAAM,8BAA8B,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACxD,OAAO,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAC1C,UAAU,CAAC,QAAQ,EACnB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAK,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,EAAE,CAAA,CACzC,CAAA;IACH,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAA;IAE7C,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAkC,EAAE,EAAE;YACrE,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE;gBAC/B,OAAO,mBAAmB,CAAC,eAAe,CACxC,WAAW,CAAC,QAAQ,EACpB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAK,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,EAAE,CAAA,CACzC,CAAA;aACF;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC,CAAA;IAEpC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACzD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,kBAAkB,IAAI,8BAA8B,EAAE;gBACxD,IAAI,sBAAsB,EAAE;oBAC1B,SAAS,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAA;iBACrC;gBACD,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;gBAC9D,IAAI,OAAO,EAAE;oBACX,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;wBAChC,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;oBAChD,CAAC,CAAC,CAAA;iBACH;aACF;YACD,aAAa,CAAC,IAAI,CAAC,CAAA;SACpB;IACH,CAAC,EAAE;QACD,kBAAkB;QAClB,UAAU;QACV,sBAAsB;QACtB,8BAA8B;QAC9B,SAAS;KACV,CAAC,CAAA;IAEF,IAAI,qBAAqB,EAAE;QACzB,OAAO,CACL;YACE,6BAAK,SAAS,EAAC,mBAAmB;gBAChC,oBAAC,YAAY,IAAC,SAAS,EAAC,+BAA+B,YAExC;gBACf,4BAAI,SAAS,EAAC,YAAY,6BAA4B;gBACtD,2BAAG,SAAS,EAAC,yCAAyC,IACnD,qBAAqB,CAAC,OAAO,CAC5B;gBACJ,2BAAG,SAAS,EAAC,eAAe,IACzB,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,IAAI,EAAE,CAAC,CACjD,CACA,CACL,CACJ,CAAA;KACF;IAED,OAAO,CACL,oBAAC,aAAa,IAAC,KAAK,EAAE,KAAK;QACzB,oBAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,UAAU;YAC/C,oBAAC,iCAAiC;gBAChC,oBAAC,iCAAiC;oBAChC,6BACE,SAAS,EAAC,mBAAmB,EAC7B,GAAG,EAAE,6BAA6B;wBAElC,8BACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,yCACT,gBAAgB,GAAG,CACrB,EAAE,EACF,UAAU,QACV,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC;4BAEvC;gCACE,6BAAK,GAAG,EAAE,+BAA+B,GAAI;gCAC5C,sBAAsB,IAAI,CACzB,6BACE,SAAS,EAAE,IAAI,CAAC,qBAAqB,EAAE;wCACrC,WAAW,EAAE,mBAAmB;qCACjC,CAAC;oCAEF,6BACE,SAAS,EAAE,IAAI,CAAC,6BAA6B,EAAE;4CAC7C,WAAW,EAAE,mBAAmB;yCACjC,CAAC,EACF,OAAO,EAAE,qBAAqB;wCAE9B,8BAAM,SAAS,EAAC,mBAAmB;4CACjC,oBAAC,YAAY,8BAAmC,CAC3C;wCACP,6BAAK,SAAS,EAAC,0BAA0B;4CACtC,4BAA4B,CAAC,CAAC,CAAC,CAC9B,8BAAM,SAAS,EAAC,MAAM;gDACpB,oBAAC,YAAY,IAAC,SAAS,EAAC,2BAA2B,cAEpC,CACV,CACR,CAAC,CAAC,CAAC,CACF,8BAAM,SAAS,EAAC,+BAA+B,IAC5C,iBAAiB,CACb,CACR;4CACD,8BAAM,SAAS,EAAC,0DAA0D,IACvE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAChC,CACH;wCACN,8BAAM,SAAS,EAAC,eAAe;4CAC7B,oBAAC,YAAY,8BAAmC,CAC3C,CACH;oCAEN,6BACE,SAAS,EAAE,IAAI,CAAC,4BAA4B,EAAE;4CAC5C,WAAW,EAAE,mBAAmB;yCACjC,CAAC;wCAEF,6BAAK,SAAS,EAAC,mDAAmD,IAC/D,YAAY,CAAC,GAAG,CACf,CAAC,IAA2B,EAAE,KAAa,EAAE,EAAE;4CAC7C,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;4CAC7C,OAAO,CACL,6BACE,GAAG,EAAE,IAAI,CAAC,EAAE,EACZ,EAAE,EAAE,yBAAyB,IAAI,CAAC,EAAE,EAAE,EACtC,SAAS,EAAE,IAAI,CACb,6BAA6B,EAC7B;oDACE,WAAW,EAAE,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;oDACvC,cAAc,EAAE,gBAAgB,GAAG,KAAK;oDACxC,UAAU,EAAE,SAAS;iDACtB,CACF,EACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oDACb,CAAC,CAAC,eAAe,EAAE,CAAA;oDACnB,IAAI,IAAI,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,EAAE;wDAC9B,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;qDACnB;gDACH,CAAC;gDAED,6BACE,SAAS,EAAC,kEAAkE;oDAC5E,uBAAuB;oDACvB,IAAI,EAAE,wBAAwB,KAAK,GAAG,CAAC,EAAE,EACzC,KAAK,EAAE,KAAK,GAAG,CAAC,IAEf,SAAS,CAAC,CAAC,CAAC,CACX,oBAAC,OAAO,IAAC,KAAK,EAAC,iBAAiB;oDAC9B,8BAAM,SAAS,EAAC,iDAAiD;wDAC/D,oBAAC,YAAY,IAAC,SAAS,EAAC,2BAA2B,cAEpC,CACV,CACC,CACX,CAAC,CAAC,CAAC,CACF,kCAAO,KAAK,GAAG,CAAC,CAAQ,CACzB,CACG;gDACN,6BAAK,SAAS,EAAC,8BAA8B;oDAC3C,2BAAG,SAAS,EAAC,qDAAqD,IAC/D,IAAI,CAAC,KAAK,CACT,CACA,CACF,CACP,CAAA;wCACH,CAAC,CACF,CACG,CACF,CACF,CACP;gCAED,6BACE,SAAS,EAAE,IAAI,CAAC,iCAAiC,EAAE;wCACjD,WAAW,EAAE,mBAAmB;qCACjC,CAAC,EACF,OAAO,EAAE,qBAAqB,GAC9B;gCAEF,6BAAK,SAAS,EAAC,OAAO;oCACpB,6BACE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE;4CAC/B,gBAAgB,EAAE,CAAC,sBAAsB;yCAC1C,CAAC;wCAEF,oBAAC,kBAAkB,CAAC,QAAQ,IAC1B,KAAK,EAAE,uBAAuB;4CAE9B,oBAAC,uBAAuB,CAAC,QAAQ,IAC/B,KAAK,EAAE,gBAAgB;gDAEvB,oBAAC,kCAAkC,CAAC,QAAQ,IAC1C,KAAK,EAAE,2BAA2B;oDAElC,oBAAC,qBAAqB,CAAC,QAAQ,IAC7B,KAAK,EAAE,cAAc;wDAErB,oBAAC,uBAAuB;4DACtB,oBAAC,qBAAqB,CAAC,QAAQ,IAC7B,KAAK,EAAE,UAAU;gEAEjB,oBAAC,WAAW,CAAC,QAAQ,IACnB,KAAK,EAAE,gBAAgB;oEAEvB,oBAAC,yBAAyB,CAAC,QAAQ,IACjC,KAAK,EAAE,kBAAkB,IAExB,YAAY,CAAC,GAAG,CACf,CACE,WAAkC,EAClC,EAAE,CAAC,CACH,oBAAC,gBAAgB,IACf,GAAG,EAAE,WAAW,CAAC,EAAE,EACnB,QAAQ,EACN,WAAW,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,EAEnC,MAAM,EAAE,UAAU,CAAC,EAAE,EACrB,8BAA8B,EAC5B,8BAA8B,EAEhC,sBAAsB,EACpB,sBAAsB,EAExB,yBAAyB,EACvB,kBAAkB;4EAClB,4BAA4B,EAE9B,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,UAAU,EAC1B,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,UAAU,EACjB,iBAAiB,EACf,iBAAiB,GAEnB,CACH,CACF,CACkC,CAChB,CACQ,CACT,CACK,CACW,CACb,CACP,CAC1B;oCAEL,sBAAsB,IAAI,CACzB,6BAAK,SAAS,EAAC,eAAe;wCAC5B,6BAAK,SAAS,EAAC,cAAc;4CAC3B,gCACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAC,wCAAwC;gDAElD,8BAAM,SAAS,EAAC,MAAM;oDACpB,oBAAC,YAAY,8BAAmC,CAC3C;gDACP,yCAAiB,CACV,CACL;wCACN,6BAAK,SAAS,EAAC,2CAA2C,IACvD,YAAY,CAAC,GAAG,CACf,CAAC,IAA2B,EAAE,KAAK,EAAE,EAAE,CAAC,CACtC,6BACE,GAAG,EAAE,IAAI,CAAC,EAAE,EACZ,SAAS,EAAE,IAAI,CAAC,0BAA0B,EAAE;gDAC1C,WAAW,EAAE,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;gDACvC,cAAc,EAAE,gBAAgB,GAAG,KAAK;gDACxC,uBAAuB,EACrB,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;oDAC1B,qBAAqB,CAAC,IAAI,CAAC;6CAC9B,CAAC,GACF,CACH,CACF,CACG;wCACN,6BAAK,SAAS,EAAC,cAAc;4CAC3B,gCACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAC,oCAAoC;gDAE9C,yCAAiB;gDACjB,8BAAM,SAAS,EAAC,MAAM;oDACpB,oBAAC,YAAY,+BAAoC,CAC5C,CACA,CACL,CACF,CACP,CACG;gCACL,CAAC,UAAU,IAAI,CACd,6BAAK,SAAS,EAAC,sCAAsC;oCAClD,WAAW,IAAI,CAAC,UAAU,IAAI,CAC7B,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0EAA0E,EACpF,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EACrC,QAAQ,EAAE,SAAS,IAAI,QAAQ;wCAE/B,oBAAC,uBAAuB,IACtB,KAAK,EAAE,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,KAAK,KAAI,YAAY,EAChD,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,IAAI,GAC9B,CACK,CACV;oCACD,8BAAM,SAAS,EAAC,2BAA2B,GAAQ;oCAClD,CAAC,UAAU,IAAI,CACd,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uEAAuE,EACjF,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,SAAS,IAAI,QAAQ;wCAE/B,oBAAC,uBAAuB,IACtB,KAAK,EAAE,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,KAAK,KAAI,QAAQ,EACzC,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,IAAI,GAC3B,CACK,CACV;oCACA,iBAAiB,IAAI,CACpB,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6FAA6F,EACvG,QAAQ,EAAE,SAAS,IAAI,QAAQ;wCAE/B,oBAAC,uBAAuB,IACtB,KAAK,EACH,UAAU;gDACR,CAAC,CAAC,MAAM;gDACR,CAAC,CAAC,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,KAAK,KAAI,QAAQ,EAExC,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,0CAAE,IAAI,GAC3B,CACK,CACV,CACG,CACP,CACG,CACD;wBAEN,CAAC,UAAU,IAAI,CAAC,SAAS,IAAI,CAC5B,oBAAC,KAAK,CAAC,QAAQ;4BACb,oBAAC,MAAM,IACL,IAAI,EAAE,OAAO,IAAI,CAAC,mBAAmB,EACrC,OAAO,EAAE,uBAAuB,GAChC;4BACF,oBAAC,KAAK,IACJ,MAAM,EAAE,sBAAsB,KAAK,KAAK,EACxC,KAAK,EAAC,iBAAiB,EACvB,aAAa,EAAC,wBAAwB,EACtC,cAAc,EAAC,8BAA8B,EAC7C,aAAa,EAAC,6BAA6B,EAC3C,OAAO,EACL;oCACG,WAAW,IAAI,CACd,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,+DAA+D,EACzE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;wCAErC,oBAAC,uBAAuB,IACtB,KAAK,EAAE,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,KAAK,KAAI,YAAY,EAChD,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,IAAI,GAC9B,CACK,CACV;oCACD,8BAAM,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAS;oCACjC,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uDAAuD,EACjE,OAAO,EAAE,eAAe;wCAExB,oBAAC,uBAAuB,IACtB,KAAK,EAAE,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,0CAAE,KAAK,KAAI,MAAM,EAC/C,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,0CAAE,IAAI,GACnC,CACK;oCACT,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,4DAA4D,EACtE,OAAO,EAAE,2BAA2B,EACpC,SAAS;wCAET,oBAAC,uBAAuB,IACtB,KAAK,EAAE,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,0CAAE,KAAK,KAAI,SAAS,EACnD,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,0CAAE,IAAI,GACpC,CACK,CACR;gCAGL,+FAGI,CACE;4BACR,oBAAC,KAAK,IACJ,MAAM,EAAE,0BAA0B,KAAK,IAAI,EAC3C,KAAK,EAAC,+BAA+B,EACrC,aAAa,EAAC,mCAAmC,EACjD,cAAc,EAAC,wCAAwC,EACvD,aAAa,EAAC,uCAAuC,EACrD,OAAO,EACL;oCACE,8BAAM,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAS;oCACjC,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,4DAA4D,EACtE,OAAO,EAAE,wBAAwB,WAG1B;oCACT,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,kEAAkE,EAC5E,OAAO,EAAE,6BAA6B,EACtC,SAAS,qBAGF,CACR;gCAGL,iRAMI,CACE;4BAER,oBAAC,KAAK,IACJ,MAAM,EAAE,8BAA8B,EACtC,KAAK,EAAC,8BAA8B,EACpC,SAAS,EAAC,sCAAsC,EAChD,aAAa,EAAC,8CAA8C,EAC5D,cAAc,EAAC,uBAAuB,EACtC,aAAa,EAAC,sBAAsB,EACpC,OAAO,EACL;oCACG,WAAW,IAAI,CACd,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,8EAA8E,EACxF,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;wCAErC,oBAAC,uBAAuB,IACtB,KAAK,EAAE,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,KAAK,KAAI,YAAY,EAChD,IAAI,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,IAAI,GAC9B,CACK,CACV;oCACD,8BAAM,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAS;oCACjC,gCACE,SAAS,EAAC,wEAAwE,EAClF,OAAO,EAAE,GAAG,EAAE,CACZ,iCAAiC,CAAC,KAAK,CAAC,aAInC;oCACT,gCACE,SAAS,EAAC,6EAA6E,EACvF,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4CACb,iCAAiC,CAAC,KAAK,CAAC,CAAA;4CACxC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;wCACxB,CAAC,EACD,SAAS,sBAGF,CACR;gCAGL,2BAAG,SAAS,EAAC,8CAA8C;;oCAGxD,WAAW,IAAI,CACd,8BAAM,SAAS,EAAC,yDAAyD;wCACtE,GAAG;;wCACqB,GAAG;wCAC5B,+BACG,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,0CAAE,KAAK,KAAI,YAAY,CACxC;wCAAC,GAAG;mFAEH,CACR,CACC;gCACJ,oBAAC,YAAY,IAAC,SAAS,EAAC,yEAAyE,eAElF,CACT,CACO,CAClB,CACG,CAC4B,CACF,CACL,CACnB,CACjB,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA","sourcesContent":["import * as React from 'react'\nimport {\n  createTheme as createMuiTheme,\n  ThemeProvider,\n  Tooltip,\n} from '@mui/material'\nimport { Prompt, useHistory } from 'react-router-dom'\nimport clsx from 'clsx'\nimport * as bulmaToast from 'bulma-toast'\nimport { localisationService, submissionService } from '@oneblink/apps'\nimport {\n  FormTypes,\n  FormsAppsTypes,\n  ScheduledTasksTypes,\n  SubmissionTypes,\n} from '@oneblink/types'\nimport { attachmentsService } from '@oneblink/apps'\nimport * as H from 'history'\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 { InjectPagesContext } from './hooks/useInjectPages'\nimport { FormElementOptionsContextProvider } from './hooks/useDynamicOptionsLoaderState'\nimport { FormElementLookupsContextProvider } from './hooks/useFormElementLookups'\nimport { GoogleMapsApiKeyContext } from './hooks/useGoogleMapsApiKey'\nimport { AbnLookupAuthenticationGuidContext } from './hooks/useAbnLookupAuthenticationGuid'\nimport { CaptchaSiteKeyContext } from './hooks/useCaptchaSiteKey'\nimport { FormIsReadOnlyContext } from './hooks/useFormIsReadOnly'\nimport { AttachmentBlobsProvider } from './hooks/attachments/useAttachmentBlobs'\nimport useIsOffline from './hooks/useIsOffline'\nimport CustomisableButtonInner from './components/renderer/CustomisableButtonInner'\nimport {\n  ExecutedLookups,\n  FormElementsValidation,\n  NestedFormElementValueChangeHandler,\n  SetFormSubmission,\n} from './types/form'\nimport checkBsbsAreInvalid from './services/checkBsbsAreInvalid'\nimport checkIfBsbsAreValidating from './services/checkIfBsbsAreValidating'\nimport checkIfAttachmentsExist from './services/checkIfAttachmentsExist'\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'\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\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\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}\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}: Props) {\n  const isOffline = useIsOffline()\n  const { isUsingFormsKey, userProfile } = useAuth()\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  // #endregion\n  //\n  //\n\n  //\n  //\n  // #region Unsaved Changed\n\n  const history = useHistory()\n\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  }, [])\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      onCancel()\n    }\n  }, [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 { formElementsConditionallyShown, conditionalLogicError } =\n    useConditionalLogic(definition, submission)\n\n  // #endregion\n  //\n  //\n\n  //\n  //\n  // #region Validation\n\n  const { validate } = useFormValidation(pages)\n\n  const formElementsValidation = React.useMemo<\n    FormElementsValidation | undefined\n  >(\n    () =>\n      !isReadOnly\n        ? validate(\n            submission,\n            formElementsConditionallyShown,\n            executedLookups ?? {},\n          )\n        : undefined,\n    [\n      formElementsConditionallyShown,\n      isReadOnly,\n      submission,\n      validate,\n      executedLookups,\n    ],\n  )\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 handleSubmit = React.useCallback(\n    (\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      const submissionData = getCurrentSubmissionData(false)\n      if (!checkBsbAreValidating(submissionData.submission)) {\n        return\n      }\n      if (formElementsValidation) {\n        console.log('Validation errors', formElementsValidation)\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        return\n      }\n      if (!checkBsbsCanBeSubmitted(submissionData.submission)) {\n        return\n      }\n      if (\n        !continueWhilstAttachmentsAreUploading &&\n        !checkAttachmentsCanBeSubmitted(submissionData.submission)\n      ) {\n        return\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\n      allowNavigation()\n\n      // transplant injected options on the definition\n      const elementsWithInjectedOptions = injectOptionsAcrossAllElements({\n        elements: definition.elements,\n        submission: submissionData.submission,\n        taskContext: taskContextValue,\n        userProfile: userProfile ?? undefined,\n      })\n      onSubmit({\n        definition: {\n          ...definition,\n          elements: elementsWithInjectedOptions,\n        },\n        submission: submissionData.submission,\n        captchaTokens: submissionData.captchaTokens,\n      })\n    },\n    [\n      disabled,\n      isReadOnly,\n      getCurrentSubmissionData,\n      checkBsbAreValidating,\n      formElementsValidation,\n      checkBsbsCanBeSubmitted,\n      checkAttachmentsCanBeSubmitted,\n      definition,\n      attachmentRetentionInDays,\n      isOffline,\n      isPendingQueueEnabled,\n      allowNavigation,\n      taskContextValue,\n      userProfile,\n      onSubmit,\n      setFormSubmission,\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        element.type === 'section'\n      ) {\n        return\n      }\n\n      setUnsavedChangesState((current) => ({\n        ...current,\n        isDirty: true,\n      }))\n      // dont update the last element updated for elements the user cannot set the value of\n      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.getElementById(lastElementUpdated.id)\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      <FormDefinitionContext.Provider value={definition}>\n        <FormElementOptionsContextProvider>\n          <FormElementLookupsContextProvider>\n            <div\n              className=\"ob-form-container\"\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                            (page: FormTypes.PageElement, index: number) => {\n                              const hasErrors = 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': currentPage.id === page.id,\n                                      'is-completed': 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 className=\"step-title ob-step-title cypress-desktop-step-title\">\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                            <CaptchaSiteKeyContext.Provider\n                              value={captchaSiteKey}\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 === 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                                            isFormReadOnly={isReadOnly}\n                                            onChange={handleChange}\n                                            model={submission}\n                                            setFormSubmission={\n                                              setFormSubmission\n                                            }\n                                          />\n                                        ),\n                                      )}\n                                    </OnUploadAttachmentContext.Provider>\n                                  </TaskContext.Provider>\n                                </FormIsReadOnlyContext.Provider>\n                              </AttachmentBlobsProvider>\n                            </CaptchaSiteKeyContext.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>keyboard_arrow_left</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('step-progress-mobile-dot', {\n                                  'is-active': currentPage.id === page.id,\n                                  'is-completed': currentPageIndex > index,\n                                  'has-background-danger':\n                                    currentPage.id !== page.id &&\n                                    checkDisplayPageError(page),\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>keyboard_arrow_right</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={buttons?.saveDraft?.label || 'Save Draft'}\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                        <button\n                          type=\"submit\"\n                          className=\"button ob-button is-success ob-button-submit cypress-submit-form-button cypress-submit-form\"\n                          disabled={isPreview || disabled}\n                        >\n                          <CustomisableButtonInner\n                            label={\n                              isInfoPage\n                                ? 'Done'\n                                : buttons?.submit?.label || 'Submit'\n                            }\n                            icon={buttons?.submit?.icon}\n                          />\n                        </button>\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={buttons?.saveDraft?.label || 'Save Draft'}\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={buttons?.cancelPromptNo?.label || 'Back'}\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={buttons?.cancelPromptYes?.label || 'Discard'}\n                            icon={buttons?.cancelPromptYes?.icon}\n                          />\n                        </button>\n                      </>\n                    }\n                  >\n                    <p>\n                      You have unsaved changes, are you sure you want discard\n                      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 wait\n                      for the uploads to complete or continue using the app? If\n                      you click continue the attachments will upload in the\n                      background. Do not close the app until the upload has been\n                      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={buttons?.saveDraft?.label || 'Save Draft'}\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 try\n                      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            </div>\n          </FormElementLookupsContextProvider>\n        </FormElementOptionsContextProvider>\n      </FormDefinitionContext.Provider>\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 {\n  createTheme as createMuiTheme,\n  ThemeProvider,\n  Tooltip,\n} from '@mui/material'\nimport { Prompt, useHistory } from 'react-router-dom'\nimport clsx from 'clsx'\nimport * as bulmaToast from 'bulma-toast'\nimport { localisationService, submissionService } from '@oneblink/apps'\nimport {\n  FormTypes,\n  FormsAppsTypes,\n  ScheduledTasksTypes,\n  SubmissionTypes,\n} from '@oneblink/types'\nimport { attachmentsService } from '@oneblink/apps'\nimport * as H from 'history'\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 { InjectPagesContext } from './hooks/useInjectPages'\nimport { FormElementOptionsContextProvider } from './hooks/useDynamicOptionsLoaderState'\nimport { FormElementLookupsContextProvider } from './hooks/useFormElementLookups'\nimport { GoogleMapsApiKeyContext } from './hooks/useGoogleMapsApiKey'\nimport { AbnLookupAuthenticationGuidContext } from './hooks/useAbnLookupAuthenticationGuid'\nimport { CaptchaSiteKeyContext } from './hooks/useCaptchaSiteKey'\nimport { FormIsReadOnlyContext } from './hooks/useFormIsReadOnly'\nimport { AttachmentBlobsProvider } from './hooks/attachments/useAttachmentBlobs'\nimport useIsOffline from './hooks/useIsOffline'\nimport CustomisableButtonInner from './components/renderer/CustomisableButtonInner'\nimport {\n  ExecutedLookups,\n  FormElementsValidation,\n  NestedFormElementValueChangeHandler,\n  SetFormSubmission,\n} from './types/form'\nimport checkBsbsAreInvalid from './services/checkBsbsAreInvalid'\nimport checkIfBsbsAreValidating from './services/checkIfBsbsAreValidating'\nimport checkIfAttachmentsExist from './services/checkIfAttachmentsExist'\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'\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\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\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}\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}: Props) {\n  const isOffline = useIsOffline()\n  const { isUsingFormsKey, userProfile } = useAuth()\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  // #endregion\n  //\n  //\n\n  //\n  //\n  // #region Unsaved Changed\n\n  const history = useHistory()\n\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  }, [])\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      onCancel()\n    }\n  }, [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 { formElementsConditionallyShown, conditionalLogicError } =\n    useConditionalLogic(definition, submission)\n\n  // #endregion\n  //\n  //\n\n  //\n  //\n  // #region Validation\n\n  const { validate } = useFormValidation(pages)\n\n  const formElementsValidation = React.useMemo<\n    FormElementsValidation | undefined\n  >(\n    () =>\n      !isReadOnly\n        ? validate(\n            submission,\n            formElementsConditionallyShown,\n            executedLookups ?? {},\n          )\n        : undefined,\n    [\n      formElementsConditionallyShown,\n      isReadOnly,\n      submission,\n      validate,\n      executedLookups,\n    ],\n  )\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 resetRecaptchas = React.useCallback(() => {\n    const updatedModel = { ...submission }\n    formElementsService.forEachFormElement(definition.elements, (element) => {\n      if (element.type === 'captcha') {\n        updatedModel[element.name] = undefined\n      }\n    })\n    setHasAttemptedSubmit(false)\n    setFormSubmission((current) => {\n      return { ...current, submission: updatedModel }\n    })\n  }, [definition.elements, setFormSubmission, submission])\n\n  const handleSubmit = React.useCallback(\n    (\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      const submissionData = getCurrentSubmissionData(false)\n      if (!checkBsbAreValidating(submissionData.submission)) {\n        return\n      }\n      if (formElementsValidation) {\n        console.log('Validation errors', formElementsValidation)\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        return\n      }\n      if (!checkBsbsCanBeSubmitted(submissionData.submission)) {\n        return\n      }\n      if (\n        !continueWhilstAttachmentsAreUploading &&\n        !checkAttachmentsCanBeSubmitted(submissionData.submission)\n      ) {\n        return\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\n      allowNavigation()\n\n      // transplant injected options on the definition\n      const elementsWithInjectedOptions = injectOptionsAcrossAllElements({\n        elements: definition.elements,\n        submission: submissionData.submission,\n        taskContext: taskContextValue,\n        userProfile: userProfile ?? undefined,\n      })\n      onSubmit({\n        definition: {\n          ...definition,\n          elements: elementsWithInjectedOptions,\n        },\n        submission: submissionData.submission,\n        captchaTokens: submissionData.captchaTokens,\n      })\n      resetRecaptchas()\n    },\n    [\n      disabled,\n      isReadOnly,\n      getCurrentSubmissionData,\n      checkBsbAreValidating,\n      formElementsValidation,\n      checkBsbsCanBeSubmitted,\n      checkAttachmentsCanBeSubmitted,\n      definition,\n      attachmentRetentionInDays,\n      isOffline,\n      isPendingQueueEnabled,\n      allowNavigation,\n      taskContextValue,\n      userProfile,\n      onSubmit,\n      resetRecaptchas,\n      setFormSubmission,\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        element.type === 'section'\n      ) {\n        return\n      }\n\n      setUnsavedChangesState((current) => ({\n        ...current,\n        isDirty: true,\n      }))\n      // dont update the last element updated for elements the user cannot set the value of\n      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.getElementById(lastElementUpdated.id)\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      <FormDefinitionContext.Provider value={definition}>\n        <FormElementOptionsContextProvider>\n          <FormElementLookupsContextProvider>\n            <div\n              className=\"ob-form-container\"\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                            (page: FormTypes.PageElement, index: number) => {\n                              const hasErrors = 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': currentPage.id === page.id,\n                                      'is-completed': 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 className=\"step-title ob-step-title cypress-desktop-step-title\">\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                            <CaptchaSiteKeyContext.Provider\n                              value={captchaSiteKey}\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                                          index,\n                                        ) => (\n                                          <PageFormElements\n                                            key={pageElement.id}\n                                            isActive={\n                                              pageElement.id === 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                                            isFormReadOnly={isReadOnly}\n                                            onChange={handleChange}\n                                            model={submission}\n                                            setFormSubmission={\n                                              setFormSubmission\n                                            }\n                                            isFirstPage={index === 0}\n                                          />\n                                        ),\n                                      )}\n                                    </OnUploadAttachmentContext.Provider>\n                                  </TaskContext.Provider>\n                                </FormIsReadOnlyContext.Provider>\n                              </AttachmentBlobsProvider>\n                            </CaptchaSiteKeyContext.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>keyboard_arrow_left</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('step-progress-mobile-dot', {\n                                  'is-active': currentPage.id === page.id,\n                                  'is-completed': currentPageIndex > index,\n                                  'has-background-danger':\n                                    currentPage.id !== page.id &&\n                                    checkDisplayPageError(page),\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>keyboard_arrow_right</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={buttons?.saveDraft?.label || 'Save Draft'}\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                        <button\n                          type=\"submit\"\n                          className=\"button ob-button is-success ob-button-submit cypress-submit-form-button cypress-submit-form\"\n                          disabled={isPreview || disabled}\n                        >\n                          <CustomisableButtonInner\n                            label={\n                              isInfoPage\n                                ? 'Done'\n                                : buttons?.submit?.label || 'Submit'\n                            }\n                            icon={buttons?.submit?.icon}\n                          />\n                        </button>\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={buttons?.saveDraft?.label || 'Save Draft'}\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={buttons?.cancelPromptNo?.label || 'Back'}\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={buttons?.cancelPromptYes?.label || 'Discard'}\n                            icon={buttons?.cancelPromptYes?.icon}\n                          />\n                        </button>\n                      </>\n                    }\n                  >\n                    <p>\n                      You have unsaved changes, are you sure you want discard\n                      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 wait\n                      for the uploads to complete or continue using the app? If\n                      you click continue the attachments will upload in the\n                      background. Do not close the app until the upload has been\n                      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={buttons?.saveDraft?.label || 'Save Draft'}\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 try\n                      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            </div>\n          </FormElementLookupsContextProvider>\n        </FormElementOptionsContextProvider>\n      </FormDefinitionContext.Provider>\n    </ThemeProvider>\n  )\n}\n\nexport default React.memo(OneBlinkFormBase)\n"]}
         | 
| @@ -180,7 +180,7 @@ const FormElementSwitch = React.memo(function OneBlinkFormElement({ formId, elem | |
| 180 180 | 
             
                        return (React.createElement(FormElementSummary, { element: element, onChange: onChange, value: value }));
         | 
| 181 181 | 
             
                    }
         | 
| 182 182 | 
             
                    case 'captcha': {
         | 
| 183 | 
            -
                        return (React.createElement(FormElementCaptcha, { element: element, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps }));
         | 
| 183 | 
            +
                        return (React.createElement(FormElementCaptcha, { value: value, element: element, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps }));
         | 
| 184 184 | 
             
                    }
         | 
| 185 185 | 
             
                    case 'location': {
         | 
| 186 186 | 
             
                        return (React.createElement(LookupNotification, { autoLookupValue: value, stringifyAutoLookupValue: stringifyLocation, element: element, onLookup: onLookup },
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"OneBlinkFormElements.js","sourceRoot":"","sources":["../../../src/components/renderer/OneBlinkFormElements.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\n\nimport LookupNotification from './LookupNotification'\n\nimport FormElementBarcodeScanner from '../../form-elements/FormElementBarcodeScanner'\nimport FormElementEmail from '../../form-elements/FormElementEmail'\nimport FormElementABN from '../../form-elements/FormElementABN'\nimport FormElementBSB from '../../form-elements/FormElementBSB'\nimport FormElementText from '../../form-elements/FormElementText'\nimport FormElementTextarea from '../../form-elements/FormElementTextarea'\nimport FormElementNumber from '../../form-elements/FormElementNumber'\nimport FormElementHeading from '../../form-elements/FormElementHeading'\nimport FormElementHTML from '../../form-elements/FormElementHTML'\nimport FormElementTelephone from '../../form-elements/FormElementTelephone'\nimport FormElementSelect from '../../form-elements/FormElementSelect'\nimport FormElementDate from '../../form-elements/FormElementDate'\nimport FormElementImage from '../../form-elements/FormElementImage'\nimport FormElementDateTime from '../../form-elements/FormElementDateTime'\nimport FormElementTime from '../../form-elements/FormElementTime'\nimport FormElementCalculation from '../../form-elements/FormElementCalculation'\nimport FormElementRadio from '../../form-elements/FormElementRadio'\nimport FormElementAutocomplete from '../../form-elements/FormElementAutocomplete'\nimport FormElementRepeatableSet from '../../form-elements/FormElementRepeatableSet'\nimport FormElementSignature from '../../form-elements/FormElementSignature'\nimport FormElementCheckBoxes from '../../form-elements/FormElementCheckBoxes'\nimport FormElementFiles, {\n  stringifyAttachments,\n} from '../../form-elements/FormElementFiles'\nimport FormElementForm from '../../form-elements/FormElementForm'\nimport FormElementSection from '../../form-elements/FormElementSection'\nimport FormElementCamera from '../../form-elements/FormElementCamera'\nimport FormElementSummary from '../../form-elements/FormElementSummary'\nimport FormElementCaptcha from '../../form-elements/FormElementCaptcha'\nimport FormElementLocation, {\n  stringifyLocation,\n} from '../../form-elements/FormElementLocation'\nimport FormElementGeoscapeAddress from '../../form-elements/FormElementGeoscapeAddress'\nimport FormElementCompliance from '../../form-elements/FormElementCompliance'\nimport FormElementPointAddress from '../../form-elements/FormElementPointAddress'\nimport FormElementBoolean from '../../form-elements/FormElementBoolean'\nimport FormElementCivicaStreetName from '../../form-elements/FormElementCivicaStreetName'\nimport FormElementCivicaNameRecord from '../../form-elements/FormElementCivicaNameRecord'\nimport FormElementFreshdeskDependentField from '../../form-elements/FormElementFreshdeskDependentField'\nimport FormElementArcGISWebMap from '../../form-elements/FormElementArcGISWebMap'\n\nimport {\n  APINSWTypes,\n  CivicaTypes,\n  FormTypes,\n  GeoscapeTypes,\n  MiscTypes,\n  PointTypes,\n  SubmissionTypes,\n} from '@oneblink/types'\n\nimport { FormSubmissionModelContextProvider } from '../../hooks/useFormSubmissionModelContext'\nimport useBooleanState from '../../hooks/useBooleanState'\nimport { FormElementBinaryStorageValue } from '../../types/attachments'\nimport {\n  FormElementConditionallyShown,\n  FormElementLookupHandler,\n  FormElementsConditionallyShown,\n  FormElementsValidation,\n  FormElementValidation,\n  NestedFormElementValueChangeHandler,\n  IsDirtyProps,\n  UpdateFormElementsHandler,\n} from '../../types/form'\nimport { attachmentsService } from '@oneblink/apps'\nimport FormElementAPINSWLiquorLicence from '../../form-elements/FormElementAPINSWLiquorLicence'\n\nexport type Props<T extends FormTypes._NestedElementsElement> = {\n  formId: number\n  elements: FormTypes.FormElement[]\n  formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n  formElementsValidation: FormElementsValidation | undefined\n  displayValidationMessages: boolean\n  onChange: NestedFormElementValueChangeHandler\n  onLookup: FormElementLookupHandler\n  onUpdateFormElements: UpdateFormElementsHandler\n  // Props passed by repeatable sets\n  isEven?: boolean\n  idPrefix: string\n  model: SubmissionTypes.S3SubmissionData['submission']\n  parentElement: T\n}\n\ninterface FormElementSwitchProps extends IsDirtyProps {\n  formId: number\n  element: FormTypes.FormElement\n  value: unknown | undefined\n  formElementValidation: FormElementValidation | undefined\n  displayValidationMessage: boolean\n  formElementConditionallyShown: FormElementConditionallyShown | undefined\n  id: string\n  isEven: boolean | undefined\n  onChange: NestedFormElementValueChangeHandler\n  onLookup: FormElementLookupHandler\n  onUpdateFormElements: UpdateFormElementsHandler\n}\n\nfunction OneBlinkFormElements<T extends FormTypes._NestedElementsElement>({\n  formId,\n  elements,\n  isEven,\n  idPrefix,\n  displayValidationMessages,\n  formElementsValidation,\n  formElementsConditionallyShown,\n  onChange,\n  onLookup,\n  onUpdateFormElements,\n  model,\n  parentElement,\n}: Props<T>) {\n  return (\n    <FormSubmissionModelContextProvider\n      elements={parentElement.elements}\n      model={model}\n      formElementsConditionallyShown={formElementsConditionallyShown}\n    >\n      {elements.map((element) => {\n        if (element.type === 'section') {\n          if (formElementsConditionallyShown?.[element.id]?.isHidden) {\n            return null\n          }\n\n          return (\n            <div\n              key={element.id}\n              className={clsx(\n                'ob-element cypress-element-container',\n                element.customCssClasses,\n              )}\n            >\n              <FormElementSection\n                formId={formId}\n                element={element}\n                displayValidationMessages={displayValidationMessages}\n                idPrefix={idPrefix}\n                formElementsConditionallyShown={formElementsConditionallyShown}\n                formElementsValidation={formElementsValidation}\n                onChange={onChange}\n                onLookup={onLookup}\n                onUpdateFormElements={onUpdateFormElements}\n                model={model}\n                parentElement={parentElement}\n              />\n            </div>\n          )\n        }\n\n        if (\n          element.type === 'page' ||\n          formElementsConditionallyShown?.[element.name]?.isHidden\n        ) {\n          return null\n        }\n\n        return (\n          <FormElementSwitchContainer\n            key={element.id}\n            formId={formId}\n            element={element}\n            value={model[element.name]}\n            displayValidationMessage={displayValidationMessages}\n            isEven={isEven}\n            id={`${idPrefix}${element.name}`}\n            formElementConditionallyShown={\n              formElementsConditionallyShown?.[element.name]\n            }\n            formElementValidation={formElementsValidation?.[element.name]}\n            onChange={onChange}\n            onLookup={onLookup}\n            onUpdateFormElements={onUpdateFormElements}\n          />\n        )\n      })}\n    </FormSubmissionModelContextProvider>\n  )\n}\n\nexport default React.memo(OneBlinkFormElements)\n\nfunction FormElementSwitchContainer(\n  props: Omit<FormElementSwitchProps, 'isDirty' | 'setIsDirty'>,\n) {\n  const { element, formElementValidation, displayValidationMessage } = props\n  const [isDirty, setIsDirty] = useBooleanState(false)\n\n  const getValidationClass = () => {\n    if (!('elements' in element)) {\n      if (!formElementValidation) {\n        return 'ob-element__valid'\n      }\n      if (isDirty || displayValidationMessage) {\n        return 'ob-element__invalid'\n      }\n    }\n  }\n  const validationClassName = getValidationClass()\n\n  if (element.type === 'page' || element.type === 'section') {\n    return null\n  }\n\n  return (\n    <div\n      id={element.id}\n      className={clsx(\n        'ob-element cypress-element-container',\n        element.customCssClasses ? element.customCssClasses.join(' ') : '',\n        validationClassName,\n      )}\n      data-cypress-element-name={element.name}\n      data-ob-name={element.name}\n    >\n      <FormElementSwitch {...props} isDirty={isDirty} setIsDirty={setIsDirty} />\n    </div>\n  )\n}\n\nconst FormElementSwitch = React.memo(function OneBlinkFormElement({\n  formId,\n  element,\n  value,\n  displayValidationMessage,\n  formElementValidation,\n  formElementConditionallyShown,\n  isEven,\n  id,\n  onChange,\n  onLookup,\n  onUpdateFormElements,\n  isDirty,\n  setIsDirty,\n}: FormElementSwitchProps & IsDirtyProps) {\n  const dirtyProps = React.useMemo(\n    () => ({ isDirty, setIsDirty }),\n    [isDirty, setIsDirty],\n  )\n  const conditionallyShownOptionsElement =\n    formElementConditionallyShown?.type === 'formElement'\n      ? formElementConditionallyShown\n      : undefined\n  const validationMessage =\n    typeof formElementValidation === 'string'\n      ? formElementValidation\n      : undefined\n  switch (element.type) {\n    case 'heading': {\n      return <FormElementHeading element={element} />\n    }\n    case 'html': {\n      return <FormElementHTML element={element} />\n    }\n    case 'date': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementDate\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementDate\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'email': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementEmail\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementEmail\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'text': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementText\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementText\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'abn': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementABN\n            id={id}\n            element={element}\n            value={value as MiscTypes.ABNRecord | undefined}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementABN\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'bsb': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementBSB\n            id={id}\n            formId={formId}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementBSB\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'barcodeScanner': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementBarcodeScanner\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementBarcodeScanner\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'textarea': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementTextarea\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementTextarea\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'number': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementNumber\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementNumber\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'telephone': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementTelephone\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementTelephone\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'autocomplete': {\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementAutocomplete\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementAutocomplete\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n            onUpdateFormElements={onUpdateFormElements}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'select': {\n      return (\n        <LookupNotification\n          autoLookupValue={!element.multi ? value : undefined}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementSelect\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementSelect\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n            onUpdateFormElements={onUpdateFormElements}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'radio': {\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementRadio\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementRadio\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n            onUpdateFormElements={onUpdateFormElements}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'draw': {\n      return (\n        <FormElementSignature\n          id={id}\n          element={element}\n          value={value as FormElementBinaryStorageValue}\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementSignature\n            >['onChange']\n          }\n          validationMessage={validationMessage}\n          displayValidationMessage={displayValidationMessage}\n          {...dirtyProps}\n        />\n      )\n    }\n    case 'calculation': {\n      return (\n        <FormElementCalculation\n          element={element}\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementCalculation\n            >['onChange']\n          }\n          value={value}\n        />\n      )\n    }\n    case 'repeatableSet': {\n      return (\n        <FormElementRepeatableSet\n          formId={formId}\n          id={id}\n          isEven={!isEven}\n          element={element}\n          value={\n            value as\n              | Array<SubmissionTypes.S3SubmissionData['submission']>\n              | undefined\n          }\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementRepeatableSet\n            >['onChange']\n          }\n          onLookup={onLookup}\n          formElementConditionallyShown={formElementConditionallyShown}\n          formElementValidation={formElementValidation}\n          displayValidationMessage={displayValidationMessage}\n          onUpdateFormElements={onUpdateFormElements}\n          {...dirtyProps}\n        />\n      )\n    }\n    case 'image': {\n      return <FormElementImage element={element} />\n    }\n    case 'datetime': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementDateTime\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementDateTime\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'time': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementTime\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementTime\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'checkboxes': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementCheckBoxes\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementCheckBoxes\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n            onUpdateFormElements={onUpdateFormElements}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'files': {\n      return (\n        <LookupNotification\n          element={element}\n          onLookup={onLookup}\n          autoLookupValue={value}\n          stringifyAutoLookupValue={\n            stringifyAttachments as React.ComponentProps<\n              typeof LookupNotification\n            >['stringifyAutoLookupValue']\n          }\n        >\n          <FormElementFiles\n            id={id}\n            element={element}\n            value={value as attachmentsService.Attachment[] | undefined}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementFiles\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'infoPage':\n    case 'form': {\n      return (\n        <FormElementForm\n          formId={formId}\n          id={id}\n          element={element}\n          value={\n            value as SubmissionTypes.S3SubmissionData['submission'] | undefined\n          }\n          onChange={\n            onChange as React.ComponentProps<typeof FormElementForm>['onChange']\n          }\n          onLookup={onLookup}\n          displayValidationMessages={displayValidationMessage}\n          formElementValidation={formElementValidation}\n          formElementConditionallyShown={formElementConditionallyShown}\n          onUpdateFormElements={onUpdateFormElements}\n        />\n      )\n    }\n    case 'camera': {\n      return (\n        <FormElementCamera\n          id={id}\n          element={element}\n          value={value as FormElementBinaryStorageValue}\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementCamera\n            >['onChange']\n          }\n          validationMessage={validationMessage}\n          displayValidationMessage={displayValidationMessage}\n          {...dirtyProps}\n        />\n      )\n    }\n    case 'summary': {\n      return (\n        <FormElementSummary\n          element={element}\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementSummary\n            >['onChange']\n          }\n          value={value}\n        />\n      )\n    }\n    case 'captcha': {\n      return (\n        <FormElementCaptcha\n          element={element}\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementCaptcha\n            >['onChange']\n          }\n          validationMessage={validationMessage}\n          displayValidationMessage={displayValidationMessage}\n          {...dirtyProps}\n        />\n      )\n    }\n    case 'location': {\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          stringifyAutoLookupValue={\n            stringifyLocation as React.ComponentProps<\n              typeof LookupNotification\n            >['stringifyAutoLookupValue']\n          }\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementLocation\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementLocation\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'geoscapeAddress': {\n      const v = value as GeoscapeTypes.GeoscapeAddress | undefined\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementGeoscapeAddress\n            id={id}\n            formId={formId}\n            element={element}\n            value={v}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementGeoscapeAddress\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'compliance': {\n      return (\n        <LookupNotification\n          autoLookupValue={\n            value ? (value as { value: unknown }).value : undefined\n          }\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementCompliance\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementCompliance\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n            isEven={isEven}\n            onUpdateFormElements={onUpdateFormElements}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'freshdeskDependentField': {\n      return (\n        <FormElementFreshdeskDependentField\n          formId={formId}\n          id={id}\n          element={element}\n          value={\n            value as SubmissionTypes.S3SubmissionData['submission'] | undefined\n          }\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementFreshdeskDependentField\n            >['onChange']\n          }\n          onLookup={onLookup}\n          displayValidationMessages={displayValidationMessage}\n          formElementValidation={formElementValidation}\n          formElementConditionallyShown={formElementConditionallyShown}\n          onUpdateFormElements={onUpdateFormElements}\n        />\n      )\n    }\n    case 'pointAddress': {\n      const v = value as PointTypes.PointAddress | undefined\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementPointAddress\n            id={id}\n            formId={formId}\n            element={element}\n            value={v}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementPointAddress\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'boolean': {\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementBoolean\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementBoolean\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'civicaStreetName': {\n      const v = value as CivicaTypes.CivicaStreetName | undefined\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementCivicaStreetName\n            id={id}\n            formId={formId}\n            element={element}\n            value={v}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementCivicaStreetName\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'civicaNameRecord': {\n      return (\n        <FormElementCivicaNameRecord\n          formId={formId}\n          id={id}\n          element={element}\n          value={\n            value as SubmissionTypes.S3SubmissionData['submission'] | undefined\n          }\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementCivicaNameRecord\n            >['onChange']\n          }\n          onLookup={onLookup}\n          displayValidationMessages={displayValidationMessage}\n          formElementValidation={formElementValidation}\n          formElementConditionallyShown={formElementConditionallyShown}\n          onUpdateFormElements={onUpdateFormElements}\n        />\n      )\n    }\n    case 'apiNSWLiquorLicence': {\n      const v = value as APINSWTypes.LiquorLicenceDetails | undefined\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementAPINSWLiquorLicence\n            formId={formId}\n            id={id}\n            element={element}\n            value={v}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementAPINSWLiquorLicence\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'arcGISWebMap': {\n      return <FormElementArcGISWebMap id={id} element={element} />\n    }\n    default: {\n      console.warn('Invalid element', element)\n      return null\n    }\n  }\n})\n"]}
         | 
| 1 | 
            +
            {"version":3,"file":"OneBlinkFormElements.js","sourceRoot":"","sources":["../../../src/components/renderer/OneBlinkFormElements.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\n\nimport LookupNotification from './LookupNotification'\n\nimport FormElementBarcodeScanner from '../../form-elements/FormElementBarcodeScanner'\nimport FormElementEmail from '../../form-elements/FormElementEmail'\nimport FormElementABN from '../../form-elements/FormElementABN'\nimport FormElementBSB from '../../form-elements/FormElementBSB'\nimport FormElementText from '../../form-elements/FormElementText'\nimport FormElementTextarea from '../../form-elements/FormElementTextarea'\nimport FormElementNumber from '../../form-elements/FormElementNumber'\nimport FormElementHeading from '../../form-elements/FormElementHeading'\nimport FormElementHTML from '../../form-elements/FormElementHTML'\nimport FormElementTelephone from '../../form-elements/FormElementTelephone'\nimport FormElementSelect from '../../form-elements/FormElementSelect'\nimport FormElementDate from '../../form-elements/FormElementDate'\nimport FormElementImage from '../../form-elements/FormElementImage'\nimport FormElementDateTime from '../../form-elements/FormElementDateTime'\nimport FormElementTime from '../../form-elements/FormElementTime'\nimport FormElementCalculation from '../../form-elements/FormElementCalculation'\nimport FormElementRadio from '../../form-elements/FormElementRadio'\nimport FormElementAutocomplete from '../../form-elements/FormElementAutocomplete'\nimport FormElementRepeatableSet from '../../form-elements/FormElementRepeatableSet'\nimport FormElementSignature from '../../form-elements/FormElementSignature'\nimport FormElementCheckBoxes from '../../form-elements/FormElementCheckBoxes'\nimport FormElementFiles, {\n  stringifyAttachments,\n} from '../../form-elements/FormElementFiles'\nimport FormElementForm from '../../form-elements/FormElementForm'\nimport FormElementSection from '../../form-elements/FormElementSection'\nimport FormElementCamera from '../../form-elements/FormElementCamera'\nimport FormElementSummary from '../../form-elements/FormElementSummary'\nimport FormElementCaptcha from '../../form-elements/FormElementCaptcha'\nimport FormElementLocation, {\n  stringifyLocation,\n} from '../../form-elements/FormElementLocation'\nimport FormElementGeoscapeAddress from '../../form-elements/FormElementGeoscapeAddress'\nimport FormElementCompliance from '../../form-elements/FormElementCompliance'\nimport FormElementPointAddress from '../../form-elements/FormElementPointAddress'\nimport FormElementBoolean from '../../form-elements/FormElementBoolean'\nimport FormElementCivicaStreetName from '../../form-elements/FormElementCivicaStreetName'\nimport FormElementCivicaNameRecord from '../../form-elements/FormElementCivicaNameRecord'\nimport FormElementFreshdeskDependentField from '../../form-elements/FormElementFreshdeskDependentField'\nimport FormElementArcGISWebMap from '../../form-elements/FormElementArcGISWebMap'\n\nimport {\n  APINSWTypes,\n  CivicaTypes,\n  FormTypes,\n  GeoscapeTypes,\n  MiscTypes,\n  PointTypes,\n  SubmissionTypes,\n} from '@oneblink/types'\n\nimport { FormSubmissionModelContextProvider } from '../../hooks/useFormSubmissionModelContext'\nimport useBooleanState from '../../hooks/useBooleanState'\nimport { FormElementBinaryStorageValue } from '../../types/attachments'\nimport {\n  FormElementConditionallyShown,\n  FormElementLookupHandler,\n  FormElementsConditionallyShown,\n  FormElementsValidation,\n  FormElementValidation,\n  NestedFormElementValueChangeHandler,\n  IsDirtyProps,\n  UpdateFormElementsHandler,\n} from '../../types/form'\nimport { attachmentsService } from '@oneblink/apps'\nimport FormElementAPINSWLiquorLicence from '../../form-elements/FormElementAPINSWLiquorLicence'\n\nexport type Props<T extends FormTypes._NestedElementsElement> = {\n  formId: number\n  elements: FormTypes.FormElement[]\n  formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n  formElementsValidation: FormElementsValidation | undefined\n  displayValidationMessages: boolean\n  onChange: NestedFormElementValueChangeHandler\n  onLookup: FormElementLookupHandler\n  onUpdateFormElements: UpdateFormElementsHandler\n  // Props passed by repeatable sets\n  isEven?: boolean\n  idPrefix: string\n  model: SubmissionTypes.S3SubmissionData['submission']\n  parentElement: T\n}\n\ninterface FormElementSwitchProps extends IsDirtyProps {\n  formId: number\n  element: FormTypes.FormElement\n  value: unknown | undefined\n  formElementValidation: FormElementValidation | undefined\n  displayValidationMessage: boolean\n  formElementConditionallyShown: FormElementConditionallyShown | undefined\n  id: string\n  isEven: boolean | undefined\n  onChange: NestedFormElementValueChangeHandler\n  onLookup: FormElementLookupHandler\n  onUpdateFormElements: UpdateFormElementsHandler\n}\n\nfunction OneBlinkFormElements<T extends FormTypes._NestedElementsElement>({\n  formId,\n  elements,\n  isEven,\n  idPrefix,\n  displayValidationMessages,\n  formElementsValidation,\n  formElementsConditionallyShown,\n  onChange,\n  onLookup,\n  onUpdateFormElements,\n  model,\n  parentElement,\n}: Props<T>) {\n  return (\n    <FormSubmissionModelContextProvider\n      elements={parentElement.elements}\n      model={model}\n      formElementsConditionallyShown={formElementsConditionallyShown}\n    >\n      {elements.map((element) => {\n        if (element.type === 'section') {\n          if (formElementsConditionallyShown?.[element.id]?.isHidden) {\n            return null\n          }\n\n          return (\n            <div\n              key={element.id}\n              className={clsx(\n                'ob-element cypress-element-container',\n                element.customCssClasses,\n              )}\n            >\n              <FormElementSection\n                formId={formId}\n                element={element}\n                displayValidationMessages={displayValidationMessages}\n                idPrefix={idPrefix}\n                formElementsConditionallyShown={formElementsConditionallyShown}\n                formElementsValidation={formElementsValidation}\n                onChange={onChange}\n                onLookup={onLookup}\n                onUpdateFormElements={onUpdateFormElements}\n                model={model}\n                parentElement={parentElement}\n              />\n            </div>\n          )\n        }\n\n        if (\n          element.type === 'page' ||\n          formElementsConditionallyShown?.[element.name]?.isHidden\n        ) {\n          return null\n        }\n\n        return (\n          <FormElementSwitchContainer\n            key={element.id}\n            formId={formId}\n            element={element}\n            value={model[element.name]}\n            displayValidationMessage={displayValidationMessages}\n            isEven={isEven}\n            id={`${idPrefix}${element.name}`}\n            formElementConditionallyShown={\n              formElementsConditionallyShown?.[element.name]\n            }\n            formElementValidation={formElementsValidation?.[element.name]}\n            onChange={onChange}\n            onLookup={onLookup}\n            onUpdateFormElements={onUpdateFormElements}\n          />\n        )\n      })}\n    </FormSubmissionModelContextProvider>\n  )\n}\n\nexport default React.memo(OneBlinkFormElements)\n\nfunction FormElementSwitchContainer(\n  props: Omit<FormElementSwitchProps, 'isDirty' | 'setIsDirty'>,\n) {\n  const { element, formElementValidation, displayValidationMessage } = props\n  const [isDirty, setIsDirty] = useBooleanState(false)\n\n  const getValidationClass = () => {\n    if (!('elements' in element)) {\n      if (!formElementValidation) {\n        return 'ob-element__valid'\n      }\n      if (isDirty || displayValidationMessage) {\n        return 'ob-element__invalid'\n      }\n    }\n  }\n  const validationClassName = getValidationClass()\n\n  if (element.type === 'page' || element.type === 'section') {\n    return null\n  }\n\n  return (\n    <div\n      id={element.id}\n      className={clsx(\n        'ob-element cypress-element-container',\n        element.customCssClasses ? element.customCssClasses.join(' ') : '',\n        validationClassName,\n      )}\n      data-cypress-element-name={element.name}\n      data-ob-name={element.name}\n    >\n      <FormElementSwitch {...props} isDirty={isDirty} setIsDirty={setIsDirty} />\n    </div>\n  )\n}\n\nconst FormElementSwitch = React.memo(function OneBlinkFormElement({\n  formId,\n  element,\n  value,\n  displayValidationMessage,\n  formElementValidation,\n  formElementConditionallyShown,\n  isEven,\n  id,\n  onChange,\n  onLookup,\n  onUpdateFormElements,\n  isDirty,\n  setIsDirty,\n}: FormElementSwitchProps & IsDirtyProps) {\n  const dirtyProps = React.useMemo(\n    () => ({ isDirty, setIsDirty }),\n    [isDirty, setIsDirty],\n  )\n  const conditionallyShownOptionsElement =\n    formElementConditionallyShown?.type === 'formElement'\n      ? formElementConditionallyShown\n      : undefined\n  const validationMessage =\n    typeof formElementValidation === 'string'\n      ? formElementValidation\n      : undefined\n  switch (element.type) {\n    case 'heading': {\n      return <FormElementHeading element={element} />\n    }\n    case 'html': {\n      return <FormElementHTML element={element} />\n    }\n    case 'date': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementDate\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementDate\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'email': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementEmail\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementEmail\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'text': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementText\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementText\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'abn': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementABN\n            id={id}\n            element={element}\n            value={value as MiscTypes.ABNRecord | undefined}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementABN\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'bsb': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementBSB\n            id={id}\n            formId={formId}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementBSB\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'barcodeScanner': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementBarcodeScanner\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementBarcodeScanner\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'textarea': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementTextarea\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementTextarea\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'number': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementNumber\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementNumber\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'telephone': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementTelephone\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementTelephone\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'autocomplete': {\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementAutocomplete\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementAutocomplete\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n            onUpdateFormElements={onUpdateFormElements}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'select': {\n      return (\n        <LookupNotification\n          autoLookupValue={!element.multi ? value : undefined}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementSelect\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementSelect\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n            onUpdateFormElements={onUpdateFormElements}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'radio': {\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementRadio\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementRadio\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n            onUpdateFormElements={onUpdateFormElements}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'draw': {\n      return (\n        <FormElementSignature\n          id={id}\n          element={element}\n          value={value as FormElementBinaryStorageValue}\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementSignature\n            >['onChange']\n          }\n          validationMessage={validationMessage}\n          displayValidationMessage={displayValidationMessage}\n          {...dirtyProps}\n        />\n      )\n    }\n    case 'calculation': {\n      return (\n        <FormElementCalculation\n          element={element}\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementCalculation\n            >['onChange']\n          }\n          value={value}\n        />\n      )\n    }\n    case 'repeatableSet': {\n      return (\n        <FormElementRepeatableSet\n          formId={formId}\n          id={id}\n          isEven={!isEven}\n          element={element}\n          value={\n            value as\n              | Array<SubmissionTypes.S3SubmissionData['submission']>\n              | undefined\n          }\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementRepeatableSet\n            >['onChange']\n          }\n          onLookup={onLookup}\n          formElementConditionallyShown={formElementConditionallyShown}\n          formElementValidation={formElementValidation}\n          displayValidationMessage={displayValidationMessage}\n          onUpdateFormElements={onUpdateFormElements}\n          {...dirtyProps}\n        />\n      )\n    }\n    case 'image': {\n      return <FormElementImage element={element} />\n    }\n    case 'datetime': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementDateTime\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementDateTime\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'time': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementTime\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementTime\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'checkboxes': {\n      return (\n        <LookupNotification element={element} onLookup={onLookup}>\n          <FormElementCheckBoxes\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementCheckBoxes\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n            onUpdateFormElements={onUpdateFormElements}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'files': {\n      return (\n        <LookupNotification\n          element={element}\n          onLookup={onLookup}\n          autoLookupValue={value}\n          stringifyAutoLookupValue={\n            stringifyAttachments as React.ComponentProps<\n              typeof LookupNotification\n            >['stringifyAutoLookupValue']\n          }\n        >\n          <FormElementFiles\n            id={id}\n            element={element}\n            value={value as attachmentsService.Attachment[] | undefined}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementFiles\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'infoPage':\n    case 'form': {\n      return (\n        <FormElementForm\n          formId={formId}\n          id={id}\n          element={element}\n          value={\n            value as SubmissionTypes.S3SubmissionData['submission'] | undefined\n          }\n          onChange={\n            onChange as React.ComponentProps<typeof FormElementForm>['onChange']\n          }\n          onLookup={onLookup}\n          displayValidationMessages={displayValidationMessage}\n          formElementValidation={formElementValidation}\n          formElementConditionallyShown={formElementConditionallyShown}\n          onUpdateFormElements={onUpdateFormElements}\n        />\n      )\n    }\n    case 'camera': {\n      return (\n        <FormElementCamera\n          id={id}\n          element={element}\n          value={value as FormElementBinaryStorageValue}\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementCamera\n            >['onChange']\n          }\n          validationMessage={validationMessage}\n          displayValidationMessage={displayValidationMessage}\n          {...dirtyProps}\n        />\n      )\n    }\n    case 'summary': {\n      return (\n        <FormElementSummary\n          element={element}\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementSummary\n            >['onChange']\n          }\n          value={value}\n        />\n      )\n    }\n    case 'captcha': {\n      return (\n        <FormElementCaptcha\n          value={value as string | undefined}\n          element={element}\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementCaptcha\n            >['onChange']\n          }\n          validationMessage={validationMessage}\n          displayValidationMessage={displayValidationMessage}\n          {...dirtyProps}\n        />\n      )\n    }\n    case 'location': {\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          stringifyAutoLookupValue={\n            stringifyLocation as React.ComponentProps<\n              typeof LookupNotification\n            >['stringifyAutoLookupValue']\n          }\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementLocation\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementLocation\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'geoscapeAddress': {\n      const v = value as GeoscapeTypes.GeoscapeAddress | undefined\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementGeoscapeAddress\n            id={id}\n            formId={formId}\n            element={element}\n            value={v}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementGeoscapeAddress\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'compliance': {\n      return (\n        <LookupNotification\n          autoLookupValue={\n            value ? (value as { value: unknown }).value : undefined\n          }\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementCompliance\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementCompliance\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n            isEven={isEven}\n            onUpdateFormElements={onUpdateFormElements}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'freshdeskDependentField': {\n      return (\n        <FormElementFreshdeskDependentField\n          formId={formId}\n          id={id}\n          element={element}\n          value={\n            value as SubmissionTypes.S3SubmissionData['submission'] | undefined\n          }\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementFreshdeskDependentField\n            >['onChange']\n          }\n          onLookup={onLookup}\n          displayValidationMessages={displayValidationMessage}\n          formElementValidation={formElementValidation}\n          formElementConditionallyShown={formElementConditionallyShown}\n          onUpdateFormElements={onUpdateFormElements}\n        />\n      )\n    }\n    case 'pointAddress': {\n      const v = value as PointTypes.PointAddress | undefined\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementPointAddress\n            id={id}\n            formId={formId}\n            element={element}\n            value={v}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementPointAddress\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'boolean': {\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementBoolean\n            id={id}\n            element={element}\n            value={value}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementBoolean\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'civicaStreetName': {\n      const v = value as CivicaTypes.CivicaStreetName | undefined\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementCivicaStreetName\n            id={id}\n            formId={formId}\n            element={element}\n            value={v}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementCivicaStreetName\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'civicaNameRecord': {\n      return (\n        <FormElementCivicaNameRecord\n          formId={formId}\n          id={id}\n          element={element}\n          value={\n            value as SubmissionTypes.S3SubmissionData['submission'] | undefined\n          }\n          onChange={\n            onChange as React.ComponentProps<\n              typeof FormElementCivicaNameRecord\n            >['onChange']\n          }\n          onLookup={onLookup}\n          displayValidationMessages={displayValidationMessage}\n          formElementValidation={formElementValidation}\n          formElementConditionallyShown={formElementConditionallyShown}\n          onUpdateFormElements={onUpdateFormElements}\n        />\n      )\n    }\n    case 'apiNSWLiquorLicence': {\n      const v = value as APINSWTypes.LiquorLicenceDetails | undefined\n      return (\n        <LookupNotification\n          autoLookupValue={value}\n          element={element}\n          onLookup={onLookup}\n        >\n          <FormElementAPINSWLiquorLicence\n            formId={formId}\n            id={id}\n            element={element}\n            value={v}\n            onChange={\n              onChange as React.ComponentProps<\n                typeof FormElementAPINSWLiquorLicence\n              >['onChange']\n            }\n            validationMessage={validationMessage}\n            displayValidationMessage={displayValidationMessage}\n            {...dirtyProps}\n          />\n        </LookupNotification>\n      )\n    }\n    case 'arcGISWebMap': {\n      return <FormElementArcGISWebMap id={id} element={element} />\n    }\n    default: {\n      console.warn('Invalid element', element)\n      return null\n    }\n  }\n})\n"]}
         | 
| @@ -9,10 +9,11 @@ export type Props = { | |
| 9 9 | 
             
                model: SubmissionTypes.S3SubmissionData['submission'];
         | 
| 10 10 | 
             
                formElementsConditionallyShown: FormElementsConditionallyShown | undefined;
         | 
| 11 11 | 
             
                formElementsValidation: FormElementsValidation | undefined;
         | 
| 12 | 
            +
                isFormReadOnly: boolean;
         | 
| 13 | 
            +
                isFirstPage: boolean;
         | 
| 12 14 | 
             
                onChange: NestedFormElementValueChangeHandler;
         | 
| 13 15 | 
             
                setFormSubmission: SetFormSubmission;
         | 
| 14 | 
            -
                isFormReadOnly: boolean;
         | 
| 15 16 | 
             
            };
         | 
| 16 | 
            -
            declare function PageFormElements({ formId, isActive, pageElement, model, displayValidationMessages, formElementsConditionallyShown, formElementsValidation, isFormReadOnly, onChange, setFormSubmission, }: Props): React.JSX.Element;
         | 
| 17 | 
            +
            declare function PageFormElements({ formId, isActive, pageElement, model, displayValidationMessages, formElementsConditionallyShown, formElementsValidation, isFormReadOnly, isFirstPage, onChange, setFormSubmission, }: Props): React.JSX.Element;
         | 
| 17 18 | 
             
            declare const _default: React.MemoExoticComponent<typeof PageFormElements>;
         | 
| 18 19 | 
             
            export default _default;
         | 
| @@ -4,7 +4,7 @@ import OneBlinkFormElements from './OneBlinkFormElements'; | |
| 4 4 | 
             
            import useFormDefinition from '../../hooks/useFormDefinition';
         | 
| 5 5 | 
             
            import { IsPageVisibleProvider } from '../../hooks/useIsPageVisible';
         | 
| 6 6 | 
             
            import { FlatpickrGuidProvider } from '../../hooks/useFlatpickrGuid';
         | 
| 7 | 
            -
            function PageFormElements({ formId, isActive, pageElement, model, displayValidationMessages, formElementsConditionallyShown, formElementsValidation, isFormReadOnly, onChange, setFormSubmission, }) {
         | 
| 7 | 
            +
            function PageFormElements({ formId, isActive, pageElement, model, displayValidationMessages, formElementsConditionallyShown, formElementsValidation, isFormReadOnly, isFirstPage = false, onChange, setFormSubmission, }) {
         | 
| 8 8 | 
             
                // Effect responsible for focusing the first element on a page when the next button is focused and used to nav forwards a page
         | 
| 9 9 | 
             
                React.useEffect(() => {
         | 
| 10 10 | 
             
                    var _a;
         | 
| @@ -12,14 +12,14 @@ function PageFormElements({ formId, isActive, pageElement, model, displayValidat | |
| 12 12 | 
             
                        const selector = 'a:not([disabled]), button:not([disabled]), input:not([disabled], [hidden]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([disabled]):not([tabindex="-1"])';
         | 
| 13 13 | 
             
                        const focusableElementsOnPage = (_a = document
         | 
| 14 14 | 
             
                            .getElementById(pageElement.id)) === null || _a === void 0 ? void 0 : _a.querySelectorAll(selector);
         | 
| 15 | 
            -
                        if (focusableElementsOnPage === null || focusableElementsOnPage === void 0 ? void 0 : focusableElementsOnPage.length) {
         | 
| 15 | 
            +
                        if ((focusableElementsOnPage === null || focusableElementsOnPage === void 0 ? void 0 : focusableElementsOnPage.length) && !isFirstPage) {
         | 
| 16 16 | 
             
                            const firstElementOnPage = focusableElementsOnPage[0];
         | 
| 17 17 | 
             
                            if (firstElementOnPage instanceof HTMLElement) {
         | 
| 18 18 | 
             
                                firstElementOnPage.focus();
         | 
| 19 19 | 
             
                            }
         | 
| 20 20 | 
             
                        }
         | 
| 21 21 | 
             
                    }
         | 
| 22 | 
            -
                }, [isActive, pageElement.id, pageElement.label, isFormReadOnly]);
         | 
| 22 | 
            +
                }, [isActive, pageElement.id, pageElement.label, isFormReadOnly, isFirstPage]);
         | 
| 23 23 | 
             
                const handleLookup = React.useCallback((mergeLookupResults) => {
         | 
| 24 24 | 
             
                    setFormSubmission((currentFormSubmission) => {
         | 
| 25 25 | 
             
                        const { submission, elements, executedLookups } = mergeLookupResults({
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"PageFormElements.js","sourceRoot":"","sources":["../../../src/components/renderer/PageFormElements.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,oBAAoB,MAAM,wBAAwB,CAAA;AACzD,OAAO,iBAAiB,MAAM,+BAA+B,CAAA;AAS7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA; | 
| 1 | 
            +
            {"version":3,"file":"PageFormElements.js","sourceRoot":"","sources":["../../../src/components/renderer/PageFormElements.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport OneBlinkFormElements from './OneBlinkFormElements'\nimport useFormDefinition from '../../hooks/useFormDefinition'\nimport {\n  FormElementLookupHandler,\n  FormElementsConditionallyShown,\n  FormElementsValidation,\n  NestedFormElementValueChangeHandler,\n  SetFormSubmission,\n  UpdateFormElementsHandler,\n} from '../../types/form'\nimport { IsPageVisibleProvider } from '../../hooks/useIsPageVisible'\nimport { FlatpickrGuidProvider } from '../../hooks/useFlatpickrGuid'\n\nexport type Props = {\n  formId: number\n  isActive: boolean\n  pageElement: FormTypes.PageElement\n  displayValidationMessages: boolean\n  model: SubmissionTypes.S3SubmissionData['submission']\n  formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n  formElementsValidation: FormElementsValidation | undefined\n  isFormReadOnly: boolean\n  isFirstPage: boolean\n  onChange: NestedFormElementValueChangeHandler\n  setFormSubmission: SetFormSubmission\n}\n\nfunction PageFormElements({\n  formId,\n  isActive,\n  pageElement,\n  model,\n  displayValidationMessages,\n  formElementsConditionallyShown,\n  formElementsValidation,\n  isFormReadOnly,\n  isFirstPage = false,\n  onChange,\n  setFormSubmission,\n}: Props) {\n  // Effect responsible for focusing the first element on a page when the next button is focused and used to nav forwards a page\n  React.useEffect(() => {\n    if (isActive && !isFormReadOnly) {\n      const selector =\n        'a:not([disabled]), button:not([disabled]), input:not([disabled], [hidden]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([disabled]):not([tabindex=\"-1\"])'\n      const focusableElementsOnPage = document\n        .getElementById(pageElement.id)\n        ?.querySelectorAll(selector)\n      if (focusableElementsOnPage?.length && !isFirstPage) {\n        const firstElementOnPage = focusableElementsOnPage[0]\n        if (firstElementOnPage instanceof HTMLElement) {\n          firstElementOnPage.focus()\n        }\n      }\n    }\n  }, [isActive, pageElement.id, pageElement.label, isFormReadOnly, isFirstPage])\n\n  const handleLookup = React.useCallback<FormElementLookupHandler>(\n    (mergeLookupResults) => {\n      setFormSubmission((currentFormSubmission) => {\n        const { submission, elements, executedLookups } = mergeLookupResults({\n          elements: pageElement.elements,\n          submission: currentFormSubmission.submission,\n          lastElementUpdated: currentFormSubmission.lastElementUpdated,\n          executedLookups: currentFormSubmission.executedLookups,\n        })\n\n        const definition = {\n          ...currentFormSubmission.definition,\n        }\n        if (pageElement.id === formId.toString()) {\n          definition.elements = elements\n        } else {\n          definition.elements = currentFormSubmission.definition.elements.map(\n            (formElement) => {\n              if (\n                formElement.id === pageElement.id &&\n                formElement.type === 'page'\n              ) {\n                return {\n                  ...formElement,\n                  elements,\n                }\n              } else {\n                return formElement\n              }\n            },\n          )\n        }\n\n        return {\n          submission,\n          definition,\n          lastElementUpdated: currentFormSubmission.lastElementUpdated,\n          executedLookups,\n        }\n      })\n    },\n    [formId, pageElement.elements, pageElement.id, setFormSubmission],\n  )\n\n  const form = useFormDefinition()\n\n  const handleUpdateFormElements = React.useCallback<UpdateFormElementsHandler>(\n    (updateFormElements) => {\n      setFormSubmission((currentFormSubmission) => {\n        const definition = {\n          ...currentFormSubmission.definition,\n        }\n\n        if (pageElement.id === formId.toString()) {\n          definition.elements = updateFormElements(\n            currentFormSubmission.definition.elements,\n          )\n        } else {\n          definition.elements = currentFormSubmission.definition.elements.map(\n            (formElement) => {\n              if (\n                formElement.id === pageElement.id &&\n                formElement.type === 'page'\n              ) {\n                return {\n                  ...formElement,\n                  elements: updateFormElements(formElement.elements),\n                }\n              } else {\n                return formElement\n              }\n            },\n          )\n        }\n\n        return {\n          ...currentFormSubmission,\n          definition,\n        }\n      })\n    },\n    [formId, pageElement.id, setFormSubmission],\n  )\n\n  return (\n    <IsPageVisibleProvider isPageVisible={isActive}>\n      <FlatpickrGuidProvider>\n        <div\n          id={pageElement.id}\n          key={pageElement.id}\n          className={clsx('ob-page step-content is-active cypress-page', {\n            'is-invisible': !isActive,\n          })}\n        >\n          <OneBlinkFormElements\n            formId={formId}\n            model={model}\n            parentElement={form}\n            formElementsConditionallyShown={formElementsConditionallyShown}\n            formElementsValidation={formElementsValidation}\n            displayValidationMessages={displayValidationMessages}\n            elements={pageElement.elements}\n            onChange={onChange}\n            onLookup={handleLookup}\n            onUpdateFormElements={handleUpdateFormElements}\n            idPrefix=\"\"\n          />\n        </div>\n      </FlatpickrGuidProvider>\n    </IsPageVisibleProvider>\n  )\n}\n\nexport default React.memo(PageFormElements)\n"]}
         | 
| @@ -6,7 +6,8 @@ type Props = { | |
| 6 6 | 
             
                onChange: FormElementValueChangeHandler<string>;
         | 
| 7 7 | 
             
                displayValidationMessage: boolean;
         | 
| 8 8 | 
             
                validationMessage: string | undefined;
         | 
| 9 | 
            +
                value: string | undefined;
         | 
| 9 10 | 
             
            };
         | 
| 10 | 
            -
            declare function FormElementCaptcha({ element, onChange, validationMessage, displayValidationMessage, }: Props): React.JSX.Element;
         | 
| 11 | 
            +
            declare function FormElementCaptcha({ element, onChange, validationMessage, displayValidationMessage, value, }: Props): React.JSX.Element;
         | 
| 11 12 | 
             
            declare const _default: React.MemoExoticComponent<typeof FormElementCaptcha>;
         | 
| 12 13 | 
             
            export default _default;
         | 
| @@ -1,15 +1,24 @@ | |
| 1 1 | 
             
            import * as React from 'react';
         | 
| 2 2 | 
             
            import ReCAPTCHA from 'react-google-recaptcha';
         | 
| 3 3 | 
             
            import useCaptchaSiteKey from '../hooks/useCaptchaSiteKey';
         | 
| 4 | 
            -
            function FormElementCaptcha({ element, onChange, validationMessage, displayValidationMessage, }) {
         | 
| 4 | 
            +
            function FormElementCaptcha({ element, onChange, validationMessage, displayValidationMessage, value, }) {
         | 
| 5 5 | 
             
                const captchaSiteKey = useCaptchaSiteKey();
         | 
| 6 | 
            +
                const ref = React.useRef(null);
         | 
| 7 | 
            +
                React.useEffect(() => {
         | 
| 8 | 
            +
                    if (ref.current) {
         | 
| 9 | 
            +
                        const refValue = ref.current.getValue();
         | 
| 10 | 
            +
                        if (refValue && !value) {
         | 
| 11 | 
            +
                            ref.current.reset();
         | 
| 12 | 
            +
                        }
         | 
| 13 | 
            +
                    }
         | 
| 14 | 
            +
                }, [value]);
         | 
| 6 15 | 
             
                return (React.createElement("div", { className: "cypress-captcha-element" },
         | 
| 7 16 | 
             
                    React.createElement("div", { className: "ob-form__element ob-captcha" },
         | 
| 8 17 | 
             
                        React.createElement(ReCAPTCHA, { sitekey: captchaSiteKey || '', onChange: (val) => {
         | 
| 9 18 | 
             
                                onChange(element, {
         | 
| 10 19 | 
             
                                    value: val || undefined,
         | 
| 11 20 | 
             
                                });
         | 
| 12 | 
            -
                            }, className: "ob-input cypress-captcha-control" }),
         | 
| 21 | 
            +
                            }, className: "ob-input cypress-captcha-control", ref: ref }),
         | 
| 13 22 | 
             
                        displayValidationMessage && !!validationMessage && (React.createElement("div", { role: "alert", className: "has-margin-top-8" },
         | 
| 14 23 | 
             
                            React.createElement("div", { className: "has-text-danger ob-error__text cypress-required cypress-validation-message" }, validationMessage))))));
         | 
| 15 24 | 
             
            }
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"FormElementCaptcha.js","sourceRoot":"","sources":["../../src/form-elements/FormElementCaptcha.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,SAAS,MAAM,wBAAwB,CAAA;AAE9C,OAAO,iBAAiB,MAAM,4BAA4B,CAAA; | 
| 1 | 
            +
            {"version":3,"file":"FormElementCaptcha.js","sourceRoot":"","sources":["../../src/form-elements/FormElementCaptcha.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,SAAS,MAAM,wBAAwB,CAAA;AAE9C,OAAO,iBAAiB,MAAM,4BAA4B,CAAA;AAY1D,SAAS,kBAAkB,CAAC,EAC1B,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,GACC;IACN,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAmB,IAAI,CAAC,CAAA;IAEhD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,GAAG,CAAC,OAAO,EAAE;YACf,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;YACvC,IAAI,QAAQ,IAAI,CAAC,KAAK,EAAE;gBACtB,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;aACpB;SACF;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,OAAO,CACL,6BAAK,SAAS,EAAC,yBAAyB;QACtC,6BAAK,SAAS,EAAC,6BAA6B;YAC1C,oBAAC,SAAS,IACR,OAAO,EAAE,cAAc,IAAI,EAAE,EAC7B,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;oBAChB,QAAQ,CAAC,OAAO,EAAE;wBAChB,KAAK,EAAE,GAAG,IAAI,SAAS;qBACxB,CAAC,CAAA;gBACJ,CAAC,EACD,SAAS,EAAC,kCAAkC,EAC5C,GAAG,EAAE,GAAG,GACR;YAED,wBAAwB,IAAI,CAAC,CAAC,iBAAiB,IAAI,CAClD,6BAAK,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,kBAAkB;gBAC5C,6BAAK,SAAS,EAAC,4EAA4E,IACxF,iBAAiB,CACd,CACF,CACP,CACG,CACF,CACP,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA","sourcesContent":["import * as React from 'react'\nimport ReCAPTCHA from 'react-google-recaptcha'\n\nimport useCaptchaSiteKey from '../hooks/useCaptchaSiteKey'\nimport { FormTypes } from '@oneblink/types'\nimport { FormElementValueChangeHandler } from '../types/form'\n\ntype Props = {\n  element: FormTypes.CaptchaElement\n  onChange: FormElementValueChangeHandler<string>\n  displayValidationMessage: boolean\n  validationMessage: string | undefined\n  value: string | undefined\n}\n\nfunction FormElementCaptcha({\n  element,\n  onChange,\n  validationMessage,\n  displayValidationMessage,\n  value,\n}: Props) {\n  const captchaSiteKey = useCaptchaSiteKey()\n  const ref = React.useRef<ReCAPTCHA | null>(null)\n\n  React.useEffect(() => {\n    if (ref.current) {\n      const refValue = ref.current.getValue()\n      if (refValue && !value) {\n        ref.current.reset()\n      }\n    }\n  }, [value])\n\n  return (\n    <div className=\"cypress-captcha-element\">\n      <div className=\"ob-form__element ob-captcha\">\n        <ReCAPTCHA\n          sitekey={captchaSiteKey || ''}\n          onChange={(val) => {\n            onChange(element, {\n              value: val || undefined,\n            })\n          }}\n          className=\"ob-input cypress-captcha-control\"\n          ref={ref}\n        />\n\n        {displayValidationMessage && !!validationMessage && (\n          <div role=\"alert\" className=\"has-margin-top-8\">\n            <div className=\"has-text-danger ob-error__text cypress-required cypress-validation-message\">\n              {validationMessage}\n            </div>\n          </div>\n        )}\n      </div>\n    </div>\n  )\n}\n\nexport default React.memo(FormElementCaptcha)\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": "5.12.2-beta. | 
| 4 | 
            +
              "version": "5.12.2-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"
         |