@oneblink/apps-react 5.12.1 → 5.12.2-beta.2
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.
@@ -6,7 +6,6 @@ import { FileChip, FilesElementDataTableCellContent, MultiSelectFormElementTable
|
|
6
6
|
import RepeatableSetCell from './RepeatableSetCell';
|
7
7
|
import TableCellCopyButton from './TableCellCopyButton';
|
8
8
|
import { format } from 'date-fns';
|
9
|
-
const { shortDate: shortDateFormat, time: timeFormat, shortDateTime: shortDateTimeFormat, } = localisationService.getDateFnsFormats();
|
10
9
|
function FormElementTableCell({ formElement, submission, allowCopy }) {
|
11
10
|
var _a, _b, _c, _d, _e;
|
12
11
|
if (formElement.type === 'page' || formElement.type === 'section') {
|
@@ -59,11 +58,15 @@ function FormElementTableCell({ formElement, submission, allowCopy }) {
|
|
59
58
|
if (typeof unknown !== 'string') {
|
60
59
|
break;
|
61
60
|
}
|
62
|
-
const date =
|
63
|
-
|
61
|
+
const date = localisationService.generateDate({
|
62
|
+
daysOffset: undefined,
|
63
|
+
value: unknown,
|
64
|
+
dateOnly: true,
|
65
|
+
});
|
66
|
+
if (!date) {
|
64
67
|
break;
|
65
68
|
}
|
66
|
-
const text =
|
69
|
+
const text = localisationService.formatDate(date);
|
67
70
|
return (React.createElement(React.Fragment, null,
|
68
71
|
text,
|
69
72
|
React.createElement(TableCellCopyButton, { isHidden: !allowCopy, text: text })));
|
@@ -76,6 +79,7 @@ function FormElementTableCell({ formElement, submission, allowCopy }) {
|
|
76
79
|
if (isNaN(date.getTime())) {
|
77
80
|
break;
|
78
81
|
}
|
82
|
+
const { time: timeFormat } = localisationService.getDateFnsFormats();
|
79
83
|
const text = format(date, timeFormat);
|
80
84
|
return (React.createElement(React.Fragment, null,
|
81
85
|
text,
|
@@ -89,6 +93,7 @@ function FormElementTableCell({ formElement, submission, allowCopy }) {
|
|
89
93
|
if (isNaN(date.getTime())) {
|
90
94
|
break;
|
91
95
|
}
|
96
|
+
const { shortDateTime: shortDateTimeFormat } = localisationService.getDateFnsFormats();
|
92
97
|
const text = format(date, shortDateTimeFormat);
|
93
98
|
return (React.createElement(React.Fragment, null,
|
94
99
|
text,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FormElementTableCell.js","sourceRoot":"","sources":["../../../../src/components/formStore/table/FormElementTableCell.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { Link, Typography } from '@mui/material'\nimport { localisationService } from '@oneblink/apps'\nimport { APINSWTypes, FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { abnService } from '@oneblink/sdk-core'\nimport {\n FileChip,\n FilesElementDataTableCellContent,\n MultiSelectFormElementTableCellContent,\n getSelectedOptionLabel,\n} from '../display/ElementDisplay'\nimport RepeatableSetCell from './RepeatableSetCell'\nimport TableCellCopyButton from './TableCellCopyButton'\nimport { format } from 'date-fns'\nimport { ABNRecord } from '@oneblink/types/typescript/misc'\nimport { GeoscapeAddress } from '@oneblink/types/typescript/geoscape'\nimport { PointAddress } from '@oneblink/types/typescript/point'\n\ntype Props = {\n formElement: FormTypes.FormElement\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined\n allowCopy: boolean\n}\n\nconst {\n shortDate: shortDateFormat,\n time: timeFormat,\n shortDateTime: shortDateTimeFormat,\n} = localisationService.getDateFnsFormats()\n\nfunction FormElementTableCell({ formElement, submission, allowCopy }: Props) {\n if (formElement.type === 'page' || formElement.type === 'section') {\n return null\n }\n const unknown = submission?.[formElement.name]\n if (unknown === undefined || unknown === null) {\n return null\n }\n\n switch (formElement.type) {\n case 'repeatableSet': {\n if (!Array.isArray(unknown)) {\n break\n }\n return <RepeatableSetCell formElement={formElement} value={unknown} />\n }\n\n case 'location': {\n const value = unknown as {\n latitude: number\n longitude: number\n }\n if (!value.latitude || !value.longitude) {\n break\n }\n\n const latLong = `${value.latitude},${value.longitude}`\n return (\n <>\n <div>\n <Typography variant=\"inherit\" component=\"p\">\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://maps.google.com/?q=${latLong}`}\n >\n View in Google Maps\n </Link>\n </Typography>\n <Typography variant=\"inherit\" component=\"p\" color=\"textSecondary\">\n Latitude: {value.latitude}\n </Typography>\n <Typography variant=\"inherit\" component=\"p\" color=\"textSecondary\">\n Longitude: {value.longitude}\n </Typography>\n </div>\n <TableCellCopyButton isHidden={!allowCopy} text={latLong} />\n </>\n )\n }\n\n case 'camera':\n case 'draw': {\n return (\n <FileChip\n file={unknown as React.ComponentProps<typeof FileChip>['file']}\n />\n )\n }\n\n case 'textarea': {\n if (typeof unknown !== 'string') {\n break\n }\n return (\n <>\n <span\n style={{\n whiteSpace: 'pre-line',\n }}\n >\n {unknown}\n </span>\n <TableCellCopyButton isHidden={!allowCopy} text={unknown} />\n </>\n )\n }\n\n case 'date': {\n if (typeof unknown !== 'string') {\n break\n }\n const date = new Date(unknown)\n if (isNaN(date.getTime())) {\n break\n }\n const text = format(date, shortDateFormat)\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'time': {\n if (typeof unknown !== 'string') {\n break\n }\n const date = new Date(unknown)\n if (isNaN(date.getTime())) {\n break\n }\n const text = format(date, timeFormat)\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'datetime': {\n if (typeof unknown !== 'string') {\n break\n }\n const date = new Date(unknown)\n if (isNaN(date.getTime())) {\n break\n }\n const text = format(date, shortDateTimeFormat)\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'number': {\n if (typeof unknown !== 'number') {\n break\n }\n const text = localisationService.formatNumber(unknown)\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'radio':\n case 'autocomplete':\n case 'checkboxes':\n case 'select': {\n if (\n formElement.type === 'checkboxes' ||\n (formElement.type === 'select' && formElement.multi)\n ) {\n if (\n !Array.isArray(unknown) ||\n !unknown.length ||\n typeof unknown[0] !== 'string'\n ) {\n break\n }\n const text = (unknown as string[])\n .map((selection) => getSelectedOptionLabel(formElement, selection))\n .join(', ')\n return (\n <>\n <MultiSelectFormElementTableCellContent\n value={unknown}\n formElement={formElement}\n />\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n } else {\n if (typeof unknown !== 'string') {\n break\n }\n const text = getSelectedOptionLabel(formElement, unknown)\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n }\n\n case 'email': {\n if (typeof unknown !== 'string') {\n break\n }\n return (\n <>\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`mailto:${unknown}`}\n >\n {unknown}\n </Link>\n <TableCellCopyButton isHidden={!allowCopy} text={unknown} />\n </>\n )\n }\n case 'telephone': {\n if (typeof unknown !== 'string') {\n break\n }\n return (\n <>\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`tel:${unknown}`}\n >\n {unknown}\n </Link>\n <TableCellCopyButton isHidden={!allowCopy} text={unknown} />\n </>\n )\n }\n case 'text':\n case 'bsb':\n case 'barcodeScanner': {\n if (typeof unknown !== 'string') {\n break\n }\n return (\n <>\n {unknown}\n <TableCellCopyButton isHidden={!allowCopy} text={unknown} />\n </>\n )\n }\n\n case 'files': {\n const value = unknown as React.ComponentProps<\n typeof FilesElementDataTableCellContent\n >['value']\n if (\n !Array.isArray(value) ||\n !value.length ||\n typeof value[0]?.fileName !== 'string'\n ) {\n break\n }\n return <FilesElementDataTableCellContent value={value} />\n }\n\n case 'calculation': {\n if (typeof unknown !== 'number') {\n break\n }\n const text = formElement.displayAsCurrency\n ? localisationService.formatCurrency(unknown)\n : localisationService.formatNumber(unknown)\n return (\n <>\n {text}\n <TableCellCopyButton\n isHidden={!allowCopy}\n text={unknown.toString()}\n />\n </>\n )\n }\n\n case 'civicaStreetName': {\n const value = unknown as {\n formattedStreet: string\n }\n if (typeof value?.formattedStreet !== 'string') {\n break\n }\n return (\n <>\n {value.formattedStreet}\n <TableCellCopyButton\n isHidden={!allowCopy}\n text={value.formattedStreet}\n />\n </>\n )\n }\n\n case 'civicaNameRecord': {\n const value = unknown as {\n title?: string\n givenName1?: string\n familyName?: string\n emailAddress: string\n }\n if (typeof value?.emailAddress !== 'string') {\n break\n }\n const text =\n [value?.title, value?.givenName1, value?.familyName]\n .filter((t) => t)\n .join(' ') || value?.emailAddress\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'geoscapeAddress': {\n const value = unknown as GeoscapeAddress\n if (typeof value.addressId !== 'string') {\n break\n }\n const fullAddress = value?.addressDetails?.formattedAddress || (\n <>\n Geoscape Address ID: <i>{value.addressId}</i>\n </>\n )\n return (\n <>\n {fullAddress}\n <TableCellCopyButton\n isHidden={!allowCopy}\n text={fullAddress as string}\n />\n </>\n )\n }\n\n case 'pointAddress': {\n const value = unknown as PointAddress\n if (typeof value.addressId !== 'string') {\n break\n }\n const fullAddress = value?.addressDetails?.formattedAddress || (\n <>\n NSW Point Address ID: <i>{value.addressId}</i>\n </>\n )\n return (\n <>\n {fullAddress}\n <TableCellCopyButton\n isHidden={!allowCopy}\n text={fullAddress as string}\n />\n </>\n )\n }\n\n case 'boolean': {\n if (typeof unknown !== 'boolean') {\n break\n }\n const text = unknown ? 'Yes' : 'No'\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'abn': {\n const value = unknown as ABNRecord\n if (!value.ABN || !value.entityType) {\n break\n }\n const abnNumber = abnService.displayABNNumberFromABNRecord(value)\n return (\n <>\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://www.abr.business.gov.au/ABN/View/${abnNumber}`}\n >\n {abnNumber} |{' '}\n <i>{abnService.displayBusinessNameFromABNRecord(value)}</i>\n </Link>\n <TableCellCopyButton isHidden={!allowCopy} text={abnNumber} />\n </>\n )\n }\n case 'apiNSWLiquorLicence': {\n const value = unknown as APINSWTypes.LiquorLicenceDetails\n const licenceNumber =\n `${value.licenceDetail?.licenceNumber} | ${value.licenceDetail?.licenceName}`.trim()\n if (!licenceNumber) {\n break\n }\n return (\n <>\n {licenceNumber}\n <TableCellCopyButton isHidden={!allowCopy} text={licenceNumber} />\n </>\n )\n }\n\n case 'html':\n case 'form':\n case 'infoPage':\n case 'captcha':\n case 'image':\n case 'heading':\n case 'arcGISWebMap':\n case 'summary': {\n return null\n }\n\n default: {\n console.warn(\n 'Unsupported element type in Submission Data rendering',\n formElement,\n )\n return null\n }\n }\n\n return <>{JSON.stringify(unknown)}</>\n}\n\nexport default React.memo(FormElementTableCell)\n"]}
|
1
|
+
{"version":3,"file":"FormElementTableCell.js","sourceRoot":"","sources":["../../../../src/components/formStore/table/FormElementTableCell.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { Link, Typography } from '@mui/material'\nimport { localisationService } from '@oneblink/apps'\nimport { APINSWTypes, FormTypes, SubmissionTypes } from '@oneblink/types'\nimport { abnService } from '@oneblink/sdk-core'\nimport {\n FileChip,\n FilesElementDataTableCellContent,\n MultiSelectFormElementTableCellContent,\n getSelectedOptionLabel,\n} from '../display/ElementDisplay'\nimport RepeatableSetCell from './RepeatableSetCell'\nimport TableCellCopyButton from './TableCellCopyButton'\nimport { format } from 'date-fns'\nimport { ABNRecord } from '@oneblink/types/typescript/misc'\nimport { GeoscapeAddress } from '@oneblink/types/typescript/geoscape'\nimport { PointAddress } from '@oneblink/types/typescript/point'\n\ntype Props = {\n formElement: FormTypes.FormElement\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined\n allowCopy: boolean\n}\n\nfunction FormElementTableCell({ formElement, submission, allowCopy }: Props) {\n if (formElement.type === 'page' || formElement.type === 'section') {\n return null\n }\n const unknown = submission?.[formElement.name]\n if (unknown === undefined || unknown === null) {\n return null\n }\n\n switch (formElement.type) {\n case 'repeatableSet': {\n if (!Array.isArray(unknown)) {\n break\n }\n return <RepeatableSetCell formElement={formElement} value={unknown} />\n }\n\n case 'location': {\n const value = unknown as {\n latitude: number\n longitude: number\n }\n if (!value.latitude || !value.longitude) {\n break\n }\n\n const latLong = `${value.latitude},${value.longitude}`\n return (\n <>\n <div>\n <Typography variant=\"inherit\" component=\"p\">\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://maps.google.com/?q=${latLong}`}\n >\n View in Google Maps\n </Link>\n </Typography>\n <Typography variant=\"inherit\" component=\"p\" color=\"textSecondary\">\n Latitude: {value.latitude}\n </Typography>\n <Typography variant=\"inherit\" component=\"p\" color=\"textSecondary\">\n Longitude: {value.longitude}\n </Typography>\n </div>\n <TableCellCopyButton isHidden={!allowCopy} text={latLong} />\n </>\n )\n }\n\n case 'camera':\n case 'draw': {\n return (\n <FileChip\n file={unknown as React.ComponentProps<typeof FileChip>['file']}\n />\n )\n }\n\n case 'textarea': {\n if (typeof unknown !== 'string') {\n break\n }\n return (\n <>\n <span\n style={{\n whiteSpace: 'pre-line',\n }}\n >\n {unknown}\n </span>\n <TableCellCopyButton isHidden={!allowCopy} text={unknown} />\n </>\n )\n }\n\n case 'date': {\n if (typeof unknown !== 'string') {\n break\n }\n const date = localisationService.generateDate({\n daysOffset: undefined,\n value: unknown,\n dateOnly: true,\n })\n if (!date) {\n break\n }\n const text = localisationService.formatDate(date)\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'time': {\n if (typeof unknown !== 'string') {\n break\n }\n const date = new Date(unknown)\n if (isNaN(date.getTime())) {\n break\n }\n const { time: timeFormat } = localisationService.getDateFnsFormats()\n const text = format(date, timeFormat)\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'datetime': {\n if (typeof unknown !== 'string') {\n break\n }\n const date = new Date(unknown)\n if (isNaN(date.getTime())) {\n break\n }\n const { shortDateTime: shortDateTimeFormat } =\n localisationService.getDateFnsFormats()\n const text = format(date, shortDateTimeFormat)\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'number': {\n if (typeof unknown !== 'number') {\n break\n }\n const text = localisationService.formatNumber(unknown)\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'radio':\n case 'autocomplete':\n case 'checkboxes':\n case 'select': {\n if (\n formElement.type === 'checkboxes' ||\n (formElement.type === 'select' && formElement.multi)\n ) {\n if (\n !Array.isArray(unknown) ||\n !unknown.length ||\n typeof unknown[0] !== 'string'\n ) {\n break\n }\n const text = (unknown as string[])\n .map((selection) => getSelectedOptionLabel(formElement, selection))\n .join(', ')\n return (\n <>\n <MultiSelectFormElementTableCellContent\n value={unknown}\n formElement={formElement}\n />\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n } else {\n if (typeof unknown !== 'string') {\n break\n }\n const text = getSelectedOptionLabel(formElement, unknown)\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n }\n\n case 'email': {\n if (typeof unknown !== 'string') {\n break\n }\n return (\n <>\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`mailto:${unknown}`}\n >\n {unknown}\n </Link>\n <TableCellCopyButton isHidden={!allowCopy} text={unknown} />\n </>\n )\n }\n case 'telephone': {\n if (typeof unknown !== 'string') {\n break\n }\n return (\n <>\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`tel:${unknown}`}\n >\n {unknown}\n </Link>\n <TableCellCopyButton isHidden={!allowCopy} text={unknown} />\n </>\n )\n }\n case 'text':\n case 'bsb':\n case 'barcodeScanner': {\n if (typeof unknown !== 'string') {\n break\n }\n return (\n <>\n {unknown}\n <TableCellCopyButton isHidden={!allowCopy} text={unknown} />\n </>\n )\n }\n\n case 'files': {\n const value = unknown as React.ComponentProps<\n typeof FilesElementDataTableCellContent\n >['value']\n if (\n !Array.isArray(value) ||\n !value.length ||\n typeof value[0]?.fileName !== 'string'\n ) {\n break\n }\n return <FilesElementDataTableCellContent value={value} />\n }\n\n case 'calculation': {\n if (typeof unknown !== 'number') {\n break\n }\n const text = formElement.displayAsCurrency\n ? localisationService.formatCurrency(unknown)\n : localisationService.formatNumber(unknown)\n return (\n <>\n {text}\n <TableCellCopyButton\n isHidden={!allowCopy}\n text={unknown.toString()}\n />\n </>\n )\n }\n\n case 'civicaStreetName': {\n const value = unknown as {\n formattedStreet: string\n }\n if (typeof value?.formattedStreet !== 'string') {\n break\n }\n return (\n <>\n {value.formattedStreet}\n <TableCellCopyButton\n isHidden={!allowCopy}\n text={value.formattedStreet}\n />\n </>\n )\n }\n\n case 'civicaNameRecord': {\n const value = unknown as {\n title?: string\n givenName1?: string\n familyName?: string\n emailAddress: string\n }\n if (typeof value?.emailAddress !== 'string') {\n break\n }\n const text =\n [value?.title, value?.givenName1, value?.familyName]\n .filter((t) => t)\n .join(' ') || value?.emailAddress\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'geoscapeAddress': {\n const value = unknown as GeoscapeAddress\n if (typeof value.addressId !== 'string') {\n break\n }\n const fullAddress = value?.addressDetails?.formattedAddress || (\n <>\n Geoscape Address ID: <i>{value.addressId}</i>\n </>\n )\n return (\n <>\n {fullAddress}\n <TableCellCopyButton\n isHidden={!allowCopy}\n text={fullAddress as string}\n />\n </>\n )\n }\n\n case 'pointAddress': {\n const value = unknown as PointAddress\n if (typeof value.addressId !== 'string') {\n break\n }\n const fullAddress = value?.addressDetails?.formattedAddress || (\n <>\n NSW Point Address ID: <i>{value.addressId}</i>\n </>\n )\n return (\n <>\n {fullAddress}\n <TableCellCopyButton\n isHidden={!allowCopy}\n text={fullAddress as string}\n />\n </>\n )\n }\n\n case 'boolean': {\n if (typeof unknown !== 'boolean') {\n break\n }\n const text = unknown ? 'Yes' : 'No'\n return (\n <>\n {text}\n <TableCellCopyButton isHidden={!allowCopy} text={text} />\n </>\n )\n }\n\n case 'abn': {\n const value = unknown as ABNRecord\n if (!value.ABN || !value.entityType) {\n break\n }\n const abnNumber = abnService.displayABNNumberFromABNRecord(value)\n return (\n <>\n <Link\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://www.abr.business.gov.au/ABN/View/${abnNumber}`}\n >\n {abnNumber} |{' '}\n <i>{abnService.displayBusinessNameFromABNRecord(value)}</i>\n </Link>\n <TableCellCopyButton isHidden={!allowCopy} text={abnNumber} />\n </>\n )\n }\n case 'apiNSWLiquorLicence': {\n const value = unknown as APINSWTypes.LiquorLicenceDetails\n const licenceNumber =\n `${value.licenceDetail?.licenceNumber} | ${value.licenceDetail?.licenceName}`.trim()\n if (!licenceNumber) {\n break\n }\n return (\n <>\n {licenceNumber}\n <TableCellCopyButton isHidden={!allowCopy} text={licenceNumber} />\n </>\n )\n }\n\n case 'html':\n case 'form':\n case 'infoPage':\n case 'captcha':\n case 'image':\n case 'heading':\n case 'arcGISWebMap':\n case 'summary': {\n return null\n }\n\n default: {\n console.warn(\n 'Unsupported element type in Submission Data rendering',\n formElement,\n )\n return null\n }\n }\n\n return <>{JSON.stringify(unknown)}</>\n}\n\nexport default React.memo(FormElementTableCell)\n"]}
|
@@ -169,7 +169,7 @@ export function generateValidationSchema(elements) {
|
|
169
169
|
}
|
170
170
|
}
|
171
171
|
const constraint = (value, submission, propertyName, { formElementsConditionallyShown, executedLookups }) => {
|
172
|
-
var _a;
|
172
|
+
var _a, _b;
|
173
173
|
// If the element is current hidden, we do not need to apply validation
|
174
174
|
const formElementConditionallyShown = formElementsConditionallyShown === null || formElementsConditionallyShown === void 0 ? void 0 : formElementsConditionallyShown[formElement.name];
|
175
175
|
if (formElementConditionallyShown === null || formElementConditionallyShown === void 0 ? void 0 : formElementConditionallyShown.isHidden) {
|
@@ -213,15 +213,20 @@ export function generateValidationSchema(elements) {
|
|
213
213
|
};
|
214
214
|
}
|
215
215
|
case 'checkboxes': {
|
216
|
+
const optionsLength = (formElementConditionallyShown === null || formElementConditionallyShown === void 0 ? void 0 : formElementConditionallyShown.type) === 'formElement' &&
|
217
|
+
(formElementConditionallyShown === null || formElementConditionallyShown === void 0 ? void 0 : formElementConditionallyShown.options)
|
218
|
+
? (_a = formElementConditionallyShown === null || formElementConditionallyShown === void 0 ? void 0 : formElementConditionallyShown.options) === null || _a === void 0 ? void 0 : _a.length
|
219
|
+
: (_b = formElement.options) === null || _b === void 0 ? void 0 : _b.length;
|
216
220
|
const requiredAllDefaultMessage = 'All options are required';
|
217
221
|
return {
|
218
222
|
presence: presence({
|
219
223
|
...formElement,
|
220
|
-
required:
|
224
|
+
required: !!optionsLength &&
|
225
|
+
(formElement.required || !!formElement.requiredAll),
|
221
226
|
}, formElement.requiredAll ? requiredAllDefaultMessage : 'Required'),
|
222
227
|
length: formElement.requiredAll
|
223
228
|
? {
|
224
|
-
is:
|
229
|
+
is: optionsLength,
|
225
230
|
message: formElement.requiredMessage || requiredAllDefaultMessage,
|
226
231
|
}
|
227
232
|
: undefined,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"form-validation.js","sourceRoot":"","sources":["../../src/services/form-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import validate, { ValidatorConstraintFn } from 'validate.js'\nimport { attachmentsService, localisationService } from '@oneblink/apps'\nimport { FormTypes, FormsAppsTypes, SubmissionTypes } from '@oneblink/types'\nimport { FormElementBinaryStorageValue } from '../types/attachments'\nimport { Value as FormElementComplianceValue } from '../form-elements/FormElementCompliance'\nimport { parseDateValue } from './generate-default-data'\nimport generateCivicaNameRecordElements from './generateCivicaNameRecordElements'\nimport {\n ExecutedLookups,\n ExecutedLookupValue,\n FormElementConditionallyShown,\n FormElementsConditionallyShown,\n FormElementsValidation,\n} from '../types/form'\nimport generateFreshdeskDependentFieldElements from './generateFreshdeskDependentFieldElements'\nimport cleanFormSubmissionModel from './cleanFormSubmissionModel'\nimport getDateRangeConfiguration, {\n DateRangeConfigurationOptions,\n} from './getDateRangeConfiguration'\nimport getRepeatableSetEntriesConfiguration from './getRepeatableSetEntriesConfiguration'\n\ntype NestedValidateJSSchema = {\n schema: ValidateJSSchema\n formElementConditionallyShown: FormElementConditionallyShown | undefined\n executedLookups: ExecutedLookupValue\n}\n\nexport const generateLookupValidationMessage = (\n lookupButtonConfig?: FormsAppsTypes.ButtonConfiguration,\n) => {\n return lookupButtonConfig && lookupButtonConfig.label\n ? `${lookupButtonConfig.label} is required`\n : 'Lookup is required'\n}\n\n// https://validatejs.org/#validators-datetime\n// Before using it we must add the parse and format functions\n// Here is a sample implementation using moment.js\nvalidate.extend(validate.validators.datetime, {\n // The value is guaranteed not to be null or undefined but otherwise it\n // could be anything.\n parse: function (value: string) {\n return Date.parse(value)\n },\n // Input is a unix timestamp\n format: function (\n value: string,\n options: { format: (date: Date) => string },\n ) {\n const dateValue = new Date(value)\n return options.format(dateValue)\n },\n})\n\nvalidate.validators.entries = function (\n value: unknown,\n {\n setSchema,\n entrySchema: {\n schema: entrySchema,\n formElementConditionallyShown,\n executedLookups,\n },\n }: {\n setSchema: ValidateJSSchema\n entrySchema: NestedValidateJSSchema\n },\n) {\n const entries = Array.isArray(value) ? value : []\n\n const entryErrors = entries.reduce((errorsByIndex, entry, index) => {\n const entryValidation = validateSubmission(\n entrySchema,\n entry,\n formElementConditionallyShown?.type === 'repeatableSet'\n ? formElementConditionallyShown.entries[index.toString()]\n : undefined,\n Array.isArray(executedLookups) ? executedLookups[index] : {},\n )\n if (entryValidation) {\n errorsByIndex[index] = entryValidation\n }\n return errorsByIndex\n }, {})\n\n const setErrorMessages = validate.single(value, setSchema)\n\n if (!setErrorMessages && validate.isEmpty(entryErrors)) {\n return\n }\n\n return {\n type: 'repeatableSet',\n set: setErrorMessages && setErrorMessages[0],\n entries: entryErrors,\n }\n}\n\nvalidate.validators.nestedElements = function (\n value: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n {\n schema,\n formElementConditionallyShown,\n executedLookups,\n }: NestedValidateJSSchema,\n) {\n const errors = validateSubmission(\n schema,\n value,\n formElementConditionallyShown?.type === 'formElements'\n ? formElementConditionallyShown.formElements\n : undefined,\n typeof executedLookups !== 'boolean' ? executedLookups : {},\n )\n if (!errors) {\n return\n }\n return {\n type: 'formElements',\n formElements: errors,\n }\n}\n\nfunction getInvalidAttachment(value: FormElementBinaryStorageValue) {\n if (\n value &&\n typeof value === 'object' &&\n value.type &&\n value.type === 'ERROR'\n ) {\n return value\n }\n}\nfunction validateAttachments(\n value: FormElementBinaryStorageValue[] | undefined,\n) {\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}\nvalidate.validators.attachment = function (\n value: FormElementBinaryStorageValue,\n) {\n return getInvalidAttachment(value)?.errorMessage\n}\nvalidate.validators.attachments = function (\n value:\n | FormElementBinaryStorageValue[]\n | FormElementComplianceValue\n | undefined,\n) {\n if (Array.isArray(value)) {\n return validateAttachments(value)\n }\n return validateAttachments(\n value?.files as FormElementBinaryStorageValue[] | undefined,\n )\n}\n\n// Extend validator for lookups\nvalidate.validators.lookups = function (\n value: unknown,\n {\n executedLookups,\n formElement,\n }: {\n formElement: FormTypes.LookupFormElement & FormTypes.FormElementRequired\n executedLookups: ExecutedLookups\n },\n) {\n if (!formElement.isDataLookup && !formElement.isElementLookup) {\n return\n }\n\n // Lookups must only be executed on required form elements\n if (formElement && !formElement.required) {\n return\n }\n\n const elementExecutedLookups = executedLookups?.[formElement.name]\n if (elementExecutedLookups === true) {\n return\n }\n return generateLookupValidationMessage(formElement.lookupButton)\n}\n\nvalidate.validators.numberRegex = function (value: unknown, format: unknown) {\n if (!format) {\n return\n }\n if (typeof value === 'number' && !Number.isNaN(value)) {\n value = value.toString()\n }\n const errorMessages = validate.single(value, { format })\n return errorMessages && errorMessages[0]\n}\n\nvalidate.validators.isTrue = function (value: unknown, message?: string) {\n if (!value) {\n return message || 'Must be set to true'\n }\n}\n\nvalidate.validators.needsExtension = function (\n value: attachmentsService.Attachment[] | undefined,\n formElement: FormTypes.FilesElement,\n) {\n const isValid =\n !Array.isArray(value) ||\n value.every((file) => {\n return checkFileNameExtensionIsValid(formElement, file.fileName)\n })\n if (!isValid) return 'All files must have extensions'\n}\n\nfunction getCustomRegexFormatConfig<DefaultValue>(\n formElement: FormTypes.FormElementWithInput<DefaultValue>,\n) {\n return formElement.regexPattern\n ? {\n pattern: formElement.regexPattern,\n flags: formElement.regexFlags,\n message: formElement.regexMessage,\n }\n : undefined\n}\n\ntype ValidateJSSchema = Record<string, unknown>\n\nconst presence = (\n { required, requiredMessage }: FormTypes.FormElementRequired,\n message: string,\n) => (required ? { message: requiredMessage || message } : false)\n\nconst escapeElementName = (elementName: string) => {\n const escapedName = elementName.replace(/\\./g, '\\\\.')\n return escapedName\n}\n\nfunction 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\nfunction 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 generateValidationSchema(\n elements: FormTypes.FormElementWithName[],\n): ValidateJSSchema {\n return elements.reduce<ValidateJSSchema>((partialSchema, 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 partialSchema\n }\n }\n\n const constraint: ValidatorConstraintFn<\n SubmissionTypes.S3SubmissionData['submission']\n > = (\n value,\n submission,\n propertyName,\n { formElementsConditionallyShown, executedLookups },\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\n }\n\n switch (formElement.type) {\n case 'draw': {\n return {\n attachment: true,\n presence: presence(formElement, 'A saved signature is required'),\n }\n }\n case 'camera': {\n return {\n attachment: true,\n presence: presence(formElement, 'A photo is required'),\n }\n }\n case 'captcha': {\n return {\n presence: presence(\n { ...formElement, required: true },\n 'Please complete the CAPTCHA successfully',\n ),\n }\n }\n case 'location': {\n return {\n presence: presence(formElement, 'Please select a location'),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'compliance': {\n return {\n presence: presence(formElement, 'Required'),\n lookups: {\n formElement,\n executedLookups,\n },\n attachments: true,\n }\n }\n case 'checkboxes': {\n const requiredAllDefaultMessage = 'All options are required'\n return {\n presence: presence(\n {\n ...formElement,\n required: formElement.required || !!formElement.requiredAll,\n },\n formElement.requiredAll ? requiredAllDefaultMessage : 'Required',\n ),\n length: formElement.requiredAll\n ? {\n is: formElement.options?.length,\n message:\n formElement.requiredMessage || requiredAllDefaultMessage,\n }\n : undefined,\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'abn':\n case 'geoscapeAddress':\n case 'pointAddress':\n case 'civicaStreetName':\n case 'autocomplete':\n case 'radio':\n case 'select':\n case 'apiNSWLiquorLicence': {\n return {\n presence: presence(formElement, 'Required'),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'boolean': {\n return {\n isTrue: formElement.required && 'Required',\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'bsb': {\n return {\n presence: presence(formElement, 'Please enter a BSB number'),\n format: {\n pattern: /\\d{3}-\\d{3}/,\n message: 'Please enter a valid BSB number',\n },\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'barcodeScanner': {\n return {\n presence: presence(\n formElement,\n 'Please scan a barcode or enter a value',\n ),\n format: getCustomRegexFormatConfig(formElement),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'text':\n case 'textarea': {\n return {\n presence: presence(formElement, 'Please enter a value'),\n length: {\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 format: getCustomRegexFormatConfig(formElement),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'telephone': {\n return {\n presence: presence(formElement, 'Please enter a phone number'),\n format: getCustomRegexFormatConfig(formElement),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'email': {\n return {\n presence: presence(formElement, 'Please enter an email address'),\n email: {\n message: 'Please enter a valid email for this field',\n },\n format: getCustomRegexFormatConfig(formElement),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'time': {\n return {\n presence: presence(formElement, 'Please select a time'),\n lookups: {\n formElement,\n executedLookups,\n },\n }\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 return {\n presence: presence(formElement, 'Please select a date'),\n date: {\n format: (v: Date) => localisationService.formatDate(v),\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 lookups: {\n formElement,\n executedLookups,\n },\n }\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 return {\n presence: presence(formElement, 'Please select a date and time'),\n datetime: {\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 lookups: {\n formElement,\n executedLookups,\n },\n }\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 return {\n type: 'number',\n presence: presence(formElement, 'Please enter a number'),\n numericality: {\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 },\n numberRegex: getCustomRegexFormatConfig(formElement),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'files': {\n return {\n presence: formElement.minEntries\n ? {\n message: `Please upload at least ${\n formElement.minEntries\n } file${formElement.minEntries === 1 ? '' : 's'}`,\n }\n : false,\n length: {\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 type: {\n type: (files: attachmentsService.Attachment[] | undefined) => {\n return (\n !Array.isArray(files) ||\n files.every((file) => {\n return checkFileNameIsValid(formElement, file.fileName)\n })\n )\n },\n message: `Only the following file types are accepted: ${(\n formElement.restrictedFileTypes || []\n ).join(', ')}`,\n },\n needsExtension: formElement,\n attachments: true,\n }\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\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 return {\n entries: {\n setSchema: {\n presence: minSetEntries\n ? {\n message: `Must have at least ${minSetEntries} ${\n minSetEntries === 1 ? 'entry' : 'entries'\n }`,\n }\n : false,\n length: {\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 },\n entrySchema: {\n schema: generateValidationSchema(\n formElement.elements as FormTypes.FormElementWithName[],\n ),\n formElementConditionallyShown:\n formElementsConditionallyShown?.[formElement.name],\n executedLookups: repeatableSetExecutedLookups,\n },\n },\n }\n }\n case 'civicaNameRecord': {\n const nestedElements = generateCivicaNameRecordElements(\n formElement,\n [],\n )\n const nestedExecutedLookups =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups)\n ? executedLookups[formElement.name]\n : {}\n return {\n nestedElements: {\n schema: generateValidationSchema(\n nestedElements as FormTypes.FormElementWithName[],\n ),\n formElementConditionallyShown:\n formElementsConditionallyShown?.[formElement.name],\n executedLookups: nestedExecutedLookups,\n },\n }\n }\n case 'infoPage':\n case 'form': {\n if (formElement.elements) {\n const nestedExecutedLookups =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups)\n ? executedLookups[formElement.name]\n : {}\n return {\n nestedElements: {\n schema: generateValidationSchema(\n formElement.elements as FormTypes.FormElementWithName[],\n ),\n formElementConditionallyShown:\n formElementsConditionallyShown?.[formElement.name],\n executedLookups: nestedExecutedLookups,\n },\n }\n }\n break\n }\n case 'freshdeskDependentField': {\n const nestedElements =\n generateFreshdeskDependentFieldElements(formElement)\n const nestedExecutedLookups =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups)\n ? executedLookups[formElement.name]\n : {}\n return {\n nestedElements: {\n schema: generateValidationSchema(\n nestedElements as FormTypes.FormElementWithName[],\n ),\n formElementConditionallyShown:\n formElementsConditionallyShown?.[formElement.name],\n executedLookups: nestedExecutedLookups,\n },\n }\n }\n default: {\n console.info('Unsupported form element with validation', formElement)\n }\n }\n }\n partialSchema[escapeElementName(formElement.name)] = constraint\n return partialSchema\n }, {})\n}\n\nexport function validateSubmission(\n schema: ValidateJSSchema,\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n executedLookups: ExecutedLookupValue,\n): FormElementsValidation | undefined {\n const errorsAsArray = validate(submission, schema, {\n format: 'grouped',\n fullMessages: false,\n formElementsConditionallyShown,\n executedLookups,\n })\n if (!errorsAsArray || validate.isEmpty(errorsAsArray)) {\n return\n }\n\n const errors = Object.keys(errorsAsArray || {}).reduce(\n (messagesByFormElementName: FormElementsValidation, key) => {\n const validationMessage = errorsAsArray[key][0]\n if (validationMessage) {\n messagesByFormElementName[key.replace(/\\\\./g, '.')] = validationMessage\n }\n return messagesByFormElementName\n },\n {},\n )\n if (validate.isEmpty(errors)) {\n return\n }\n\n return errors\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"]}
|
1
|
+
{"version":3,"file":"form-validation.js","sourceRoot":"","sources":["../../src/services/form-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import validate, { ValidatorConstraintFn } from 'validate.js'\nimport { attachmentsService, localisationService } from '@oneblink/apps'\nimport { FormTypes, FormsAppsTypes, SubmissionTypes } from '@oneblink/types'\nimport { FormElementBinaryStorageValue } from '../types/attachments'\nimport { Value as FormElementComplianceValue } from '../form-elements/FormElementCompliance'\nimport { parseDateValue } from './generate-default-data'\nimport generateCivicaNameRecordElements from './generateCivicaNameRecordElements'\nimport {\n ExecutedLookups,\n ExecutedLookupValue,\n FormElementConditionallyShown,\n FormElementsConditionallyShown,\n FormElementsValidation,\n} from '../types/form'\nimport generateFreshdeskDependentFieldElements from './generateFreshdeskDependentFieldElements'\nimport cleanFormSubmissionModel from './cleanFormSubmissionModel'\nimport getDateRangeConfiguration, {\n DateRangeConfigurationOptions,\n} from './getDateRangeConfiguration'\nimport getRepeatableSetEntriesConfiguration from './getRepeatableSetEntriesConfiguration'\n\ntype NestedValidateJSSchema = {\n schema: ValidateJSSchema\n formElementConditionallyShown: FormElementConditionallyShown | undefined\n executedLookups: ExecutedLookupValue\n}\n\nexport const generateLookupValidationMessage = (\n lookupButtonConfig?: FormsAppsTypes.ButtonConfiguration,\n) => {\n return lookupButtonConfig && lookupButtonConfig.label\n ? `${lookupButtonConfig.label} is required`\n : 'Lookup is required'\n}\n\n// https://validatejs.org/#validators-datetime\n// Before using it we must add the parse and format functions\n// Here is a sample implementation using moment.js\nvalidate.extend(validate.validators.datetime, {\n // The value is guaranteed not to be null or undefined but otherwise it\n // could be anything.\n parse: function (value: string) {\n return Date.parse(value)\n },\n // Input is a unix timestamp\n format: function (\n value: string,\n options: { format: (date: Date) => string },\n ) {\n const dateValue = new Date(value)\n return options.format(dateValue)\n },\n})\n\nvalidate.validators.entries = function (\n value: unknown,\n {\n setSchema,\n entrySchema: {\n schema: entrySchema,\n formElementConditionallyShown,\n executedLookups,\n },\n }: {\n setSchema: ValidateJSSchema\n entrySchema: NestedValidateJSSchema\n },\n) {\n const entries = Array.isArray(value) ? value : []\n\n const entryErrors = entries.reduce((errorsByIndex, entry, index) => {\n const entryValidation = validateSubmission(\n entrySchema,\n entry,\n formElementConditionallyShown?.type === 'repeatableSet'\n ? formElementConditionallyShown.entries[index.toString()]\n : undefined,\n Array.isArray(executedLookups) ? executedLookups[index] : {},\n )\n if (entryValidation) {\n errorsByIndex[index] = entryValidation\n }\n return errorsByIndex\n }, {})\n\n const setErrorMessages = validate.single(value, setSchema)\n\n if (!setErrorMessages && validate.isEmpty(entryErrors)) {\n return\n }\n\n return {\n type: 'repeatableSet',\n set: setErrorMessages && setErrorMessages[0],\n entries: entryErrors,\n }\n}\n\nvalidate.validators.nestedElements = function (\n value: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n {\n schema,\n formElementConditionallyShown,\n executedLookups,\n }: NestedValidateJSSchema,\n) {\n const errors = validateSubmission(\n schema,\n value,\n formElementConditionallyShown?.type === 'formElements'\n ? formElementConditionallyShown.formElements\n : undefined,\n typeof executedLookups !== 'boolean' ? executedLookups : {},\n )\n if (!errors) {\n return\n }\n return {\n type: 'formElements',\n formElements: errors,\n }\n}\n\nfunction getInvalidAttachment(value: FormElementBinaryStorageValue) {\n if (\n value &&\n typeof value === 'object' &&\n value.type &&\n value.type === 'ERROR'\n ) {\n return value\n }\n}\nfunction validateAttachments(\n value: FormElementBinaryStorageValue[] | undefined,\n) {\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}\nvalidate.validators.attachment = function (\n value: FormElementBinaryStorageValue,\n) {\n return getInvalidAttachment(value)?.errorMessage\n}\nvalidate.validators.attachments = function (\n value:\n | FormElementBinaryStorageValue[]\n | FormElementComplianceValue\n | undefined,\n) {\n if (Array.isArray(value)) {\n return validateAttachments(value)\n }\n return validateAttachments(\n value?.files as FormElementBinaryStorageValue[] | undefined,\n )\n}\n\n// Extend validator for lookups\nvalidate.validators.lookups = function (\n value: unknown,\n {\n executedLookups,\n formElement,\n }: {\n formElement: FormTypes.LookupFormElement & FormTypes.FormElementRequired\n executedLookups: ExecutedLookups\n },\n) {\n if (!formElement.isDataLookup && !formElement.isElementLookup) {\n return\n }\n\n // Lookups must only be executed on required form elements\n if (formElement && !formElement.required) {\n return\n }\n\n const elementExecutedLookups = executedLookups?.[formElement.name]\n if (elementExecutedLookups === true) {\n return\n }\n return generateLookupValidationMessage(formElement.lookupButton)\n}\n\nvalidate.validators.numberRegex = function (value: unknown, format: unknown) {\n if (!format) {\n return\n }\n if (typeof value === 'number' && !Number.isNaN(value)) {\n value = value.toString()\n }\n const errorMessages = validate.single(value, { format })\n return errorMessages && errorMessages[0]\n}\n\nvalidate.validators.isTrue = function (value: unknown, message?: string) {\n if (!value) {\n return message || 'Must be set to true'\n }\n}\n\nvalidate.validators.needsExtension = function (\n value: attachmentsService.Attachment[] | undefined,\n formElement: FormTypes.FilesElement,\n) {\n const isValid =\n !Array.isArray(value) ||\n value.every((file) => {\n return checkFileNameExtensionIsValid(formElement, file.fileName)\n })\n if (!isValid) return 'All files must have extensions'\n}\n\nfunction getCustomRegexFormatConfig<DefaultValue>(\n formElement: FormTypes.FormElementWithInput<DefaultValue>,\n) {\n return formElement.regexPattern\n ? {\n pattern: formElement.regexPattern,\n flags: formElement.regexFlags,\n message: formElement.regexMessage,\n }\n : undefined\n}\n\ntype ValidateJSSchema = Record<string, unknown>\n\nconst presence = (\n { required, requiredMessage }: FormTypes.FormElementRequired,\n message: string,\n) => (required ? { message: requiredMessage || message } : false)\n\nconst escapeElementName = (elementName: string) => {\n const escapedName = elementName.replace(/\\./g, '\\\\.')\n return escapedName\n}\n\nfunction 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\nfunction 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 generateValidationSchema(\n elements: FormTypes.FormElementWithName[],\n): ValidateJSSchema {\n return elements.reduce<ValidateJSSchema>((partialSchema, 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 partialSchema\n }\n }\n\n const constraint: ValidatorConstraintFn<\n SubmissionTypes.S3SubmissionData['submission']\n > = (\n value,\n submission,\n propertyName,\n { formElementsConditionallyShown, executedLookups },\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\n }\n\n switch (formElement.type) {\n case 'draw': {\n return {\n attachment: true,\n presence: presence(formElement, 'A saved signature is required'),\n }\n }\n case 'camera': {\n return {\n attachment: true,\n presence: presence(formElement, 'A photo is required'),\n }\n }\n case 'captcha': {\n return {\n presence: presence(\n { ...formElement, required: true },\n 'Please complete the CAPTCHA successfully',\n ),\n }\n }\n case 'location': {\n return {\n presence: presence(formElement, 'Please select a location'),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'compliance': {\n return {\n presence: presence(formElement, 'Required'),\n lookups: {\n formElement,\n executedLookups,\n },\n attachments: true,\n }\n }\n case 'checkboxes': {\n const optionsLength =\n formElementConditionallyShown?.type === 'formElement' &&\n formElementConditionallyShown?.options\n ? formElementConditionallyShown?.options?.length\n : formElement.options?.length\n\n const requiredAllDefaultMessage = 'All options are required'\n return {\n presence: presence(\n {\n ...formElement,\n required:\n !!optionsLength &&\n (formElement.required || !!formElement.requiredAll),\n },\n formElement.requiredAll ? requiredAllDefaultMessage : 'Required',\n ),\n length: formElement.requiredAll\n ? {\n is: optionsLength,\n message:\n formElement.requiredMessage || requiredAllDefaultMessage,\n }\n : undefined,\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'abn':\n case 'geoscapeAddress':\n case 'pointAddress':\n case 'civicaStreetName':\n case 'autocomplete':\n case 'radio':\n case 'select':\n case 'apiNSWLiquorLicence': {\n return {\n presence: presence(formElement, 'Required'),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'boolean': {\n return {\n isTrue: formElement.required && 'Required',\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'bsb': {\n return {\n presence: presence(formElement, 'Please enter a BSB number'),\n format: {\n pattern: /\\d{3}-\\d{3}/,\n message: 'Please enter a valid BSB number',\n },\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'barcodeScanner': {\n return {\n presence: presence(\n formElement,\n 'Please scan a barcode or enter a value',\n ),\n format: getCustomRegexFormatConfig(formElement),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'text':\n case 'textarea': {\n return {\n presence: presence(formElement, 'Please enter a value'),\n length: {\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 format: getCustomRegexFormatConfig(formElement),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'telephone': {\n return {\n presence: presence(formElement, 'Please enter a phone number'),\n format: getCustomRegexFormatConfig(formElement),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'email': {\n return {\n presence: presence(formElement, 'Please enter an email address'),\n email: {\n message: 'Please enter a valid email for this field',\n },\n format: getCustomRegexFormatConfig(formElement),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'time': {\n return {\n presence: presence(formElement, 'Please select a time'),\n lookups: {\n formElement,\n executedLookups,\n },\n }\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 return {\n presence: presence(formElement, 'Please select a date'),\n date: {\n format: (v: Date) => localisationService.formatDate(v),\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 lookups: {\n formElement,\n executedLookups,\n },\n }\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 return {\n presence: presence(formElement, 'Please select a date and time'),\n datetime: {\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 lookups: {\n formElement,\n executedLookups,\n },\n }\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 return {\n type: 'number',\n presence: presence(formElement, 'Please enter a number'),\n numericality: {\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 },\n numberRegex: getCustomRegexFormatConfig(formElement),\n lookups: {\n formElement,\n executedLookups,\n },\n }\n }\n case 'files': {\n return {\n presence: formElement.minEntries\n ? {\n message: `Please upload at least ${\n formElement.minEntries\n } file${formElement.minEntries === 1 ? '' : 's'}`,\n }\n : false,\n length: {\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 type: {\n type: (files: attachmentsService.Attachment[] | undefined) => {\n return (\n !Array.isArray(files) ||\n files.every((file) => {\n return checkFileNameIsValid(formElement, file.fileName)\n })\n )\n },\n message: `Only the following file types are accepted: ${(\n formElement.restrictedFileTypes || []\n ).join(', ')}`,\n },\n needsExtension: formElement,\n attachments: true,\n }\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\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 return {\n entries: {\n setSchema: {\n presence: minSetEntries\n ? {\n message: `Must have at least ${minSetEntries} ${\n minSetEntries === 1 ? 'entry' : 'entries'\n }`,\n }\n : false,\n length: {\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 },\n entrySchema: {\n schema: generateValidationSchema(\n formElement.elements as FormTypes.FormElementWithName[],\n ),\n formElementConditionallyShown:\n formElementsConditionallyShown?.[formElement.name],\n executedLookups: repeatableSetExecutedLookups,\n },\n },\n }\n }\n case 'civicaNameRecord': {\n const nestedElements = generateCivicaNameRecordElements(\n formElement,\n [],\n )\n const nestedExecutedLookups =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups)\n ? executedLookups[formElement.name]\n : {}\n return {\n nestedElements: {\n schema: generateValidationSchema(\n nestedElements as FormTypes.FormElementWithName[],\n ),\n formElementConditionallyShown:\n formElementsConditionallyShown?.[formElement.name],\n executedLookups: nestedExecutedLookups,\n },\n }\n }\n case 'infoPage':\n case 'form': {\n if (formElement.elements) {\n const nestedExecutedLookups =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups)\n ? executedLookups[formElement.name]\n : {}\n return {\n nestedElements: {\n schema: generateValidationSchema(\n formElement.elements as FormTypes.FormElementWithName[],\n ),\n formElementConditionallyShown:\n formElementsConditionallyShown?.[formElement.name],\n executedLookups: nestedExecutedLookups,\n },\n }\n }\n break\n }\n case 'freshdeskDependentField': {\n const nestedElements =\n generateFreshdeskDependentFieldElements(formElement)\n const nestedExecutedLookups =\n executedLookups !== undefined &&\n typeof executedLookups !== 'boolean' &&\n !Array.isArray(executedLookups)\n ? executedLookups[formElement.name]\n : {}\n return {\n nestedElements: {\n schema: generateValidationSchema(\n nestedElements as FormTypes.FormElementWithName[],\n ),\n formElementConditionallyShown:\n formElementsConditionallyShown?.[formElement.name],\n executedLookups: nestedExecutedLookups,\n },\n }\n }\n default: {\n console.info('Unsupported form element with validation', formElement)\n }\n }\n }\n partialSchema[escapeElementName(formElement.name)] = constraint\n return partialSchema\n }, {})\n}\n\nexport function validateSubmission(\n schema: ValidateJSSchema,\n submission: SubmissionTypes.S3SubmissionData['submission'] | undefined,\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined,\n executedLookups: ExecutedLookupValue,\n): FormElementsValidation | undefined {\n const errorsAsArray = validate(submission, schema, {\n format: 'grouped',\n fullMessages: false,\n formElementsConditionallyShown,\n executedLookups,\n })\n if (!errorsAsArray || validate.isEmpty(errorsAsArray)) {\n return\n }\n\n const errors = Object.keys(errorsAsArray || {}).reduce(\n (messagesByFormElementName: FormElementsValidation, key) => {\n const validationMessage = errorsAsArray[key][0]\n if (validationMessage) {\n messagesByFormElementName[key.replace(/\\\\./g, '.')] = validationMessage\n }\n return messagesByFormElementName\n },\n {},\n )\n if (validate.isEmpty(errors)) {\n return\n }\n\n return errors\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"]}
|
package/package.json
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
{
|
2
2
|
"name": "@oneblink/apps-react",
|
3
3
|
"description": "Helper functions for OneBlink apps in ReactJS.",
|
4
|
-
"version": "5.12.
|
4
|
+
"version": "5.12.2-beta.2",
|
5
5
|
"author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
|
6
6
|
"bugs": {
|
7
7
|
"url": "https://github.com/oneblink/apps-react/issues"
|
8
8
|
},
|
9
9
|
"dependencies": {
|
10
|
-
"@arcgis/core": "
|
10
|
+
"@arcgis/core": "~4.28.10",
|
11
11
|
"@emotion/react": "^11.11.3",
|
12
12
|
"@emotion/styled": "^11.11.0",
|
13
13
|
"@oneblink/sdk-core": "^6.0.1-beta.2",
|