@oneblink/apps-react 2.10.0-beta.1 → 2.10.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/renderer/AutocompleteDropdown.d.ts +3 -2
- package/dist/components/renderer/AutocompleteDropdown.js +12 -5
- package/dist/components/renderer/AutocompleteDropdown.js.map +1 -1
- package/dist/components/renderer/OneBlinkFormElements.js +49 -36
- package/dist/components/renderer/OneBlinkFormElements.js.map +1 -1
- package/dist/form-elements/FormElementABN.d.ts +3 -3
- package/dist/form-elements/FormElementABN.js +1 -2
- package/dist/form-elements/FormElementABN.js.map +1 -1
- package/dist/form-elements/FormElementAutocomplete.d.ts +2 -2
- package/dist/form-elements/FormElementAutocomplete.js +4 -4
- package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
- package/dist/form-elements/FormElementBSB.d.ts +3 -3
- package/dist/form-elements/FormElementBSB.js +1 -3
- package/dist/form-elements/FormElementBSB.js.map +1 -1
- package/dist/form-elements/FormElementBarcodeScanner.d.ts +3 -3
- package/dist/form-elements/FormElementBarcodeScanner.js +1 -2
- package/dist/form-elements/FormElementBarcodeScanner.js.map +1 -1
- package/dist/form-elements/FormElementBoolean.d.ts +3 -3
- package/dist/form-elements/FormElementBoolean.js +1 -3
- package/dist/form-elements/FormElementBoolean.js.map +1 -1
- package/dist/form-elements/FormElementCamera.d.ts +3 -3
- package/dist/form-elements/FormElementCamera.js +1 -2
- package/dist/form-elements/FormElementCamera.js.map +1 -1
- package/dist/form-elements/FormElementCheckBoxes.js +3 -1
- package/dist/form-elements/FormElementCheckBoxes.js.map +1 -1
- package/dist/form-elements/FormElementCivicaStreetName.d.ts +3 -3
- package/dist/form-elements/FormElementCivicaStreetName.js +2 -2
- package/dist/form-elements/FormElementCivicaStreetName.js.map +1 -1
- package/dist/form-elements/FormElementCompliance.d.ts +3 -3
- package/dist/form-elements/FormElementCompliance.js +3 -5
- package/dist/form-elements/FormElementCompliance.js.map +1 -1
- package/dist/form-elements/FormElementDate.d.ts +3 -3
- package/dist/form-elements/FormElementDate.js +1 -3
- package/dist/form-elements/FormElementDate.js.map +1 -1
- package/dist/form-elements/FormElementDateTime.d.ts +3 -3
- package/dist/form-elements/FormElementDateTime.js +1 -3
- package/dist/form-elements/FormElementDateTime.js.map +1 -1
- package/dist/form-elements/FormElementEmail.d.ts +3 -3
- package/dist/form-elements/FormElementEmail.js +1 -3
- package/dist/form-elements/FormElementEmail.js.map +1 -1
- package/dist/form-elements/FormElementFiles.d.ts +3 -3
- package/dist/form-elements/FormElementFiles.js +2 -2
- package/dist/form-elements/FormElementFiles.js.map +1 -1
- package/dist/form-elements/FormElementGeoscapeAddress.d.ts +3 -3
- package/dist/form-elements/FormElementGeoscapeAddress.js +2 -2
- package/dist/form-elements/FormElementGeoscapeAddress.js.map +1 -1
- package/dist/form-elements/FormElementLocation.d.ts +3 -3
- package/dist/form-elements/FormElementLocation.js +1 -2
- package/dist/form-elements/FormElementLocation.js.map +1 -1
- package/dist/form-elements/FormElementNumber.d.ts +3 -3
- package/dist/form-elements/FormElementNumber.js +1 -3
- package/dist/form-elements/FormElementNumber.js.map +1 -1
- package/dist/form-elements/FormElementPointAddress.d.ts +3 -3
- package/dist/form-elements/FormElementPointAddress.js +2 -2
- package/dist/form-elements/FormElementPointAddress.js.map +1 -1
- package/dist/form-elements/FormElementRadio.d.ts +3 -3
- package/dist/form-elements/FormElementRadio.js +1 -3
- package/dist/form-elements/FormElementRadio.js.map +1 -1
- package/dist/form-elements/FormElementRepeatableSet.d.ts +3 -3
- package/dist/form-elements/FormElementRepeatableSet.js +18 -12
- package/dist/form-elements/FormElementRepeatableSet.js.map +1 -1
- package/dist/form-elements/FormElementSection.js +10 -12
- package/dist/form-elements/FormElementSection.js.map +1 -1
- package/dist/form-elements/FormElementSelect.d.ts +3 -3
- package/dist/form-elements/FormElementSelect.js +1 -3
- package/dist/form-elements/FormElementSelect.js.map +1 -1
- package/dist/form-elements/FormElementSignature.d.ts +3 -2
- package/dist/form-elements/FormElementSignature.js +1 -3
- package/dist/form-elements/FormElementSignature.js.map +1 -1
- package/dist/form-elements/FormElementTelephone.d.ts +3 -3
- package/dist/form-elements/FormElementTelephone.js +1 -3
- package/dist/form-elements/FormElementTelephone.js.map +1 -1
- package/dist/form-elements/FormElementText.d.ts +3 -3
- package/dist/form-elements/FormElementText.js +1 -3
- package/dist/form-elements/FormElementText.js.map +1 -1
- package/dist/form-elements/FormElementTextarea.d.ts +3 -3
- package/dist/form-elements/FormElementTextarea.js +1 -3
- package/dist/form-elements/FormElementTextarea.js.map +1 -1
- package/dist/form-elements/FormElementTime.d.ts +3 -3
- package/dist/form-elements/FormElementTime.js +1 -3
- package/dist/form-elements/FormElementTime.js.map +1 -1
- package/dist/hooks/attachments/useAttachments.d.ts +2 -3
- package/dist/hooks/attachments/useAttachments.js +1 -4
- package/dist/hooks/attachments/useAttachments.js.map +1 -1
- package/dist/hooks/useValidationClass.d.ts +9 -0
- package/dist/hooks/useValidationClass.js +18 -0
- package/dist/hooks/useValidationClass.js.map +1 -0
- package/dist/types/form.d.ts +4 -0
- package/dist/types/form.js.map +1 -1
- package/package.json +1 -1
@@ -1,4 +1,5 @@
|
|
1
1
|
/// <reference types="react" />
|
2
|
+
import { IsDirtyProps } from '../../types/form';
|
2
3
|
declare type AutocompleteOption<T> = {
|
3
4
|
label: string;
|
4
5
|
value: string;
|
@@ -20,7 +21,7 @@ declare type Props<T> = {
|
|
20
21
|
onChangeValue: (newValue: string | undefined, data?: T) => Promise<void> | void;
|
21
22
|
onChangeLabel: (newLabel: string) => void;
|
22
23
|
onSearch: (label: string, abortSignal: AbortSignal) => Promise<AutocompleteOption<T>[]>;
|
23
|
-
};
|
24
|
-
declare function AutocompleteDropdown<T>({ id, label, value, placeholder, required, disabled, validationMessage, displayValidationMessage, searchDebounceMs, searchMinCharacters, isLoading, hasError, onChangeValue, onChangeLabel, onSearch, }: Props<T>): JSX.Element;
|
24
|
+
} & IsDirtyProps;
|
25
|
+
declare function AutocompleteDropdown<T>({ id, label, value, placeholder, required, disabled, validationMessage, displayValidationMessage, searchDebounceMs, searchMinCharacters, isLoading, hasError, onChangeValue, onChangeLabel, onSearch, isDirty, setIsDirty, }: Props<T>): JSX.Element;
|
25
26
|
declare const _default: typeof AutocompleteDropdown;
|
26
27
|
export default _default;
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import clsx from 'clsx';
|
3
|
-
import useBooleanState from '../../hooks/useBooleanState';
|
4
3
|
import { Sentry } from '@oneblink/apps';
|
5
|
-
|
4
|
+
import useBooleanState from '../../hooks/useBooleanState';
|
5
|
+
function AutocompleteDropdown({ id, label, value, placeholder, required, disabled, validationMessage, displayValidationMessage, searchDebounceMs, searchMinCharacters, isLoading, hasError, onChangeValue, onChangeLabel, onSearch, isDirty, setIsDirty, }) {
|
6
6
|
const optionsContainerElement = React.useRef(null);
|
7
|
-
const [isDirty, setIsDirty] = React.useState(false);
|
8
7
|
const [currentFocusedOptionIndex, setCurrentFocusedOptionIndex] = React.useState(0);
|
9
8
|
const [options, setOptions] = React.useState([]);
|
10
9
|
const [error, setError] = React.useState(null);
|
@@ -28,7 +27,7 @@ function AutocompleteDropdown({ id, label, value, placeholder, required, disable
|
|
28
27
|
// When moving away from the input, if this is no value remove
|
29
28
|
// the label to show the user they have not selected a value
|
30
29
|
const handleBlur = React.useCallback(() => {
|
31
|
-
setIsDirty(
|
30
|
+
setIsDirty();
|
32
31
|
setError(null);
|
33
32
|
onClose();
|
34
33
|
if (!value && Array.isArray(options)) {
|
@@ -46,7 +45,15 @@ function AutocompleteDropdown({ id, label, value, placeholder, required, disable
|
|
46
45
|
console.log('Removing label after blurring away from autocomplete');
|
47
46
|
onChangeLabel('');
|
48
47
|
}
|
49
|
-
}, [
|
48
|
+
}, [
|
49
|
+
label,
|
50
|
+
onChangeLabel,
|
51
|
+
onClose,
|
52
|
+
onSelectOption,
|
53
|
+
options,
|
54
|
+
value,
|
55
|
+
setIsDirty,
|
56
|
+
]);
|
50
57
|
const onKeyDown = React.useCallback((event) => {
|
51
58
|
if (!options) {
|
52
59
|
return;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AutocompleteDropdown.js","sourceRoot":"","sources":["../../../src/components/renderer/AutocompleteDropdown.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\n\nimport useBooleanState from '../../hooks/useBooleanState'\nimport { Sentry } from '@oneblink/apps'\n\ntype AutocompleteOption<T> = {\n label: string\n value: string\n data?: T\n}\n\ntype Props<T> = {\n id: string\n label: string\n value: unknown | undefined\n placeholder: string | undefined\n required: boolean | undefined\n disabled: boolean | undefined\n isLoading?: boolean\n hasError?: boolean\n validationMessage: string | undefined\n displayValidationMessage: boolean\n searchDebounceMs: number\n searchMinCharacters: number\n onChangeValue: (\n newValue: string | undefined,\n data?: T,\n ) => Promise<void> | void\n onChangeLabel: (newLabel: string) => void\n onSearch: (\n label: string,\n abortSignal: AbortSignal,\n ) => Promise<AutocompleteOption<T>[]>\n}\n\nfunction AutocompleteDropdown<T>({\n id,\n label,\n value,\n placeholder,\n required,\n disabled,\n validationMessage,\n displayValidationMessage,\n searchDebounceMs,\n searchMinCharacters,\n isLoading,\n hasError,\n onChangeValue,\n onChangeLabel,\n onSearch,\n}: Props<T>) {\n const optionsContainerElement = React.useRef<HTMLDivElement>(null)\n const [isDirty, setIsDirty] = React.useState(false)\n const [currentFocusedOptionIndex, setCurrentFocusedOptionIndex] =\n React.useState(0)\n const [options, setOptions] = React.useState<AutocompleteOption<T>[]>([])\n const [error, setError] = React.useState<Error | null>(null)\n const [isFetchingOptions, setIsFetchingOptions] = React.useState(false)\n const [isOpen, onOpen, onClose] = useBooleanState(false)\n\n const onSelectOption = React.useCallback(\n (option: AutocompleteOption<T>) => {\n onChangeLabel(option.label)\n onChangeValue(option.value, option.data)\n onClose()\n },\n [onChangeLabel, onChangeValue, onClose],\n )\n\n const handleClickOption = React.useCallback(\n (event, option: AutocompleteOption<T>) => {\n console.log('Selected element option in autocomplete', option)\n\n event.preventDefault()\n event.stopPropagation()\n\n onSelectOption(option)\n },\n [onSelectOption],\n )\n\n const onFocus = React.useCallback(() => {\n setCurrentFocusedOptionIndex(0)\n onOpen()\n }, [onOpen])\n\n // When moving away from the input, if this is no value remove\n // the label to show the user they have not selected a value\n const handleBlur = React.useCallback(() => {\n setIsDirty(true)\n setError(null)\n onClose()\n\n if (!value && Array.isArray(options)) {\n // If there is no option currently selected but the typed in label\n // matches an option's label, set that option as the value, otherwise remove label\n if (label) {\n const lowerCase = label.toLowerCase()\n const option = options.find(\n (option) => option.label.toLowerCase() === lowerCase,\n )\n if (option) {\n console.log('Setting value after blurring away from autocomplete')\n onSelectOption(option)\n return\n }\n }\n console.log('Removing label after blurring away from autocomplete')\n onChangeLabel('')\n }\n }, [label, onChangeLabel, onClose, onSelectOption, options, value])\n\n const onKeyDown = React.useCallback(\n (event) => {\n if (!options) {\n return\n }\n const enterPressed = event.keyCode === 13\n const upArrowPressed = event.keyCode === 38\n const downArrowPressed = event.keyCode === 40\n if (!upArrowPressed && !downArrowPressed && !enterPressed) {\n return\n }\n\n event.preventDefault()\n\n const previousFocusedOptionIndex = currentFocusedOptionIndex\n let nextFocusedOptionIndex = currentFocusedOptionIndex\n if (upArrowPressed) {\n nextFocusedOptionIndex = Math.max(0, currentFocusedOptionIndex - 1)\n } else if (downArrowPressed) {\n nextFocusedOptionIndex = Math.min(\n options.length - 1,\n currentFocusedOptionIndex + 1,\n )\n } else if (enterPressed) {\n const option = options[nextFocusedOptionIndex]\n if (option) {\n onSelectOption(option)\n }\n }\n\n // If the index has changed, need to ensure the active option is visible\n if (\n previousFocusedOptionIndex !== nextFocusedOptionIndex &&\n optionsContainerElement.current\n ) {\n const activeStepElement = optionsContainerElement.current.querySelector(\n `.ob-autocomplete__drop-down-item-${nextFocusedOptionIndex}`,\n )\n if (activeStepElement) {\n activeStepElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start',\n })\n }\n setCurrentFocusedOptionIndex(nextFocusedOptionIndex)\n }\n },\n [currentFocusedOptionIndex, options, onSelectOption],\n )\n\n const handleChangeLabel = React.useCallback(\n (e) => {\n const newLabel = e.target.value\n onOpen()\n setCurrentFocusedOptionIndex(0)\n\n // Remove value when changing label\n onChangeValue(undefined)\n onChangeLabel(newLabel)\n },\n [onChangeLabel, onChangeValue, onOpen],\n )\n\n React.useEffect(() => {\n setError(null)\n\n if (!isOpen || label.length < searchMinCharacters) {\n setIsFetchingOptions(false)\n return\n }\n\n setIsFetchingOptions(true)\n\n let ignore = false\n const abortController = new AbortController()\n\n const timeoutId = setTimeout(async () => {\n let newOptions: AutocompleteOption<T>[] = []\n let newError = null\n\n try {\n newOptions = await onSearch(label, abortController.signal)\n } catch (error) {\n // Cancelling will throw an error.\n if (!abortController.signal.aborted) {\n console.warn('Error while fetching autocomplete options', error)\n Sentry.captureException(error)\n newError = error as Error\n }\n }\n if (!ignore) {\n setError(newError)\n setOptions(newOptions)\n setIsFetchingOptions(false)\n }\n }, searchDebounceMs)\n\n return () => {\n ignore = true\n clearTimeout(timeoutId)\n abortController.abort()\n }\n }, [isOpen, label, onSearch, searchDebounceMs, searchMinCharacters])\n\n const isShowingLoading = isFetchingOptions || !!isLoading\n const isShowingValid = !isShowingLoading && value !== undefined\n const isShowingError = !isShowingLoading && !!hasError\n\n return (\n <>\n <div\n className={clsx('dropdown', {\n 'is-active': isOpen && Array.isArray(options),\n })}\n >\n <div className=\"field\">\n <div\n className={clsx(\n 'cypress-autocomplete-field-control control is-expanded',\n {\n 'is-loading': isShowingLoading,\n 'has-icons-right': isShowingValid || isShowingError,\n },\n )}\n >\n <input\n type=\"text\"\n placeholder={placeholder}\n id={id}\n autoComplete=\"off\"\n className=\"cypress-autocomplete-control input ob-input\"\n required={required}\n value={label}\n disabled={disabled}\n onFocus={onFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n onChange={handleChangeLabel}\n />\n {isShowingValid && (\n <span className=\" ob-input-icon icon is-small is-right\">\n <i className=\"material-icons is-size-5 has-text-success\">\n check\n </i>\n </span>\n )}\n {isShowingError && (\n <span className=\" ob-input-icon icon is-small is-right\">\n <i className=\"material-icons is-size-5 has-text-danger\">\n error\n </i>\n </span>\n )}\n </div>\n </div>\n\n <div className=\"dropdown-menu\">\n <div\n ref={optionsContainerElement}\n className=\"ob-autocomplete__dropdown-content dropdown-content cypress-autocomplete-dropdown-content\"\n >\n {error ? (\n <a className=\"dropdown-item cypress-autocomplete-error ob-autocomplete__drop-down-item-error\">\n <span className=\"has-text-danger\">{error.message}</span>\n </a>\n ) : label.length < searchMinCharacters ? (\n <a className=\"dropdown-item cypress-max-characters ob-autocomplete__drop-down-item-max-characters\">\n <i>\n Enter at least {searchMinCharacters} character(s) to search\n </i>\n </a>\n ) : isShowingLoading ? (\n <a className=\"dropdown-item cypress-searching-options ob-autocomplete__drop-down-item-searching\">\n <i>Searching...</i>\n </a>\n ) : options && options.length ? (\n options.map((option, index) => (\n <a\n key={option.value}\n className={clsx(\n `dropdown-item cypress-autocomplete-dropdown-item ob-autocomplete__drop-down-item-${index}`,\n {\n 'is-active': currentFocusedOptionIndex === index,\n },\n )}\n onMouseDown={(e) => handleClickOption(e, option)}\n dangerouslySetInnerHTML={{\n __html: highlightLabel(option.label, label),\n }}\n />\n ))\n ) : (\n <a className=\"dropdown-item cypress-no-matches-found ob-autocomplete__drop-down-item-no-matches\">\n <i>No matches found</i>\n </a>\n )}\n </div>\n </div>\n </div>\n\n {(isDirty || displayValidationMessage) &&\n !!validationMessage &&\n !isShowingLoading && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-validation-message\">\n {validationMessage}\n </div>\n </div>\n )}\n </>\n )\n}\n\nexport default React.memo(AutocompleteDropdown) as typeof AutocompleteDropdown\n\nfunction highlightLabel(text: string, phrase: string) {\n if (phrase) {\n text = text.replace(\n new RegExp(\n '(' +\n phrase.replace(\n /[`~!@#$%^&*()_|+\\-=?;:'\",.<>{}[\\]\\\\/]/gi,\n (char: string) => `\\\\${char}`,\n ) +\n ')',\n 'gi',\n ),\n '<b>$1</b>',\n )\n }\n\n return text\n}\n"]}
|
1
|
+
{"version":3,"file":"AutocompleteDropdown.js","sourceRoot":"","sources":["../../../src/components/renderer/AutocompleteDropdown.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport { Sentry } from '@oneblink/apps'\n\nimport useBooleanState from '../../hooks/useBooleanState'\nimport { IsDirtyProps } from '../../types/form'\n\ntype AutocompleteOption<T> = {\n label: string\n value: string\n data?: T\n}\n\ntype Props<T> = {\n id: string\n label: string\n value: unknown | undefined\n placeholder: string | undefined\n required: boolean | undefined\n disabled: boolean | undefined\n isLoading?: boolean\n hasError?: boolean\n validationMessage: string | undefined\n displayValidationMessage: boolean\n searchDebounceMs: number\n searchMinCharacters: number\n onChangeValue: (\n newValue: string | undefined,\n data?: T,\n ) => Promise<void> | void\n onChangeLabel: (newLabel: string) => void\n onSearch: (\n label: string,\n abortSignal: AbortSignal,\n ) => Promise<AutocompleteOption<T>[]>\n} & IsDirtyProps\n\nfunction AutocompleteDropdown<T>({\n id,\n label,\n value,\n placeholder,\n required,\n disabled,\n validationMessage,\n displayValidationMessage,\n searchDebounceMs,\n searchMinCharacters,\n isLoading,\n hasError,\n onChangeValue,\n onChangeLabel,\n onSearch,\n isDirty,\n setIsDirty,\n}: Props<T>) {\n const optionsContainerElement = React.useRef<HTMLDivElement>(null)\n const [currentFocusedOptionIndex, setCurrentFocusedOptionIndex] =\n React.useState(0)\n const [options, setOptions] = React.useState<AutocompleteOption<T>[]>([])\n const [error, setError] = React.useState<Error | null>(null)\n const [isFetchingOptions, setIsFetchingOptions] = React.useState(false)\n const [isOpen, onOpen, onClose] = useBooleanState(false)\n\n const onSelectOption = React.useCallback(\n (option: AutocompleteOption<T>) => {\n onChangeLabel(option.label)\n onChangeValue(option.value, option.data)\n onClose()\n },\n [onChangeLabel, onChangeValue, onClose],\n )\n\n const handleClickOption = React.useCallback(\n (event, option: AutocompleteOption<T>) => {\n console.log('Selected element option in autocomplete', option)\n\n event.preventDefault()\n event.stopPropagation()\n\n onSelectOption(option)\n },\n [onSelectOption],\n )\n\n const onFocus = React.useCallback(() => {\n setCurrentFocusedOptionIndex(0)\n onOpen()\n }, [onOpen])\n\n // When moving away from the input, if this is no value remove\n // the label to show the user they have not selected a value\n const handleBlur = React.useCallback(() => {\n setIsDirty()\n setError(null)\n onClose()\n\n if (!value && Array.isArray(options)) {\n // If there is no option currently selected but the typed in label\n // matches an option's label, set that option as the value, otherwise remove label\n if (label) {\n const lowerCase = label.toLowerCase()\n const option = options.find(\n (option) => option.label.toLowerCase() === lowerCase,\n )\n if (option) {\n console.log('Setting value after blurring away from autocomplete')\n onSelectOption(option)\n return\n }\n }\n console.log('Removing label after blurring away from autocomplete')\n onChangeLabel('')\n }\n }, [\n label,\n onChangeLabel,\n onClose,\n onSelectOption,\n options,\n value,\n setIsDirty,\n ])\n\n const onKeyDown = React.useCallback(\n (event) => {\n if (!options) {\n return\n }\n const enterPressed = event.keyCode === 13\n const upArrowPressed = event.keyCode === 38\n const downArrowPressed = event.keyCode === 40\n if (!upArrowPressed && !downArrowPressed && !enterPressed) {\n return\n }\n\n event.preventDefault()\n\n const previousFocusedOptionIndex = currentFocusedOptionIndex\n let nextFocusedOptionIndex = currentFocusedOptionIndex\n if (upArrowPressed) {\n nextFocusedOptionIndex = Math.max(0, currentFocusedOptionIndex - 1)\n } else if (downArrowPressed) {\n nextFocusedOptionIndex = Math.min(\n options.length - 1,\n currentFocusedOptionIndex + 1,\n )\n } else if (enterPressed) {\n const option = options[nextFocusedOptionIndex]\n if (option) {\n onSelectOption(option)\n }\n }\n\n // If the index has changed, need to ensure the active option is visible\n if (\n previousFocusedOptionIndex !== nextFocusedOptionIndex &&\n optionsContainerElement.current\n ) {\n const activeStepElement = optionsContainerElement.current.querySelector(\n `.ob-autocomplete__drop-down-item-${nextFocusedOptionIndex}`,\n )\n if (activeStepElement) {\n activeStepElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start',\n })\n }\n setCurrentFocusedOptionIndex(nextFocusedOptionIndex)\n }\n },\n [currentFocusedOptionIndex, options, onSelectOption],\n )\n\n const handleChangeLabel = React.useCallback(\n (e) => {\n const newLabel = e.target.value\n onOpen()\n setCurrentFocusedOptionIndex(0)\n\n // Remove value when changing label\n onChangeValue(undefined)\n onChangeLabel(newLabel)\n },\n [onChangeLabel, onChangeValue, onOpen],\n )\n\n React.useEffect(() => {\n setError(null)\n\n if (!isOpen || label.length < searchMinCharacters) {\n setIsFetchingOptions(false)\n return\n }\n\n setIsFetchingOptions(true)\n\n let ignore = false\n const abortController = new AbortController()\n\n const timeoutId = setTimeout(async () => {\n let newOptions: AutocompleteOption<T>[] = []\n let newError = null\n\n try {\n newOptions = await onSearch(label, abortController.signal)\n } catch (error) {\n // Cancelling will throw an error.\n if (!abortController.signal.aborted) {\n console.warn('Error while fetching autocomplete options', error)\n Sentry.captureException(error)\n newError = error as Error\n }\n }\n if (!ignore) {\n setError(newError)\n setOptions(newOptions)\n setIsFetchingOptions(false)\n }\n }, searchDebounceMs)\n\n return () => {\n ignore = true\n clearTimeout(timeoutId)\n abortController.abort()\n }\n }, [isOpen, label, onSearch, searchDebounceMs, searchMinCharacters])\n\n const isShowingLoading = isFetchingOptions || !!isLoading\n const isShowingValid = !isShowingLoading && value !== undefined\n const isShowingError = !isShowingLoading && !!hasError\n\n return (\n <>\n <div\n className={clsx('dropdown', {\n 'is-active': isOpen && Array.isArray(options),\n })}\n >\n <div className=\"field\">\n <div\n className={clsx(\n 'cypress-autocomplete-field-control control is-expanded',\n {\n 'is-loading': isShowingLoading,\n 'has-icons-right': isShowingValid || isShowingError,\n },\n )}\n >\n <input\n type=\"text\"\n placeholder={placeholder}\n id={id}\n autoComplete=\"off\"\n className=\"cypress-autocomplete-control input ob-input\"\n required={required}\n value={label}\n disabled={disabled}\n onFocus={onFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n onChange={handleChangeLabel}\n />\n {isShowingValid && (\n <span className=\" ob-input-icon icon is-small is-right\">\n <i className=\"material-icons is-size-5 has-text-success\">\n check\n </i>\n </span>\n )}\n {isShowingError && (\n <span className=\" ob-input-icon icon is-small is-right\">\n <i className=\"material-icons is-size-5 has-text-danger\">\n error\n </i>\n </span>\n )}\n </div>\n </div>\n\n <div className=\"dropdown-menu\">\n <div\n ref={optionsContainerElement}\n className=\"ob-autocomplete__dropdown-content dropdown-content cypress-autocomplete-dropdown-content\"\n >\n {error ? (\n <a className=\"dropdown-item cypress-autocomplete-error ob-autocomplete__drop-down-item-error\">\n <span className=\"has-text-danger\">{error.message}</span>\n </a>\n ) : label.length < searchMinCharacters ? (\n <a className=\"dropdown-item cypress-max-characters ob-autocomplete__drop-down-item-max-characters\">\n <i>\n Enter at least {searchMinCharacters} character(s) to search\n </i>\n </a>\n ) : isShowingLoading ? (\n <a className=\"dropdown-item cypress-searching-options ob-autocomplete__drop-down-item-searching\">\n <i>Searching...</i>\n </a>\n ) : options && options.length ? (\n options.map((option, index) => (\n <a\n key={option.value}\n className={clsx(\n `dropdown-item cypress-autocomplete-dropdown-item ob-autocomplete__drop-down-item-${index}`,\n {\n 'is-active': currentFocusedOptionIndex === index,\n },\n )}\n onMouseDown={(e) => handleClickOption(e, option)}\n dangerouslySetInnerHTML={{\n __html: highlightLabel(option.label, label),\n }}\n />\n ))\n ) : (\n <a className=\"dropdown-item cypress-no-matches-found ob-autocomplete__drop-down-item-no-matches\">\n <i>No matches found</i>\n </a>\n )}\n </div>\n </div>\n </div>\n\n {(isDirty || displayValidationMessage) &&\n !!validationMessage &&\n !isShowingLoading && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-validation-message\">\n {validationMessage}\n </div>\n </div>\n )}\n </>\n )\n}\n\nexport default React.memo(AutocompleteDropdown) as typeof AutocompleteDropdown\n\nfunction highlightLabel(text: string, phrase: string) {\n if (phrase) {\n text = text.replace(\n new RegExp(\n '(' +\n phrase.replace(\n /[`~!@#$%^&*()_|+\\-=?;:'\",.<>{}[\\]\\\\/]/gi,\n (char: string) => `\\\\${char}`,\n ) +\n ')',\n 'gi',\n ),\n '<b>$1</b>',\n )\n }\n\n return text\n}\n"]}
|
@@ -37,6 +37,7 @@ import FormElementCivicaStreetName from '../../form-elements/FormElementCivicaSt
|
|
37
37
|
import FormElementCivicaNameRecord from '../../form-elements/FormElementCivicaNameRecord';
|
38
38
|
import FormElementFreshdeskDependentField from '../../form-elements/FormElementFreshdeskDependentField';
|
39
39
|
import { FormSubmissionModelContextProvider } from '../../hooks/useFormSubmissionModelContext';
|
40
|
+
import useBooleanState from '../../hooks/useBooleanState';
|
40
41
|
function OneBlinkFormElements({ formId, elements, isEven, idPrefix, displayValidationMessages, formElementsValidation, formElementsConditionallyShown, onChange, onLookup, model, parentElement, }) {
|
41
42
|
return (React.createElement(FormSubmissionModelContextProvider, { elements: parentElement.elements, model: model, formElementsConditionallyShown: formElementsConditionallyShown }, elements.map((element) => {
|
42
43
|
var _a, _b;
|
@@ -51,20 +52,32 @@ function OneBlinkFormElements({ formId, elements, isEven, idPrefix, displayValid
|
|
51
52
|
((_b = formElementsConditionallyShown === null || formElementsConditionallyShown === void 0 ? void 0 : formElementsConditionallyShown[element.name]) === null || _b === void 0 ? void 0 : _b.isHidden)) {
|
52
53
|
return null;
|
53
54
|
}
|
54
|
-
|
55
|
-
if (displayValidationMessages && !('elements' in element)) {
|
56
|
-
validationClass = (formElementsValidation === null || formElementsValidation === void 0 ? void 0 : formElementsValidation[element.name])
|
57
|
-
? 'ob-element__invalid'
|
58
|
-
: 'ob-element__valid';
|
59
|
-
}
|
60
|
-
return (React.createElement("div", { key: element.id, id: element.id, className: clsx('ob-element cypress-element-container', element.customCssClasses
|
61
|
-
? element.customCssClasses.join(' ')
|
62
|
-
: '', validationClass), "data-cypress-element-name": element.name, "data-ob-name": element.name },
|
63
|
-
React.createElement(FormElementSwitch, { formId: formId, element: element, value: model[element.name], displayValidationMessage: displayValidationMessages, isEven: isEven, id: `${idPrefix}${element.name}`, formElementConditionallyShown: formElementsConditionallyShown === null || formElementsConditionallyShown === void 0 ? void 0 : formElementsConditionallyShown[element.name], formElementValidation: formElementsValidation === null || formElementsValidation === void 0 ? void 0 : formElementsValidation[element.name], onChange: onChange, onLookup: onLookup })));
|
55
|
+
return (React.createElement(FormElementSwitchContainer, { key: element.id, formId: formId, element: element, value: model[element.name], displayValidationMessage: displayValidationMessages, isEven: isEven, id: `${idPrefix}${element.name}`, formElementConditionallyShown: formElementsConditionallyShown === null || formElementsConditionallyShown === void 0 ? void 0 : formElementsConditionallyShown[element.name], formElementValidation: formElementsValidation === null || formElementsValidation === void 0 ? void 0 : formElementsValidation[element.name], onChange: onChange, onLookup: onLookup }));
|
64
56
|
})));
|
65
57
|
}
|
66
58
|
export default React.memo(OneBlinkFormElements);
|
67
|
-
|
59
|
+
function FormElementSwitchContainer(props) {
|
60
|
+
const { element, formElementValidation, displayValidationMessage } = props;
|
61
|
+
const [isDirty, setIsDirty] = useBooleanState(false);
|
62
|
+
const getValidationClass = () => {
|
63
|
+
if (!('elements' in element)) {
|
64
|
+
if (!formElementValidation) {
|
65
|
+
return 'ob-element__valid';
|
66
|
+
}
|
67
|
+
if (isDirty || displayValidationMessage) {
|
68
|
+
return 'ob-element__invalid';
|
69
|
+
}
|
70
|
+
}
|
71
|
+
};
|
72
|
+
const validationClassName = getValidationClass();
|
73
|
+
if (element.type === 'page' || element.type === 'section') {
|
74
|
+
return null;
|
75
|
+
}
|
76
|
+
return (React.createElement("div", { id: element.id, className: clsx('ob-element cypress-element-container', element.customCssClasses ? element.customCssClasses.join(' ') : '', validationClassName), "data-cypress-element-name": element.name, "data-ob-name": element.name },
|
77
|
+
React.createElement(FormElementSwitch, { ...props, isDirty: isDirty, setIsDirty: setIsDirty })));
|
78
|
+
}
|
79
|
+
const FormElementSwitch = React.memo(function OneBlinkFormElement({ formId, element, value, displayValidationMessage, formElementValidation, formElementConditionallyShown, isEven, id, onChange, onLookup, isDirty, setIsDirty, }) {
|
80
|
+
const dirtyProps = React.useMemo(() => ({ isDirty, setIsDirty }), [isDirty, setIsDirty]);
|
68
81
|
const conditionallyShownOptionsElement = (formElementConditionallyShown === null || formElementConditionallyShown === void 0 ? void 0 : formElementConditionallyShown.type) === 'formElement'
|
69
82
|
? formElementConditionallyShown
|
70
83
|
: undefined;
|
@@ -80,71 +93,71 @@ const FormElementSwitch = React.memo(function OneBlinkFormElement({ formId, elem
|
|
80
93
|
}
|
81
94
|
case 'date': {
|
82
95
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
83
|
-
React.createElement(FormElementDate, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
96
|
+
React.createElement(FormElementDate, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
84
97
|
}
|
85
98
|
case 'email': {
|
86
99
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
87
|
-
React.createElement(FormElementEmail, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
100
|
+
React.createElement(FormElementEmail, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
88
101
|
}
|
89
102
|
case 'text': {
|
90
103
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
91
|
-
React.createElement(FormElementText, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
104
|
+
React.createElement(FormElementText, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
92
105
|
}
|
93
106
|
case 'abn': {
|
94
107
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
95
|
-
React.createElement(FormElementABN, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
108
|
+
React.createElement(FormElementABN, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
96
109
|
}
|
97
110
|
case 'bsb': {
|
98
111
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
99
|
-
React.createElement(FormElementBSB, { id: id, formId: formId, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
112
|
+
React.createElement(FormElementBSB, { id: id, formId: formId, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
100
113
|
}
|
101
114
|
case 'barcodeScanner': {
|
102
115
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
103
|
-
React.createElement(FormElementBarcodeScanner, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
116
|
+
React.createElement(FormElementBarcodeScanner, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
104
117
|
}
|
105
118
|
case 'textarea': {
|
106
119
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
107
|
-
React.createElement(FormElementTextarea, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
120
|
+
React.createElement(FormElementTextarea, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
108
121
|
}
|
109
122
|
case 'number': {
|
110
123
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
111
|
-
React.createElement(FormElementNumber, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
124
|
+
React.createElement(FormElementNumber, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
112
125
|
}
|
113
126
|
case 'telephone': {
|
114
127
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
115
|
-
React.createElement(FormElementTelephone, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
128
|
+
React.createElement(FormElementTelephone, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
116
129
|
}
|
117
130
|
case 'autocomplete': {
|
118
131
|
return (React.createElement(LookupNotification, { autoLookupValue: value, element: element, onLookup: onLookup },
|
119
|
-
React.createElement(FormElementAutocomplete, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, conditionallyShownOptionsElement: conditionallyShownOptionsElement })));
|
132
|
+
React.createElement(FormElementAutocomplete, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, conditionallyShownOptionsElement: conditionallyShownOptionsElement, ...dirtyProps })));
|
120
133
|
}
|
121
134
|
case 'select': {
|
122
135
|
return (React.createElement(LookupNotification, { autoLookupValue: !element.multi ? value : undefined, element: element, onLookup: onLookup },
|
123
|
-
React.createElement(FormElementSelect, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, conditionallyShownOptionsElement: conditionallyShownOptionsElement })));
|
136
|
+
React.createElement(FormElementSelect, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, conditionallyShownOptionsElement: conditionallyShownOptionsElement, ...dirtyProps })));
|
124
137
|
}
|
125
138
|
case 'radio': {
|
126
139
|
return (React.createElement(LookupNotification, { autoLookupValue: value, element: element, onLookup: onLookup },
|
127
|
-
React.createElement(FormElementRadio, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, conditionallyShownOptionsElement: conditionallyShownOptionsElement })));
|
140
|
+
React.createElement(FormElementRadio, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, conditionallyShownOptionsElement: conditionallyShownOptionsElement, ...dirtyProps })));
|
128
141
|
}
|
129
142
|
case 'draw': {
|
130
|
-
return (React.createElement(FormElementSignature, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage }));
|
143
|
+
return (React.createElement(FormElementSignature, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps }));
|
131
144
|
}
|
132
145
|
case 'calculation': {
|
133
146
|
return (React.createElement(FormElementCalculation, { element: element, onChange: onChange, value: value }));
|
134
147
|
}
|
135
148
|
case 'repeatableSet': {
|
136
|
-
return (React.createElement(FormElementRepeatableSet, { formId: formId, id: id, isEven: !isEven, element: element, value: value, onChange: onChange, onLookup: onLookup, formElementConditionallyShown: formElementConditionallyShown, formElementValidation: formElementValidation, displayValidationMessage: displayValidationMessage }));
|
149
|
+
return (React.createElement(FormElementRepeatableSet, { formId: formId, id: id, isEven: !isEven, element: element, value: value, onChange: onChange, onLookup: onLookup, formElementConditionallyShown: formElementConditionallyShown, formElementValidation: formElementValidation, displayValidationMessage: displayValidationMessage, ...dirtyProps }));
|
137
150
|
}
|
138
151
|
case 'image': {
|
139
152
|
return React.createElement(FormElementImage, { element: element });
|
140
153
|
}
|
141
154
|
case 'datetime': {
|
142
155
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
143
|
-
React.createElement(FormElementDateTime, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
156
|
+
React.createElement(FormElementDateTime, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
144
157
|
}
|
145
158
|
case 'time': {
|
146
159
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
147
|
-
React.createElement(FormElementTime, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
160
|
+
React.createElement(FormElementTime, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
148
161
|
}
|
149
162
|
case 'checkboxes': {
|
150
163
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup },
|
@@ -152,33 +165,33 @@ const FormElementSwitch = React.memo(function OneBlinkFormElement({ formId, elem
|
|
152
165
|
}
|
153
166
|
case 'files': {
|
154
167
|
return (React.createElement(LookupNotification, { element: element, onLookup: onLookup, autoLookupValue: value, stringifyAutoLookupValue: stringifyAttachments },
|
155
|
-
React.createElement(FormElementFiles, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
168
|
+
React.createElement(FormElementFiles, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
156
169
|
}
|
157
170
|
case 'infoPage':
|
158
171
|
case 'form': {
|
159
172
|
return (React.createElement(FormElementForm, { formId: formId, id: id, element: element, value: value, onChange: onChange, onLookup: onLookup, displayValidationMessages: displayValidationMessage, formElementValidation: formElementValidation, formElementConditionallyShown: formElementConditionallyShown }));
|
160
173
|
}
|
161
174
|
case 'camera': {
|
162
|
-
return (React.createElement(FormElementCamera, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage }));
|
175
|
+
return (React.createElement(FormElementCamera, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps }));
|
163
176
|
}
|
164
177
|
case 'summary': {
|
165
178
|
return (React.createElement(FormElementSummary, { element: element, onChange: onChange, value: value }));
|
166
179
|
}
|
167
180
|
case 'captcha': {
|
168
|
-
return (React.createElement(FormElementCaptcha, { element: element, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage }));
|
181
|
+
return (React.createElement(FormElementCaptcha, { element: element, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps }));
|
169
182
|
}
|
170
183
|
case 'location': {
|
171
184
|
return (React.createElement(LookupNotification, { autoLookupValue: value, stringifyAutoLookupValue: stringifyLocation, element: element, onLookup: onLookup },
|
172
|
-
React.createElement(FormElementLocation, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
185
|
+
React.createElement(FormElementLocation, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
173
186
|
}
|
174
187
|
case 'geoscapeAddress': {
|
175
188
|
const v = value;
|
176
189
|
return (React.createElement(LookupNotification, { autoLookupValue: value, element: element, onLookup: onLookup },
|
177
|
-
React.createElement(FormElementGeoscapeAddress, { id: id, formId: formId, element: element, value: v, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
190
|
+
React.createElement(FormElementGeoscapeAddress, { id: id, formId: formId, element: element, value: v, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
178
191
|
}
|
179
192
|
case 'compliance': {
|
180
193
|
return (React.createElement(LookupNotification, { autoLookupValue: value ? value.value : undefined, element: element, onLookup: onLookup },
|
181
|
-
React.createElement(FormElementCompliance, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, conditionallyShownOptionsElement: conditionallyShownOptionsElement, isEven: isEven })));
|
194
|
+
React.createElement(FormElementCompliance, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, conditionallyShownOptionsElement: conditionallyShownOptionsElement, isEven: isEven, ...dirtyProps })));
|
182
195
|
}
|
183
196
|
case 'freshdeskDependentField': {
|
184
197
|
return (React.createElement(FormElementFreshdeskDependentField, { formId: formId, id: id, element: element, value: value, onChange: onChange, onLookup: onLookup, displayValidationMessages: displayValidationMessage, formElementValidation: formElementValidation, formElementConditionallyShown: formElementConditionallyShown }));
|
@@ -186,16 +199,16 @@ const FormElementSwitch = React.memo(function OneBlinkFormElement({ formId, elem
|
|
186
199
|
case 'pointAddress': {
|
187
200
|
const v = value;
|
188
201
|
return (React.createElement(LookupNotification, { autoLookupValue: value, element: element, onLookup: onLookup },
|
189
|
-
React.createElement(FormElementPointAddress, { id: id, formId: formId, element: element, value: v, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
202
|
+
React.createElement(FormElementPointAddress, { id: id, formId: formId, element: element, value: v, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
190
203
|
}
|
191
204
|
case 'boolean': {
|
192
205
|
return (React.createElement(LookupNotification, { autoLookupValue: value, element: element, onLookup: onLookup },
|
193
|
-
React.createElement(FormElementBoolean, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
206
|
+
React.createElement(FormElementBoolean, { id: id, element: element, value: value, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
194
207
|
}
|
195
208
|
case 'civicaStreetName': {
|
196
209
|
const v = value;
|
197
210
|
return (React.createElement(LookupNotification, { autoLookupValue: value, element: element, onLookup: onLookup },
|
198
|
-
React.createElement(FormElementCivicaStreetName, { id: id, formId: formId, element: element, value: v, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage })));
|
211
|
+
React.createElement(FormElementCivicaStreetName, { id: id, formId: formId, element: element, value: v, onChange: onChange, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, ...dirtyProps })));
|
199
212
|
}
|
200
213
|
case 'civicaNameRecord': {
|
201
214
|
return (React.createElement(FormElementCivicaNameRecord, { formId: formId, id: id, element: element, value: value, onChange: onChange, onLookup: onLookup, displayValidationMessages: displayValidationMessage, formElementValidation: formElementValidation, formElementConditionallyShown: formElementConditionallyShown }));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"OneBlinkFormElements.js","sourceRoot":"","sources":["../../../src/components/renderer/OneBlinkFormElements.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\n\nimport LookupNotification from './LookupNotification'\n\nimport FormElementBarcodeScanner from '../../form-elements/FormElementBarcodeScanner'\nimport FormElementEmail from '../../form-elements/FormElementEmail'\nimport FormElementABN from '../../form-elements/FormElementABN'\nimport FormElementBSB from '../../form-elements/FormElementBSB'\nimport FormElementText from '../../form-elements/FormElementText'\nimport FormElementTextarea from '../../form-elements/FormElementTextarea'\nimport FormElementNumber from '../../form-elements/FormElementNumber'\nimport FormElementHeading from '../../form-elements/FormElementHeading'\nimport FormElementHTML from '../../form-elements/FormElementHTML'\nimport FormElementTelephone from '../../form-elements/FormElementTelephone'\nimport FormElementSelect from '../../form-elements/FormElementSelect'\nimport FormElementDate from '../../form-elements/FormElementDate'\nimport FormElementImage from '../../form-elements/FormElementImage'\nimport FormElementDateTime from '../../form-elements/FormElementDateTime'\nimport FormElementTime from '../../form-elements/FormElementTime'\nimport FormElementCalculation from '../../form-elements/FormElementCalculation'\nimport FormElementRadio from '../../form-elements/FormElementRadio'\nimport FormElementAutocomplete from '../../form-elements/FormElementAutocomplete'\nimport FormElementRepeatableSet from '../../form-elements/FormElementRepeatableSet'\nimport FormElementSignature from '../../form-elements/FormElementSignature'\nimport FormElementCheckBoxes from '../../form-elements/FormElementCheckBoxes'\nimport FormElementFiles, {\n stringifyAttachments,\n} from '../../form-elements/FormElementFiles'\nimport FormElementForm from '../../form-elements/FormElementForm'\nimport FormElementSection from '../../form-elements/FormElementSection'\nimport FormElementCamera from '../../form-elements/FormElementCamera'\nimport FormElementSummary from '../../form-elements/FormElementSummary'\nimport FormElementCaptcha from '../../form-elements/FormElementCaptcha'\nimport FormElementLocation, {\n stringifyLocation,\n} from '../../form-elements/FormElementLocation'\nimport FormElementGeoscapeAddress from '../../form-elements/FormElementGeoscapeAddress'\nimport FormElementCompliance from '../../form-elements/FormElementCompliance'\nimport FormElementPointAddress from '../../form-elements/FormElementPointAddress'\nimport FormElementBoolean from '../../form-elements/FormElementBoolean'\nimport FormElementCivicaStreetName from '../../form-elements/FormElementCivicaStreetName'\nimport FormElementCivicaNameRecord from '../../form-elements/FormElementCivicaNameRecord'\nimport FormElementFreshdeskDependentField from '../../form-elements/FormElementFreshdeskDependentField'\n\nimport {\n CivicaTypes,\n FormTypes,\n GeoscapeTypes,\n MiscTypes,\n PointTypes,\n} from '@oneblink/types'\n\nimport { FormSubmissionModelContextProvider } from '../../hooks/useFormSubmissionModelContext'\nimport { FormElementBinaryStorageValue } from '../../types/attachments'\nimport {\n FormElementConditionallyShown,\n FormElementLookupHandler,\n FormElementsConditionallyShown,\n FormElementsValidation,\n FormElementValidation,\n FormElementValueChangeHandler,\n FormSubmissionModel,\n} from '../../types/form'\nimport { attachmentsService } from '@oneblink/apps'\n\nexport type Props<T extends FormTypes._NestedElementsElement> = {\n formId: number\n elements: FormTypes.FormElement[]\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n formElementsValidation: FormElementsValidation | undefined\n displayValidationMessages: boolean\n onChange: FormElementValueChangeHandler\n onLookup: FormElementLookupHandler\n // Props passed by repeatable sets\n isEven?: boolean\n idPrefix: string\n model: FormSubmissionModel\n parentElement: T\n}\n\nfunction OneBlinkFormElements<T extends FormTypes._NestedElementsElement>({\n formId,\n elements,\n isEven,\n idPrefix,\n displayValidationMessages,\n formElementsValidation,\n formElementsConditionallyShown,\n onChange,\n onLookup,\n model,\n parentElement,\n}: Props<T>) {\n return (\n <FormSubmissionModelContextProvider\n elements={parentElement.elements}\n model={model}\n formElementsConditionallyShown={formElementsConditionallyShown}\n >\n {elements.map((element) => {\n if (element.type === 'section') {\n if (formElementsConditionallyShown?.[element.id]?.isHidden) {\n return null\n }\n\n return (\n <div\n key={element.id}\n className={clsx(\n 'ob-element cypress-element-container',\n element.customCssClasses,\n )}\n >\n <FormElementSection\n formId={formId}\n element={element}\n displayValidationMessages={displayValidationMessages}\n idPrefix={idPrefix}\n formElementsConditionallyShown={formElementsConditionallyShown}\n formElementsValidation={formElementsValidation}\n onChange={onChange}\n onLookup={onLookup}\n model={model}\n parentElement={parentElement}\n />\n </div>\n )\n }\n\n if (\n element.type === 'page' ||\n formElementsConditionallyShown?.[element.name]?.isHidden\n ) {\n return null\n }\n\n let validationClass = ''\n if (displayValidationMessages && !('elements' in element)) {\n validationClass = formElementsValidation?.[element.name]\n ? 'ob-element__invalid'\n : 'ob-element__valid'\n }\n\n return (\n <div\n key={element.id}\n id={element.id}\n className={clsx(\n 'ob-element cypress-element-container',\n element.customCssClasses\n ? element.customCssClasses.join(' ')\n : '',\n validationClass,\n )}\n data-cypress-element-name={element.name}\n data-ob-name={element.name}\n >\n <FormElementSwitch\n formId={formId}\n element={element}\n value={model[element.name]}\n displayValidationMessage={displayValidationMessages}\n isEven={isEven}\n id={`${idPrefix}${element.name}`}\n formElementConditionallyShown={\n formElementsConditionallyShown?.[element.name]\n }\n formElementValidation={formElementsValidation?.[element.name]}\n onChange={onChange}\n onLookup={onLookup}\n />\n </div>\n )\n })}\n </FormSubmissionModelContextProvider>\n )\n}\n\nexport default React.memo(OneBlinkFormElements)\n\nconst FormElementSwitch = React.memo(function OneBlinkFormElement({\n formId,\n element,\n value,\n displayValidationMessage,\n formElementValidation,\n formElementConditionallyShown,\n isEven,\n id,\n onChange,\n onLookup,\n}: {\n formId: number\n element: FormTypes.FormElement\n value: unknown | undefined\n formElementValidation: FormElementValidation | undefined\n displayValidationMessage: boolean\n formElementConditionallyShown: FormElementConditionallyShown | undefined\n id: string\n isEven: boolean | undefined\n onChange: FormElementValueChangeHandler\n onLookup: FormElementLookupHandler\n}) {\n const conditionallyShownOptionsElement =\n formElementConditionallyShown?.type === 'formElement'\n ? formElementConditionallyShown\n : undefined\n const validationMessage =\n typeof formElementValidation === 'string'\n ? formElementValidation\n : undefined\n switch (element.type) {\n case 'heading': {\n return <FormElementHeading element={element} />\n }\n case 'html': {\n return <FormElementHTML element={element} />\n }\n case 'date': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementDate\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementDate\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'email': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementEmail\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementEmail\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'text': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementText\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementText\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'abn': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementABN\n id={id}\n element={element}\n value={value as MiscTypes.ABNRecord | undefined}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementABN\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'bsb': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementBSB\n id={id}\n formId={formId}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementBSB\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'barcodeScanner': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementBarcodeScanner\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementBarcodeScanner\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'textarea': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementTextarea\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementTextarea\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'number': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementNumber\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementNumber\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'telephone': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementTelephone\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementTelephone\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'autocomplete': {\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementAutocomplete\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementAutocomplete\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n />\n </LookupNotification>\n )\n }\n case 'select': {\n return (\n <LookupNotification\n autoLookupValue={!element.multi ? value : undefined}\n element={element}\n onLookup={onLookup}\n >\n <FormElementSelect\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementSelect\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n />\n </LookupNotification>\n )\n }\n case 'radio': {\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementRadio\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementRadio\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n />\n </LookupNotification>\n )\n }\n case 'draw': {\n return (\n <FormElementSignature\n id={id}\n element={element}\n value={value as FormElementBinaryStorageValue}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementSignature\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n )\n }\n case 'calculation': {\n return (\n <FormElementCalculation\n element={element}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCalculation\n >['onChange']\n }\n value={value}\n />\n )\n }\n case 'repeatableSet': {\n return (\n <FormElementRepeatableSet\n formId={formId}\n id={id}\n isEven={!isEven}\n element={element}\n value={value as Array<FormSubmissionModel> | undefined}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementRepeatableSet\n >['onChange']\n }\n onLookup={onLookup}\n formElementConditionallyShown={formElementConditionallyShown}\n formElementValidation={formElementValidation}\n displayValidationMessage={displayValidationMessage}\n />\n )\n }\n case 'image': {\n return <FormElementImage element={element} />\n }\n case 'datetime': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementDateTime\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementDateTime\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'time': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementTime\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementTime\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'checkboxes': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementCheckBoxes\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCheckBoxes\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n />\n </LookupNotification>\n )\n }\n case 'files': {\n return (\n <LookupNotification\n element={element}\n onLookup={onLookup}\n autoLookupValue={value}\n stringifyAutoLookupValue={\n stringifyAttachments as React.ComponentProps<\n typeof LookupNotification\n >['stringifyAutoLookupValue']\n }\n >\n <FormElementFiles\n id={id}\n element={element}\n value={value as attachmentsService.Attachment[] | undefined}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementFiles\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'infoPage':\n case 'form': {\n return (\n <FormElementForm\n formId={formId}\n id={id}\n element={element}\n value={value as FormSubmissionModel | undefined}\n onChange={\n onChange as React.ComponentProps<typeof FormElementForm>['onChange']\n }\n onLookup={onLookup}\n displayValidationMessages={displayValidationMessage}\n formElementValidation={formElementValidation}\n formElementConditionallyShown={formElementConditionallyShown}\n />\n )\n }\n case 'camera': {\n return (\n <FormElementCamera\n id={id}\n element={element}\n value={value as FormElementBinaryStorageValue}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCamera\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n )\n }\n case 'summary': {\n return (\n <FormElementSummary\n element={element}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementSummary\n >['onChange']\n }\n value={value}\n />\n )\n }\n case 'captcha': {\n return (\n <FormElementCaptcha\n element={element}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCaptcha\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n )\n }\n case 'location': {\n return (\n <LookupNotification\n autoLookupValue={value}\n stringifyAutoLookupValue={\n stringifyLocation as React.ComponentProps<\n typeof LookupNotification\n >['stringifyAutoLookupValue']\n }\n element={element}\n onLookup={onLookup}\n >\n <FormElementLocation\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementLocation\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'geoscapeAddress': {\n const v = value as GeoscapeTypes.GeoscapeAddress | undefined\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementGeoscapeAddress\n id={id}\n formId={formId}\n element={element}\n value={v}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementGeoscapeAddress\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'compliance': {\n return (\n <LookupNotification\n autoLookupValue={\n value ? (value as { value: unknown }).value : undefined\n }\n element={element}\n onLookup={onLookup}\n >\n <FormElementCompliance\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCompliance\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n isEven={isEven}\n />\n </LookupNotification>\n )\n }\n case 'freshdeskDependentField': {\n return (\n <FormElementFreshdeskDependentField\n formId={formId}\n id={id}\n element={element}\n value={value as FormSubmissionModel | undefined}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementFreshdeskDependentField\n >['onChange']\n }\n onLookup={onLookup}\n displayValidationMessages={displayValidationMessage}\n formElementValidation={formElementValidation}\n formElementConditionallyShown={formElementConditionallyShown}\n />\n )\n }\n case 'pointAddress': {\n const v = value as PointTypes.PointAddress | undefined\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementPointAddress\n id={id}\n formId={formId}\n element={element}\n value={v}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementPointAddress\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'boolean': {\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementBoolean\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementBoolean\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'civicaStreetName': {\n const v = value as CivicaTypes.CivicaStreetName | undefined\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementCivicaStreetName\n id={id}\n formId={formId}\n element={element}\n value={v}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCivicaStreetName\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n />\n </LookupNotification>\n )\n }\n case 'civicaNameRecord': {\n return (\n <FormElementCivicaNameRecord\n formId={formId}\n id={id}\n element={element}\n value={value as FormSubmissionModel | undefined}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCivicaNameRecord\n >['onChange']\n }\n onLookup={onLookup}\n displayValidationMessages={displayValidationMessage}\n formElementValidation={formElementValidation}\n formElementConditionallyShown={formElementConditionallyShown}\n />\n )\n }\n default: {\n console.warn('Invalid element', element)\n return null\n }\n }\n})\n"]}
|
1
|
+
{"version":3,"file":"OneBlinkFormElements.js","sourceRoot":"","sources":["../../../src/components/renderer/OneBlinkFormElements.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\n\nimport LookupNotification from './LookupNotification'\n\nimport FormElementBarcodeScanner from '../../form-elements/FormElementBarcodeScanner'\nimport FormElementEmail from '../../form-elements/FormElementEmail'\nimport FormElementABN from '../../form-elements/FormElementABN'\nimport FormElementBSB from '../../form-elements/FormElementBSB'\nimport FormElementText from '../../form-elements/FormElementText'\nimport FormElementTextarea from '../../form-elements/FormElementTextarea'\nimport FormElementNumber from '../../form-elements/FormElementNumber'\nimport FormElementHeading from '../../form-elements/FormElementHeading'\nimport FormElementHTML from '../../form-elements/FormElementHTML'\nimport FormElementTelephone from '../../form-elements/FormElementTelephone'\nimport FormElementSelect from '../../form-elements/FormElementSelect'\nimport FormElementDate from '../../form-elements/FormElementDate'\nimport FormElementImage from '../../form-elements/FormElementImage'\nimport FormElementDateTime from '../../form-elements/FormElementDateTime'\nimport FormElementTime from '../../form-elements/FormElementTime'\nimport FormElementCalculation from '../../form-elements/FormElementCalculation'\nimport FormElementRadio from '../../form-elements/FormElementRadio'\nimport FormElementAutocomplete from '../../form-elements/FormElementAutocomplete'\nimport FormElementRepeatableSet from '../../form-elements/FormElementRepeatableSet'\nimport FormElementSignature from '../../form-elements/FormElementSignature'\nimport FormElementCheckBoxes from '../../form-elements/FormElementCheckBoxes'\nimport FormElementFiles, {\n stringifyAttachments,\n} from '../../form-elements/FormElementFiles'\nimport FormElementForm from '../../form-elements/FormElementForm'\nimport FormElementSection from '../../form-elements/FormElementSection'\nimport FormElementCamera from '../../form-elements/FormElementCamera'\nimport FormElementSummary from '../../form-elements/FormElementSummary'\nimport FormElementCaptcha from '../../form-elements/FormElementCaptcha'\nimport FormElementLocation, {\n stringifyLocation,\n} from '../../form-elements/FormElementLocation'\nimport FormElementGeoscapeAddress from '../../form-elements/FormElementGeoscapeAddress'\nimport FormElementCompliance from '../../form-elements/FormElementCompliance'\nimport FormElementPointAddress from '../../form-elements/FormElementPointAddress'\nimport FormElementBoolean from '../../form-elements/FormElementBoolean'\nimport FormElementCivicaStreetName from '../../form-elements/FormElementCivicaStreetName'\nimport FormElementCivicaNameRecord from '../../form-elements/FormElementCivicaNameRecord'\nimport FormElementFreshdeskDependentField from '../../form-elements/FormElementFreshdeskDependentField'\n\nimport {\n CivicaTypes,\n FormTypes,\n GeoscapeTypes,\n MiscTypes,\n PointTypes,\n} from '@oneblink/types'\n\nimport { FormSubmissionModelContextProvider } from '../../hooks/useFormSubmissionModelContext'\nimport useBooleanState from '../../hooks/useBooleanState'\nimport { FormElementBinaryStorageValue } from '../../types/attachments'\nimport {\n FormElementConditionallyShown,\n FormElementLookupHandler,\n FormElementsConditionallyShown,\n FormElementsValidation,\n FormElementValidation,\n FormElementValueChangeHandler,\n FormSubmissionModel,\n IsDirtyProps,\n} from '../../types/form'\nimport { attachmentsService } from '@oneblink/apps'\n\nexport type Props<T extends FormTypes._NestedElementsElement> = {\n formId: number\n elements: FormTypes.FormElement[]\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n formElementsValidation: FormElementsValidation | undefined\n displayValidationMessages: boolean\n onChange: FormElementValueChangeHandler\n onLookup: FormElementLookupHandler\n // Props passed by repeatable sets\n isEven?: boolean\n idPrefix: string\n model: FormSubmissionModel\n parentElement: T\n}\n\ninterface FormElementSwitchProps extends IsDirtyProps {\n formId: number\n element: FormTypes.FormElement\n value: unknown | undefined\n formElementValidation: FormElementValidation | undefined\n displayValidationMessage: boolean\n formElementConditionallyShown: FormElementConditionallyShown | undefined\n id: string\n isEven: boolean | undefined\n onChange: FormElementValueChangeHandler\n onLookup: FormElementLookupHandler\n}\n\nfunction OneBlinkFormElements<T extends FormTypes._NestedElementsElement>({\n formId,\n elements,\n isEven,\n idPrefix,\n displayValidationMessages,\n formElementsValidation,\n formElementsConditionallyShown,\n onChange,\n onLookup,\n model,\n parentElement,\n}: Props<T>) {\n return (\n <FormSubmissionModelContextProvider\n elements={parentElement.elements}\n model={model}\n formElementsConditionallyShown={formElementsConditionallyShown}\n >\n {elements.map((element) => {\n if (element.type === 'section') {\n if (formElementsConditionallyShown?.[element.id]?.isHidden) {\n return null\n }\n\n return (\n <div\n key={element.id}\n className={clsx(\n 'ob-element cypress-element-container',\n element.customCssClasses,\n )}\n >\n <FormElementSection\n formId={formId}\n element={element}\n displayValidationMessages={displayValidationMessages}\n idPrefix={idPrefix}\n formElementsConditionallyShown={formElementsConditionallyShown}\n formElementsValidation={formElementsValidation}\n onChange={onChange}\n onLookup={onLookup}\n model={model}\n parentElement={parentElement}\n />\n </div>\n )\n }\n\n if (\n element.type === 'page' ||\n formElementsConditionallyShown?.[element.name]?.isHidden\n ) {\n return null\n }\n\n return (\n <FormElementSwitchContainer\n key={element.id}\n formId={formId}\n element={element}\n value={model[element.name]}\n displayValidationMessage={displayValidationMessages}\n isEven={isEven}\n id={`${idPrefix}${element.name}`}\n formElementConditionallyShown={\n formElementsConditionallyShown?.[element.name]\n }\n formElementValidation={formElementsValidation?.[element.name]}\n onChange={onChange}\n onLookup={onLookup}\n />\n )\n })}\n </FormSubmissionModelContextProvider>\n )\n}\n\nexport default React.memo(OneBlinkFormElements)\n\nfunction FormElementSwitchContainer(\n props: Omit<FormElementSwitchProps, 'isDirty' | 'setIsDirty'>,\n) {\n const { element, formElementValidation, displayValidationMessage } = props\n const [isDirty, setIsDirty] = useBooleanState(false)\n\n const getValidationClass = () => {\n if (!('elements' in element)) {\n if (!formElementValidation) {\n return 'ob-element__valid'\n }\n if (isDirty || displayValidationMessage) {\n return 'ob-element__invalid'\n }\n }\n }\n const validationClassName = getValidationClass()\n\n if (element.type === 'page' || element.type === 'section') {\n return null\n }\n\n return (\n <div\n id={element.id}\n className={clsx(\n 'ob-element cypress-element-container',\n element.customCssClasses ? element.customCssClasses.join(' ') : '',\n validationClassName,\n )}\n data-cypress-element-name={element.name}\n data-ob-name={element.name}\n >\n <FormElementSwitch {...props} isDirty={isDirty} setIsDirty={setIsDirty} />\n </div>\n )\n}\n\nconst FormElementSwitch = React.memo(function OneBlinkFormElement({\n formId,\n element,\n value,\n displayValidationMessage,\n formElementValidation,\n formElementConditionallyShown,\n isEven,\n id,\n onChange,\n onLookup,\n isDirty,\n setIsDirty,\n}: FormElementSwitchProps & IsDirtyProps) {\n const dirtyProps = React.useMemo(\n () => ({ isDirty, setIsDirty }),\n [isDirty, setIsDirty],\n )\n const conditionallyShownOptionsElement =\n formElementConditionallyShown?.type === 'formElement'\n ? formElementConditionallyShown\n : undefined\n const validationMessage =\n typeof formElementValidation === 'string'\n ? formElementValidation\n : undefined\n switch (element.type) {\n case 'heading': {\n return <FormElementHeading element={element} />\n }\n case 'html': {\n return <FormElementHTML element={element} />\n }\n case 'date': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementDate\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementDate\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'email': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementEmail\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementEmail\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'text': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementText\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementText\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'abn': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementABN\n id={id}\n element={element}\n value={value as MiscTypes.ABNRecord | undefined}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementABN\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'bsb': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementBSB\n id={id}\n formId={formId}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementBSB\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'barcodeScanner': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementBarcodeScanner\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementBarcodeScanner\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'textarea': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementTextarea\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementTextarea\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'number': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementNumber\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementNumber\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'telephone': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementTelephone\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementTelephone\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'autocomplete': {\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementAutocomplete\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementAutocomplete\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'select': {\n return (\n <LookupNotification\n autoLookupValue={!element.multi ? value : undefined}\n element={element}\n onLookup={onLookup}\n >\n <FormElementSelect\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementSelect\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'radio': {\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementRadio\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementRadio\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'draw': {\n return (\n <FormElementSignature\n id={id}\n element={element}\n value={value as FormElementBinaryStorageValue}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementSignature\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n )\n }\n case 'calculation': {\n return (\n <FormElementCalculation\n element={element}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCalculation\n >['onChange']\n }\n value={value}\n />\n )\n }\n case 'repeatableSet': {\n return (\n <FormElementRepeatableSet\n formId={formId}\n id={id}\n isEven={!isEven}\n element={element}\n value={value as Array<FormSubmissionModel> | undefined}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementRepeatableSet\n >['onChange']\n }\n onLookup={onLookup}\n formElementConditionallyShown={formElementConditionallyShown}\n formElementValidation={formElementValidation}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n )\n }\n case 'image': {\n return <FormElementImage element={element} />\n }\n case 'datetime': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementDateTime\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementDateTime\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'time': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementTime\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementTime\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'checkboxes': {\n return (\n <LookupNotification element={element} onLookup={onLookup}>\n <FormElementCheckBoxes\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCheckBoxes\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n />\n </LookupNotification>\n )\n }\n case 'files': {\n return (\n <LookupNotification\n element={element}\n onLookup={onLookup}\n autoLookupValue={value}\n stringifyAutoLookupValue={\n stringifyAttachments as React.ComponentProps<\n typeof LookupNotification\n >['stringifyAutoLookupValue']\n }\n >\n <FormElementFiles\n id={id}\n element={element}\n value={value as attachmentsService.Attachment[] | undefined}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementFiles\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'infoPage':\n case 'form': {\n return (\n <FormElementForm\n formId={formId}\n id={id}\n element={element}\n value={value as FormSubmissionModel | undefined}\n onChange={\n onChange as React.ComponentProps<typeof FormElementForm>['onChange']\n }\n onLookup={onLookup}\n displayValidationMessages={displayValidationMessage}\n formElementValidation={formElementValidation}\n formElementConditionallyShown={formElementConditionallyShown}\n />\n )\n }\n case 'camera': {\n return (\n <FormElementCamera\n id={id}\n element={element}\n value={value as FormElementBinaryStorageValue}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCamera\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n )\n }\n case 'summary': {\n return (\n <FormElementSummary\n element={element}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementSummary\n >['onChange']\n }\n value={value}\n />\n )\n }\n case 'captcha': {\n return (\n <FormElementCaptcha\n element={element}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCaptcha\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n )\n }\n case 'location': {\n return (\n <LookupNotification\n autoLookupValue={value}\n stringifyAutoLookupValue={\n stringifyLocation as React.ComponentProps<\n typeof LookupNotification\n >['stringifyAutoLookupValue']\n }\n element={element}\n onLookup={onLookup}\n >\n <FormElementLocation\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementLocation\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'geoscapeAddress': {\n const v = value as GeoscapeTypes.GeoscapeAddress | undefined\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementGeoscapeAddress\n id={id}\n formId={formId}\n element={element}\n value={v}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementGeoscapeAddress\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'compliance': {\n return (\n <LookupNotification\n autoLookupValue={\n value ? (value as { value: unknown }).value : undefined\n }\n element={element}\n onLookup={onLookup}\n >\n <FormElementCompliance\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCompliance\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n isEven={isEven}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'freshdeskDependentField': {\n return (\n <FormElementFreshdeskDependentField\n formId={formId}\n id={id}\n element={element}\n value={value as FormSubmissionModel | undefined}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementFreshdeskDependentField\n >['onChange']\n }\n onLookup={onLookup}\n displayValidationMessages={displayValidationMessage}\n formElementValidation={formElementValidation}\n formElementConditionallyShown={formElementConditionallyShown}\n />\n )\n }\n case 'pointAddress': {\n const v = value as PointTypes.PointAddress | undefined\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementPointAddress\n id={id}\n formId={formId}\n element={element}\n value={v}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementPointAddress\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'boolean': {\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementBoolean\n id={id}\n element={element}\n value={value}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementBoolean\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'civicaStreetName': {\n const v = value as CivicaTypes.CivicaStreetName | undefined\n return (\n <LookupNotification\n autoLookupValue={value}\n element={element}\n onLookup={onLookup}\n >\n <FormElementCivicaStreetName\n id={id}\n formId={formId}\n element={element}\n value={v}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCivicaStreetName\n >['onChange']\n }\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n {...dirtyProps}\n />\n </LookupNotification>\n )\n }\n case 'civicaNameRecord': {\n return (\n <FormElementCivicaNameRecord\n formId={formId}\n id={id}\n element={element}\n value={value as FormSubmissionModel | undefined}\n onChange={\n onChange as React.ComponentProps<\n typeof FormElementCivicaNameRecord\n >['onChange']\n }\n onLookup={onLookup}\n displayValidationMessages={displayValidationMessage}\n formElementValidation={formElementValidation}\n formElementConditionallyShown={formElementConditionallyShown}\n />\n )\n }\n default: {\n console.warn('Invalid element', element)\n return null\n }\n }\n})\n"]}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import { FormTypes, MiscTypes } from '@oneblink/types';
|
3
|
-
import { FormElementValueChangeHandler } from '../types/form';
|
3
|
+
import { FormElementValueChangeHandler, IsDirtyProps } from '../types/form';
|
4
4
|
declare type Props = {
|
5
5
|
id: string;
|
6
6
|
element: FormTypes.ABNElement;
|
@@ -8,7 +8,7 @@ declare type Props = {
|
|
8
8
|
onChange: FormElementValueChangeHandler<MiscTypes.ABNRecord>;
|
9
9
|
displayValidationMessage: boolean;
|
10
10
|
validationMessage: string | undefined;
|
11
|
-
};
|
12
|
-
declare function FormElementABN({ id, element, value, onChange, validationMessage, displayValidationMessage, }: Props): JSX.Element;
|
11
|
+
} & IsDirtyProps;
|
12
|
+
declare function FormElementABN({ id, element, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, }: Props): JSX.Element;
|
13
13
|
declare const _default: React.MemoExoticComponent<typeof FormElementABN>;
|
14
14
|
export default _default;
|
@@ -8,11 +8,10 @@ import LookupButton from '../components/renderer/LookupButton';
|
|
8
8
|
import FormElementLabelContainer from '../components/renderer/FormElementLabelContainer';
|
9
9
|
import useAbnLookupAuthenticationGuid from '../hooks/useAbnLookupAuthenticationGuid';
|
10
10
|
import { abnService } from '@oneblink/sdk-core';
|
11
|
-
function FormElementABN({ id, element, value, onChange, validationMessage, displayValidationMessage, }) {
|
11
|
+
function FormElementABN({ id, element, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, }) {
|
12
12
|
const abnLookupAuthenticationGuid = useAbnLookupAuthenticationGuid();
|
13
13
|
const [label, setLabel] = React.useState(value ? abnService.getABNNumberFromABNRecord(value) || '' : '');
|
14
14
|
const [isFocused, setIsFocused, removeFocus] = useBooleanState(false);
|
15
|
-
const [isDirty, setIsDirty] = useBooleanState(false);
|
16
15
|
const [{ isLoading, error }, setState] = React.useState({
|
17
16
|
isLoading: false,
|
18
17
|
error: null,
|