@oneblink/apps-react 6.11.0-beta.6 → 6.11.0-beta.8

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.
@@ -144,7 +144,9 @@ export const validators = {
144
144
  }
145
145
  // Is checks
146
146
  if (isNumber(is) && length !== is) {
147
- const err = wrongLength || 'is the wrong length (should be %{count} characters)';
147
+ const err = message ||
148
+ wrongLength ||
149
+ 'is the wrong length (should be %{count} characters)';
148
150
  return [formatValidationMessage(err, { count: is })];
149
151
  }
150
152
  const errors = [];
@@ -1 +1 @@
1
- {"version":3,"file":"validate-dot-js.js","sourceRoot":"","sources":["../../../src/services/form-validation/validate-dot-js.ts"],"names":[],"mappings":"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","sourcesContent":["import * as EmailValidator from 'email-validator'\n\nconst EMPTY_STRING_REGEXP = /^\\s*$/\nconst FORMAT_REGEXP = /(%?)%\\{([^}]+)\\}/g\n\n/**\n * Checks if the value is a number. This function does not consider NaN a number\n * like many other `isNumber` functions do.\n *\n * @param value\n * @returns\n */\nfunction isNumber(value: unknown): value is number {\n return typeof value === 'number' && !isNaN(value)\n}\n\n/**\n * Returns false if the object is not a function\n *\n * @param value\n * @returns\n */\nfunction isFunction(value: unknown) {\n return typeof value === 'function'\n}\n\n/**\n * A simple check to verify that the value is an integer. Uses `isNumber` and a\n * simple modulo check.\n *\n * @param value\n * @returns\n */\nfunction isInteger(value: unknown): value is number {\n return isNumber(value) && value % 1 === 0\n}\n\n/**\n * Uses the `Object` function to check if the given argument is an object.\n *\n * @param obj\n * @returns\n */\nfunction isObject(obj: unknown): obj is object {\n return obj === Object(obj)\n}\n\n/**\n * Simply checks if the object is an instance of a date\n *\n * @param obj\n * @returns\n */\nfunction isDate(obj: unknown): obj is Date {\n return obj instanceof Date\n}\n\n/**\n * Returns false if the object is `null` of `undefined`\n *\n * @param obj\n * @returns\n */\nfunction isDefined(obj: unknown) {\n return obj !== null && obj !== undefined\n}\n\nexport function isEmpty(value: unknown) {\n // Null and undefined are empty\n if (!isDefined(value)) {\n return true\n }\n\n // functions are non empty\n if (isFunction(value)) {\n return false\n }\n\n // Whitespace only strings are empty\n if (isString(value)) {\n return EMPTY_STRING_REGEXP.test(value)\n }\n\n // For arrays we use the length property\n if (isArray(value)) {\n return value.length === 0\n }\n\n // Dates have no attributes but aren't empty\n if (isDate(value)) {\n return false\n }\n\n // If we find at least one property we consider it non empty\n if (isObject(value)) {\n for (const _attr in value) {\n return false\n }\n return true\n }\n\n return false\n}\n\n/**\n * Formats the specified strings with the given values like so:\n *\n * format('Foo: %{foo}', { foo: 'bar' }) // \"Foo bar\"\n *\n * If you want to write %{...} without having it replaced simply prefix it with\n * % like this `Foo: %%{foo}` and it will be returned as `\"Foo: %{foo}\"`\n *\n * @param str\n * @param vals\n * @returns\n */\nfunction formatValidationMessage(\n str: string,\n vals: Record<string, unknown>,\n): string {\n if (!isString(str)) {\n return str\n }\n return str.replace(FORMAT_REGEXP, function (m0, m1, m2) {\n if (m1 === '%') {\n return '%{' + m2 + '}'\n } else {\n return String(vals[m2])\n }\n })\n}\n\nfunction isString(value: unknown) {\n return typeof value === 'string'\n}\n\nfunction isArray(value: unknown) {\n return Array.isArray(value)\n}\n\nexport const validators = {\n /**\n * Presence validates that the value isn't empty\n *\n * @param value\n * @param options\n * @returns\n */\n presence(\n value: unknown,\n options?: { allowEmpty?: boolean; message?: string },\n ): string[] {\n if (options?.allowEmpty ? !isDefined(value) : isEmpty(value)) {\n return [options?.message || \"can't be blank\"]\n }\n\n return []\n },\n\n length(\n value: unknown,\n options?: {\n message?: string\n is?: number\n minimum?: number\n maximum?: number\n tooShort?: string\n tooLong?: string\n wrongLength?: string\n },\n ): string[] {\n // Empty values are allowed\n if (!isDefined(value)) {\n return []\n }\n\n const length = (value as { length?: unknown } | string | Array<unknown>)\n ?.length\n const { message, is, minimum, maximum, tooShort, tooLong, wrongLength } =\n options || {}\n\n if (!isNumber(length)) {\n return [message || 'has an incorrect length']\n }\n\n // Is checks\n if (isNumber(is) && length !== is) {\n const err =\n wrongLength || 'is the wrong length (should be %{count} characters)'\n return [formatValidationMessage(err, { count: is })]\n }\n\n const errors: string[] = []\n if (isNumber(minimum) && length < minimum) {\n const err = tooShort || 'is too short (minimum is %{count} characters)'\n errors.push(formatValidationMessage(err, { count: minimum }))\n }\n\n if (isNumber(maximum) && length > maximum) {\n const err = tooLong || 'is too long (maximum is %{count} characters)'\n errors.push(formatValidationMessage(err, { count: maximum }))\n }\n\n if (errors.length > 0) {\n return message ? [message] : errors\n }\n\n return []\n },\n numericality(\n value: unknown,\n options?: {\n message?: string\n notValid?: string\n onlyInteger?: boolean\n notInteger?: string\n greaterThan?: number\n notGreaterThan?: string\n greaterThanOrEqualTo?: number\n notGreaterThanOrEqualTo?: string\n lessThanOrEqualTo?: number\n notLessThanOrEqualTo?: string\n equalTo?: number\n notEqualTo?: string\n lessThan?: number\n notLessThan?: string\n divisibleBy?: number\n notDivisibleBy?: string\n odd?: boolean\n notOdd?: string\n even?: boolean\n notEven?: string\n },\n ): string[] {\n // Empty values are fine\n if (!isDefined(value)) {\n return []\n }\n\n // If it's not a number we shouldn't continue since it will compare it.\n if (!isNumber(value)) {\n return [options?.message || options?.notValid || 'is not a number']\n }\n\n // Same logic as above, sort of. Don't bother with comparisons if this\n // doesn't pass.\n if (options?.onlyInteger && !isInteger(value)) {\n return [options?.message || options?.notInteger || 'must be an integer']\n }\n\n const checks = [\n {\n name: 'greater than',\n message: options?.notGreaterThan,\n predicateValue: options?.greaterThan,\n predicate(predicateValue: number) {\n return value > predicateValue\n },\n },\n {\n name: 'greater than or equal to',\n message: options?.notGreaterThanOrEqualTo,\n predicateValue: options?.greaterThanOrEqualTo,\n predicate(predicateValue: number) {\n return value >= predicateValue\n },\n },\n {\n name: 'equal to',\n message: options?.notEqualTo,\n predicateValue: options?.equalTo,\n predicate(predicateValue: number) {\n return value === predicateValue\n },\n },\n {\n name: 'less than',\n message: options?.notLessThan,\n predicateValue: options?.lessThan,\n predicate(predicateValue: number) {\n return value < predicateValue\n },\n },\n {\n name: 'less than or equal to',\n message: options?.notLessThanOrEqualTo,\n predicateValue: options?.lessThanOrEqualTo,\n predicate(predicateValue: number) {\n return value <= predicateValue\n },\n },\n {\n name: 'divisible by',\n message: options?.notDivisibleBy,\n predicateValue: options?.divisibleBy,\n predicate(predicateValue: number) {\n return value % predicateValue === 0\n },\n },\n ]\n\n const errors: string[] = []\n\n for (const check of checks) {\n if (\n isNumber(check.predicateValue) &&\n !check.predicate(check.predicateValue)\n ) {\n // This picks the default message if specified\n // For example the greaterThan check uses the message from\n // this.notGreaterThan so we capitalize the name and prepend \"not\"\n const msg = check.message || 'must be %{type} %{count}'\n\n errors.push(\n formatValidationMessage(msg, {\n count: check.predicateValue,\n type: check.name,\n }),\n )\n }\n }\n\n if (options?.odd && value % 2 !== 1) {\n errors.push(options.notOdd || 'must be odd')\n }\n if (options?.even && value % 2 !== 0) {\n errors.push(options.notEven || 'must be even')\n }\n\n if (errors.length) {\n return options?.message ? [options.message] : errors\n }\n\n return []\n },\n\n datetime(\n value: unknown,\n {\n format,\n ...options\n }: {\n format: (date: Date) => string\n earliest?: string\n latest?: string\n tooEarly?: string\n tooLate?: string\n dateOnly?: boolean\n notValid?: string\n message?: string\n },\n ): string[] {\n // Empty values are fine\n if (!isDefined(value)) {\n return []\n }\n\n let num = value\n if (isString(value)) {\n num = Date.parse(value)\n }\n\n // 86400000 is the number of milliseconds in a day, this is used to remove\n // the time from the date\n if (\n !isNumber(num) ||\n isNaN(num) ||\n (options.dateOnly && num % 86400000 !== 0)\n ) {\n const err = options.notValid || options.message || 'must be a valid date'\n return [formatValidationMessage(err, { value })]\n }\n\n const errors = []\n\n const earliest = options.earliest ? Date.parse(options.earliest) : NaN\n if (!isNaN(earliest) && num < earliest) {\n const err =\n options.tooEarly || options.message || 'must be no earlier than %{date}'\n errors.push(\n formatValidationMessage(err, {\n value: format(new Date(num)),\n date: format(new Date(earliest)),\n }),\n )\n }\n\n const latest = options.latest ? Date.parse(options.latest) : NaN\n if (!isNaN(latest) && num > latest) {\n const err =\n options.tooLate || options.message || 'must be no later than %{date}'\n errors.push(\n formatValidationMessage(err, {\n date: format(new Date(latest)),\n value: format(new Date(num)),\n }),\n )\n }\n\n return errors\n },\n\n regexValidation(\n value: unknown,\n options:\n | {\n pattern: RegExp | string\n message?: string\n flags?: string\n }\n | RegExp\n | string,\n ): string[] {\n if (isString(options) || options instanceof RegExp) {\n options = { pattern: options }\n }\n\n const message = options.message || 'is invalid'\n\n // Empty values are allowed\n if (!isDefined(value)) {\n return []\n }\n if (!isString(value)) {\n return [message]\n }\n\n let pattern = options.pattern\n if (isString(pattern)) {\n pattern = new RegExp(options.pattern, options.flags)\n }\n const match = pattern.exec(value)\n if (!match || match[0].length != value.length) {\n return [message]\n }\n\n return []\n },\n\n email(value: unknown, options?: { message?: string }): string[] {\n // Empty values are fine\n if (!isDefined(value)) {\n return []\n }\n\n const message = options?.message || 'is not a valid email'\n if (!isString(value)) {\n return [message]\n }\n if (!EmailValidator.validate(value)) {\n return [message]\n }\n\n return []\n },\n}\n"]}
1
+ {"version":3,"file":"validate-dot-js.js","sourceRoot":"","sources":["../../../src/services/form-validation/validate-dot-js.ts"],"names":[],"mappings":"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","sourcesContent":["import * as EmailValidator from 'email-validator'\n\nconst EMPTY_STRING_REGEXP = /^\\s*$/\nconst FORMAT_REGEXP = /(%?)%\\{([^}]+)\\}/g\n\n/**\n * Checks if the value is a number. This function does not consider NaN a number\n * like many other `isNumber` functions do.\n *\n * @param value\n * @returns\n */\nfunction isNumber(value: unknown): value is number {\n return typeof value === 'number' && !isNaN(value)\n}\n\n/**\n * Returns false if the object is not a function\n *\n * @param value\n * @returns\n */\nfunction isFunction(value: unknown) {\n return typeof value === 'function'\n}\n\n/**\n * A simple check to verify that the value is an integer. Uses `isNumber` and a\n * simple modulo check.\n *\n * @param value\n * @returns\n */\nfunction isInteger(value: unknown): value is number {\n return isNumber(value) && value % 1 === 0\n}\n\n/**\n * Uses the `Object` function to check if the given argument is an object.\n *\n * @param obj\n * @returns\n */\nfunction isObject(obj: unknown): obj is object {\n return obj === Object(obj)\n}\n\n/**\n * Simply checks if the object is an instance of a date\n *\n * @param obj\n * @returns\n */\nfunction isDate(obj: unknown): obj is Date {\n return obj instanceof Date\n}\n\n/**\n * Returns false if the object is `null` of `undefined`\n *\n * @param obj\n * @returns\n */\nfunction isDefined(obj: unknown) {\n return obj !== null && obj !== undefined\n}\n\nexport function isEmpty(value: unknown) {\n // Null and undefined are empty\n if (!isDefined(value)) {\n return true\n }\n\n // functions are non empty\n if (isFunction(value)) {\n return false\n }\n\n // Whitespace only strings are empty\n if (isString(value)) {\n return EMPTY_STRING_REGEXP.test(value)\n }\n\n // For arrays we use the length property\n if (isArray(value)) {\n return value.length === 0\n }\n\n // Dates have no attributes but aren't empty\n if (isDate(value)) {\n return false\n }\n\n // If we find at least one property we consider it non empty\n if (isObject(value)) {\n for (const _attr in value) {\n return false\n }\n return true\n }\n\n return false\n}\n\n/**\n * Formats the specified strings with the given values like so:\n *\n * format('Foo: %{foo}', { foo: 'bar' }) // \"Foo bar\"\n *\n * If you want to write %{...} without having it replaced simply prefix it with\n * % like this `Foo: %%{foo}` and it will be returned as `\"Foo: %{foo}\"`\n *\n * @param str\n * @param vals\n * @returns\n */\nfunction formatValidationMessage(\n str: string,\n vals: Record<string, unknown>,\n): string {\n if (!isString(str)) {\n return str\n }\n return str.replace(FORMAT_REGEXP, function (m0, m1, m2) {\n if (m1 === '%') {\n return '%{' + m2 + '}'\n } else {\n return String(vals[m2])\n }\n })\n}\n\nfunction isString(value: unknown) {\n return typeof value === 'string'\n}\n\nfunction isArray(value: unknown) {\n return Array.isArray(value)\n}\n\nexport const validators = {\n /**\n * Presence validates that the value isn't empty\n *\n * @param value\n * @param options\n * @returns\n */\n presence(\n value: unknown,\n options?: { allowEmpty?: boolean; message?: string },\n ): string[] {\n if (options?.allowEmpty ? !isDefined(value) : isEmpty(value)) {\n return [options?.message || \"can't be blank\"]\n }\n\n return []\n },\n\n length(\n value: unknown,\n options?: {\n message?: string\n is?: number\n minimum?: number\n maximum?: number\n tooShort?: string\n tooLong?: string\n wrongLength?: string\n },\n ): string[] {\n // Empty values are allowed\n if (!isDefined(value)) {\n return []\n }\n\n const length = (value as { length?: unknown } | string | Array<unknown>)\n ?.length\n const { message, is, minimum, maximum, tooShort, tooLong, wrongLength } =\n options || {}\n\n if (!isNumber(length)) {\n return [message || 'has an incorrect length']\n }\n\n // Is checks\n if (isNumber(is) && length !== is) {\n const err =\n message ||\n wrongLength ||\n 'is the wrong length (should be %{count} characters)'\n return [formatValidationMessage(err, { count: is })]\n }\n\n const errors: string[] = []\n if (isNumber(minimum) && length < minimum) {\n const err = tooShort || 'is too short (minimum is %{count} characters)'\n errors.push(formatValidationMessage(err, { count: minimum }))\n }\n\n if (isNumber(maximum) && length > maximum) {\n const err = tooLong || 'is too long (maximum is %{count} characters)'\n errors.push(formatValidationMessage(err, { count: maximum }))\n }\n\n if (errors.length > 0) {\n return message ? [message] : errors\n }\n\n return []\n },\n numericality(\n value: unknown,\n options?: {\n message?: string\n notValid?: string\n onlyInteger?: boolean\n notInteger?: string\n greaterThan?: number\n notGreaterThan?: string\n greaterThanOrEqualTo?: number\n notGreaterThanOrEqualTo?: string\n lessThanOrEqualTo?: number\n notLessThanOrEqualTo?: string\n equalTo?: number\n notEqualTo?: string\n lessThan?: number\n notLessThan?: string\n divisibleBy?: number\n notDivisibleBy?: string\n odd?: boolean\n notOdd?: string\n even?: boolean\n notEven?: string\n },\n ): string[] {\n // Empty values are fine\n if (!isDefined(value)) {\n return []\n }\n\n // If it's not a number we shouldn't continue since it will compare it.\n if (!isNumber(value)) {\n return [options?.message || options?.notValid || 'is not a number']\n }\n\n // Same logic as above, sort of. Don't bother with comparisons if this\n // doesn't pass.\n if (options?.onlyInteger && !isInteger(value)) {\n return [options?.message || options?.notInteger || 'must be an integer']\n }\n\n const checks = [\n {\n name: 'greater than',\n message: options?.notGreaterThan,\n predicateValue: options?.greaterThan,\n predicate(predicateValue: number) {\n return value > predicateValue\n },\n },\n {\n name: 'greater than or equal to',\n message: options?.notGreaterThanOrEqualTo,\n predicateValue: options?.greaterThanOrEqualTo,\n predicate(predicateValue: number) {\n return value >= predicateValue\n },\n },\n {\n name: 'equal to',\n message: options?.notEqualTo,\n predicateValue: options?.equalTo,\n predicate(predicateValue: number) {\n return value === predicateValue\n },\n },\n {\n name: 'less than',\n message: options?.notLessThan,\n predicateValue: options?.lessThan,\n predicate(predicateValue: number) {\n return value < predicateValue\n },\n },\n {\n name: 'less than or equal to',\n message: options?.notLessThanOrEqualTo,\n predicateValue: options?.lessThanOrEqualTo,\n predicate(predicateValue: number) {\n return value <= predicateValue\n },\n },\n {\n name: 'divisible by',\n message: options?.notDivisibleBy,\n predicateValue: options?.divisibleBy,\n predicate(predicateValue: number) {\n return value % predicateValue === 0\n },\n },\n ]\n\n const errors: string[] = []\n\n for (const check of checks) {\n if (\n isNumber(check.predicateValue) &&\n !check.predicate(check.predicateValue)\n ) {\n // This picks the default message if specified\n // For example the greaterThan check uses the message from\n // this.notGreaterThan so we capitalize the name and prepend \"not\"\n const msg = check.message || 'must be %{type} %{count}'\n\n errors.push(\n formatValidationMessage(msg, {\n count: check.predicateValue,\n type: check.name,\n }),\n )\n }\n }\n\n if (options?.odd && value % 2 !== 1) {\n errors.push(options.notOdd || 'must be odd')\n }\n if (options?.even && value % 2 !== 0) {\n errors.push(options.notEven || 'must be even')\n }\n\n if (errors.length) {\n return options?.message ? [options.message] : errors\n }\n\n return []\n },\n\n datetime(\n value: unknown,\n {\n format,\n ...options\n }: {\n format: (date: Date) => string\n earliest?: string\n latest?: string\n tooEarly?: string\n tooLate?: string\n dateOnly?: boolean\n notValid?: string\n message?: string\n },\n ): string[] {\n // Empty values are fine\n if (!isDefined(value)) {\n return []\n }\n\n let num = value\n if (isString(value)) {\n num = Date.parse(value)\n }\n\n // 86400000 is the number of milliseconds in a day, this is used to remove\n // the time from the date\n if (\n !isNumber(num) ||\n isNaN(num) ||\n (options.dateOnly && num % 86400000 !== 0)\n ) {\n const err = options.notValid || options.message || 'must be a valid date'\n return [formatValidationMessage(err, { value })]\n }\n\n const errors = []\n\n const earliest = options.earliest ? Date.parse(options.earliest) : NaN\n if (!isNaN(earliest) && num < earliest) {\n const err =\n options.tooEarly || options.message || 'must be no earlier than %{date}'\n errors.push(\n formatValidationMessage(err, {\n value: format(new Date(num)),\n date: format(new Date(earliest)),\n }),\n )\n }\n\n const latest = options.latest ? Date.parse(options.latest) : NaN\n if (!isNaN(latest) && num > latest) {\n const err =\n options.tooLate || options.message || 'must be no later than %{date}'\n errors.push(\n formatValidationMessage(err, {\n date: format(new Date(latest)),\n value: format(new Date(num)),\n }),\n )\n }\n\n return errors\n },\n\n regexValidation(\n value: unknown,\n options:\n | {\n pattern: RegExp | string\n message?: string\n flags?: string\n }\n | RegExp\n | string,\n ): string[] {\n if (isString(options) || options instanceof RegExp) {\n options = { pattern: options }\n }\n\n const message = options.message || 'is invalid'\n\n // Empty values are allowed\n if (!isDefined(value)) {\n return []\n }\n if (!isString(value)) {\n return [message]\n }\n\n let pattern = options.pattern\n if (isString(pattern)) {\n pattern = new RegExp(options.pattern, options.flags)\n }\n const match = pattern.exec(value)\n if (!match || match[0].length != value.length) {\n return [message]\n }\n\n return []\n },\n\n email(value: unknown, options?: { message?: string }): string[] {\n // Empty values are fine\n if (!isDefined(value)) {\n return []\n }\n\n const message = options?.message || 'is not a valid email'\n if (!isString(value)) {\n return [message]\n }\n if (!EmailValidator.validate(value)) {\n return [message]\n }\n\n return []\n },\n}\n"]}
@@ -396,18 +396,17 @@ export default function validateSubmission({ elements, submission, formElementsC
396
396
  case 'repeatableSet': {
397
397
  const minSetEntries = getCleanRepeatableSetConfiguration(formElement.minSetEntries, elements, submission, formElementsConditionallyShown);
398
398
  const maxSetEntries = getCleanRepeatableSetConfiguration(formElement.maxSetEntries, elements, submission, formElementsConditionallyShown);
399
- const setErrorMessages = [];
399
+ const setErrorMessages = validators.length(value, {
400
+ minimum: minSetEntries,
401
+ maximum: maxSetEntries,
402
+ tooLong: 'Cannot have more than %{count} entry/entries',
403
+ tooShort: 'Must have at least %{count} entry/entries',
404
+ });
400
405
  if (minSetEntries) {
401
406
  setErrorMessages.push(...validators.presence(value, {
402
407
  message: `Must have at least ${minSetEntries} ${minSetEntries === 1 ? 'entry' : 'entries'}`,
403
408
  }));
404
409
  }
405
- setErrorMessages.push(...validators.length(value, {
406
- minimum: minSetEntries,
407
- maximum: maxSetEntries,
408
- tooLong: 'Cannot have more than %{count} entry/entries',
409
- tooShort: 'Must have at least %{count} entry/entries',
410
- }));
411
410
  const entries = Array.isArray(value) ? value : [];
412
411
  const repeatableSetExecutedLookups = executedLookups !== undefined &&
413
412
  typeof executedLookups !== 'boolean' &&
@@ -1 +1 @@
1
- {"version":3,"file":"validateSubmission.js","sourceRoot":"","sources":["../../../src/services/form-validation/validateSubmission.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,oBAAoB,MAAM,cAAc,CAAA;AAC/C,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,kCAAkC,EAClC,8BAA8B,GAC/B,MAAM,cAAc,CAAA;AACrB,OAAO,gCAAgC,MAAM,qCAAqC,CAAA;AAClF,OAAO,uCAAuC,MAAM,4CAA4C,CAAA;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,CAAC,MAAM,yBAAyB,GACpC,0DAA0D,CAAA;AAE5D,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,QAAQ,EACR,UAAU,EACV,8BAA8B,EAC9B,eAAe,EACf,WAAW,EACX,SAAS,GAQV;IACC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,MAAM,CAC5C,CAAC,6BAA6B,EAAE,WAAW,EAAE,EAAE;;QAC7C,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;YACzB,4CAA4C;YAC5C,KAAK,SAAS,CAAC;YACf,KAAK,aAAa,CAAC;YACnB,KAAK,OAAO,CAAC;YACb,KAAK,MAAM,CAAC;YACZ,KAAK,SAAS,CAAC;YACf,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,OAAO,6BAA6B,CAAA;YACtC,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,MAAM,6BAA6B,GACjC,8BAA8B,aAA9B,8BAA8B,uBAA9B,8BAA8B,CAAG,WAAW,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,6BAA6B,aAA7B,6BAA6B,uBAA7B,6BAA6B,CAAE,QAAQ,EAAE,CAAC;YAC5C,OAAO,6BAA6B,CAAA;QACtC,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,WAAW,CAAC,IAAI,CAAC,CAAA;QAE5C,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,+BAA+B,CAChC;oBACD,GAAG,oBAAoB,CAAC,UAAU,CAAC,KAAK,CAAC;iBAC1C,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,qBAAqB,CACtB;oBACD,GAAG,oBAAoB,CAAC,UAAU,CAAC,KAAK,CAAC;iBAC1C,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,QAAQ,WAAW,EAAE,CAAC;oBACpB,KAAK,WAAW;wBACd,MAAK;oBACP,KAAK,UAAU,CAAC;oBAChB,OAAO,CAAC,CAAC,CAAC;wBACR,MAAM,aAAa,GAAG;4BACpB,GAAG,oBAAoB,CAAC,OAAO,CAC7B,SAAS,EACT,yBAAyB,CAC1B;4BACD,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,EAClC,0CAA0C,CAC3C;yBACF,CAAA;wBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;4BACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC;gCAC7C,aAAa,CAAC,CAAC,CAAC,CAAA;wBACpB,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,0BAA0B,CAC3B;oBACD,GAAG,oBAAoB,CAAC,OAAO,CAAC;wBAC9B,WAAW;wBACX,eAAe;qBAChB,CAAC;iBACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC;oBAChE,GAAG,oBAAoB,CAAC,OAAO,CAAC;wBAC9B,WAAW;wBACX,eAAe;qBAChB,CAAC;oBACF,GAAG,oBAAoB,CAAC,WAAW,CAAC,KAAkB,CAAC;iBACxD,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,aAAa,GACjB,CAAA,6BAA6B,aAA7B,6BAA6B,uBAA7B,6BAA6B,CAAE,IAAI,MAAK,aAAa;qBACrD,6BAA6B,aAA7B,6BAA6B,uBAA7B,6BAA6B,CAAE,OAAO,CAAA;oBACpC,CAAC,CAAC,MAAA,6BAA6B,aAA7B,6BAA6B,uBAA7B,6BAA6B,CAAE,OAAO,0CAAE,MAAM;oBAChD,CAAC,CAAC,MAAA,WAAW,CAAC,OAAO,0CAAE,MAAM,CAAA;gBACjC,MAAM,yBAAyB,GAAG,0BAA0B,CAAA;gBAC5D,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CACjD,KAAK,EACL;oBACE,GAAG,WAAW;oBACd,QAAQ,EACN,CAAC,CAAC,aAAa;wBACf,CAAC,WAAW,CAAC,QAAQ,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC;iBACtD,EACD,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,UAAU,CACjE,CAAA;gBACD,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;oBAC5B,aAAa,CAAC,IAAI,CAChB,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE;wBAC1B,EAAE,EAAE,aAAa;wBACjB,OAAO,EACL,WAAW,CAAC,eAAe,IAAI,yBAAyB;qBAC3D,CAAC,CACH,CAAA;gBACH,CAAC;gBACD,aAAa,CAAC,IAAI,CAChB,GAAG,oBAAoB,CAAC,OAAO,CAAC;oBAC9B,WAAW;oBACX,eAAe;iBAChB,CAAC,CACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,KAAK,CAAC;YACX,KAAK,iBAAiB,CAAC;YACvB,KAAK,cAAc,CAAC;YACpB,KAAK,eAAe,CAAC;YACrB,KAAK,kBAAkB,CAAC;YACxB,KAAK,cAAc,CAAC;YACpB,KAAK,OAAO,CAAC;YACb,KAAK,QAAQ,CAAC;YACd,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC;oBAChE,GAAG,oBAAoB,CAAC,OAAO,CAAC;wBAC9B,WAAW;wBACX,eAAe;qBAChB,CAAC;iBACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,aAAa,GAAG,EAAE,CAAA;gBACxB,IAAI,KAAK,KAAK,IAAI,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;oBAC3C,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,UAAU,CAAC,CAAA;gBAC/D,CAAC;gBACD,aAAa,CAAC,IAAI,CAChB,GAAG,oBAAoB,CAAC,OAAO,CAAC;oBAC9B,WAAW;oBACX,eAAe;iBAChB,CAAC,CACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,KAAK,CAAC,CAAC,CAAC;gBACX,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,2BAA2B,CAC5B;oBACD,GAAG,UAAU,CAAC,eAAe,CAAC,KAAK,EAAE;wBACnC,OAAO,EAAE,aAAa;wBACtB,OAAO,EAAE,iCAAiC;qBAC3C,CAAC;oBACF,GAAG,oBAAoB,CAAC,OAAO,CAAC;wBAC9B,WAAW;wBACX,eAAe;qBAChB,CAAC;iBACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,wCAAwC,CACzC;oBACD,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC;oBACjD,GAAG,oBAAoB,CAAC,OAAO,CAAC;wBAC9B,WAAW;wBACX,eAAe;qBAChB,CAAC;iBACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,MAAM,CAAC;YACZ,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,sBAAsB,CACvB;oBACD,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE;wBAC1B,OAAO,EAAE,WAAW,CAAC,SAAS;wBAC9B,QAAQ,EACN,0DAA0D;wBAC5D,OAAO,EAAE,WAAW,CAAC,SAAS;wBAC9B,OAAO,EACL,yDAAyD;qBAC5D,CAAC;oBACF,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC;oBACjD,GAAG,oBAAoB,CAAC,OAAO,CAAC;wBAC9B,WAAW;wBACX,eAAe;qBAChB,CAAC;iBACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,6BAA6B,CAC9B;oBACD,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC;oBACjD,GAAG,oBAAoB,CAAC,OAAO,CAAC;wBAC9B,WAAW;wBACX,eAAe;qBAChB,CAAC;iBACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,+BAA+B,CAChC;oBACD,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE;wBACzB,OAAO,EAAE,2CAA2C;qBACrD,CAAC;oBACF,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC;oBACjD,GAAG,oBAAoB,CAAC,OAAO,CAAC;wBAC9B,WAAW;wBACX,eAAe;qBAChB,CAAC;iBACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,sBAAsB,CACvB;oBACD,GAAG,oBAAoB,CAAC,OAAO,CAAC;wBAC9B,WAAW;wBACX,eAAe;qBAChB,CAAC;iBACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC,GAAG,8BAA8B,CACnE;oBACE,IAAI,EAAE,WAAW,CAAC,QAAQ;oBAC1B,UAAU,EAAE,WAAW,CAAC,kBAAkB;oBAC1C,sBAAsB,EAAE,WAAW,CAAC,iBAAiB;iBACtD,EACD,QAAQ,EACR,UAAU,EACV,8BAA8B,CAC/B,CAAA;gBACD,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,8BAA8B,CAC/D;oBACE,IAAI,EAAE,WAAW,CAAC,MAAM;oBACxB,UAAU,EAAE,WAAW,CAAC,gBAAgB;oBACxC,sBAAsB,EAAE,WAAW,CAAC,eAAe;iBACpD,EACD,QAAQ,EACR,UAAU,EACV,8BAA8B,CAC/B,CAAA;gBAED,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,sBAAsB,CACvB;oBACD,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE;wBAC5B,QAAQ,EAAE,IAAI;wBACd,MAAM,EAAE,CAAC,IAAU,EAAE,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC;wBAC5D,QAAQ,EAAE,cAAc,CAAC;4BACvB,QAAQ,EAAE,IAAI;4BACd,UAAU,EAAE,kBAAkB;4BAC9B,KAAK,EAAE,QAAQ;yBAChB,CAAC;wBACF,MAAM,EAAE,cAAc,CAAC;4BACrB,QAAQ,EAAE,IAAI;4BACd,UAAU,EAAE,gBAAgB;4BAC5B,KAAK,EAAE,MAAM;yBACd,CAAC;wBACF,QAAQ,EAAE,4BAA4B;wBACtC,QAAQ,EAAE,+BAA+B;wBACzC,OAAO,EAAE,8BAA8B;qBACxC,CAAC;oBACF,GAAG,oBAAoB,CAAC,OAAO,CAAC;wBAC9B,WAAW;wBACX,eAAe;qBAChB,CAAC;iBACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC,GAAG,8BAA8B,CACnE;oBACE,IAAI,EAAE,WAAW,CAAC,QAAQ;oBAC1B,UAAU,EAAE,WAAW,CAAC,kBAAkB;oBAC1C,sBAAsB,EAAE,WAAW,CAAC,iBAAiB;iBACtD,EACD,QAAQ,EACR,UAAU,EACV,8BAA8B,CAC/B,CAAA;gBACD,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,8BAA8B,CAC/D;oBACE,IAAI,EAAE,WAAW,CAAC,MAAM;oBACxB,UAAU,EAAE,WAAW,CAAC,gBAAgB;oBACxC,sBAAsB,EAAE,WAAW,CAAC,eAAe;iBACpD,EACD,QAAQ,EACR,UAAU,EACV,8BAA8B,CAC/B,CAAA;gBAED,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,+BAA+B,CAChC;oBACD,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE;wBAC5B,MAAM,EAAE,CAAC,CAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC;wBAC1D,QAAQ,EAAE,cAAc,CAAC;4BACvB,QAAQ,EAAE,KAAK;4BACf,UAAU,EAAE,kBAAkB;4BAC9B,KAAK,EAAE,QAAQ;yBAChB,CAAC;wBACF,MAAM,EAAE,cAAc,CAAC;4BACrB,QAAQ,EAAE,KAAK;4BACf,UAAU,EAAE,gBAAgB;4BAC5B,KAAK,EAAE,MAAM;yBACd,CAAC;wBACF,QAAQ,EAAE,qCAAqC;wBAC/C,QAAQ,EAAE,wCAAwC;wBAClD,OAAO,EAAE,uCAAuC;qBACjD,CAAC;oBACF,GAAG,oBAAoB,CAAC,OAAO,CAAC;wBAC9B,WAAW;wBACX,eAAe;qBAChB,CAAC;iBACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,IAAI,eAAe,GACjB,yDAAyD,CAAA;gBAC3D,IAAI,eAAe,GACjB,sDAAsD,CAAA;gBACxD,IACE,OAAO,WAAW,CAAC,SAAS,KAAK,QAAQ;oBACzC,OAAO,WAAW,CAAC,SAAS,KAAK,QAAQ,EACzC,CAAC;oBACD,eAAe;wBACb,eAAe,GAAG,iCAAiC,WAAW,CAAC,SAAS,QAAQ,WAAW,CAAC,SAAS,EAAE,CAAA;gBAC3G,CAAC;gBAED,MAAM,aAAa,GAAG;oBACpB,GAAG,oBAAoB,CAAC,QAAQ,CAC9B,KAAK,EACL,WAAW,EACX,uBAAuB,CACxB;oBACD,GAAG,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE;wBAChC,oBAAoB,EAAE,WAAW,CAAC,SAAS;wBAC3C,uBAAuB,EAAE,eAAe;wBACxC,iBAAiB,EAAE,WAAW,CAAC,SAAS;wBACxC,oBAAoB,EAAE,eAAe;wBACrC,WAAW,EAAE,WAAW,CAAC,SAAS;wBAClC,UAAU,EAAE,6BAA6B;wBACzC,QAAQ,EAAE,4BAA4B;qBACvC,CAAC;iBACH,CAAA;gBACD,IACE,WAAW,CAAC,YAAY;oBACxB,OAAO,KAAK,KAAK,QAAQ;oBACzB,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EACpB,CAAC;oBACD,aAAa,CAAC,IAAI,CAChB,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,CAC7D,CAAA;gBACH,CAAC;gBACD,aAAa,CAAC,IAAI,CAChB,GAAG,oBAAoB,CAAC,OAAO,CAAC;oBAC9B,WAAW;oBACX,eAAe;iBAChB,CAAC,CACH,CAAA;gBACD,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,aAAa,GAAG,EAAE,CAAA;gBACxB,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;oBAC3B,aAAa,CAAC,IAAI,CAChB,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE;wBAC5B,OAAO,EAAE,0BACP,WAAW,CAAC,UACd,QAAQ,WAAW,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;qBAClD,CAAC,CACH,CAAA;gBACH,CAAC;gBACD,aAAa,CAAC,IAAI,CAChB,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE;oBAC1B,OAAO,EAAE,WAAW,CAAC,UAAU;oBAC/B,OAAO,EAAE,WAAW,CAAC,UAAU;oBAC/B,OAAO,EAAE,0CAA0C;oBACnD,QAAQ,EAAE,yCAAyC;iBACpD,CAAC,CACH,CAAA;gBAED,IACE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBACpB,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;wBAClB,OAAO,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;oBAC1D,CAAC,CAAC,EACF,CAAC;oBACD,aAAa,CAAC,IAAI,CAChB,+CAA+C,CAC7C,WAAW,CAAC,mBAAmB,IAAI,EAAE,CACtC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACf,CAAA;gBACH,CAAC;gBAED,aAAa,CAAC,IAAI,CAChB,GAAG,oBAAoB,CAAC,WAAW,CAAC,KAAkB,CAAC,CACxD,CAAA;gBAED,MAAM,OAAO,GACX,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBACrB,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;wBACnB,OAAO,6BAA6B,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;oBAClE,CAAC,CAAC,CAAA;gBACJ,IAAI,CAAC,OAAO;oBAAE,aAAa,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;gBAElE,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;gBACpE,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,aAAa,GAAG,kCAAkC,CACtD,WAAW,CAAC,aAAa,EACzB,QAAQ,EACR,UAAU,EACV,8BAA8B,CAC/B,CAAA;gBACD,MAAM,aAAa,GAAG,kCAAkC,CACtD,WAAW,CAAC,aAAa,EACzB,QAAQ,EACR,UAAU,EACV,8BAA8B,CAC/B,CAAA;gBAED,MAAM,gBAAgB,GAAG,EAAE,CAAA;gBAC3B,IAAI,aAAa,EAAE,CAAC;oBAClB,gBAAgB,CAAC,IAAI,CACnB,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE;wBAC5B,OAAO,EAAE,sBAAsB,aAAa,IAC1C,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAClC,EAAE;qBACH,CAAC,CACH,CAAA;gBACH,CAAC;gBACD,gBAAgB,CAAC,IAAI,CACnB,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE;oBAC1B,OAAO,EAAE,aAAa;oBACtB,OAAO,EAAE,aAAa;oBACtB,OAAO,EAAE,8CAA8C;oBACvD,QAAQ,EAAE,2CAA2C;iBACtD,CAAC,CACH,CAAA;gBAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;gBAEjD,MAAM,4BAA4B,GAChC,eAAe,KAAK,SAAS;oBAC7B,OAAO,eAAe,KAAK,SAAS;oBACpC,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;oBAC/B,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAC9C,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC;oBACnC,CAAC,CAAC,EAAE,CAAA;gBAER,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;oBACjE,MAAM,eAAe,GAAG,kBAAkB,CAAC;wBACzC,UAAU,EAAE,KAAK;wBACjB,QAAQ,EAAE,WAAW,CAAC,QAA2C;wBACjE,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC;4BAC1D,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC;4BACrC,CAAC,CAAC,EAAE;wBACN,8BAA8B,EAC5B,CAAA,6BAA6B,aAA7B,6BAA6B,uBAA7B,6BAA6B,CAAE,IAAI,MAAK,eAAe;4BACrD,CAAC,CAAC,6BAA6B,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;4BACzD,CAAC,CAAC,SAAS;wBACf,WAAW;wBACX,SAAS;qBACV,CAAC,CAAA;oBAEF,IAAI,eAAe,EAAE,CAAC;wBACpB,aAAa,CAAC,KAAK,CAAC,GAAG,eAAe,CAAA;oBACxC,CAAC;oBACD,OAAO,aAAa,CAAA;gBACtB,CAAC,EAAE,EAAE,CAAC,CAAA;gBAEN,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;oBACrD,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG;wBAChD,IAAI,EAAE,eAAe;wBACrB,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;wBACxB,OAAO,EAAE,WAAW;qBACrB,CAAA;gBACH,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,cAAc,GAAG,gCAAgC,CACrD,WAAW,EACX,EAAE,CACH,CAAA;gBACD,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,cAAc,CAC9D,KAAK,EACL;oBACE,WAAW;oBACX,YAAY,EAAE,cAAc;oBAC5B,8BAA8B;oBAC9B,eAAe;oBACf,WAAW;oBACX,SAAS;iBACV,CACF,CAAA;gBACD,IAAI,oBAAoB,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC;wBAC7C,oBAAoB,CAAA;gBACxB,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,UAAU,CAAC;YAChB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,cAAc,CAC9D,KAAK,EACL;oBACE,WAAW;oBACX,YAAY,EACV,WAAW,CAAC,QAA2C;oBACzD,8BAA8B;oBAC9B,eAAe;oBACf,WAAW;oBACX,SAAS;iBACV,CACF,CAAA;gBACD,IAAI,oBAAoB,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC;wBAC7C,oBAAoB,CAAA;gBACxB,CAAC;gBACD,MAAK;YACP,CAAC;YACD,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBAC/B,MAAM,cAAc,GAClB,uCAAuC,CAAC,WAAW,CAAC,CAAA;gBACtD,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,cAAc,CAC9D,KAAK,EACL;oBACE,WAAW;oBACX,YAAY,EAAE,cAAc;oBAC5B,8BAA8B;oBAC9B,eAAe;oBACf,WAAW;oBACX,SAAS;iBACV,CACF,CAAA;gBACD,IAAI,oBAAoB,EAAE,CAAC;oBACzB,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC;wBAC7C,oBAAoB,CAAA;gBACxB,CAAC;gBACD,MAAK;YACP,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,WAAW,CAAC,CAAA;YACvE,CAAC;QACH,CAAC;QAED,OAAO,6BAA6B,CAAA;IACtC,CAAC,EACD,EAAE,CACH,CAAA;IAED,IAAI,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACpC,OAAM;IACR,CAAC;IAED,OAAO,sBAAsB,CAAA;AAC/B,CAAC","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\n const setErrorMessages = []\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 setErrorMessages.push(\n ...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 )\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 { 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"]}
@@ -0,0 +1,5 @@
1
+ .ob-options__image {
2
+ border-radius: 4px;
3
+ margin-top: 8px;
4
+ margin-bottom: 4px;
5
+ }
package/dist/styles.css CHANGED
@@ -10042,6 +10042,12 @@ textarea:disabled {
10042
10042
  margin: 0 auto;
10043
10043
  }
10044
10044
 
10045
+ .ob-options__image {
10046
+ border-radius: 4px;
10047
+ margin-top: 8px;
10048
+ margin-bottom: 4px;
10049
+ }
10050
+
10045
10051
  .flatpickr-calendar {
10046
10052
  background: transparent;
10047
10053
  opacity: 0;
package/dist/styles.scss CHANGED
@@ -143,6 +143,7 @@ $section-padding-mobile: $section-padding-mobile-y $section-padding-mobile-x;
143
143
  @import './styles/abn.scss';
144
144
  @import './styles/validation-errors-card.scss';
145
145
  @import './styles/calendar-booking-form.scss';
146
+ @import './styles/option-buttons.scss';
146
147
  //
147
148
  // Third Party
148
149
  //
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oneblink/apps-react",
3
3
  "description": "Helper functions for OneBlink apps in ReactJS.",
4
- "version": "6.11.0-beta.6",
4
+ "version": "6.11.0-beta.8",
5
5
  "author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
6
6
  "bugs": {
7
7
  "url": "https://github.com/oneblink/apps-react/issues"