@oneblink/apps-react 8.11.2 → 8.12.0-beta.10

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.
Files changed (31) hide show
  1. package/dist/components/ImageCropper/CropModal.d.ts +2 -2
  2. package/dist/components/ImageCropper/CropModal.js +6 -6
  3. package/dist/components/ImageCropper/CropModal.js.map +1 -1
  4. package/dist/components/ImageCropper/index.d.ts +6 -7
  5. package/dist/components/ImageCropper/index.js +101 -51
  6. package/dist/components/ImageCropper/index.js.map +1 -1
  7. package/dist/components/ImageCropper/resource-components.d.ts +1 -8
  8. package/dist/components/ImageCropper/resource-components.js +8 -23
  9. package/dist/components/ImageCropper/resource-components.js.map +1 -1
  10. package/dist/form-elements/FormElementCamera.js +2 -2
  11. package/dist/form-elements/FormElementCamera.js.map +1 -1
  12. package/dist/form-elements/FormElementFile.js +2 -2
  13. package/dist/form-elements/FormElementFile.js.map +1 -1
  14. package/dist/form-elements/FormElementPointCadastralParcel.js +1 -1
  15. package/dist/form-elements/FormElementPointCadastralParcel.js.map +1 -1
  16. package/dist/hooks/useFormElementOptions.js +4 -1
  17. package/dist/hooks/useFormElementOptions.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/services/form-validation/validateSubmission.js +3 -1
  21. package/dist/services/form-validation/validateSubmission.js.map +1 -1
  22. package/dist/services/form-validation/validators.js +2 -2
  23. package/dist/services/form-validation/validators.js.map +1 -1
  24. package/dist/services/injectableOptions.d.ts +3 -1
  25. package/dist/services/injectableOptions.js +15 -7
  26. package/dist/services/injectableOptions.js.map +1 -1
  27. package/dist/styles/camera.scss +25 -0
  28. package/dist/styles/modal.scss +2 -1
  29. package/dist/styles.css +315 -61
  30. package/dist/styles.scss +3 -4
  31. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementFile.js","sourceRoot":"","sources":["../../src/form-elements/FormElementFile.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport downloadAttachment from '../services/download-file'\nimport { FormTypes } from '@oneblink/types'\nimport useAttachment, { OnChange } from '../hooks/attachments/useAttachment'\nimport FileCard from '../components/renderer/attachments/FileCard'\nimport { attachmentsService } from '@oneblink/apps'\nimport useBooleanState from '../hooks/useBooleanState'\nimport CropModal from '../components/ImageCropper/CropModal'\nimport AnnotationModal, {\n superimposeAnnotationOnImage,\n} from '../components/renderer/AnnotationModal'\nimport { Area } from 'react-easy-crop'\nimport { generateCroppedImageBlob } from '../components/ImageCropper'\nimport { prepareNewAttachment } from '../services/attachments'\nimport Modal from '../components/renderer/Modal'\n\ntype Props = {\n element: FormTypes.FilesElement\n /** If set to `undefined`, the remove button will be hidden */\n onRemove: ((id: string) => void) | undefined\n file: attachmentsService.Attachment\n disableUpload: boolean\n onChange: OnChange\n index: number\n}\n\nconst FormElementFile = ({\n element,\n onRemove,\n file,\n onChange,\n disableUpload,\n index,\n}: Props) => {\n const [isAnnotating, setIsAnnotating, clearIsAnnotating] =\n useBooleanState(false)\n const [isCropping, setIsCropping, clearIsCropping] = useBooleanState(false)\n const [state, setState] = React.useState<{\n isLoading: boolean\n error?: Error\n }>({\n isLoading: false,\n error: undefined,\n })\n const {\n attachmentUrl,\n contentType,\n isUploading,\n uploadErrorMessage,\n isLoadingAttachmentUrl,\n loadAttachmentUrlError,\n isContentTypeImage,\n canDownload,\n progress,\n } = useAttachment(file, element, onChange, disableUpload)\n\n const handleRemove = React.useMemo(() => {\n if (!onRemove) {\n return\n }\n return () => {\n if (!file.type) {\n return onRemove(file.id)\n }\n return onRemove(file._id)\n }\n }, [file, onRemove])\n\n const handleDownload = React.useCallback(async () => {\n await downloadAttachment(file)\n }, [file])\n\n const handleAnnotate = React.useCallback(\n async (annotationDataUri: string) => {\n if (!attachmentUrl || file.type) return\n clearIsAnnotating()\n\n setState({\n isLoading: true,\n })\n\n try {\n const blob = await superimposeAnnotationOnImage({\n annotationDataUri,\n attachmentUrl,\n })\n setState({\n isLoading: false,\n })\n if (!blob) return\n const attachment = prepareNewAttachment(blob, file.fileName, element)\n onChange(file.id, attachment)\n } catch (error) {\n setState({\n error: error as Error,\n isLoading: false,\n })\n }\n },\n [attachmentUrl, clearIsAnnotating, element, file, onChange],\n )\n const handleSaveCrop = React.useCallback(\n async (croppedAreaPixels: Area) => {\n if (!attachmentUrl || file.type) return\n clearIsCropping()\n\n setState({\n isLoading: true,\n })\n\n try {\n const croppedImage = await generateCroppedImageBlob({\n croppedAreaPixels,\n imgSrc: attachmentUrl,\n fileType: contentType,\n })\n setState({\n isLoading: false,\n })\n if (!croppedImage) return\n const attachment = prepareNewAttachment(\n croppedImage,\n file.fileName,\n element,\n )\n onChange(file.id, attachment)\n } catch (error) {\n setState({\n error: error as Error,\n isLoading: false,\n })\n }\n },\n [attachmentUrl, clearIsCropping, contentType, element, file, onChange],\n )\n const handleRetry = React.useMemo(() => {\n if (file.type === 'ERROR' && file.data) {\n return () => {\n onChange(file._id, {\n type: 'NEW',\n _id: file._id,\n data: file.data,\n fileName: file.fileName,\n isPrivate: file.isPrivate,\n })\n }\n }\n }, [file, onChange])\n\n return (\n <>\n <FileCard\n element={element}\n isUploading={isUploading}\n isUploadPaused={disableUpload}\n uploadErrorMessage={uploadErrorMessage}\n loadAttachmentUrlError={loadAttachmentUrlError}\n isLoadingAttachmentUrl={isLoadingAttachmentUrl || state.isLoading}\n attachmentUrl={attachmentUrl}\n isContentTypeImage={isContentTypeImage}\n fileName={file.fileName}\n onDownload={canDownload ? handleDownload : undefined}\n onRemove={handleRemove}\n onRetry={handleRetry}\n progress={progress}\n index={index}\n onAnnotate={isContentTypeImage ? setIsAnnotating : undefined}\n onCrop={isContentTypeImage ? setIsCropping : undefined}\n />\n {isCropping && attachmentUrl && (\n <CropModal\n imageSrc={attachmentUrl}\n onClose={clearIsCropping}\n onSave={handleSaveCrop}\n />\n )}\n {isAnnotating && attachmentUrl && (\n <AnnotationModal\n imageSrc={attachmentUrl}\n onClose={clearIsAnnotating}\n onSave={handleAnnotate}\n />\n )}\n {state.error && (\n <Modal\n isOpen\n title=\"Whoops...\"\n className=\"cypress-error-modal\"\n titleClassName=\"cypress-error-title\"\n actions={\n <button\n type=\"button\"\n className=\"button ob-button is-primary cypress-close-error-button\"\n onClick={() => setState({ isLoading: false })}\n autoFocus\n >\n Okay\n </button>\n }\n >\n <p>\n An error occurred while attempting to edit an image. Please click{' '}\n <b>Okay</b> below to try again. If the problem persists, please\n contact support.\n </p>\n\n <div className=\"content has-margin-top-6\">\n <blockquote>{state.error.toString()}</blockquote>\n </div>\n </Modal>\n )}\n </>\n )\n}\n\nexport default React.memo<Props>(FormElementFile)\n"]}
1
+ {"version":3,"file":"FormElementFile.js","sourceRoot":"","sources":["../../src/form-elements/FormElementFile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,kBAAkB,MAAM,2BAA2B,CAAA;AAE1D,OAAO,aAA2B,MAAM,oCAAoC,CAAA;AAC5E,OAAO,QAAQ,MAAM,6CAA6C,CAAA;AAElE,OAAO,eAAe,MAAM,0BAA0B,CAAA;AACtD,OAAO,SAAS,MAAM,sCAAsC,CAAA;AAC5D,OAAO,eAAe,EAAE,EACtB,4BAA4B,GAC7B,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,KAAK,MAAM,8BAA8B,CAAA;AAahD,MAAM,eAAe,GAAG,CAAC,EACvB,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,KAAK,GACC,EAAE,EAAE;IACV,MAAM,CAAC,YAAY,EAAE,eAAe,EAAE,iBAAiB,CAAC,GACtD,eAAe,CAAC,KAAK,CAAC,CAAA;IACxB,MAAM,CAAC,UAAU,EAAE,aAAa,EAAE,eAAe,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IAC3E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAGrC;QACD,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,SAAS;KACjB,CAAC,CAAA;IACF,MAAM,EACJ,aAAa,EACb,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,WAAW,EACX,QAAQ,GACT,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAA;IAEzD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAM;QACR,CAAC;QACD,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC1B,CAAC;YACD,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEpB,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;QAClD,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACtC,KAAK,EAAE,iBAAyB,EAAE,EAAE;QAClC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI;YAAE,OAAM;QACvC,iBAAiB,EAAE,CAAA;QAEnB,QAAQ,CAAC;YACP,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,4BAA4B,CAAC;gBAC9C,iBAAiB;gBACjB,aAAa;aACd,CAAC,CAAA;YACF,QAAQ,CAAC;gBACP,SAAS,EAAE,KAAK;aACjB,CAAC,CAAA;YACF,IAAI,CAAC,IAAI;gBAAE,OAAM;YACjB,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACrE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC;gBACP,KAAK,EAAE,KAAc;gBACrB,SAAS,EAAE,KAAK;aACjB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,EACD,CAAC,aAAa,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAC5D,CAAA;IACD,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACtC,KAAK,EAAE,kBAA+B,EAAE,EAAE;QACxC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI;YAAE,OAAM;QACvC,eAAe,EAAE,CAAA;QAEjB,QAAQ,CAAC;YACP,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QAEF,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,wBAAwB,CAAC;gBAClD,kBAAkB;gBAClB,MAAM,EAAE,aAAa;gBACrB,QAAQ,EAAE,WAAW;aACtB,CAAC,CAAA;YACF,QAAQ,CAAC;gBACP,SAAS,EAAE,KAAK;aACjB,CAAC,CAAA;YACF,IAAI,CAAC,YAAY;gBAAE,OAAM;YACzB,MAAM,UAAU,GAAG,oBAAoB,CACrC,YAAY,EACZ,IAAI,CAAC,QAAQ,EACb,OAAO,CACR,CAAA;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC;gBACP,KAAK,EAAE,KAAc;gBACrB,SAAS,EAAE,KAAK;aACjB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,EACD,CAAC,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CACvE,CAAA;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACrC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,OAAO,GAAG,EAAE;gBACV,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;oBACjB,IAAI,EAAE,KAAK;oBACX,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC,CAAA;YACJ,CAAC,CAAA;QACH,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEpB,OAAO,CACL;QACE,oBAAC,QAAQ,IACP,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,aAAa,EAC7B,kBAAkB,EAAE,kBAAkB,EACtC,sBAAsB,EAAE,sBAAsB,EAC9C,sBAAsB,EAAE,sBAAsB,IAAI,KAAK,CAAC,SAAS,EACjE,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,EACpD,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EAC5D,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,GACtD;QACD,UAAU,IAAI,aAAa,IAAI,CAC9B,oBAAC,SAAS,IACR,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,cAAc,GACtB,CACH;QACA,YAAY,IAAI,aAAa,IAAI,CAChC,oBAAC,eAAe,IACd,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,cAAc,GACtB,CACH;QACA,KAAK,CAAC,KAAK,IAAI,CACd,oBAAC,KAAK,IACJ,MAAM,QACN,KAAK,EAAC,WAAW,EACjB,SAAS,EAAC,qBAAqB,EAC/B,cAAc,EAAC,qBAAqB,EACpC,OAAO,EACL,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,wDAAwD,EAClE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAC7C,SAAS,iBAGF;YAGX;;gBACoE,GAAG;gBACrE,sCAAW;wFAET;YAEJ,6BAAK,SAAS,EAAC,0BAA0B;gBACvC,wCAAa,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAc,CAC7C,CACA,CACT,CACA,CACJ,CAAA;AACH,CAAC,CAAA;AAED,eAAe,KAAK,CAAC,IAAI,CAAQ,eAAe,CAAC,CAAA","sourcesContent":["import * as React from 'react'\nimport downloadAttachment from '../services/download-file'\nimport { FormTypes } from '@oneblink/types'\nimport useAttachment, { OnChange } from '../hooks/attachments/useAttachment'\nimport FileCard from '../components/renderer/attachments/FileCard'\nimport { attachmentsService } from '@oneblink/apps'\nimport useBooleanState from '../hooks/useBooleanState'\nimport CropModal from '../components/ImageCropper/CropModal'\nimport AnnotationModal, {\n superimposeAnnotationOnImage,\n} from '../components/renderer/AnnotationModal'\nimport { generateCroppedImageBlob } from '../components/ImageCropper'\nimport { prepareNewAttachment } from '../services/attachments'\nimport Modal from '../components/renderer/Modal'\nimport { PercentCrop } from 'react-image-crop'\n\ntype Props = {\n element: FormTypes.FilesElement\n /** If set to `undefined`, the remove button will be hidden */\n onRemove: ((id: string) => void) | undefined\n file: attachmentsService.Attachment\n disableUpload: boolean\n onChange: OnChange\n index: number\n}\n\nconst FormElementFile = ({\n element,\n onRemove,\n file,\n onChange,\n disableUpload,\n index,\n}: Props) => {\n const [isAnnotating, setIsAnnotating, clearIsAnnotating] =\n useBooleanState(false)\n const [isCropping, setIsCropping, clearIsCropping] = useBooleanState(false)\n const [state, setState] = React.useState<{\n isLoading: boolean\n error?: Error\n }>({\n isLoading: false,\n error: undefined,\n })\n const {\n attachmentUrl,\n contentType,\n isUploading,\n uploadErrorMessage,\n isLoadingAttachmentUrl,\n loadAttachmentUrlError,\n isContentTypeImage,\n canDownload,\n progress,\n } = useAttachment(file, element, onChange, disableUpload)\n\n const handleRemove = React.useMemo(() => {\n if (!onRemove) {\n return\n }\n return () => {\n if (!file.type) {\n return onRemove(file.id)\n }\n return onRemove(file._id)\n }\n }, [file, onRemove])\n\n const handleDownload = React.useCallback(async () => {\n await downloadAttachment(file)\n }, [file])\n\n const handleAnnotate = React.useCallback(\n async (annotationDataUri: string) => {\n if (!attachmentUrl || file.type) return\n clearIsAnnotating()\n\n setState({\n isLoading: true,\n })\n\n try {\n const blob = await superimposeAnnotationOnImage({\n annotationDataUri,\n attachmentUrl,\n })\n setState({\n isLoading: false,\n })\n if (!blob) return\n const attachment = prepareNewAttachment(blob, file.fileName, element)\n onChange(file.id, attachment)\n } catch (error) {\n setState({\n error: error as Error,\n isLoading: false,\n })\n }\n },\n [attachmentUrl, clearIsAnnotating, element, file, onChange],\n )\n const handleSaveCrop = React.useCallback(\n async (croppedAreaPercent: PercentCrop) => {\n if (!attachmentUrl || file.type) return\n clearIsCropping()\n\n setState({\n isLoading: true,\n })\n\n try {\n const croppedImage = await generateCroppedImageBlob({\n croppedAreaPercent,\n imgSrc: attachmentUrl,\n fileType: contentType,\n })\n setState({\n isLoading: false,\n })\n if (!croppedImage) return\n const attachment = prepareNewAttachment(\n croppedImage,\n file.fileName,\n element,\n )\n onChange(file.id, attachment)\n } catch (error) {\n setState({\n error: error as Error,\n isLoading: false,\n })\n }\n },\n [attachmentUrl, clearIsCropping, contentType, element, file, onChange],\n )\n const handleRetry = React.useMemo(() => {\n if (file.type === 'ERROR' && file.data) {\n return () => {\n onChange(file._id, {\n type: 'NEW',\n _id: file._id,\n data: file.data,\n fileName: file.fileName,\n isPrivate: file.isPrivate,\n })\n }\n }\n }, [file, onChange])\n\n return (\n <>\n <FileCard\n element={element}\n isUploading={isUploading}\n isUploadPaused={disableUpload}\n uploadErrorMessage={uploadErrorMessage}\n loadAttachmentUrlError={loadAttachmentUrlError}\n isLoadingAttachmentUrl={isLoadingAttachmentUrl || state.isLoading}\n attachmentUrl={attachmentUrl}\n isContentTypeImage={isContentTypeImage}\n fileName={file.fileName}\n onDownload={canDownload ? handleDownload : undefined}\n onRemove={handleRemove}\n onRetry={handleRetry}\n progress={progress}\n index={index}\n onAnnotate={isContentTypeImage ? setIsAnnotating : undefined}\n onCrop={isContentTypeImage ? setIsCropping : undefined}\n />\n {isCropping && attachmentUrl && (\n <CropModal\n imageSrc={attachmentUrl}\n onClose={clearIsCropping}\n onSave={handleSaveCrop}\n />\n )}\n {isAnnotating && attachmentUrl && (\n <AnnotationModal\n imageSrc={attachmentUrl}\n onClose={clearIsAnnotating}\n onSave={handleAnnotate}\n />\n )}\n {state.error && (\n <Modal\n isOpen\n title=\"Whoops...\"\n className=\"cypress-error-modal\"\n titleClassName=\"cypress-error-title\"\n actions={\n <button\n type=\"button\"\n className=\"button ob-button is-primary cypress-close-error-button\"\n onClick={() => setState({ isLoading: false })}\n autoFocus\n >\n Okay\n </button>\n }\n >\n <p>\n An error occurred while attempting to edit an image. Please click{' '}\n <b>Okay</b> below to try again. If the problem persists, please\n contact support.\n </p>\n\n <div className=\"content has-margin-top-6\">\n <blockquote>{state.error.toString()}</blockquote>\n </div>\n </Modal>\n )}\n </>\n )\n}\n\nexport default React.memo<Props>(FormElementFile)\n"]}
@@ -97,7 +97,7 @@ function FormElementPointCadastralParcel({ id, formId, element, value, onChange,
97
97
  hasCopyButton && (React.createElement("div", { className: "control" },
98
98
  React.createElement(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: label })))),
99
99
  isDisplayingValidationMessage && (React.createElement(FormElementValidationMessage, { message: (error === null || error === void 0 ? void 0 : error.message) || validationMessage }))),
100
- React.createElement(Collapse, { in: !!value },
100
+ React.createElement(Collapse, { in: !!(value === null || value === void 0 ? void 0 : value.features) },
101
101
  React.createElement(NotificationGrid, { className: `${pointCadastralParcelClass}__record-display has-margin-top-6`, gridClassName: `${pointCadastralParcelClass}__container` },
102
102
  React.createElement(NotificationGridItem, { className: `${pointCadastralParcelClass}__container-address`, value: (_e = (_d = (_c = value === null || value === void 0 ? void 0 : value.features) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.properties) === null || _e === void 0 ? void 0 : _e.formattedAddress, label: "Address", labelClassName: `${pointCadastralParcelClass}__detail-label`, valueClassName: `${pointCadastralParcelClass}__detail-value` }),
103
103
  React.createElement(NotificationGridItem, { className: `${pointCadastralParcelClass}__container-lots`, value: (_l = (_k = (_j = (_h = (_g = (_f = value === null || value === void 0 ? void 0 : value.features) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.properties) === null || _h === void 0 ? void 0 : _h.propertyBundle) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.parcelIds) === null || _l === void 0 ? void 0 : _l.join(', '), label: "Lots", labelClassName: `${pointCadastralParcelClass}__detail-label`, valueClassName: `${pointCadastralParcelClass}__detail-value` }),
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementPointCadastralParcel.js","sourceRoot":"","sources":["../../src/form-elements/FormElementPointCadastralParcel.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport CopyToClipboardButton from '../components/renderer/CopyToClipboardButton'\nimport { FormTypes, PointTypes } from '@oneblink/types'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport { formService } from '@oneblink/apps'\nimport { Collapse } from '@mui/material'\nimport {\n NotificationGrid,\n NotificationGridItem,\n} from '../components/NotificationGrid'\nimport MaterialIcon from '../components/MaterialIcon'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\n\nconst pointCadastralParcelClass = 'ob-point-cadastral-parcel'\n\nfunction FormElementPointCadastralParcel({\n id,\n formId,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: {\n id: string\n formId: number\n element: FormTypes.PointCadastralParcelElement\n value: PointTypes.PointCadastralParcelResponse | undefined\n onChange: FormElementValueChangeHandler<PointTypes.PointCadastralParcelResponse>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n autocompleteAttributes?: string\n} & IsDirtyProps) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const parcelId = value?.parcelBundle?.[0]?.parcelId\n const [label, setLabel] = React.useState(parcelId || '')\n const [{ isLoading, error }, setState] = React.useState<{\n isLoading: boolean\n error: Error | null\n }>({\n isLoading: false,\n error: null,\n })\n\n const loadCadastralParcel = React.useCallback(\n async (abortSignal: AbortSignal) => {\n if (!label || label === parcelId) {\n return\n }\n\n setState({\n isLoading: true,\n error: null,\n })\n\n try {\n console.log('Attempting to load NSW point cadastral parcel', {\n formId,\n parcelId: label,\n })\n const result = await formService.getPointCadastralParcel(\n formId,\n label,\n abortSignal,\n )\n if (!abortSignal.aborted) {\n onChange(element, {\n value: result,\n })\n setState({\n error: null,\n isLoading: false,\n })\n }\n } catch (err) {\n if (!abortSignal.aborted) {\n setState({\n isLoading: false,\n error: err as Error,\n })\n }\n }\n },\n [element, formId, label, onChange, parcelId],\n )\n\n React.useEffect(() => {\n const abortController = new AbortController()\n const timeoutId = setTimeout(() => {\n loadCadastralParcel(abortController.signal)\n }, 750)\n return () => {\n abortController.abort()\n clearTimeout(timeoutId)\n }\n }, [loadCadastralParcel])\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (parcelId && label !== parcelId) {\n setLabel(parcelId)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (((isDirty || displayValidationMessage) &&\n !!validationMessage &&\n !isLoading) ||\n error) &&\n !isLookingUp\n\n const hasCopyButton = !!value && !!element.readOnly\n return (\n <div className=\"cypress-point-cadastral-parcel-element\">\n <FormElementLabelContainer\n className={pointCadastralParcelClass}\n id={id}\n element={element}\n required={element.required}\n >\n <div\n className={clsx('field has-addons', {\n 'no-addons-mobile': !hasCopyButton,\n })}\n >\n <div\n className={clsx('control is-expanded has-icons-right', {\n 'is-loading': isLoading,\n 'has-icons-right': !isLoading,\n })}\n >\n <input\n type=\"text\"\n id={id}\n name={element.name}\n className=\"input ob-input cypress-point-cadastral-parcel-control\"\n placeholder={element.placeholderValue}\n value={label}\n onChange={(e) => {\n setLabel(e.target.value)\n if (value) {\n onChange(element, {\n value: undefined,\n })\n }\n }}\n required={element.required}\n disabled={element.readOnly}\n onBlur={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n aria-required={element.required}\n />\n {!isLoading && (\n <span className=\" ob-input-icon icon is-small is-right\">\n {value ? (\n <MaterialIcon className=\"is-size-5 has-text-success\">\n check\n </MaterialIcon>\n ) : error?.message ? (\n <MaterialIcon className=\"is-size-5 has-text-danger\">\n error\n </MaterialIcon>\n ) : (\n <MaterialIcon className=\"is-size-5\">map</MaterialIcon>\n )}\n </span>\n )}\n </div>\n {hasCopyButton && (\n <div className=\"control\">\n <CopyToClipboardButton\n className=\"button is-input-addon copy-button cypress-copy-to-clipboard-button\"\n text={label}\n />\n </div>\n )}\n </div>\n {isDisplayingValidationMessage && (\n <FormElementValidationMessage\n message={error?.message || validationMessage}\n />\n )}\n </FormElementLabelContainer>\n\n <Collapse in={!!value}>\n <NotificationGrid\n className={`${pointCadastralParcelClass}__record-display has-margin-top-6`}\n gridClassName={`${pointCadastralParcelClass}__container`}\n >\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-address`}\n value={value?.features?.[0]?.properties?.formattedAddress}\n label=\"Address\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-lots`}\n value={value?.features?.[0]?.properties?.propertyBundle?.[0]?.parcelIds?.join(\n ', ',\n )}\n label=\"Lots\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-local-government-area-name`}\n value={\n value?.features?.[0]?.properties?.localGovernmentArea?.lgaName\n }\n label=\"Local Government Area\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n </NotificationGrid>\n </Collapse>\n </div>\n )\n}\n\nexport default React.memo(FormElementPointCadastralParcel)\n"]}
1
+ {"version":3,"file":"FormElementPointCadastralParcel.js","sourceRoot":"","sources":["../../src/form-elements/FormElementPointCadastralParcel.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport CopyToClipboardButton from '../components/renderer/CopyToClipboardButton'\nimport { FormTypes, PointTypes } from '@oneblink/types'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport { formService } from '@oneblink/apps'\nimport { Collapse } from '@mui/material'\nimport {\n NotificationGrid,\n NotificationGridItem,\n} from '../components/NotificationGrid'\nimport MaterialIcon from '../components/MaterialIcon'\nimport FormElementValidationMessage from '../components/renderer/FormElementValidationMessage'\n\nconst pointCadastralParcelClass = 'ob-point-cadastral-parcel'\n\nfunction FormElementPointCadastralParcel({\n id,\n formId,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: {\n id: string\n formId: number\n element: FormTypes.PointCadastralParcelElement\n value: PointTypes.PointCadastralParcelResponse | undefined\n onChange: FormElementValueChangeHandler<PointTypes.PointCadastralParcelResponse>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n autocompleteAttributes?: string\n} & IsDirtyProps) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const parcelId = value?.parcelBundle?.[0]?.parcelId\n const [label, setLabel] = React.useState(parcelId || '')\n const [{ isLoading, error }, setState] = React.useState<{\n isLoading: boolean\n error: Error | null\n }>({\n isLoading: false,\n error: null,\n })\n\n const loadCadastralParcel = React.useCallback(\n async (abortSignal: AbortSignal) => {\n if (!label || label === parcelId) {\n return\n }\n\n setState({\n isLoading: true,\n error: null,\n })\n\n try {\n console.log('Attempting to load NSW point cadastral parcel', {\n formId,\n parcelId: label,\n })\n const result = await formService.getPointCadastralParcel(\n formId,\n label,\n abortSignal,\n )\n if (!abortSignal.aborted) {\n onChange(element, {\n value: result,\n })\n setState({\n error: null,\n isLoading: false,\n })\n }\n } catch (err) {\n if (!abortSignal.aborted) {\n setState({\n isLoading: false,\n error: err as Error,\n })\n }\n }\n },\n [element, formId, label, onChange, parcelId],\n )\n\n React.useEffect(() => {\n const abortController = new AbortController()\n const timeoutId = setTimeout(() => {\n loadCadastralParcel(abortController.signal)\n }, 750)\n return () => {\n abortController.abort()\n clearTimeout(timeoutId)\n }\n }, [loadCadastralParcel])\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (parcelId && label !== parcelId) {\n setLabel(parcelId)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (((isDirty || displayValidationMessage) &&\n !!validationMessage &&\n !isLoading) ||\n error) &&\n !isLookingUp\n\n const hasCopyButton = !!value && !!element.readOnly\n return (\n <div className=\"cypress-point-cadastral-parcel-element\">\n <FormElementLabelContainer\n className={pointCadastralParcelClass}\n id={id}\n element={element}\n required={element.required}\n >\n <div\n className={clsx('field has-addons', {\n 'no-addons-mobile': !hasCopyButton,\n })}\n >\n <div\n className={clsx('control is-expanded has-icons-right', {\n 'is-loading': isLoading,\n 'has-icons-right': !isLoading,\n })}\n >\n <input\n type=\"text\"\n id={id}\n name={element.name}\n className=\"input ob-input cypress-point-cadastral-parcel-control\"\n placeholder={element.placeholderValue}\n value={label}\n onChange={(e) => {\n setLabel(e.target.value)\n if (value) {\n onChange(element, {\n value: undefined,\n })\n }\n }}\n required={element.required}\n disabled={element.readOnly}\n onBlur={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n aria-required={element.required}\n />\n {!isLoading && (\n <span className=\" ob-input-icon icon is-small is-right\">\n {value ? (\n <MaterialIcon className=\"is-size-5 has-text-success\">\n check\n </MaterialIcon>\n ) : error?.message ? (\n <MaterialIcon className=\"is-size-5 has-text-danger\">\n error\n </MaterialIcon>\n ) : (\n <MaterialIcon className=\"is-size-5\">map</MaterialIcon>\n )}\n </span>\n )}\n </div>\n {hasCopyButton && (\n <div className=\"control\">\n <CopyToClipboardButton\n className=\"button is-input-addon copy-button cypress-copy-to-clipboard-button\"\n text={label}\n />\n </div>\n )}\n </div>\n {isDisplayingValidationMessage && (\n <FormElementValidationMessage\n message={error?.message || validationMessage}\n />\n )}\n </FormElementLabelContainer>\n\n <Collapse in={!!value?.features}>\n <NotificationGrid\n className={`${pointCadastralParcelClass}__record-display has-margin-top-6`}\n gridClassName={`${pointCadastralParcelClass}__container`}\n >\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-address`}\n value={value?.features?.[0]?.properties?.formattedAddress}\n label=\"Address\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-lots`}\n value={value?.features?.[0]?.properties?.propertyBundle?.[0]?.parcelIds?.join(\n ', ',\n )}\n label=\"Lots\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n <NotificationGridItem\n className={`${pointCadastralParcelClass}__container-local-government-area-name`}\n value={\n value?.features?.[0]?.properties?.localGovernmentArea?.lgaName\n }\n label=\"Local Government Area\"\n labelClassName={`${pointCadastralParcelClass}__detail-label`}\n valueClassName={`${pointCadastralParcelClass}__detail-value`}\n />\n </NotificationGrid>\n </Collapse>\n </div>\n )\n}\n\nexport default React.memo(FormElementPointCadastralParcel)\n"]}
@@ -7,7 +7,7 @@ import useUserProfileForInjectables from './useUserProfileForInjectables';
7
7
  export default function useFormElementOptions({ element, value, onChange, conditionallyShownOptionsElement, onFilter, onUpdateFormElements, }) {
8
8
  const taskContext = useTaskContext();
9
9
  const userProfileForInjectables = useUserProfileForInjectables();
10
- const { formSubmissionModel, elements } = useFormSubmissionModel();
10
+ const { formSubmissionModel, elements, parent } = useFormSubmissionModel();
11
11
  const conditionallyShownOptions = conditionallyShownOptionsElement === null || conditionallyShownOptionsElement === void 0 ? void 0 : conditionallyShownOptionsElement.options;
12
12
  //options that are shown due to conditional logic
13
13
  const shownOptions = React.useMemo(() => {
@@ -29,6 +29,8 @@ export default function useFormElementOptions({ element, value, onChange, condit
29
29
  option,
30
30
  submission: formSubmissionModel,
31
31
  formElements: elements,
32
+ contextSubmission: (parent === null || parent === void 0 ? void 0 : parent.formSubmissionModel) || {},
33
+ contextElements: (parent === null || parent === void 0 ? void 0 : parent.elements) || [],
32
34
  taskContext,
33
35
  userProfile: userProfileForInjectables,
34
36
  });
@@ -38,6 +40,7 @@ export default function useFormElementOptions({ element, value, onChange, condit
38
40
  }, [
39
41
  elements,
40
42
  formSubmissionModel,
43
+ parent,
41
44
  shownOptions,
42
45
  taskContext,
43
46
  userProfileForInjectables,
@@ -1 +1 @@
1
- {"version":3,"file":"useFormElementOptions.js","sourceRoot":"","sources":["../../src/hooks/useFormElementOptions.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes } from '@oneblink/types'\nimport * as React from 'react'\nimport {\n FormElementValueChangeHandler,\n FormElementConditionallyShownElement,\n UpdateFormElementsHandler,\n} from '../types/form'\nimport { useLoadDynamicOptionsEffect } from './useDynamicOptionsLoaderState'\nimport useFormSubmissionModel from './useFormSubmissionModelContext'\nimport processInjectableOption from '../services/injectableOptions'\nimport useTaskContext from './useTaskContext'\nimport useUserProfileForInjectables from './useUserProfileForInjectables'\n\nexport default function useFormElementOptions<T>({\n element,\n value,\n onChange,\n conditionallyShownOptionsElement,\n onFilter,\n onUpdateFormElements,\n}: {\n element: FormTypes.FormElementWithOptions\n value: unknown | undefined\n onChange: FormElementValueChangeHandler<T>\n conditionallyShownOptionsElement:\n | FormElementConditionallyShownElement\n | undefined\n onFilter?: (choiceElementOption: FormTypes.ChoiceElementOption) => boolean\n onUpdateFormElements: UpdateFormElementsHandler\n}) {\n const taskContext = useTaskContext()\n const userProfileForInjectables = useUserProfileForInjectables()\n\n const { formSubmissionModel, elements } = useFormSubmissionModel()\n const conditionallyShownOptions = conditionallyShownOptionsElement?.options\n //options that are shown due to conditional logic\n const shownOptions = React.useMemo<FormTypes.ChoiceElementOption[]>(() => {\n if (!element.options) {\n return []\n }\n if (!conditionallyShownOptions && !onFilter) {\n return element.options\n }\n return element.options.filter((option) => {\n return (\n !conditionallyShownOptions ||\n conditionallyShownOptions.some(({ id }) => id === option.id)\n )\n })\n }, [conditionallyShownOptions, element.options, onFilter])\n\n //\n const withInjectedOptions = React.useMemo(() => {\n return shownOptions.reduce<FormTypes.ChoiceElementOption[]>(\n (memo, option) => {\n const newOptions = processInjectableOption({\n option,\n submission: formSubmissionModel,\n formElements: elements,\n taskContext,\n userProfile: userProfileForInjectables,\n })\n memo.push(...newOptions)\n\n return memo\n },\n [],\n )\n }, [\n elements,\n formSubmissionModel,\n shownOptions,\n taskContext,\n userProfileForInjectables,\n ])\n\n //options that are shown based on conditional logic and user input\n const filteredOptions = React.useMemo<FormTypes.ChoiceElementOption[]>(() => {\n const reducedOptions = withInjectedOptions.filter(\n (option) => !onFilter || (onFilter(option) && !option.displayAlways),\n )\n if (element.type === 'autocomplete') {\n const alwaysShownOptions = withInjectedOptions.filter(\n (option) => option.displayAlways,\n )\n reducedOptions.push(...alwaysShownOptions)\n }\n return reducedOptions\n }, [withInjectedOptions, element.type, onFilter])\n\n React.useEffect(() => {\n if (\n !element.options ||\n conditionallyShownOptionsElement?.dependencyIsLoading\n ) {\n return\n }\n\n if (\n typeof value === 'string' &&\n !withInjectedOptions.some((option) => value === option.value)\n ) {\n onChange(element, {\n value: undefined,\n })\n return\n }\n\n if (Array.isArray(value)) {\n const newValue = value.filter((selectedValue) =>\n withInjectedOptions.some((option) => selectedValue === option.value),\n )\n if (newValue.length !== value.length) {\n const newValueArray = newValue.length ? newValue : undefined\n onChange(element, {\n value: newValueArray as T | undefined,\n })\n }\n }\n }, [\n element,\n shownOptions,\n onChange,\n value,\n conditionallyShownOptionsElement?.dependencyIsLoading,\n withInjectedOptions,\n ])\n\n useLoadDynamicOptionsEffect(element, onUpdateFormElements)\n\n return filteredOptions\n}\n"]}
1
+ {"version":3,"file":"useFormElementOptions.js","sourceRoot":"","sources":["../../src/hooks/useFormElementOptions.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes } from '@oneblink/types'\nimport * as React from 'react'\nimport {\n FormElementValueChangeHandler,\n FormElementConditionallyShownElement,\n UpdateFormElementsHandler,\n} from '../types/form'\nimport { useLoadDynamicOptionsEffect } from './useDynamicOptionsLoaderState'\nimport useFormSubmissionModel from './useFormSubmissionModelContext'\nimport processInjectableOption from '../services/injectableOptions'\nimport useTaskContext from './useTaskContext'\nimport useUserProfileForInjectables from './useUserProfileForInjectables'\n\nexport default function useFormElementOptions<T>({\n element,\n value,\n onChange,\n conditionallyShownOptionsElement,\n onFilter,\n onUpdateFormElements,\n}: {\n element: FormTypes.FormElementWithOptions\n value: unknown | undefined\n onChange: FormElementValueChangeHandler<T>\n conditionallyShownOptionsElement:\n | FormElementConditionallyShownElement\n | undefined\n onFilter?: (choiceElementOption: FormTypes.ChoiceElementOption) => boolean\n onUpdateFormElements: UpdateFormElementsHandler\n}) {\n const taskContext = useTaskContext()\n const userProfileForInjectables = useUserProfileForInjectables()\n\n const { formSubmissionModel, elements, parent } = useFormSubmissionModel()\n const conditionallyShownOptions = conditionallyShownOptionsElement?.options\n //options that are shown due to conditional logic\n const shownOptions = React.useMemo<FormTypes.ChoiceElementOption[]>(() => {\n if (!element.options) {\n return []\n }\n if (!conditionallyShownOptions && !onFilter) {\n return element.options\n }\n return element.options.filter((option) => {\n return (\n !conditionallyShownOptions ||\n conditionallyShownOptions.some(({ id }) => id === option.id)\n )\n })\n }, [conditionallyShownOptions, element.options, onFilter])\n\n //\n const withInjectedOptions = React.useMemo(() => {\n return shownOptions.reduce<FormTypes.ChoiceElementOption[]>(\n (memo, option) => {\n const newOptions = processInjectableOption({\n option,\n submission: formSubmissionModel,\n formElements: elements,\n contextSubmission: parent?.formSubmissionModel || {},\n contextElements: parent?.elements || [],\n taskContext,\n userProfile: userProfileForInjectables,\n })\n memo.push(...newOptions)\n\n return memo\n },\n [],\n )\n }, [\n elements,\n formSubmissionModel,\n parent,\n shownOptions,\n taskContext,\n userProfileForInjectables,\n ])\n\n //options that are shown based on conditional logic and user input\n const filteredOptions = React.useMemo<FormTypes.ChoiceElementOption[]>(() => {\n const reducedOptions = withInjectedOptions.filter(\n (option) => !onFilter || (onFilter(option) && !option.displayAlways),\n )\n if (element.type === 'autocomplete') {\n const alwaysShownOptions = withInjectedOptions.filter(\n (option) => option.displayAlways,\n )\n reducedOptions.push(...alwaysShownOptions)\n }\n return reducedOptions\n }, [withInjectedOptions, element.type, onFilter])\n\n React.useEffect(() => {\n if (\n !element.options ||\n conditionallyShownOptionsElement?.dependencyIsLoading\n ) {\n return\n }\n\n if (\n typeof value === 'string' &&\n !withInjectedOptions.some((option) => value === option.value)\n ) {\n onChange(element, {\n value: undefined,\n })\n return\n }\n\n if (Array.isArray(value)) {\n const newValue = value.filter((selectedValue) =>\n withInjectedOptions.some((option) => selectedValue === option.value),\n )\n if (newValue.length !== value.length) {\n const newValueArray = newValue.length ? newValue : undefined\n onChange(element, {\n value: newValueArray as T | undefined,\n })\n }\n }\n }, [\n element,\n shownOptions,\n onChange,\n value,\n conditionallyShownOptionsElement?.dependencyIsLoading,\n withInjectedOptions,\n ])\n\n useLoadDynamicOptionsEffect(element, onUpdateFormElements)\n\n return filteredOptions\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -32,5 +32,5 @@ export { default as CalendarBookingsCancelForm } from './components/calendar-boo
32
32
  export { default as MultiFactorAuthentication } from './components/mfa/MultiFactorAuthentication';
33
33
  export { default as useMfa, MfaProvider, useUserMeetsMfaRequirement, } from './hooks/useMfa';
34
34
  export { default as DownloadableFiles } from './components/downloadable-files';
35
- export { default as ImageCropper, getAspectRatio, generateCroppedImageBlob, } from './components/ImageCropper';
35
+ export { default as ImageCropper, getAspectRatio, generateCroppedImageBlob, PercentCrop, } from './components/ImageCropper';
36
36
  export * from './types/form';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export {\n OneBlinkFormBaseProps,\n OneBlinkFormControlledProps,\n OneBlinkFormUncontrolled as OneBlinkForm,\n OneBlinkFormControlled,\n} from './OneBlinkForm'\nexport { default as OneBlinkAutoSaveForm } from './OneBlinkAutoSaveForm'\nexport { default as OneBlinkReadOnlyForm } from './OneBlinkReadOnlyForm'\nexport { OneBlinkFormStoreProvider } from './components/formStore/OneBlinkFormStoreProvider'\nexport { default as OneBlinkFormStoreClearFiltersButton } from './components/formStore/OneBlinkFormStoreClearFiltersButton'\nexport { default as OneBlinkFormStoreColumnsButton } from './components/formStore/OneBlinkFormStoreColumnsButton'\nexport { default as OneBlinkFormStoreDownloadButton } from './components/formStore/OneBlinkFormStoreDownloadButton'\nexport { default as OneBlinkFormStoreRefreshButton } from './components/formStore/OneBlinkFormStoreRefreshButton'\nexport { default as OneBlinkFormStoreTable } from './components/formStore/OneBlinkFormStoreTable'\n\nexport { default as useIsMounted } from './hooks/useIsMounted'\nexport { default as useBooleanState } from './hooks/useBooleanState'\nexport { default as useNullableState } from './hooks/useNullableState'\nexport { default as useClickOutsideElement } from './hooks/useClickOutsideElement'\nexport {\n default as useIsOffline,\n IsOfflineContextProvider,\n} from './hooks/useIsOffline'\nexport { default as useLogin, UseLoginValue } from './hooks/useLogin'\nexport { default as useSignUp } from './hooks/useSignUp'\nexport {\n default as useAuth,\n AuthContextProvider,\n AuthContextValue,\n} from './hooks/useAuth'\nexport {\n default as usePendingSubmissions,\n PendingSubmissionsContextProvider,\n PendingSubmissionsContextValue,\n} from './hooks/usePendingSubmissions'\nexport {\n default as useDrafts,\n DraftsContextProvider,\n DraftsContextValue,\n} from './hooks/useDrafts'\nexport {\n default as useLoadDataState,\n LoadDataState,\n} from './hooks/useLoadDataState'\nexport { default as useLoadResourcesState } from './hooks/useLoadResourcesState'\nexport { default as useLoadDataEffect } from './hooks/useLoadDataEffect'\nexport { default as useFormSubmissionState } from './hooks/useFormSubmissionState'\nexport { default as useFormSubmissionAutoSaveState } from './hooks/useFormSubmissionAutoSaveState'\nexport { default as useGoogleJsApiLoader } from './hooks/useGoogleJsApiLoader'\n\nexport { default as ProgressBar } from './components/renderer/ProgressBar'\nexport { default as PaymentReceipt } from './PaymentReceipt'\nexport { default as PaymentForm } from './components/payments/PaymentForm'\n\nexport { default as CalendarBookingsForm } from './components/calendar-bookings/CalendarBookingsForm'\nexport { default as CalendarBookingsRescheduleForm } from './components/calendar-bookings/CalendarBookingsReschedulingForm'\nexport { default as CalendarBookingsCancelForm } from './components/calendar-bookings/CalendarBookingsCancelForm'\n\nexport { default as MultiFactorAuthentication } from './components/mfa/MultiFactorAuthentication'\n\nexport {\n default as useMfa,\n MfaProvider,\n useUserMeetsMfaRequirement,\n} from './hooks/useMfa'\n\nexport { default as DownloadableFiles } from './components/downloadable-files'\n\nexport {\n default as ImageCropper,\n getAspectRatio,\n generateCroppedImageBlob,\n} from './components/ImageCropper'\n\nexport * from './types/form'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export {\n OneBlinkFormBaseProps,\n OneBlinkFormControlledProps,\n OneBlinkFormUncontrolled as OneBlinkForm,\n OneBlinkFormControlled,\n} from './OneBlinkForm'\nexport { default as OneBlinkAutoSaveForm } from './OneBlinkAutoSaveForm'\nexport { default as OneBlinkReadOnlyForm } from './OneBlinkReadOnlyForm'\nexport { OneBlinkFormStoreProvider } from './components/formStore/OneBlinkFormStoreProvider'\nexport { default as OneBlinkFormStoreClearFiltersButton } from './components/formStore/OneBlinkFormStoreClearFiltersButton'\nexport { default as OneBlinkFormStoreColumnsButton } from './components/formStore/OneBlinkFormStoreColumnsButton'\nexport { default as OneBlinkFormStoreDownloadButton } from './components/formStore/OneBlinkFormStoreDownloadButton'\nexport { default as OneBlinkFormStoreRefreshButton } from './components/formStore/OneBlinkFormStoreRefreshButton'\nexport { default as OneBlinkFormStoreTable } from './components/formStore/OneBlinkFormStoreTable'\n\nexport { default as useIsMounted } from './hooks/useIsMounted'\nexport { default as useBooleanState } from './hooks/useBooleanState'\nexport { default as useNullableState } from './hooks/useNullableState'\nexport { default as useClickOutsideElement } from './hooks/useClickOutsideElement'\nexport {\n default as useIsOffline,\n IsOfflineContextProvider,\n} from './hooks/useIsOffline'\nexport { default as useLogin, UseLoginValue } from './hooks/useLogin'\nexport { default as useSignUp } from './hooks/useSignUp'\nexport {\n default as useAuth,\n AuthContextProvider,\n AuthContextValue,\n} from './hooks/useAuth'\nexport {\n default as usePendingSubmissions,\n PendingSubmissionsContextProvider,\n PendingSubmissionsContextValue,\n} from './hooks/usePendingSubmissions'\nexport {\n default as useDrafts,\n DraftsContextProvider,\n DraftsContextValue,\n} from './hooks/useDrafts'\nexport {\n default as useLoadDataState,\n LoadDataState,\n} from './hooks/useLoadDataState'\nexport { default as useLoadResourcesState } from './hooks/useLoadResourcesState'\nexport { default as useLoadDataEffect } from './hooks/useLoadDataEffect'\nexport { default as useFormSubmissionState } from './hooks/useFormSubmissionState'\nexport { default as useFormSubmissionAutoSaveState } from './hooks/useFormSubmissionAutoSaveState'\nexport { default as useGoogleJsApiLoader } from './hooks/useGoogleJsApiLoader'\n\nexport { default as ProgressBar } from './components/renderer/ProgressBar'\nexport { default as PaymentReceipt } from './PaymentReceipt'\nexport { default as PaymentForm } from './components/payments/PaymentForm'\n\nexport { default as CalendarBookingsForm } from './components/calendar-bookings/CalendarBookingsForm'\nexport { default as CalendarBookingsRescheduleForm } from './components/calendar-bookings/CalendarBookingsReschedulingForm'\nexport { default as CalendarBookingsCancelForm } from './components/calendar-bookings/CalendarBookingsCancelForm'\n\nexport { default as MultiFactorAuthentication } from './components/mfa/MultiFactorAuthentication'\n\nexport {\n default as useMfa,\n MfaProvider,\n useUserMeetsMfaRequirement,\n} from './hooks/useMfa'\n\nexport { default as DownloadableFiles } from './components/downloadable-files'\n\nexport {\n default as ImageCropper,\n getAspectRatio,\n generateCroppedImageBlob,\n PercentCrop,\n} from './components/ImageCropper'\n\nexport * from './types/form'\n"]}
@@ -8,6 +8,7 @@ import { localisationService } from '@oneblink/apps';
8
8
  import { generateConfirmationFormElementName } from '../dynamic-elements';
9
9
  import { determineLookupButtonIsRequired } from './determineLookupButtonIsRequired';
10
10
  import { defaultAutoSnapshotButtonLabel, generateArcGISAutomatedSnapshotFileName, } from '../../form-elements/FormElementArcGISWebMap';
11
+ import { fileUploadService } from '@oneblink/sdk-core';
11
12
  export const RECAPTCHA_OFFLINE_MESSAGE = 'We could not verify you are human while you are offline.';
12
13
  export default function validateSubmission({ elements, submission, formElementsConditionallyShown, executedLookups, captchaType, isOffline, }) {
13
14
  const formElementsValidation = elements.reduce((partialFormElementsValidation, formElement) => {
@@ -389,7 +390,8 @@ export default function validateSubmission({ elements, submission, formElementsC
389
390
  value.some((file) => {
390
391
  return !checkFileNameIsValid(formElement, file.fileName);
391
392
  })) {
392
- errorMessages.push(`Only the following file types are accepted: ${(formElement.restrictedFileTypes || []).join(', ')}`);
393
+ errorMessages.push(`Only the following file types are accepted: ${(formElement.restrictedFileTypes ||
394
+ fileUploadService.restrictedFileTypes).join(', ')}`);
393
395
  }
394
396
  errorMessages.push(...validateAttachments(value));
395
397
  const isValid = !Array.isArray(value) ||
@@ -1 +1 @@
1
- {"version":3,"file":"validateSubmission.js","sourceRoot":"","sources":["../../../src/services/form-validation/validateSubmission.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport {\n CaptchaType,\n ExecutedLookups,\n FormElementsConditionallyShown,\n FormElementsValidation,\n} from '../../types/form'\n\nimport { isEmpty, validators } from './validate-dot-js'\nimport validationExtensions from './extensions'\nimport {\n checkFileNameExtensionIsValid,\n checkFileNameIsValid,\n getCleanRepeatableSetConfiguration,\n getCleanDateRangeConfiguration,\n validateAttachments,\n} from './validators'\nimport generateCivicaNameRecordElements from '../generateCivicaNameRecordElements'\nimport generateFreshdeskDependentFieldElements from '../generateFreshdeskDependentFieldElements'\nimport { parseDateValue } from '../generate-default-data'\nimport { localisationService } from '@oneblink/apps'\nimport { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis'\nimport { generateConfirmationFormElementName } from '../dynamic-elements'\nimport { determineLookupButtonIsRequired } from './determineLookupButtonIsRequired'\nimport { Value as FormElementComplianceValue } from '../../form-elements/FormElementCompliance'\nimport {\n defaultAutoSnapshotButtonLabel,\n generateArcGISAutomatedSnapshotFileName,\n} from '../../form-elements/FormElementArcGISWebMap'\n\nexport const RECAPTCHA_OFFLINE_MESSAGE =\n 'We could not verify you are human while you are offline.'\n\nexport default function validateSubmission({\n elements,\n submission,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n}: {\n elements: FormTypes.FormElementWithName[]\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n executedLookups: ExecutedLookups\n captchaType: CaptchaType\n isOffline: boolean\n}): FormElementsValidation | undefined {\n const formElementsValidation = elements.reduce<FormElementsValidation>(\n (partialFormElementsValidation, formElement) => {\n switch (formElement.type) {\n // Elements that do not need to be validated\n case 'summary':\n case 'calculation':\n case 'image':\n case 'html':\n case 'heading': {\n return partialFormElementsValidation\n }\n }\n\n // If the element is current hidden, we do not need to apply validation\n const formElementConditionallyShown =\n formElementsConditionallyShown?.[formElement.name]\n if (formElementConditionallyShown?.isHidden) {\n return partialFormElementsValidation\n }\n\n const value = submission?.[formElement.name]\n\n switch (formElement.type) {\n case 'draw': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'A saved signature is required',\n ),\n ...validationExtensions.attachment(value),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'camera': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'A photo is required',\n ),\n ...validationExtensions.attachment(value),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'captcha': {\n switch (captchaType) {\n case 'INVISIBLE':\n break\n case 'CHECKBOX':\n default: {\n const errorMessages = [\n ...validationExtensions.offline(\n isOffline,\n RECAPTCHA_OFFLINE_MESSAGE,\n ),\n ...validationExtensions.presence(\n value,\n { ...formElement, required: true },\n 'Please complete the CAPTCHA successfully',\n ),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] =\n errorMessages[0]\n }\n }\n }\n break\n }\n case 'location': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a location',\n ),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'compliance': {\n const errorMessages = [\n ...validationExtensions.presence(value, formElement, 'Required'),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ...validateAttachments(\n (value as FormElementComplianceValue | undefined)?.files,\n ),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'checkboxes': {\n const optionsLength =\n formElementConditionallyShown?.type === 'formElement' &&\n formElementConditionallyShown?.options\n ? formElementConditionallyShown?.options?.length\n : formElement.options?.length\n const requiredAllDefaultMessage = 'All options are required'\n const errorMessages = validationExtensions.presence(\n value,\n {\n ...formElement,\n required:\n !!optionsLength &&\n (formElement.required || !!formElement.requiredAll),\n },\n formElement.requiredAll ? requiredAllDefaultMessage : 'Required',\n )\n if (formElement.requiredAll) {\n errorMessages.push(\n ...validators.length(value, {\n is: optionsLength,\n message:\n formElement.requiredMessage || requiredAllDefaultMessage,\n }),\n )\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'abn':\n case 'geoscapeAddress':\n case 'pointCadastralParcel':\n case 'pointAddress':\n case 'googleAddress':\n case 'civicaStreetName':\n case 'autocomplete':\n case 'radio':\n case 'select':\n case 'apiNSWLiquorLicence': {\n const errorMessages = [\n ...validationExtensions.presence(value, formElement, 'Required'),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'boolean': {\n const errorMessages = []\n if (value !== true && formElement.required) {\n errorMessages.push(formElement.requiredMessage || 'Required')\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'bsb': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a BSB number',\n ),\n ...validators.regexValidation(value, {\n pattern: /\\d{3}-\\d{3}/,\n message: 'Please enter a valid BSB number',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'barcodeScanner': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please scan a barcode or enter a value',\n ),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'text':\n case 'textarea': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a value',\n ),\n ...validators.length(value, {\n minimum: formElement.minLength,\n tooShort:\n 'Please enter a value with at least %{count} character(s)',\n maximum: formElement.maxLength,\n tooLong:\n 'Please enter a value with %{count} character(s) or less',\n }),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'telephone': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a phone number',\n ),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'email': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter an email address',\n ),\n ...validators.email(value, {\n message: 'Please enter a valid email for this field',\n }),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n\n if (formElement.requiresConfirmation && !!value) {\n const confirmationFormElementName =\n generateConfirmationFormElementName(formElement)\n if (value !== submission?.[confirmationFormElementName]) {\n partialFormElementsValidation[confirmationFormElementName] =\n 'Email addresses do not match'\n }\n }\n break\n }\n case 'time': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a time',\n ),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'date': {\n const [fromDate, fromDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.fromDate,\n daysOffset: formElement.fromDateDaysOffset,\n referenceFormElementId: formElement.fromDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const [toDate, toDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.toDate,\n daysOffset: formElement.toDateDaysOffset,\n referenceFormElementId: formElement.toDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a date',\n ),\n ...validators.datetime(value, {\n dateOnly: true,\n format: (date: Date) => localisationService.formatDate(date),\n earliest: parseDateValue({\n dateOnly: true,\n daysOffset: fromDateDaysOffset,\n value: fromDate,\n }),\n latest: parseDateValue({\n dateOnly: true,\n daysOffset: toDateDaysOffset,\n value: toDate,\n }),\n notValid: 'Please select a valid date',\n tooEarly: 'Date cannot be before %{date}',\n tooLate: 'Date cannot be after %{date}',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'datetime': {\n const [fromDate, fromDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.fromDate,\n daysOffset: formElement.fromDateDaysOffset,\n referenceFormElementId: formElement.fromDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const [toDate, toDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.toDate,\n daysOffset: formElement.toDateDaysOffset,\n referenceFormElementId: formElement.toDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a date and time',\n ),\n ...validators.datetime(value, {\n format: (v: Date) => localisationService.formatDatetime(v),\n earliest: parseDateValue({\n dateOnly: false,\n daysOffset: fromDateDaysOffset,\n value: fromDate,\n }),\n latest: parseDateValue({\n dateOnly: false,\n daysOffset: toDateDaysOffset,\n value: toDate,\n }),\n notValid: 'Please select a valid date and time',\n tooEarly: 'Date and time cannot be before %{date}',\n tooLate: 'Date and time cannot be after %{date}',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'number': {\n let minErrorMessage =\n 'Please enter a number greater than or equal to %{count}'\n let maxErrorMessage =\n 'Please enter a number less than or equal to %{count}'\n if (\n typeof formElement.minNumber === 'number' &&\n typeof formElement.maxNumber === 'number'\n ) {\n minErrorMessage =\n maxErrorMessage = `Please enter a number between ${formElement.minNumber} and ${formElement.maxNumber}`\n }\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a number',\n ),\n ...validators.numericality(value, {\n greaterThanOrEqualTo: formElement.minNumber,\n notGreaterThanOrEqualTo: minErrorMessage,\n lessThanOrEqualTo: formElement.maxNumber,\n notLessThanOrEqualTo: maxErrorMessage,\n onlyInteger: formElement.isInteger,\n notInteger: 'Please enter a whole number',\n notValid: 'Enter enter a valid number',\n }),\n ]\n if (\n formElement.regexPattern &&\n typeof value === 'number' &&\n !Number.isNaN(value)\n ) {\n errorMessages.push(\n ...validationExtensions.regex(value.toString(), formElement),\n )\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'files': {\n const errorMessages = []\n if (formElement.minEntries) {\n errorMessages.push(\n ...validators.presence(value, {\n message: `Please upload at least ${\n formElement.minEntries\n } file${formElement.minEntries === 1 ? '' : 's'}`,\n }),\n )\n }\n errorMessages.push(\n ...validators.length(value, {\n minimum: formElement.minEntries,\n maximum: formElement.maxEntries,\n tooLong: 'Cannot upload more than %{count} file(s)',\n tooShort: 'Please upload at least %{count} file(s)',\n }),\n )\n\n if (\n Array.isArray(value) &&\n value.some((file) => {\n return !checkFileNameIsValid(formElement, file.fileName)\n })\n ) {\n errorMessages.push(\n `Only the following file types are accepted: ${(\n formElement.restrictedFileTypes || []\n ).join(', ')}`,\n )\n }\n\n errorMessages.push(...validateAttachments(value as undefined))\n\n const isValid =\n !Array.isArray(value) ||\n value.every((file) => {\n return checkFileNameExtensionIsValid(formElement, file.fileName)\n })\n if (!isValid) errorMessages.push('All files must have extensions')\n\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'repeatableSet': {\n const minSetEntries = getCleanRepeatableSetConfiguration(\n formElement.minSetEntries,\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const maxSetEntries = getCleanRepeatableSetConfiguration(\n formElement.maxSetEntries,\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const setErrorMessages = validators.length(value, {\n minimum: minSetEntries,\n maximum: maxSetEntries,\n tooLong: 'Cannot have more than %{count} entry/entries',\n tooShort: 'Must have at least %{count} entry/entries',\n })\n if (minSetEntries) {\n setErrorMessages.push(\n ...validators.presence(value, {\n message: `Must have at least ${minSetEntries} ${\n minSetEntries === 1 ? 'entry' : 'entries'\n }`,\n }),\n )\n }\n\n const entries = Array.isArray(value) ? value : []\n\n const repeatableSetExecutedLookups =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups) &&\n Array.isArray(executedLookups[formElement.name])\n ? executedLookups[formElement.name]\n : []\n\n const entryErrors = entries.reduce((errorsByIndex, entry, index) => {\n const entryValidation = validateSubmission({\n submission: entry,\n elements: formElement.elements as FormTypes.FormElementWithName[],\n executedLookups: Array.isArray(repeatableSetExecutedLookups)\n ? repeatableSetExecutedLookups[index]\n : {},\n formElementsConditionallyShown:\n formElementConditionallyShown?.type === 'repeatableSet'\n ? formElementConditionallyShown.entries[index.toString()]\n : undefined,\n captchaType,\n isOffline,\n })\n\n if (entryValidation) {\n errorsByIndex[index] = entryValidation\n }\n return errorsByIndex\n }, {})\n\n if (setErrorMessages.length || !isEmpty(entryErrors)) {\n partialFormElementsValidation[formElement.name] = {\n type: 'repeatableSet',\n set: setErrorMessages[0],\n entries: entryErrors,\n }\n }\n break\n }\n case 'civicaNameRecord': {\n const nestedElements = generateCivicaNameRecordElements(\n formElement,\n [],\n )\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements: nestedElements,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'infoPage':\n case 'form': {\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements:\n formElement.elements as FormTypes.FormElementWithName[],\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'freshdeskDependentField': {\n const nestedElements =\n generateFreshdeskDependentFieldElements(formElement)\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements: nestedElements,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'arcGISWebMap': {\n const arcGISWebMapElementValue = value as\n | ArcGISWebMapElementValue\n | undefined\n const errorMessages = validationExtensions.presence(\n arcGISWebMapElementValue?.userInput,\n formElement,\n 'Required',\n )\n const automatedSnapshotFileName =\n generateArcGISAutomatedSnapshotFileName(formElement)\n\n if (formElement.manualSnapshotsEnabled) {\n errorMessages.push(\n ...validators.length(\n (arcGISWebMapElementValue?.snapshotImages || []).filter(\n (snapshotImage) =>\n snapshotImage.fileName !== automatedSnapshotFileName,\n ),\n {\n minimum: formElement.minManualSnapshots,\n maximum: formElement.maxManualSnapshots,\n tooLong: 'Cannot capture more than %{count} image(s)',\n tooShort: 'Must capture at least %{count} image(s)',\n },\n ),\n )\n }\n\n errorMessages.push(\n ...validateAttachments(arcGISWebMapElementValue?.snapshotImages),\n )\n\n if (\n formElement.autoSnapshotViews?.length &&\n arcGISWebMapElementValue?.snapshotImages?.filter(\n (snapshotImage) =>\n snapshotImage.fileName == automatedSnapshotFileName,\n ).length !== formElement.autoSnapshotViews.length\n ) {\n errorMessages.push(\n `Please press the \"${formElement.autoSnapshotButton?.label || defaultAutoSnapshotButtonLabel}\" button`,\n )\n }\n\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'lookupButton': {\n const errorMessages = validationExtensions.lookups({\n formElement: {\n ...formElement,\n required: determineLookupButtonIsRequired(\n formElement.elementDependencies,\n elements,\n submission ? [submission] : [],\n ),\n },\n executedLookups,\n })\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n default: {\n const never: never = formElement\n console.info('Unsupported form element with validation', never)\n }\n }\n\n return partialFormElementsValidation\n },\n {},\n )\n\n if (isEmpty(formElementsValidation)) {\n return\n }\n\n return formElementsValidation\n}\n"]}
1
+ {"version":3,"file":"validateSubmission.js","sourceRoot":"","sources":["../../../src/services/form-validation/validateSubmission.ts"],"names":[],"mappings":"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","sourcesContent":["import { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport {\n CaptchaType,\n ExecutedLookups,\n FormElementsConditionallyShown,\n FormElementsValidation,\n} from '../../types/form'\n\nimport { isEmpty, validators } from './validate-dot-js'\nimport validationExtensions from './extensions'\nimport {\n checkFileNameExtensionIsValid,\n checkFileNameIsValid,\n getCleanRepeatableSetConfiguration,\n getCleanDateRangeConfiguration,\n validateAttachments,\n} from './validators'\nimport generateCivicaNameRecordElements from '../generateCivicaNameRecordElements'\nimport generateFreshdeskDependentFieldElements from '../generateFreshdeskDependentFieldElements'\nimport { parseDateValue } from '../generate-default-data'\nimport { localisationService } from '@oneblink/apps'\nimport { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis'\nimport { generateConfirmationFormElementName } from '../dynamic-elements'\nimport { determineLookupButtonIsRequired } from './determineLookupButtonIsRequired'\nimport { Value as FormElementComplianceValue } from '../../form-elements/FormElementCompliance'\nimport {\n defaultAutoSnapshotButtonLabel,\n generateArcGISAutomatedSnapshotFileName,\n} from '../../form-elements/FormElementArcGISWebMap'\nimport { fileUploadService } from '@oneblink/sdk-core'\n\nexport const RECAPTCHA_OFFLINE_MESSAGE =\n 'We could not verify you are human while you are offline.'\n\nexport default function validateSubmission({\n elements,\n submission,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n}: {\n elements: FormTypes.FormElementWithName[]\n submission: SubmissionTypes.S3SubmissionData['submission']\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n executedLookups: ExecutedLookups\n captchaType: CaptchaType\n isOffline: boolean\n}): FormElementsValidation | undefined {\n const formElementsValidation = elements.reduce<FormElementsValidation>(\n (partialFormElementsValidation, formElement) => {\n switch (formElement.type) {\n // Elements that do not need to be validated\n case 'summary':\n case 'calculation':\n case 'image':\n case 'html':\n case 'heading': {\n return partialFormElementsValidation\n }\n }\n\n // If the element is current hidden, we do not need to apply validation\n const formElementConditionallyShown =\n formElementsConditionallyShown?.[formElement.name]\n if (formElementConditionallyShown?.isHidden) {\n return partialFormElementsValidation\n }\n\n const value = submission?.[formElement.name]\n\n switch (formElement.type) {\n case 'draw': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'A saved signature is required',\n ),\n ...validationExtensions.attachment(value),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'camera': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'A photo is required',\n ),\n ...validationExtensions.attachment(value),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'captcha': {\n switch (captchaType) {\n case 'INVISIBLE':\n break\n case 'CHECKBOX':\n default: {\n const errorMessages = [\n ...validationExtensions.offline(\n isOffline,\n RECAPTCHA_OFFLINE_MESSAGE,\n ),\n ...validationExtensions.presence(\n value,\n { ...formElement, required: true },\n 'Please complete the CAPTCHA successfully',\n ),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] =\n errorMessages[0]\n }\n }\n }\n break\n }\n case 'location': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a location',\n ),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'compliance': {\n const errorMessages = [\n ...validationExtensions.presence(value, formElement, 'Required'),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ...validateAttachments(\n (value as FormElementComplianceValue | undefined)?.files,\n ),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'checkboxes': {\n const optionsLength =\n formElementConditionallyShown?.type === 'formElement' &&\n formElementConditionallyShown?.options\n ? formElementConditionallyShown?.options?.length\n : formElement.options?.length\n const requiredAllDefaultMessage = 'All options are required'\n const errorMessages = validationExtensions.presence(\n value,\n {\n ...formElement,\n required:\n !!optionsLength &&\n (formElement.required || !!formElement.requiredAll),\n },\n formElement.requiredAll ? requiredAllDefaultMessage : 'Required',\n )\n if (formElement.requiredAll) {\n errorMessages.push(\n ...validators.length(value, {\n is: optionsLength,\n message:\n formElement.requiredMessage || requiredAllDefaultMessage,\n }),\n )\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'abn':\n case 'geoscapeAddress':\n case 'pointCadastralParcel':\n case 'pointAddress':\n case 'googleAddress':\n case 'civicaStreetName':\n case 'autocomplete':\n case 'radio':\n case 'select':\n case 'apiNSWLiquorLicence': {\n const errorMessages = [\n ...validationExtensions.presence(value, formElement, 'Required'),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'boolean': {\n const errorMessages = []\n if (value !== true && formElement.required) {\n errorMessages.push(formElement.requiredMessage || 'Required')\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'bsb': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a BSB number',\n ),\n ...validators.regexValidation(value, {\n pattern: /\\d{3}-\\d{3}/,\n message: 'Please enter a valid BSB number',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'barcodeScanner': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please scan a barcode or enter a value',\n ),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'text':\n case 'textarea': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a value',\n ),\n ...validators.length(value, {\n minimum: formElement.minLength,\n tooShort:\n 'Please enter a value with at least %{count} character(s)',\n maximum: formElement.maxLength,\n tooLong:\n 'Please enter a value with %{count} character(s) or less',\n }),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'telephone': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a phone number',\n ),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'email': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter an email address',\n ),\n ...validators.email(value, {\n message: 'Please enter a valid email for this field',\n }),\n ...validationExtensions.regex(value, formElement),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n\n if (formElement.requiresConfirmation && !!value) {\n const confirmationFormElementName =\n generateConfirmationFormElementName(formElement)\n if (value !== submission?.[confirmationFormElementName]) {\n partialFormElementsValidation[confirmationFormElementName] =\n 'Email addresses do not match'\n }\n }\n break\n }\n case 'time': {\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a time',\n ),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'date': {\n const [fromDate, fromDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.fromDate,\n daysOffset: formElement.fromDateDaysOffset,\n referenceFormElementId: formElement.fromDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const [toDate, toDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.toDate,\n daysOffset: formElement.toDateDaysOffset,\n referenceFormElementId: formElement.toDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a date',\n ),\n ...validators.datetime(value, {\n dateOnly: true,\n format: (date: Date) => localisationService.formatDate(date),\n earliest: parseDateValue({\n dateOnly: true,\n daysOffset: fromDateDaysOffset,\n value: fromDate,\n }),\n latest: parseDateValue({\n dateOnly: true,\n daysOffset: toDateDaysOffset,\n value: toDate,\n }),\n notValid: 'Please select a valid date',\n tooEarly: 'Date cannot be before %{date}',\n tooLate: 'Date cannot be after %{date}',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'datetime': {\n const [fromDate, fromDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.fromDate,\n daysOffset: formElement.fromDateDaysOffset,\n referenceFormElementId: formElement.fromDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const [toDate, toDateDaysOffset] = getCleanDateRangeConfiguration(\n {\n date: formElement.toDate,\n daysOffset: formElement.toDateDaysOffset,\n referenceFormElementId: formElement.toDateElementId,\n },\n elements,\n submission,\n formElementsConditionallyShown,\n )\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please select a date and time',\n ),\n ...validators.datetime(value, {\n format: (v: Date) => localisationService.formatDatetime(v),\n earliest: parseDateValue({\n dateOnly: false,\n daysOffset: fromDateDaysOffset,\n value: fromDate,\n }),\n latest: parseDateValue({\n dateOnly: false,\n daysOffset: toDateDaysOffset,\n value: toDate,\n }),\n notValid: 'Please select a valid date and time',\n tooEarly: 'Date and time cannot be before %{date}',\n tooLate: 'Date and time cannot be after %{date}',\n }),\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n ]\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'number': {\n let minErrorMessage =\n 'Please enter a number greater than or equal to %{count}'\n let maxErrorMessage =\n 'Please enter a number less than or equal to %{count}'\n if (\n typeof formElement.minNumber === 'number' &&\n typeof formElement.maxNumber === 'number'\n ) {\n minErrorMessage =\n maxErrorMessage = `Please enter a number between ${formElement.minNumber} and ${formElement.maxNumber}`\n }\n\n const errorMessages = [\n ...validationExtensions.presence(\n value,\n formElement,\n 'Please enter a number',\n ),\n ...validators.numericality(value, {\n greaterThanOrEqualTo: formElement.minNumber,\n notGreaterThanOrEqualTo: minErrorMessage,\n lessThanOrEqualTo: formElement.maxNumber,\n notLessThanOrEqualTo: maxErrorMessage,\n onlyInteger: formElement.isInteger,\n notInteger: 'Please enter a whole number',\n notValid: 'Enter enter a valid number',\n }),\n ]\n if (\n formElement.regexPattern &&\n typeof value === 'number' &&\n !Number.isNaN(value)\n ) {\n errorMessages.push(\n ...validationExtensions.regex(value.toString(), formElement),\n )\n }\n errorMessages.push(\n ...validationExtensions.lookups({\n formElement,\n executedLookups,\n }),\n )\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'files': {\n const errorMessages = []\n if (formElement.minEntries) {\n errorMessages.push(\n ...validators.presence(value, {\n message: `Please upload at least ${\n formElement.minEntries\n } file${formElement.minEntries === 1 ? '' : 's'}`,\n }),\n )\n }\n errorMessages.push(\n ...validators.length(value, {\n minimum: formElement.minEntries,\n maximum: formElement.maxEntries,\n tooLong: 'Cannot upload more than %{count} file(s)',\n tooShort: 'Please upload at least %{count} file(s)',\n }),\n )\n\n if (\n Array.isArray(value) &&\n value.some((file) => {\n return !checkFileNameIsValid(formElement, file.fileName)\n })\n ) {\n errorMessages.push(\n `Only the following file types are accepted: ${(\n formElement.restrictedFileTypes ||\n fileUploadService.restrictedFileTypes\n ).join(', ')}`,\n )\n }\n\n errorMessages.push(...validateAttachments(value as undefined))\n\n const isValid =\n !Array.isArray(value) ||\n value.every((file) => {\n return checkFileNameExtensionIsValid(formElement, file.fileName)\n })\n if (!isValid) errorMessages.push('All files must have extensions')\n\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'repeatableSet': {\n const minSetEntries = getCleanRepeatableSetConfiguration(\n formElement.minSetEntries,\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const maxSetEntries = getCleanRepeatableSetConfiguration(\n formElement.maxSetEntries,\n elements,\n submission,\n formElementsConditionallyShown,\n )\n const setErrorMessages = validators.length(value, {\n minimum: minSetEntries,\n maximum: maxSetEntries,\n tooLong: 'Cannot have more than %{count} entry/entries',\n tooShort: 'Must have at least %{count} entry/entries',\n })\n if (minSetEntries) {\n setErrorMessages.push(\n ...validators.presence(value, {\n message: `Must have at least ${minSetEntries} ${\n minSetEntries === 1 ? 'entry' : 'entries'\n }`,\n }),\n )\n }\n\n const entries = Array.isArray(value) ? value : []\n\n const repeatableSetExecutedLookups =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups) &&\n Array.isArray(executedLookups[formElement.name])\n ? executedLookups[formElement.name]\n : []\n\n const entryErrors = entries.reduce((errorsByIndex, entry, index) => {\n const entryValidation = validateSubmission({\n submission: entry,\n elements: formElement.elements as FormTypes.FormElementWithName[],\n executedLookups: Array.isArray(repeatableSetExecutedLookups)\n ? repeatableSetExecutedLookups[index]\n : {},\n formElementsConditionallyShown:\n formElementConditionallyShown?.type === 'repeatableSet'\n ? formElementConditionallyShown.entries[index.toString()]\n : undefined,\n captchaType,\n isOffline,\n })\n\n if (entryValidation) {\n errorsByIndex[index] = entryValidation\n }\n return errorsByIndex\n }, {})\n\n if (setErrorMessages.length || !isEmpty(entryErrors)) {\n partialFormElementsValidation[formElement.name] = {\n type: 'repeatableSet',\n set: setErrorMessages[0],\n entries: entryErrors,\n }\n }\n break\n }\n case 'civicaNameRecord': {\n const nestedElements = generateCivicaNameRecordElements(\n formElement,\n [],\n )\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements: nestedElements,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'infoPage':\n case 'form': {\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements:\n formElement.elements as FormTypes.FormElementWithName[],\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'freshdeskDependentField': {\n const nestedElements =\n generateFreshdeskDependentFieldElements(formElement)\n const nestedFormValidation = validationExtensions.nestedElements(\n value,\n {\n formElement,\n formElements: nestedElements,\n formElementsConditionallyShown,\n executedLookups,\n captchaType,\n isOffline,\n },\n )\n if (nestedFormValidation) {\n partialFormElementsValidation[formElement.name] =\n nestedFormValidation\n }\n break\n }\n case 'arcGISWebMap': {\n const arcGISWebMapElementValue = value as\n | ArcGISWebMapElementValue\n | undefined\n const errorMessages = validationExtensions.presence(\n arcGISWebMapElementValue?.userInput,\n formElement,\n 'Required',\n )\n const automatedSnapshotFileName =\n generateArcGISAutomatedSnapshotFileName(formElement)\n\n if (formElement.manualSnapshotsEnabled) {\n errorMessages.push(\n ...validators.length(\n (arcGISWebMapElementValue?.snapshotImages || []).filter(\n (snapshotImage) =>\n snapshotImage.fileName !== automatedSnapshotFileName,\n ),\n {\n minimum: formElement.minManualSnapshots,\n maximum: formElement.maxManualSnapshots,\n tooLong: 'Cannot capture more than %{count} image(s)',\n tooShort: 'Must capture at least %{count} image(s)',\n },\n ),\n )\n }\n\n errorMessages.push(\n ...validateAttachments(arcGISWebMapElementValue?.snapshotImages),\n )\n\n if (\n formElement.autoSnapshotViews?.length &&\n arcGISWebMapElementValue?.snapshotImages?.filter(\n (snapshotImage) =>\n snapshotImage.fileName == automatedSnapshotFileName,\n ).length !== formElement.autoSnapshotViews.length\n ) {\n errorMessages.push(\n `Please press the \"${formElement.autoSnapshotButton?.label || defaultAutoSnapshotButtonLabel}\" button`,\n )\n }\n\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n case 'lookupButton': {\n const errorMessages = validationExtensions.lookups({\n formElement: {\n ...formElement,\n required: determineLookupButtonIsRequired(\n formElement.elementDependencies,\n elements,\n submission ? [submission] : [],\n ),\n },\n executedLookups,\n })\n if (errorMessages.length) {\n partialFormElementsValidation[formElement.name] = errorMessages[0]\n }\n break\n }\n default: {\n const never: never = formElement\n console.info('Unsupported form element with validation', never)\n }\n }\n\n return partialFormElementsValidation\n },\n {},\n )\n\n if (isEmpty(formElementsValidation)) {\n return\n }\n\n return formElementsValidation\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { fileUploadService } from '@oneblink/sdk-core';
1
2
  import getDateRangeConfiguration from '../getDateRangeConfiguration';
2
3
  import cleanFormSubmissionModel from '../cleanFormSubmissionModel';
3
4
  import getRepeatableSetEntriesConfiguration from '../getRepeatableSetEntriesConfiguration';
@@ -16,8 +17,7 @@ export function getCleanRepeatableSetConfiguration(setEntries, elements, submiss
16
17
  }
17
18
  export function checkFileNameIsValid(formElement, fileName) {
18
19
  const extension = fileName.split('.').pop();
19
- return (!formElement.restrictedFileTypes ||
20
- formElement.restrictedFileTypes.some((fileType) => fileType.toLowerCase() === (extension === null || extension === void 0 ? void 0 : extension.toLowerCase())));
20
+ return (formElement.restrictedFileTypes || fileUploadService.restrictedFileTypes).some((fileType) => fileType.toLowerCase() === (extension === null || extension === void 0 ? void 0 : extension.toLowerCase()));
21
21
  }
22
22
  export function checkFileNameExtensionIsValid(formElement, fileName) {
23
23
  return (formElement.allowExtensionlessAttachments || fileName.split('.').length >= 2);
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/services/form-validation/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { EnvironmentTypes, FormTypes, SubmissionTypes } from '@oneblink/types'\nimport getDateRangeConfiguration, {\n DateRangeConfigurationOptions,\n} from '../getDateRangeConfiguration'\nimport {\n FormElementsConditionallyShown,\n FormElementsValidation,\n} from '../../types/form'\nimport cleanFormSubmissionModel from '../cleanFormSubmissionModel'\nimport getRepeatableSetEntriesConfiguration from '../getRepeatableSetEntriesConfiguration'\nimport { attachmentsService } from '@oneblink/apps'\nimport { FormElementBinaryStorageValue } from '../../types/attachments'\n\nexport function getCleanDateRangeConfiguration(\n options: DateRangeConfigurationOptions,\n elements: FormTypes.FormElement[],\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n): ReturnType<typeof getDateRangeConfiguration> {\n if (options.referenceFormElementId && submission) {\n const { model } = cleanFormSubmissionModel(\n submission,\n elements,\n formElementsConditionallyShown,\n true,\n )\n return getDateRangeConfiguration(options, elements, model)\n }\n return [options.date, options.daysOffset]\n}\n\nexport function getCleanRepeatableSetConfiguration(\n setEntries: FormTypes.RepeatableSetElement['minSetEntries'],\n elements: FormTypes.FormElement[],\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n) {\n if (submission) {\n const { model } = cleanFormSubmissionModel(\n submission,\n elements,\n formElementsConditionallyShown,\n true,\n )\n return getRepeatableSetEntriesConfiguration(setEntries, elements, model)\n }\n}\n\nexport function checkFileNameIsValid(\n formElement: FormTypes.FilesElement,\n fileName: string,\n) {\n const extension = fileName.split('.').pop()\n return (\n !formElement.restrictedFileTypes ||\n formElement.restrictedFileTypes.some(\n (fileType) => fileType.toLowerCase() === extension?.toLowerCase(),\n )\n )\n}\n\nexport function checkFileNameExtensionIsValid(\n formElement: FormTypes.FilesElement,\n fileName: string,\n) {\n return (\n formElement.allowExtensionlessAttachments || fileName.split('.').length >= 2\n )\n}\n\nexport function checkSectionValidity(\n element: FormTypes.PageElement | FormTypes.SectionElement,\n formElementsValidation: FormElementsValidation | undefined,\n): boolean {\n // If everything is valid, no need to check elements\n if (!formElementsValidation) {\n return false\n }\n\n // If there is no elements on the page that are invalid, we will treat as valid\n return element.elements.some((formElement) => {\n switch (formElement.type) {\n case 'page':\n case 'section': {\n return checkSectionValidity(formElement, formElementsValidation)\n }\n default: {\n return formElementsValidation[formElement.name]\n }\n }\n })\n}\n\nexport function getInvalidAttachment(\n value: unknown,\n): attachmentsService.AttachmentError | undefined {\n if (\n value &&\n typeof value === 'object' &&\n 'type' in value &&\n value.type === 'ERROR'\n ) {\n return value as attachmentsService.AttachmentError\n }\n}\n\nexport function validateAttachments(\n value: FormElementBinaryStorageValue[] | undefined,\n): string[] {\n const exceedsMaximumSize = value?.some((att) => {\n const invalidAttachment = getInvalidAttachment(att)\n if (\n invalidAttachment?.fileName &&\n invalidAttachment?.errorType === 'EXCEEDS_MAX_SIZE'\n ) {\n return true\n }\n })\n const emptyFiles = value?.some((att) => {\n const invalidAttachment = getInvalidAttachment(att)\n if (\n invalidAttachment?.fileName &&\n invalidAttachment?.errorType === 'EMPTY_FILE'\n ) {\n return true\n }\n })\n if (!exceedsMaximumSize && !emptyFiles) {\n const invalidAttachmentNames = value?.reduce(\n (invalidAttachmentNames: string[], att) => {\n const attachmentName = getInvalidAttachment(att)?.fileName\n if (attachmentName) {\n invalidAttachmentNames.push(attachmentName)\n }\n return invalidAttachmentNames\n },\n [],\n )\n if (invalidAttachmentNames?.length) {\n return [`${invalidAttachmentNames.join(', ')} could not be uploaded.`]\n }\n return []\n }\n let errorMessage\n if (exceedsMaximumSize) {\n errorMessage = 'One or more of the files exceed the maximum size allowed.'\n }\n if (emptyFiles) {\n const emptyMessage = 'One or more of the files are empty.'\n errorMessage = errorMessage\n ? `${errorMessage} ${emptyMessage}`\n : emptyMessage\n }\n if (errorMessage) {\n return [errorMessage]\n }\n\n return []\n}\n\nexport const generateLookupValidationMessage = (\n lookupButtonConfig?: EnvironmentTypes.ButtonConfiguration,\n) => {\n return lookupButtonConfig && lookupButtonConfig.label\n ? `${lookupButtonConfig.label} is required`\n : 'Lookup is required'\n}\n"]}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../src/services/form-validation/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { EnvironmentTypes, FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { fileUploadService } from '@oneblink/sdk-core'\nimport getDateRangeConfiguration, {\n DateRangeConfigurationOptions,\n} from '../getDateRangeConfiguration'\nimport {\n FormElementsConditionallyShown,\n FormElementsValidation,\n} from '../../types/form'\nimport cleanFormSubmissionModel from '../cleanFormSubmissionModel'\nimport getRepeatableSetEntriesConfiguration from '../getRepeatableSetEntriesConfiguration'\nimport { attachmentsService } from '@oneblink/apps'\nimport { FormElementBinaryStorageValue } from '../../types/attachments'\n\nexport function getCleanDateRangeConfiguration(\n options: DateRangeConfigurationOptions,\n elements: FormTypes.FormElement[],\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n): ReturnType<typeof getDateRangeConfiguration> {\n if (options.referenceFormElementId && submission) {\n const { model } = cleanFormSubmissionModel(\n submission,\n elements,\n formElementsConditionallyShown,\n true,\n )\n return getDateRangeConfiguration(options, elements, model)\n }\n return [options.date, options.daysOffset]\n}\n\nexport function getCleanRepeatableSetConfiguration(\n setEntries: FormTypes.RepeatableSetElement['minSetEntries'],\n elements: FormTypes.FormElement[],\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n) {\n if (submission) {\n const { model } = cleanFormSubmissionModel(\n submission,\n elements,\n formElementsConditionallyShown,\n true,\n )\n return getRepeatableSetEntriesConfiguration(setEntries, elements, model)\n }\n}\n\nexport function checkFileNameIsValid(\n formElement: FormTypes.FilesElement,\n fileName: string,\n) {\n const extension = fileName.split('.').pop()\n return (\n formElement.restrictedFileTypes || fileUploadService.restrictedFileTypes\n ).some((fileType) => fileType.toLowerCase() === extension?.toLowerCase())\n}\n\nexport function checkFileNameExtensionIsValid(\n formElement: FormTypes.FilesElement,\n fileName: string,\n) {\n return (\n formElement.allowExtensionlessAttachments || fileName.split('.').length >= 2\n )\n}\n\nexport function checkSectionValidity(\n element: FormTypes.PageElement | FormTypes.SectionElement,\n formElementsValidation: FormElementsValidation | undefined,\n): boolean {\n // If everything is valid, no need to check elements\n if (!formElementsValidation) {\n return false\n }\n\n // If there is no elements on the page that are invalid, we will treat as valid\n return element.elements.some((formElement) => {\n switch (formElement.type) {\n case 'page':\n case 'section': {\n return checkSectionValidity(formElement, formElementsValidation)\n }\n default: {\n return formElementsValidation[formElement.name]\n }\n }\n })\n}\n\nexport function getInvalidAttachment(\n value: unknown,\n): attachmentsService.AttachmentError | undefined {\n if (\n value &&\n typeof value === 'object' &&\n 'type' in value &&\n value.type === 'ERROR'\n ) {\n return value as attachmentsService.AttachmentError\n }\n}\n\nexport function validateAttachments(\n value: FormElementBinaryStorageValue[] | undefined,\n): string[] {\n const exceedsMaximumSize = value?.some((att) => {\n const invalidAttachment = getInvalidAttachment(att)\n if (\n invalidAttachment?.fileName &&\n invalidAttachment?.errorType === 'EXCEEDS_MAX_SIZE'\n ) {\n return true\n }\n })\n const emptyFiles = value?.some((att) => {\n const invalidAttachment = getInvalidAttachment(att)\n if (\n invalidAttachment?.fileName &&\n invalidAttachment?.errorType === 'EMPTY_FILE'\n ) {\n return true\n }\n })\n if (!exceedsMaximumSize && !emptyFiles) {\n const invalidAttachmentNames = value?.reduce(\n (invalidAttachmentNames: string[], att) => {\n const attachmentName = getInvalidAttachment(att)?.fileName\n if (attachmentName) {\n invalidAttachmentNames.push(attachmentName)\n }\n return invalidAttachmentNames\n },\n [],\n )\n if (invalidAttachmentNames?.length) {\n return [`${invalidAttachmentNames.join(', ')} could not be uploaded.`]\n }\n return []\n }\n let errorMessage\n if (exceedsMaximumSize) {\n errorMessage = 'One or more of the files exceed the maximum size allowed.'\n }\n if (emptyFiles) {\n const emptyMessage = 'One or more of the files are empty.'\n errorMessage = errorMessage\n ? `${errorMessage} ${emptyMessage}`\n : emptyMessage\n }\n if (errorMessage) {\n return [errorMessage]\n }\n\n return []\n}\n\nexport const generateLookupValidationMessage = (\n lookupButtonConfig?: EnvironmentTypes.ButtonConfiguration,\n) => {\n return lookupButtonConfig && lookupButtonConfig.label\n ? `${lookupButtonConfig.label} is required`\n : 'Lookup is required'\n}\n"]}
@@ -1,10 +1,12 @@
1
1
  import { FormTypes, SubmissionTypes } from '@oneblink/types';
2
2
  import { MiscTypes } from '@oneblink/types';
3
3
  import { TaskContext } from '../hooks/useTaskContext';
4
- export default function processInjectableOption({ option, submission, formElements, taskContext, userProfile, }: {
4
+ export default function processInjectableOption({ option, submission, formElements, contextElements, contextSubmission, taskContext, userProfile, }: {
5
5
  option: FormTypes.ChoiceElementOption;
6
6
  submission: SubmissionTypes.S3SubmissionData['submission'];
7
7
  formElements: FormTypes.FormElement[];
8
+ contextElements: FormTypes.FormElement[];
9
+ contextSubmission: SubmissionTypes.S3SubmissionData['submission'];
8
10
  taskContext: TaskContext;
9
11
  userProfile: MiscTypes.UserProfile | undefined;
10
12
  }): FormTypes.ChoiceElementOption[];