@oneblink/apps-react 8.0.0-beta.2 → 8.0.0-beta.3

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.
@@ -1,38 +1,37 @@
1
1
  import * as React from 'react';
2
2
  import { localisationService } from '@oneblink/apps';
3
- import { TimePicker } from '@mui/x-date-pickers';
4
3
  import CopyToClipboardButton from '../components/renderer/CopyToClipboardButton';
5
4
  import LookupButton from '../components/renderer/LookupButton';
6
5
  import FormElementLabelContainer from '../components/renderer/FormElementLabelContainer';
6
+ import MaterialIcon from '../components/MaterialIcon';
7
7
  import { LookupNotificationContext } from '../hooks/useLookupNotification';
8
8
  import useElementAriaDescribedby from '../hooks/useElementAriaDescribedby';
9
- import useFormDatePickerProps from '../hooks/form-date-picker/useFormDatePickerProps';
10
- const timeFormat = localisationService.getDateFnsFormats().time;
9
+ import { format, parse } from 'date-fns';
11
10
  function FormElementTime({ id, element, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, autocompleteAttributes, }) {
12
11
  const ariaDescribedby = useElementAriaDescribedby(id, element);
13
12
  const handleChange = React.useCallback((newValue) => {
13
+ if (newValue) {
14
+ try {
15
+ const timeValue = parse(newValue, 'HH:mm', new Date());
16
+ onChange(element, { value: timeValue.toISOString() });
17
+ return;
18
+ }
19
+ catch {
20
+ console.warn(`Error parsing time for element: ${element.id}`);
21
+ }
22
+ }
14
23
  onChange(element, {
15
- value: newValue,
24
+ value: undefined,
16
25
  });
17
26
  setIsDirty();
18
27
  }, [element, onChange, setIsDirty]);
19
- const commonProps = useFormDatePickerProps({
20
- id,
21
- value: typeof value === 'string' ? value : undefined,
22
- maxDate: undefined,
23
- minDate: undefined,
24
- icon: 'schedule',
25
- ariaDescribedby,
26
- autocompleteAttributes,
27
- placeholder: element.placeholderValue,
28
- className: 'cypress-time-control',
29
- });
30
- const timeProps = React.useMemo(() => {
31
- // maxDate and minDate not applicable to a timepicker
32
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
33
- const { maxDate, minDate, ...rest } = commonProps;
34
- return rest;
35
- }, [commonProps]);
28
+ const timeValue = React.useMemo(() => {
29
+ if (typeof value !== 'string') {
30
+ return '';
31
+ }
32
+ const date = new Date(value);
33
+ return format(date, 'HH:mm');
34
+ }, [value]);
36
35
  const text = React.useMemo(() => {
37
36
  if (typeof value !== 'string') {
38
37
  return null;
@@ -45,9 +44,11 @@ function FormElementTime({ id, element, value, onChange, validationMessage, disp
45
44
  React.createElement(FormElementLabelContainer, { className: "ob-time", id: id, element: element, required: element.required },
46
45
  React.createElement("div", { className: "field has-addons" },
47
46
  React.createElement("div", { className: "control is-expanded has-icons-right" },
48
- React.createElement(TimePicker, { label: element.label, format: timeFormat, ...timeProps, onAccept: (newDate) => {
49
- handleChange(newDate === null || newDate === void 0 ? void 0 : newDate.toISOString());
50
- }, disabled: element.readOnly, timeSteps: { minutes: 1 }, onClose: setIsDirty })),
47
+ React.createElement("input", { id: id, type: "time", name: element.name, value: timeValue, placeholder: element.placeholderValue, disabled: element.readOnly, className: "input ob-input cypress-time-control", onBlur: setIsDirty, autoComplete: autocompleteAttributes, "aria-describedby": ariaDescribedby, onChange: (e) => {
48
+ handleChange(e.target.value);
49
+ } }),
50
+ React.createElement("span", { className: "ob-input-icon icon is-small is-right" },
51
+ React.createElement(MaterialIcon, { className: "is-size-5" }, "schedule"))),
51
52
  !!element.readOnly && !!text && (React.createElement("div", { className: "control" },
52
53
  React.createElement(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: text }))),
53
54
  React.createElement(LookupButton, { isInputButton: true, value: value, validationMessage: validationMessage, lookupButtonConfig: element.lookupButton })),
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementTime.js","sourceRoot":"","sources":["../../src/form-elements/FormElementTime.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { localisationService } from '@oneblink/apps'\nimport { FormTypes } from '@oneblink/types'\nimport { TimePicker } from '@mui/x-date-pickers'\n\nimport CopyToClipboardButton from '../components/renderer/CopyToClipboardButton'\nimport LookupButton from '../components/renderer/LookupButton'\n\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport useFormDatePickerProps from '../hooks/form-date-picker/useFormDatePickerProps'\n\ntype Props = {\n id: string\n element: FormTypes.TimeElement\n value: unknown | undefined\n onChange: FormElementValueChangeHandler<string>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n autocompleteAttributes?: string\n} & IsDirtyProps\n\nconst timeFormat = localisationService.getDateFnsFormats().time\n\nfunction FormElementTime({\n id,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n\n const handleChange = React.useCallback(\n (newValue: string | undefined) => {\n onChange(element, {\n value: newValue,\n })\n setIsDirty()\n },\n [element, onChange, setIsDirty],\n )\n\n const commonProps = useFormDatePickerProps({\n id,\n value: typeof value === 'string' ? value : undefined,\n maxDate: undefined,\n minDate: undefined,\n icon: 'schedule',\n ariaDescribedby,\n autocompleteAttributes,\n placeholder: element.placeholderValue,\n className: 'cypress-time-control',\n })\n\n const timeProps = React.useMemo(() => {\n // maxDate and minDate not applicable to a timepicker\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { maxDate, minDate, ...rest } = commonProps\n return rest\n }, [commonProps])\n\n const text = React.useMemo(() => {\n if (typeof value !== 'string') {\n return null\n }\n return localisationService.formatTime(new Date(value))\n }, [value])\n\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (isDirty || displayValidationMessage) && !!validationMessage && !isLookingUp\n\n return (\n <div className=\"cypress-time-element\">\n <FormElementLabelContainer\n className=\"ob-time\"\n id={id}\n element={element}\n required={element.required}\n >\n <div className=\"field has-addons\">\n <div className=\"control is-expanded has-icons-right\">\n <TimePicker\n label={element.label}\n format={timeFormat}\n {...timeProps}\n onAccept={(newDate) => {\n handleChange(newDate?.toISOString())\n }}\n disabled={element.readOnly}\n timeSteps={{ minutes: 1 }}\n onClose={setIsDirty}\n />\n </div>\n {!!element.readOnly && !!text && (\n <div className=\"control\">\n <CopyToClipboardButton\n className=\"button is-input-addon copy-button cypress-copy-to-clipboard-button\"\n text={text}\n />\n </div>\n )}\n <LookupButton\n isInputButton\n value={value}\n validationMessage={validationMessage}\n lookupButtonConfig={element.lookupButton}\n />\n </div>\n\n {isDisplayingValidationMessage && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-validation-message\">\n {validationMessage}\n </div>\n </div>\n )}\n </FormElementLabelContainer>\n </div>\n )\n}\n\nexport default React.memo(FormElementTime)\n"]}
1
+ {"version":3,"file":"FormElementTime.js","sourceRoot":"","sources":["../../src/form-elements/FormElementTime.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { localisationService } from '@oneblink/apps'\nimport { FormTypes } from '@oneblink/types'\n\nimport CopyToClipboardButton from '../components/renderer/CopyToClipboardButton'\nimport LookupButton from '../components/renderer/LookupButton'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport MaterialIcon from '../components/MaterialIcon'\n\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport { format, parse } from 'date-fns'\n\ntype Props = {\n id: string\n element: FormTypes.TimeElement\n value: unknown | undefined\n onChange: FormElementValueChangeHandler<string>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n autocompleteAttributes?: string\n} & IsDirtyProps\n\nfunction FormElementTime({\n id,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n\n const handleChange = React.useCallback(\n (newValue: string | undefined) => {\n if (newValue) {\n try {\n const timeValue = parse(newValue, 'HH:mm', new Date())\n onChange(element, { value: timeValue.toISOString() })\n return\n } catch {\n console.warn(`Error parsing time for element: ${element.id}`)\n }\n }\n\n onChange(element, {\n value: undefined,\n })\n setIsDirty()\n },\n [element, onChange, setIsDirty],\n )\n\n const timeValue = React.useMemo(() => {\n if (typeof value !== 'string') {\n return ''\n }\n const date = new Date(value)\n return format(date, 'HH:mm')\n }, [value])\n\n const text = React.useMemo(() => {\n if (typeof value !== 'string') {\n return null\n }\n return localisationService.formatTime(new Date(value))\n }, [value])\n\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (isDirty || displayValidationMessage) && !!validationMessage && !isLookingUp\n\n return (\n <div className=\"cypress-time-element\">\n <FormElementLabelContainer\n className=\"ob-time\"\n id={id}\n element={element}\n required={element.required}\n >\n <div className=\"field has-addons\">\n <div className=\"control is-expanded has-icons-right\">\n <input\n id={id}\n type=\"time\"\n name={element.name}\n value={timeValue}\n placeholder={element.placeholderValue}\n disabled={element.readOnly}\n className=\"input ob-input cypress-time-control\"\n onBlur={setIsDirty}\n autoComplete={autocompleteAttributes}\n aria-describedby={ariaDescribedby}\n onChange={(e) => {\n handleChange(e.target.value)\n }}\n />\n <span className=\"ob-input-icon icon is-small is-right\">\n <MaterialIcon className=\"is-size-5\">schedule</MaterialIcon>\n </span>\n </div>\n {!!element.readOnly && !!text && (\n <div className=\"control\">\n <CopyToClipboardButton\n className=\"button is-input-addon copy-button cypress-copy-to-clipboard-button\"\n text={text}\n />\n </div>\n )}\n <LookupButton\n isInputButton\n value={value}\n validationMessage={validationMessage}\n lookupButtonConfig={element.lookupButton}\n />\n </div>\n\n {isDisplayingValidationMessage && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-validation-message\">\n {validationMessage}\n </div>\n </div>\n )}\n </FormElementLabelContainer>\n </div>\n )\n}\n\nexport default React.memo(FormElementTime)\n"]}
@@ -3,7 +3,7 @@ import validationExtensions from './extensions';
3
3
  import { checkFileNameExtensionIsValid, checkFileNameIsValid, getCleanRepeatableSetConfiguration, getCleanDateRangeConfiguration, } from './validators';
4
4
  import generateCivicaNameRecordElements from '../generateCivicaNameRecordElements';
5
5
  import generateFreshdeskDependentFieldElements from '../generateFreshdeskDependentFieldElements';
6
- import { parseDateValue } from '../generate-default-data';
6
+ import { parseDateValue, DATE_ELEMENT_SUBMISSION_MODEL_FORMAT, } from '../generate-default-data';
7
7
  import { localisationService } from '@oneblink/apps';
8
8
  export const RECAPTCHA_OFFLINE_MESSAGE = 'We could not verify you are human while you are offline.';
9
9
  export default function validateSubmission({ elements, submission, formElementsConditionallyShown, executedLookups, captchaType, isOffline, }) {
@@ -266,12 +266,12 @@ export default function validateSubmission({ elements, submission, formElementsC
266
266
  dateOnly: true,
267
267
  format: (date) => localisationService.formatDate(date),
268
268
  earliest: parseDateValue({
269
- dateOnly: true,
269
+ dateFormat: DATE_ELEMENT_SUBMISSION_MODEL_FORMAT,
270
270
  daysOffset: fromDateDaysOffset,
271
271
  value: fromDate,
272
272
  }),
273
273
  latest: parseDateValue({
274
- dateOnly: true,
274
+ dateFormat: DATE_ELEMENT_SUBMISSION_MODEL_FORMAT,
275
275
  daysOffset: toDateDaysOffset,
276
276
  value: toDate,
277
277
  }),
@@ -305,12 +305,12 @@ export default function validateSubmission({ elements, submission, formElementsC
305
305
  ...validators.datetime(value, {
306
306
  format: (v) => localisationService.formatDatetime(v),
307
307
  earliest: parseDateValue({
308
- dateOnly: false,
308
+ dateFormat: undefined,
309
309
  daysOffset: fromDateDaysOffset,
310
310
  value: fromDate,
311
311
  }),
312
312
  latest: parseDateValue({
313
- dateOnly: false,
313
+ dateFormat: undefined,
314
314
  daysOffset: toDateDaysOffset,
315
315
  value: toDate,
316
316
  }),
@@ -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} from './validators'\nimport generateCivicaNameRecordElements from '../generateCivicaNameRecordElements'\nimport generateFreshdeskDependentFieldElements from '../generateFreshdeskDependentFieldElements'\nimport { parseDateValue } from '../generate-default-data'\nimport { localisationService } from '@oneblink/apps'\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 case 'arcGISWebMap': {\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 ...validationExtensions.attachments(value as undefined),\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 '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 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(\n ...validationExtensions.attachments(value as undefined),\n )\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 default: {\n console.info('Unsupported form element with validation', formElement)\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} from './validators'\nimport generateCivicaNameRecordElements from '../generateCivicaNameRecordElements'\nimport generateFreshdeskDependentFieldElements from '../generateFreshdeskDependentFieldElements'\nimport {\n parseDateValue,\n DATE_ELEMENT_SUBMISSION_MODEL_FORMAT,\n} from '../generate-default-data'\nimport { localisationService } from '@oneblink/apps'\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 case 'arcGISWebMap': {\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 ...validationExtensions.attachments(value as undefined),\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 '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 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 dateFormat: DATE_ELEMENT_SUBMISSION_MODEL_FORMAT,\n daysOffset: fromDateDaysOffset,\n value: fromDate,\n }),\n latest: parseDateValue({\n dateFormat: DATE_ELEMENT_SUBMISSION_MODEL_FORMAT,\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 dateFormat: undefined,\n daysOffset: fromDateDaysOffset,\n value: fromDate,\n }),\n latest: parseDateValue({\n dateFormat: undefined,\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(\n ...validationExtensions.attachments(value as undefined),\n )\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 default: {\n console.info('Unsupported form element with validation', formElement)\n }\n }\n\n return partialFormElementsValidation\n },\n {},\n )\n\n if (isEmpty(formElementsValidation)) {\n return\n }\n\n return formElementsValidation\n}\n"]}
@@ -1,11 +1,12 @@
1
1
  import { FormTypes, SubmissionTypes } from '@oneblink/types';
2
+ export declare const DATE_ELEMENT_SUBMISSION_MODEL_FORMAT = "yyyy-MM-dd";
2
3
  export declare const ENTRY_ID_PROPERTY_NAME = "$__id";
3
4
  export declare const generateNewRepeatableSetEntry: () => {
4
5
  $__id: string;
5
6
  };
6
- export declare function parseDateValue({ dateOnly, daysOffset, value, }: {
7
- dateOnly: boolean;
7
+ export declare function parseDateValue({ daysOffset, value, dateFormat, }: {
8
8
  daysOffset: number | undefined;
9
9
  value: unknown;
10
+ dateFormat: string | undefined;
10
11
  }): string | undefined;
11
12
  export default function generateDefaultData(elements: FormTypes.FormElement[], preFillData: SubmissionTypes.S3SubmissionData['submission']): SubmissionTypes.S3SubmissionData['submission'];
@@ -1,8 +1,10 @@
1
1
  import { v4 as uuidv4 } from 'uuid';
2
2
  import { localisationService } from '@oneblink/apps';
3
+ import { format } from 'date-fns';
3
4
  import { prepareNewAttachment } from './attachments';
4
5
  import { dataUriToBlobSync } from './blob-utils';
5
6
  import generateCivicaNameRecordElements from './generateCivicaNameRecordElements';
7
+ export const DATE_ELEMENT_SUBMISSION_MODEL_FORMAT = 'yyyy-MM-dd';
6
8
  export const ENTRY_ID_PROPERTY_NAME = '$__id';
7
9
  export const generateNewRepeatableSetEntry = () => ({
8
10
  [ENTRY_ID_PROPERTY_NAME]: uuidv4(),
@@ -55,32 +57,16 @@ function parseFiles(element, value) {
55
57
  }
56
58
  }
57
59
  }
58
- export function parseDateValue({ dateOnly, daysOffset, value, }) {
60
+ export function parseDateValue({ daysOffset, value, dateFormat, }) {
59
61
  if (typeof value !== 'string') {
60
62
  return;
61
63
  }
62
- const date = localisationService.generateDate({ daysOffset, value, dateOnly });
64
+ const date = localisationService.generateDate({ daysOffset, value });
63
65
  if (!date) {
64
66
  return;
65
67
  }
66
- if (dateOnly) {
67
- const { year, month, day } = new Intl.DateTimeFormat(localisationService.getLocale(), {
68
- year: 'numeric',
69
- month: '2-digit',
70
- day: '2-digit',
71
- })
72
- .formatToParts(date)
73
- .reduce((memo, { type, value }) => ({
74
- ...memo,
75
- [type]: value,
76
- }), {
77
- year: '',
78
- month: '',
79
- day: '',
80
- });
81
- // This is a workaround for an iOS 15 bug where the year was being returned as 2 digits: https://bugs.webkit.org/show_bug.cgi?id=230827
82
- const fixedYear = year.length === 2 ? date.getFullYear() : year;
83
- return `${fixedYear}-${month}-${day}`;
68
+ if (dateFormat) {
69
+ return format(date, dateFormat);
84
70
  }
85
71
  else {
86
72
  return date.toISOString();
@@ -166,7 +152,7 @@ function parsePreFillData(element, value) {
166
152
  case 'datetime':
167
153
  case 'date': {
168
154
  return parseDateValue({
169
- dateOnly: element.type === 'date',
155
+ dateFormat: element.type === 'date' ? 'yyyy-MM-dd' : undefined,
170
156
  daysOffset: undefined,
171
157
  value,
172
158
  });
@@ -395,7 +381,9 @@ export default function generateDefaultData(elements, preFillData) {
395
381
  case 'time': {
396
382
  if (el.defaultValue) {
397
383
  m[el.name] = parseDateValue({
398
- dateOnly: el.type === 'date',
384
+ dateFormat: el.type === 'date'
385
+ ? DATE_ELEMENT_SUBMISSION_MODEL_FORMAT
386
+ : undefined,
399
387
  daysOffset: el.defaultValueDaysOffset,
400
388
  value: el.defaultValue,
401
389
  });
@@ -1 +1 @@
1
- {"version":3,"file":"generate-default-data.js","sourceRoot":"","sources":["../../src/services/generate-default-data.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuidv4 } from 'uuid'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { attachmentsService, localisationService } from '@oneblink/apps'\nimport { prepareNewAttachment } from './attachments'\nimport { dataUriToBlobSync } from './blob-utils'\nimport generateCivicaNameRecordElements from './generateCivicaNameRecordElements'\n\nexport const ENTRY_ID_PROPERTY_NAME = '$__id'\nexport const generateNewRepeatableSetEntry = () => ({\n [ENTRY_ID_PROPERTY_NAME]: uuidv4(),\n})\n\nfunction parseAttachment(\n value: unknown,\n): attachmentsService.Attachment | undefined {\n return parseUnknownAsRecord(value, (record) => {\n // Check for attachments that have not been uploaded yet\n if (\n record.data instanceof Blob &&\n typeof record.type === 'string' &&\n typeof record._id === 'string' &&\n typeof record.fileName === 'string' &&\n typeof record.isPrivate === 'boolean'\n ) {\n return record as attachmentsService.Attachment\n }\n\n // Check for attachments that have been uploaded already\n if (\n typeof record.id === 'string' &&\n typeof record.fileName === 'string' &&\n typeof record.url === 'string' &&\n typeof record.contentType === 'string' &&\n typeof record.isPrivate === 'boolean' &&\n parseUnknownAsRecord(\n record.s3,\n (s3) =>\n typeof s3.bucket === 'string' &&\n typeof s3.key === 'string' &&\n typeof s3.region === 'string',\n )\n ) {\n return record as SubmissionTypes.FormSubmissionAttachment\n }\n })\n}\n\nfunction parseFile(\n element: FormTypes.FormElementBinaryStorage,\n value: unknown,\n): attachmentsService.Attachment | undefined {\n return parseUnknownAsRecord(value, (record) => {\n if (\n record.type === undefined &&\n typeof record.fileName === 'string' &&\n typeof record.data === 'string'\n ) {\n const blob = dataUriToBlobSync(record.data)\n return prepareNewAttachment(blob, record.fileName, element)\n }\n\n return parseAttachment(record)\n })\n}\n\nfunction parseFiles(\n element: FormTypes.FormElementBinaryStorage,\n value: unknown,\n): Array<attachmentsService.Attachment> | undefined {\n if (Array.isArray(value)) {\n const files = value.reduce<Array<attachmentsService.Attachment>>(\n (files, v) => {\n const file = parseFile(element, v)\n if (file) {\n files.push(file)\n }\n return files\n },\n [],\n )\n if (files.length) {\n return files\n }\n }\n}\n\nexport function parseDateValue({\n dateOnly,\n daysOffset,\n value,\n}: {\n dateOnly: boolean\n daysOffset: number | undefined\n value: unknown\n}): string | undefined {\n if (typeof value !== 'string') {\n return\n }\n\n const date = localisationService.generateDate({ daysOffset, value, dateOnly })\n if (!date) {\n return\n }\n\n if (dateOnly) {\n const { year, month, day } = new Intl.DateTimeFormat(\n localisationService.getLocale(),\n {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n },\n )\n .formatToParts(date)\n .reduce(\n (memo, { type, value }) => ({\n ...memo,\n [type]: value,\n }),\n {\n year: '',\n month: '',\n day: '',\n },\n )\n // This is a workaround for an iOS 15 bug where the year was being returned as 2 digits: https://bugs.webkit.org/show_bug.cgi?id=230827\n const fixedYear = year.length === 2 ? date.getFullYear() : year\n return `${fixedYear}-${month}-${day}`\n } else {\n return date.toISOString()\n }\n}\n\nfunction parseStringValue(value: unknown) {\n if (typeof value === 'string' && !!value) {\n return value\n }\n return\n}\n\nfunction parseNumberValue(value: unknown) {\n if (typeof value === 'number' && !isNaN(value)) {\n return value\n }\n return\n}\n\nfunction parseStringArrayValue(value: unknown) {\n if (Array.isArray(value)) {\n return value.filter((val) => typeof val === 'string')\n }\n return\n}\n\nfunction parseUnknownAsRecord<T>(\n value: unknown,\n validate: (value: Record<string, unknown>) => T | undefined,\n): T | undefined {\n if (typeof value === 'object' && value !== null) {\n return validate(value as Record<string, unknown>)\n }\n}\n\nfunction parseFormSubmissionModel(\n elements: FormTypes.FormElement[],\n value: unknown,\n): SubmissionTypes.S3SubmissionData['submission'] | undefined {\n return parseUnknownAsRecord(value, (record) => {\n return elements.reduce<SubmissionTypes.S3SubmissionData['submission']>(\n (model, element) => {\n switch (element.type) {\n case 'section':\n case 'page': {\n const partialModel = parseFormSubmissionModel(\n element.elements,\n model,\n )\n Object.assign(model, partialModel)\n break\n }\n default: {\n model[element.name] = parsePreFillData(\n element,\n record[element.name],\n )\n }\n }\n\n return model\n },\n record,\n )\n })\n}\n\nfunction parsePreFillData(\n element: FormTypes.FormElement,\n value: unknown,\n): unknown {\n switch (element.type) {\n // If a form element is pre-filled with the \"legacy\" storage type\n // format (base64), the data should be uploaded to S3 and set in the\n // submission data. This is to cater for instances of pre-fill data\n // being created before the \"legacy\" storage type was removed.\n case 'camera':\n case 'draw': {\n if (!value) {\n break\n } else if (typeof value === 'string') {\n const blob = dataUriToBlobSync(value)\n return prepareNewAttachment(blob, 'file', element)\n } else {\n return parseAttachment(value)\n }\n }\n case 'files': {\n return parseFiles(element, value)\n }\n case 'compliance': {\n return parseUnknownAsRecord(value, (record) => {\n const selectedValue = parseStringValue(record.value)\n const notes = parseStringValue(record.notes)\n if (selectedValue) {\n return {\n value: selectedValue,\n notes,\n files: parseFiles(element, record.files),\n }\n }\n })\n }\n case 'time':\n case 'datetime':\n case 'date': {\n return parseDateValue({\n dateOnly: element.type === 'date',\n daysOffset: undefined,\n value,\n })\n }\n case 'bsb': {\n const text = parseStringValue(value)\n if (text?.match(/\\d{3}-\\d{3}/)) {\n return text\n }\n return\n }\n case 'text':\n case 'barcodeScanner':\n case 'email':\n case 'telephone':\n case 'textarea':\n case 'radio':\n case 'autocomplete': {\n return parseStringValue(value)\n }\n case 'select': {\n if (element.multi) {\n return parseStringArrayValue(value)\n } else {\n return parseStringValue(value)\n }\n }\n case 'checkboxes': {\n return parseStringArrayValue(value)\n }\n case 'calculation':\n case 'number': {\n return parseNumberValue(value)\n }\n case 'boolean': {\n return typeof value === 'boolean' ? value : false\n }\n case 'abn': {\n return parseUnknownAsRecord(value, (record) => {\n const hasABN = parseUnknownAsRecord(record.ABN, (ABN) => {\n if (Array.isArray(ABN)) {\n return ABN.some((abn) => !!parseStringValue(abn.identifierValue))\n }\n if (parseStringValue(ABN.identifierValue)) {\n return true\n }\n })\n if (!hasABN) {\n return\n }\n return record\n })\n }\n case 'pointAddress':\n case 'geoscapeAddress': {\n return parseUnknownAsRecord(value, (record) => {\n if (parseStringValue(record.addressId)) {\n return record\n }\n })\n }\n case 'googleAddress': {\n return parseUnknownAsRecord(value, (record) => {\n if (parseStringValue(record.place_id)) {\n return record\n }\n })\n }\n case 'freshdeskDependentField': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.category) &&\n parseStringValue(record.subCategory) &&\n parseStringValue(record.item)\n ) {\n return record\n }\n })\n }\n case 'civicaNameRecord': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.title) &&\n parseStringValue(record.familyName) &&\n Array.isArray(record.streetAddress)\n ) {\n return record\n }\n })\n }\n case 'civicaStreetName': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.formattedAccount) &&\n parseStringValue(record.formattedStreet)\n ) {\n return record\n }\n })\n }\n case 'form': {\n return parseFormSubmissionModel(element.elements || [], value)\n }\n case 'repeatableSet': {\n if (Array.isArray(element.elements) && Array.isArray(value)) {\n return value.reduce((entries, v) => {\n const entry = parseFormSubmissionModel(\n element.elements,\n v\n ? {\n ...v,\n ...generateNewRepeatableSetEntry(),\n }\n : undefined,\n )\n if (entry) {\n entries.push(entry)\n }\n return entries\n }, [])\n }\n break\n }\n case 'location': {\n return parseUnknownAsRecord(value, (record) => {\n const latitude = parseNumberValue(record.latitude)\n const longitude = parseNumberValue(record.longitude)\n if (latitude !== undefined && longitude !== undefined) {\n return {\n latitude,\n longitude,\n zoom: parseNumberValue(record.zoom),\n }\n }\n })\n }\n case 'apiNSWLiquorLicence': {\n return parseUnknownAsRecord(value, (record) => {\n return parseUnknownAsRecord(record.licenceDetail, (licenceDetail) => {\n if (parseStringValue(licenceDetail.licenceNumber)) {\n return record\n }\n })\n })\n }\n case 'image':\n case 'html':\n case 'summary':\n case 'captcha':\n case 'heading':\n case 'infoPage':\n case 'page':\n case 'section': {\n return\n }\n default: {\n console.warn('Invalid element type used in prefill data', element)\n }\n }\n}\n\nexport default function generateDefaultData(\n elements: FormTypes.FormElement[],\n preFillData: SubmissionTypes.S3SubmissionData['submission'],\n): SubmissionTypes.S3SubmissionData['submission'] {\n return elements.reduce<SubmissionTypes.S3SubmissionData['submission']>(\n (m, el) => {\n if (el.type !== 'page' && el.type !== 'section' && el.name in m) {\n m[el.name] = parsePreFillData(el, m[el.name])\n return m\n }\n\n switch (el.type) {\n case 'checkboxes':\n case 'select':\n case 'autocomplete':\n case 'radio':\n case 'compliance': {\n const dv = getOptionsDefaultValue(el)\n if (dv) {\n if (el.type === 'compliance' && typeof dv === 'string') {\n m[el.name] = {\n value: dv,\n }\n } else {\n m[el.name] = dv\n }\n }\n break\n }\n case 'number': {\n if (typeof el.defaultValue === 'number') {\n m[el.name] = el.defaultValue\n } else if (el.isSlider) {\n m[el.name] = el.minNumber\n } else {\n m[el.name] = undefined\n }\n break\n }\n case 'section':\n case 'page': {\n if (Array.isArray(el.elements)) {\n Object.assign(m, generateDefaultData(el.elements, m))\n }\n break\n }\n case 'civicaNameRecord': {\n const nestedElements = generateCivicaNameRecordElements(el, [])\n m[el.name] = generateDefaultData(nestedElements, {\n ...el.defaultValue,\n })\n break\n }\n case 'form': {\n if (Array.isArray(el.elements)) {\n m[el.name] = generateDefaultData(el.elements, {})\n }\n break\n }\n case 'repeatableSet': {\n if (\n Array.isArray(el.elements) &&\n typeof el.minSetEntries === 'number'\n ) {\n const minSetEntries = el.minSetEntries\n // add min number of entries by default\n const entries = []\n for (let index = 0; index < minSetEntries; index++) {\n const entry = generateDefaultData(\n el.elements,\n generateNewRepeatableSetEntry(),\n )\n entries.push(entry)\n }\n m[el.name] = entries\n }\n break\n }\n case 'date':\n case 'datetime':\n case 'time': {\n if (el.defaultValue) {\n m[el.name] = parseDateValue({\n dateOnly: el.type === 'date',\n daysOffset: el.defaultValueDaysOffset,\n value: el.defaultValue,\n })\n }\n break\n }\n case 'camera':\n case 'draw':\n case 'files': {\n m[el.name] = parsePreFillData(el, el.defaultValue)\n break\n }\n case 'freshdeskDependentField':\n case 'geoscapeAddress':\n case 'pointAddress':\n case 'googleAddress':\n case 'civicaStreetName':\n case 'abn':\n case 'bsb':\n case 'text':\n case 'barcodeScanner':\n case 'email':\n case 'telephone':\n case 'textarea':\n case 'location':\n case 'apiNSWLiquorLicence': {\n if (el.defaultValue) {\n m[el.name] = el.defaultValue\n }\n break\n }\n case 'boolean': {\n m[el.name] = el.defaultValue || false\n break\n }\n case 'captcha':\n case 'heading':\n case 'html':\n case 'image':\n case 'infoPage':\n case 'calculation':\n case 'summary':\n case 'arcGISWebMap':\n break\n default: {\n console.warn('Default value is not supported for element type', el)\n }\n }\n\n return m\n },\n Object.assign({}, preFillData),\n )\n}\n\nconst getOptionsDefaultValue = (el: FormTypes.FormElementWithOptions) => {\n if (!el.defaultValue) {\n return\n }\n // Cater for dynamic options\n if (el.optionsType === 'DYNAMIC' || el.optionsType === 'FRESHDESK_FIELD') {\n return el.defaultValue\n }\n // Cater for multi-select and checkboxes\n else if ((el.type === 'select' && el.multi) || el.type === 'checkboxes') {\n if (Array.isArray(el.defaultValue) && el.defaultValue.length) {\n return el.defaultValue.reduce((optionValues: string[], optionId) => {\n const option = (el.options || []).find(\n (option) => option.id === optionId,\n )\n if (option) {\n optionValues.push(option.value)\n }\n return optionValues\n }, [])\n }\n } else {\n const option = (el.options || []).find(\n (option) => option.id === el.defaultValue,\n )\n if (option) {\n return option.value\n }\n }\n return\n}\n"]}
1
+ {"version":3,"file":"generate-default-data.js","sourceRoot":"","sources":["../../src/services/generate-default-data.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuidv4 } from 'uuid'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { attachmentsService, localisationService } from '@oneblink/apps'\nimport { format } from 'date-fns'\nimport { prepareNewAttachment } from './attachments'\nimport { dataUriToBlobSync } from './blob-utils'\nimport generateCivicaNameRecordElements from './generateCivicaNameRecordElements'\n\nexport const DATE_ELEMENT_SUBMISSION_MODEL_FORMAT = 'yyyy-MM-dd'\nexport const ENTRY_ID_PROPERTY_NAME = '$__id'\nexport const generateNewRepeatableSetEntry = () => ({\n [ENTRY_ID_PROPERTY_NAME]: uuidv4(),\n})\n\nfunction parseAttachment(\n value: unknown,\n): attachmentsService.Attachment | undefined {\n return parseUnknownAsRecord(value, (record) => {\n // Check for attachments that have not been uploaded yet\n if (\n record.data instanceof Blob &&\n typeof record.type === 'string' &&\n typeof record._id === 'string' &&\n typeof record.fileName === 'string' &&\n typeof record.isPrivate === 'boolean'\n ) {\n return record as attachmentsService.Attachment\n }\n\n // Check for attachments that have been uploaded already\n if (\n typeof record.id === 'string' &&\n typeof record.fileName === 'string' &&\n typeof record.url === 'string' &&\n typeof record.contentType === 'string' &&\n typeof record.isPrivate === 'boolean' &&\n parseUnknownAsRecord(\n record.s3,\n (s3) =>\n typeof s3.bucket === 'string' &&\n typeof s3.key === 'string' &&\n typeof s3.region === 'string',\n )\n ) {\n return record as SubmissionTypes.FormSubmissionAttachment\n }\n })\n}\n\nfunction parseFile(\n element: FormTypes.FormElementBinaryStorage,\n value: unknown,\n): attachmentsService.Attachment | undefined {\n return parseUnknownAsRecord(value, (record) => {\n if (\n record.type === undefined &&\n typeof record.fileName === 'string' &&\n typeof record.data === 'string'\n ) {\n const blob = dataUriToBlobSync(record.data)\n return prepareNewAttachment(blob, record.fileName, element)\n }\n\n return parseAttachment(record)\n })\n}\n\nfunction parseFiles(\n element: FormTypes.FormElementBinaryStorage,\n value: unknown,\n): Array<attachmentsService.Attachment> | undefined {\n if (Array.isArray(value)) {\n const files = value.reduce<Array<attachmentsService.Attachment>>(\n (files, v) => {\n const file = parseFile(element, v)\n if (file) {\n files.push(file)\n }\n return files\n },\n [],\n )\n if (files.length) {\n return files\n }\n }\n}\n\nexport function parseDateValue({\n daysOffset,\n value,\n dateFormat,\n}: {\n daysOffset: number | undefined\n value: unknown\n dateFormat: string | undefined\n}): string | undefined {\n if (typeof value !== 'string') {\n return\n }\n\n const date = localisationService.generateDate({ daysOffset, value })\n if (!date) {\n return\n }\n\n if (dateFormat) {\n return format(date, dateFormat)\n } else {\n return date.toISOString()\n }\n}\n\nfunction parseStringValue(value: unknown) {\n if (typeof value === 'string' && !!value) {\n return value\n }\n return\n}\n\nfunction parseNumberValue(value: unknown) {\n if (typeof value === 'number' && !isNaN(value)) {\n return value\n }\n return\n}\n\nfunction parseStringArrayValue(value: unknown) {\n if (Array.isArray(value)) {\n return value.filter((val) => typeof val === 'string')\n }\n return\n}\n\nfunction parseUnknownAsRecord<T>(\n value: unknown,\n validate: (value: Record<string, unknown>) => T | undefined,\n): T | undefined {\n if (typeof value === 'object' && value !== null) {\n return validate(value as Record<string, unknown>)\n }\n}\n\nfunction parseFormSubmissionModel(\n elements: FormTypes.FormElement[],\n value: unknown,\n): SubmissionTypes.S3SubmissionData['submission'] | undefined {\n return parseUnknownAsRecord(value, (record) => {\n return elements.reduce<SubmissionTypes.S3SubmissionData['submission']>(\n (model, element) => {\n switch (element.type) {\n case 'section':\n case 'page': {\n const partialModel = parseFormSubmissionModel(\n element.elements,\n model,\n )\n Object.assign(model, partialModel)\n break\n }\n default: {\n model[element.name] = parsePreFillData(\n element,\n record[element.name],\n )\n }\n }\n\n return model\n },\n record,\n )\n })\n}\n\nfunction parsePreFillData(\n element: FormTypes.FormElement,\n value: unknown,\n): unknown {\n switch (element.type) {\n // If a form element is pre-filled with the \"legacy\" storage type\n // format (base64), the data should be uploaded to S3 and set in the\n // submission data. This is to cater for instances of pre-fill data\n // being created before the \"legacy\" storage type was removed.\n case 'camera':\n case 'draw': {\n if (!value) {\n break\n } else if (typeof value === 'string') {\n const blob = dataUriToBlobSync(value)\n return prepareNewAttachment(blob, 'file', element)\n } else {\n return parseAttachment(value)\n }\n }\n case 'files': {\n return parseFiles(element, value)\n }\n case 'compliance': {\n return parseUnknownAsRecord(value, (record) => {\n const selectedValue = parseStringValue(record.value)\n const notes = parseStringValue(record.notes)\n if (selectedValue) {\n return {\n value: selectedValue,\n notes,\n files: parseFiles(element, record.files),\n }\n }\n })\n }\n case 'time':\n case 'datetime':\n case 'date': {\n return parseDateValue({\n dateFormat: element.type === 'date' ? 'yyyy-MM-dd' : undefined,\n daysOffset: undefined,\n value,\n })\n }\n case 'bsb': {\n const text = parseStringValue(value)\n if (text?.match(/\\d{3}-\\d{3}/)) {\n return text\n }\n return\n }\n case 'text':\n case 'barcodeScanner':\n case 'email':\n case 'telephone':\n case 'textarea':\n case 'radio':\n case 'autocomplete': {\n return parseStringValue(value)\n }\n case 'select': {\n if (element.multi) {\n return parseStringArrayValue(value)\n } else {\n return parseStringValue(value)\n }\n }\n case 'checkboxes': {\n return parseStringArrayValue(value)\n }\n case 'calculation':\n case 'number': {\n return parseNumberValue(value)\n }\n case 'boolean': {\n return typeof value === 'boolean' ? value : false\n }\n case 'abn': {\n return parseUnknownAsRecord(value, (record) => {\n const hasABN = parseUnknownAsRecord(record.ABN, (ABN) => {\n if (Array.isArray(ABN)) {\n return ABN.some((abn) => !!parseStringValue(abn.identifierValue))\n }\n if (parseStringValue(ABN.identifierValue)) {\n return true\n }\n })\n if (!hasABN) {\n return\n }\n return record\n })\n }\n case 'pointAddress':\n case 'geoscapeAddress': {\n return parseUnknownAsRecord(value, (record) => {\n if (parseStringValue(record.addressId)) {\n return record\n }\n })\n }\n case 'googleAddress': {\n return parseUnknownAsRecord(value, (record) => {\n if (parseStringValue(record.place_id)) {\n return record\n }\n })\n }\n case 'freshdeskDependentField': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.category) &&\n parseStringValue(record.subCategory) &&\n parseStringValue(record.item)\n ) {\n return record\n }\n })\n }\n case 'civicaNameRecord': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.title) &&\n parseStringValue(record.familyName) &&\n Array.isArray(record.streetAddress)\n ) {\n return record\n }\n })\n }\n case 'civicaStreetName': {\n return parseUnknownAsRecord(value, (record) => {\n if (\n parseStringValue(record.formattedAccount) &&\n parseStringValue(record.formattedStreet)\n ) {\n return record\n }\n })\n }\n case 'form': {\n return parseFormSubmissionModel(element.elements || [], value)\n }\n case 'repeatableSet': {\n if (Array.isArray(element.elements) && Array.isArray(value)) {\n return value.reduce((entries, v) => {\n const entry = parseFormSubmissionModel(\n element.elements,\n v\n ? {\n ...v,\n ...generateNewRepeatableSetEntry(),\n }\n : undefined,\n )\n if (entry) {\n entries.push(entry)\n }\n return entries\n }, [])\n }\n break\n }\n case 'location': {\n return parseUnknownAsRecord(value, (record) => {\n const latitude = parseNumberValue(record.latitude)\n const longitude = parseNumberValue(record.longitude)\n if (latitude !== undefined && longitude !== undefined) {\n return {\n latitude,\n longitude,\n zoom: parseNumberValue(record.zoom),\n }\n }\n })\n }\n case 'apiNSWLiquorLicence': {\n return parseUnknownAsRecord(value, (record) => {\n return parseUnknownAsRecord(record.licenceDetail, (licenceDetail) => {\n if (parseStringValue(licenceDetail.licenceNumber)) {\n return record\n }\n })\n })\n }\n case 'image':\n case 'html':\n case 'summary':\n case 'captcha':\n case 'heading':\n case 'infoPage':\n case 'page':\n case 'section': {\n return\n }\n default: {\n console.warn('Invalid element type used in prefill data', element)\n }\n }\n}\n\nexport default function generateDefaultData(\n elements: FormTypes.FormElement[],\n preFillData: SubmissionTypes.S3SubmissionData['submission'],\n): SubmissionTypes.S3SubmissionData['submission'] {\n return elements.reduce<SubmissionTypes.S3SubmissionData['submission']>(\n (m, el) => {\n if (el.type !== 'page' && el.type !== 'section' && el.name in m) {\n m[el.name] = parsePreFillData(el, m[el.name])\n return m\n }\n\n switch (el.type) {\n case 'checkboxes':\n case 'select':\n case 'autocomplete':\n case 'radio':\n case 'compliance': {\n const dv = getOptionsDefaultValue(el)\n if (dv) {\n if (el.type === 'compliance' && typeof dv === 'string') {\n m[el.name] = {\n value: dv,\n }\n } else {\n m[el.name] = dv\n }\n }\n break\n }\n case 'number': {\n if (typeof el.defaultValue === 'number') {\n m[el.name] = el.defaultValue\n } else if (el.isSlider) {\n m[el.name] = el.minNumber\n } else {\n m[el.name] = undefined\n }\n break\n }\n case 'section':\n case 'page': {\n if (Array.isArray(el.elements)) {\n Object.assign(m, generateDefaultData(el.elements, m))\n }\n break\n }\n case 'civicaNameRecord': {\n const nestedElements = generateCivicaNameRecordElements(el, [])\n m[el.name] = generateDefaultData(nestedElements, {\n ...el.defaultValue,\n })\n break\n }\n case 'form': {\n if (Array.isArray(el.elements)) {\n m[el.name] = generateDefaultData(el.elements, {})\n }\n break\n }\n case 'repeatableSet': {\n if (\n Array.isArray(el.elements) &&\n typeof el.minSetEntries === 'number'\n ) {\n const minSetEntries = el.minSetEntries\n // add min number of entries by default\n const entries = []\n for (let index = 0; index < minSetEntries; index++) {\n const entry = generateDefaultData(\n el.elements,\n generateNewRepeatableSetEntry(),\n )\n entries.push(entry)\n }\n m[el.name] = entries\n }\n break\n }\n case 'date':\n case 'datetime':\n case 'time': {\n if (el.defaultValue) {\n m[el.name] = parseDateValue({\n dateFormat:\n el.type === 'date'\n ? DATE_ELEMENT_SUBMISSION_MODEL_FORMAT\n : undefined,\n daysOffset: el.defaultValueDaysOffset,\n value: el.defaultValue,\n })\n }\n break\n }\n case 'camera':\n case 'draw':\n case 'files': {\n m[el.name] = parsePreFillData(el, el.defaultValue)\n break\n }\n case 'freshdeskDependentField':\n case 'geoscapeAddress':\n case 'pointAddress':\n case 'googleAddress':\n case 'civicaStreetName':\n case 'abn':\n case 'bsb':\n case 'text':\n case 'barcodeScanner':\n case 'email':\n case 'telephone':\n case 'textarea':\n case 'location':\n case 'apiNSWLiquorLicence': {\n if (el.defaultValue) {\n m[el.name] = el.defaultValue\n }\n break\n }\n case 'boolean': {\n m[el.name] = el.defaultValue || false\n break\n }\n case 'captcha':\n case 'heading':\n case 'html':\n case 'image':\n case 'infoPage':\n case 'calculation':\n case 'summary':\n case 'arcGISWebMap':\n break\n default: {\n console.warn('Default value is not supported for element type', el)\n }\n }\n\n return m\n },\n Object.assign({}, preFillData),\n )\n}\n\nconst getOptionsDefaultValue = (el: FormTypes.FormElementWithOptions) => {\n if (!el.defaultValue) {\n return\n }\n // Cater for dynamic options\n if (el.optionsType === 'DYNAMIC' || el.optionsType === 'FRESHDESK_FIELD') {\n return el.defaultValue\n }\n // Cater for multi-select and checkboxes\n else if ((el.type === 'select' && el.multi) || el.type === 'checkboxes') {\n if (Array.isArray(el.defaultValue) && el.defaultValue.length) {\n return el.defaultValue.reduce((optionValues: string[], optionId) => {\n const option = (el.options || []).find(\n (option) => option.id === optionId,\n )\n if (option) {\n optionValues.push(option.value)\n }\n return optionValues\n }, [])\n }\n } else {\n const option = (el.options || []).find(\n (option) => option.id === el.defaultValue,\n )\n if (option) {\n return option.value\n }\n }\n return\n}\n"]}
@@ -0,0 +1,8 @@
1
+ .ob-input[type='date']::-webkit-calendar-picker-indicator,
2
+ .ob-input[type='time']::-webkit-calendar-picker-indicator,
3
+ .ob-input[type='datetime-local']::-webkit-calendar-picker-indicator {
4
+ right: 0;
5
+ position: absolute;
6
+ padding: 11px;
7
+ opacity: 0;
8
+ }