@elliemae/loan-field-renderers 26.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ARCHITECTURE.md +434 -0
- package/dist/cjs/OVERVIEW.md +229 -0
- package/dist/cjs/bll/constants.js +86 -0
- package/dist/cjs/bll/formatters/booleanFormatter.js +51 -0
- package/dist/cjs/bll/formatters/dateFormatter.js +78 -0
- package/dist/cjs/bll/formatters/dropdownFormatter.js +34 -0
- package/dist/cjs/bll/formatters/factory/index.js +115 -0
- package/dist/cjs/bll/formatters/index.js +24 -0
- package/dist/cjs/bll/formatters/numberFormatter.js +70 -0
- package/dist/cjs/bll/formatters/phoneFormatter.js +57 -0
- package/dist/cjs/bll/formatters/regexFormatter.js +52 -0
- package/dist/cjs/bll/formatters/ssnFormatter.js +50 -0
- package/dist/cjs/bll/formatters/textFormatter.js +43 -0
- package/dist/cjs/bll/formatters/zipFormatter.js +48 -0
- package/dist/cjs/bll/index.js +62 -0
- package/dist/cjs/bll/ssf/index.js +48 -0
- package/dist/cjs/bll/ssf/loan.js +81 -0
- package/dist/cjs/bll/ssf/loconnect.js +70 -0
- package/dist/cjs/bll/ssf/ssfBase.js +97 -0
- package/dist/cjs/bll/ssf/types.js +16 -0
- package/dist/cjs/bll/types.js +16 -0
- package/dist/cjs/bll/validators/dateValidator.js +60 -0
- package/dist/cjs/bll/validators/emailValidator.js +47 -0
- package/dist/cjs/bll/validators/factory/index.js +81 -0
- package/dist/cjs/bll/validators/index.js +24 -0
- package/dist/cjs/bll/validators/maxCharValidator.js +49 -0
- package/dist/cjs/bll/validators/requiredValidator.js +44 -0
- package/dist/cjs/bll/validators/zipValidator.js +53 -0
- package/dist/cjs/core/index.js +52 -0
- package/dist/cjs/demo/config.js +391 -0
- package/dist/cjs/demo/index.js +31 -0
- package/dist/cjs/package.json +7 -0
- package/dist/cjs/renderer/FieldRenderer.js +45 -0
- package/dist/cjs/renderer/base/hooks/fieldDescription.js +39 -0
- package/dist/cjs/renderer/base/hooks/fieldDisabled.js +53 -0
- package/dist/cjs/renderer/base/hooks/fieldGoTo.js +50 -0
- package/dist/cjs/renderer/base/hooks/fieldLocked.js +42 -0
- package/dist/cjs/renderer/base/hooks/fieldMeta.js +150 -0
- package/dist/cjs/renderer/base/hooks/fieldSubscribers.js +66 -0
- package/dist/cjs/renderer/base/hooks/fieldValidation.js +45 -0
- package/dist/cjs/renderer/base/hooks/fieldValue.js +215 -0
- package/dist/cjs/renderer/base/hooks/hookBase.js +29 -0
- package/dist/cjs/renderer/base/hooks/index.js +139 -0
- package/dist/cjs/renderer/base/renderer.js +198 -0
- package/dist/cjs/renderer/base/rendererValidator.js +97 -0
- package/dist/cjs/renderer/factory/index.js +58 -0
- package/dist/cjs/renderer/field-renderers/AddonRenderer.js +75 -0
- package/dist/cjs/renderer/field-renderers/CheckboxRenderer.js +123 -0
- package/dist/cjs/renderer/field-renderers/DateRenderer.js +206 -0
- package/dist/cjs/renderer/field-renderers/DropdownRenderer/hook.js +99 -0
- package/dist/cjs/renderer/field-renderers/DropdownRenderer/index.js +216 -0
- package/dist/cjs/renderer/field-renderers/LargeTextRenderer.js +209 -0
- package/dist/cjs/renderer/field-renderers/NumberRenderer.js +216 -0
- package/dist/cjs/renderer/field-renderers/RadioGroupRenderer.js +128 -0
- package/dist/cjs/renderer/field-renderers/RadioRenderer.js +121 -0
- package/dist/cjs/renderer/field-renderers/TextRenderer.js +223 -0
- package/dist/cjs/renderer/field-renderers/ToggleRenderer.js +121 -0
- package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/helper.js +132 -0
- package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/hook.js +128 -0
- package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/index.js +273 -0
- package/dist/cjs/renderer/index.js +24 -0
- package/dist/cjs/renderer/styles.js +51 -0
- package/dist/cjs/renderer/types.js +16 -0
- package/dist/cjs/tests/base/flowBase.js +125 -0
- package/dist/cjs/tests/base/index.js +52 -0
- package/dist/cjs/tests/flows/checkboxRendererFlows.js +85 -0
- package/dist/cjs/tests/flows/dateRendererFlows.js +870 -0
- package/dist/cjs/tests/flows/dropdownRendererFlows.js +591 -0
- package/dist/cjs/tests/flows/largeTextRendererFlows.js +99 -0
- package/dist/cjs/tests/flows/numberRendererFlows.js +175 -0
- package/dist/cjs/tests/flows/radioRendererFlows.js +115 -0
- package/dist/cjs/tests/flows/textRendererFlows.js +349 -0
- package/dist/cjs/tests/flows/toggleRendererFlows.js +106 -0
- package/dist/cjs/tests/flows/zipCodeRendererFlows.js +1163 -0
- package/dist/cjs/utils/dateHelper.js +65 -0
- package/dist/esm/ARCHITECTURE.md +434 -0
- package/dist/esm/OVERVIEW.md +229 -0
- package/dist/esm/bll/constants.js +66 -0
- package/dist/esm/bll/formatters/booleanFormatter.js +33 -0
- package/dist/esm/bll/formatters/dateFormatter.js +48 -0
- package/dist/esm/bll/formatters/dropdownFormatter.js +14 -0
- package/dist/esm/bll/formatters/factory/index.js +97 -0
- package/dist/esm/bll/formatters/index.js +4 -0
- package/dist/esm/bll/formatters/numberFormatter.js +54 -0
- package/dist/esm/bll/formatters/phoneFormatter.js +41 -0
- package/dist/esm/bll/formatters/regexFormatter.js +34 -0
- package/dist/esm/bll/formatters/ssnFormatter.js +32 -0
- package/dist/esm/bll/formatters/textFormatter.js +25 -0
- package/dist/esm/bll/formatters/zipFormatter.js +30 -0
- package/dist/esm/bll/index.js +44 -0
- package/dist/esm/bll/ssf/index.js +30 -0
- package/dist/esm/bll/ssf/loan.js +63 -0
- package/dist/esm/bll/ssf/loconnect.js +52 -0
- package/dist/esm/bll/ssf/ssfBase.js +67 -0
- package/dist/esm/bll/ssf/types.js +0 -0
- package/dist/esm/bll/types.js +0 -0
- package/dist/esm/bll/validators/dateValidator.js +30 -0
- package/dist/esm/bll/validators/emailValidator.js +29 -0
- package/dist/esm/bll/validators/factory/index.js +63 -0
- package/dist/esm/bll/validators/index.js +4 -0
- package/dist/esm/bll/validators/maxCharValidator.js +31 -0
- package/dist/esm/bll/validators/requiredValidator.js +26 -0
- package/dist/esm/bll/validators/zipValidator.js +35 -0
- package/dist/esm/core/index.js +34 -0
- package/dist/esm/demo/config.js +371 -0
- package/dist/esm/demo/index.js +11 -0
- package/dist/esm/package.json +7 -0
- package/dist/esm/renderer/FieldRenderer.js +15 -0
- package/dist/esm/renderer/base/hooks/fieldDescription.js +19 -0
- package/dist/esm/renderer/base/hooks/fieldDisabled.js +33 -0
- package/dist/esm/renderer/base/hooks/fieldGoTo.js +30 -0
- package/dist/esm/renderer/base/hooks/fieldLocked.js +22 -0
- package/dist/esm/renderer/base/hooks/fieldMeta.js +132 -0
- package/dist/esm/renderer/base/hooks/fieldSubscribers.js +36 -0
- package/dist/esm/renderer/base/hooks/fieldValidation.js +25 -0
- package/dist/esm/renderer/base/hooks/fieldValue.js +195 -0
- package/dist/esm/renderer/base/hooks/hookBase.js +9 -0
- package/dist/esm/renderer/base/hooks/index.js +121 -0
- package/dist/esm/renderer/base/renderer.js +178 -0
- package/dist/esm/renderer/base/rendererValidator.js +77 -0
- package/dist/esm/renderer/factory/index.js +38 -0
- package/dist/esm/renderer/field-renderers/AddonRenderer.js +55 -0
- package/dist/esm/renderer/field-renderers/CheckboxRenderer.js +93 -0
- package/dist/esm/renderer/field-renderers/DateRenderer.js +176 -0
- package/dist/esm/renderer/field-renderers/DropdownRenderer/hook.js +79 -0
- package/dist/esm/renderer/field-renderers/DropdownRenderer/index.js +186 -0
- package/dist/esm/renderer/field-renderers/LargeTextRenderer.js +179 -0
- package/dist/esm/renderer/field-renderers/NumberRenderer.js +188 -0
- package/dist/esm/renderer/field-renderers/RadioGroupRenderer.js +108 -0
- package/dist/esm/renderer/field-renderers/RadioRenderer.js +91 -0
- package/dist/esm/renderer/field-renderers/TextRenderer.js +197 -0
- package/dist/esm/renderer/field-renderers/ToggleRenderer.js +91 -0
- package/dist/esm/renderer/field-renderers/ZipCodeRenderer/helper.js +112 -0
- package/dist/esm/renderer/field-renderers/ZipCodeRenderer/hook.js +108 -0
- package/dist/esm/renderer/field-renderers/ZipCodeRenderer/index.js +247 -0
- package/dist/esm/renderer/index.js +4 -0
- package/dist/esm/renderer/styles.js +21 -0
- package/dist/esm/renderer/types.js +0 -0
- package/dist/esm/tests/base/flowBase.js +105 -0
- package/dist/esm/tests/base/index.js +22 -0
- package/dist/esm/tests/flows/checkboxRendererFlows.js +65 -0
- package/dist/esm/tests/flows/dateRendererFlows.js +850 -0
- package/dist/esm/tests/flows/dropdownRendererFlows.js +571 -0
- package/dist/esm/tests/flows/largeTextRendererFlows.js +79 -0
- package/dist/esm/tests/flows/numberRendererFlows.js +155 -0
- package/dist/esm/tests/flows/radioRendererFlows.js +95 -0
- package/dist/esm/tests/flows/textRendererFlows.js +329 -0
- package/dist/esm/tests/flows/toggleRendererFlows.js +86 -0
- package/dist/esm/tests/flows/zipCodeRendererFlows.js +1143 -0
- package/dist/esm/utils/dateHelper.js +35 -0
- package/dist/types/lib/bll/constants.d.ts +9 -0
- package/dist/types/lib/bll/formatters/booleanFormatter.d.ts +5 -0
- package/dist/types/lib/bll/formatters/dateFormatter.d.ts +28 -0
- package/dist/types/lib/bll/formatters/dropdownFormatter.d.ts +6 -0
- package/dist/types/lib/bll/formatters/factory/index.d.ts +71 -0
- package/dist/types/lib/bll/formatters/index.d.ts +2 -0
- package/dist/types/lib/bll/formatters/numberFormatter.d.ts +6 -0
- package/dist/types/lib/bll/formatters/phoneFormatter.d.ts +7 -0
- package/dist/types/lib/bll/formatters/regexFormatter.d.ts +5 -0
- package/dist/types/lib/bll/formatters/ssnFormatter.d.ts +5 -0
- package/dist/types/lib/bll/formatters/textFormatter.d.ts +6 -0
- package/dist/types/lib/bll/formatters/zipFormatter.d.ts +5 -0
- package/dist/types/lib/bll/index.d.ts +20 -0
- package/dist/types/lib/bll/ssf/index.d.ts +25 -0
- package/dist/types/lib/bll/ssf/loan.d.ts +16 -0
- package/dist/types/lib/bll/ssf/loconnect.d.ts +15 -0
- package/dist/types/lib/bll/ssf/ssfBase.d.ts +23 -0
- package/dist/types/lib/bll/ssf/types.d.ts +99 -0
- package/dist/types/lib/bll/types.d.ts +47 -0
- package/dist/types/lib/bll/validators/dateValidator.d.ts +16 -0
- package/dist/types/lib/bll/validators/emailValidator.d.ts +4 -0
- package/dist/types/lib/bll/validators/factory/index.d.ts +15 -0
- package/dist/types/lib/bll/validators/index.d.ts +2 -0
- package/dist/types/lib/bll/validators/maxCharValidator.d.ts +4 -0
- package/dist/types/lib/bll/validators/requiredValidator.d.ts +4 -0
- package/dist/types/lib/bll/validators/zipValidator.d.ts +5 -0
- package/dist/types/lib/core/index.d.ts +29 -0
- package/dist/types/lib/demo/config.d.ts +11 -0
- package/dist/types/lib/demo/index.d.ts +1 -0
- package/dist/types/lib/renderer/FieldRenderer.d.ts +5 -0
- package/dist/types/lib/renderer/base/hooks/fieldDescription.d.ts +5 -0
- package/dist/types/lib/renderer/base/hooks/fieldDisabled.d.ts +10 -0
- package/dist/types/lib/renderer/base/hooks/fieldGoTo.d.ts +4 -0
- package/dist/types/lib/renderer/base/hooks/fieldLocked.d.ts +4 -0
- package/dist/types/lib/renderer/base/hooks/fieldMeta.d.ts +10 -0
- package/dist/types/lib/renderer/base/hooks/fieldSubscribers.d.ts +6 -0
- package/dist/types/lib/renderer/base/hooks/fieldValidation.d.ts +9 -0
- package/dist/types/lib/renderer/base/hooks/fieldValue.d.ts +31 -0
- package/dist/types/lib/renderer/base/hooks/hookBase.d.ts +9 -0
- package/dist/types/lib/renderer/base/hooks/index.d.ts +19 -0
- package/dist/types/lib/renderer/base/renderer.d.ts +43 -0
- package/dist/types/lib/renderer/base/rendererValidator.d.ts +15 -0
- package/dist/types/lib/renderer/factory/index.d.ts +5 -0
- package/dist/types/lib/renderer/field-renderers/AddonRenderer.d.ts +12 -0
- package/dist/types/lib/renderer/field-renderers/CheckboxRenderer.d.ts +7 -0
- package/dist/types/lib/renderer/field-renderers/DateRenderer.d.ts +13 -0
- package/dist/types/lib/renderer/field-renderers/DropdownRenderer/hook.d.ts +23 -0
- package/dist/types/lib/renderer/field-renderers/DropdownRenderer/index.d.ts +12 -0
- package/dist/types/lib/renderer/field-renderers/LargeTextRenderer.d.ts +17 -0
- package/dist/types/lib/renderer/field-renderers/NumberRenderer.d.ts +12 -0
- package/dist/types/lib/renderer/field-renderers/RadioGroupRenderer.d.ts +8 -0
- package/dist/types/lib/renderer/field-renderers/RadioRenderer.d.ts +8 -0
- package/dist/types/lib/renderer/field-renderers/TextRenderer.d.ts +8 -0
- package/dist/types/lib/renderer/field-renderers/ToggleRenderer.d.ts +24 -0
- package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/helper.d.ts +48 -0
- package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/hook.d.ts +17 -0
- package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/index.d.ts +9 -0
- package/dist/types/lib/renderer/index.d.ts +2 -0
- package/dist/types/lib/renderer/styles.d.ts +7 -0
- package/dist/types/lib/renderer/types.d.ts +325 -0
- package/dist/types/lib/tests/base/flowBase.d.ts +13 -0
- package/dist/types/lib/tests/base/index.d.ts +6 -0
- package/dist/types/lib/tests/flows/checkboxRendererFlows.d.ts +9 -0
- package/dist/types/lib/tests/flows/dateRendererFlows.d.ts +120 -0
- package/dist/types/lib/tests/flows/dropdownRendererFlows.d.ts +92 -0
- package/dist/types/lib/tests/flows/largeTextRendererFlows.d.ts +9 -0
- package/dist/types/lib/tests/flows/numberRendererFlows.d.ts +11 -0
- package/dist/types/lib/tests/flows/radioRendererFlows.d.ts +10 -0
- package/dist/types/lib/tests/flows/textRendererFlows.d.ts +16 -0
- package/dist/types/lib/tests/flows/toggleRendererFlows.d.ts +10 -0
- package/dist/types/lib/tests/flows/zipCodeRendererFlows.d.ts +169 -0
- package/dist/types/lib/tests/loan-field-renderer-flows.test.d.ts +1 -0
- package/dist/types/lib/utils/dateHelper.d.ts +8 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/package.json +103 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var TextRenderer_exports = {};
|
|
30
|
+
__export(TextRenderer_exports, {
|
|
31
|
+
TextRenderer: () => TextRenderer
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(TextRenderer_exports);
|
|
34
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
35
|
+
var import_react = __toESM(require("react"));
|
|
36
|
+
var import_ds_controlled_form = require("@elliemae/ds-controlled-form");
|
|
37
|
+
var import_renderer = require("../base/renderer");
|
|
38
|
+
var import_AddonRenderer = require("./AddonRenderer");
|
|
39
|
+
var import_styles = require("../styles");
|
|
40
|
+
class TextRenderer extends import_renderer.Renderer {
|
|
41
|
+
AddOnRenderer;
|
|
42
|
+
constructor() {
|
|
43
|
+
super();
|
|
44
|
+
this.AddOnRenderer = new import_AddonRenderer.AddonRenderer().render();
|
|
45
|
+
this.BRWrapper = this.renderBR();
|
|
46
|
+
}
|
|
47
|
+
render() {
|
|
48
|
+
const TextComponent = (props) => {
|
|
49
|
+
const {
|
|
50
|
+
id,
|
|
51
|
+
fieldId,
|
|
52
|
+
isDisable,
|
|
53
|
+
validationRules = [],
|
|
54
|
+
formatFn,
|
|
55
|
+
parseFn,
|
|
56
|
+
onChange,
|
|
57
|
+
onBlur,
|
|
58
|
+
autoFieldSet = true,
|
|
59
|
+
label,
|
|
60
|
+
rightAddon,
|
|
61
|
+
rendererType,
|
|
62
|
+
extra,
|
|
63
|
+
...rest
|
|
64
|
+
} = props;
|
|
65
|
+
const { BRWrapper, AddOnRenderer } = this;
|
|
66
|
+
const {
|
|
67
|
+
fieldMetadata,
|
|
68
|
+
fieldValue,
|
|
69
|
+
setFieldValue,
|
|
70
|
+
isLockedState,
|
|
71
|
+
isSearchedField,
|
|
72
|
+
isFieldDisabled,
|
|
73
|
+
validationResult,
|
|
74
|
+
setIsSearchedField,
|
|
75
|
+
ariaDescProps
|
|
76
|
+
} = this.initVM(props);
|
|
77
|
+
const {
|
|
78
|
+
isLockField = false,
|
|
79
|
+
maxLength = 0,
|
|
80
|
+
fieldFormat = ""
|
|
81
|
+
} = fieldMetadata || {};
|
|
82
|
+
this.fieldFormat = fieldFormat;
|
|
83
|
+
const { maskType } = rendererType === "text" ? props : {};
|
|
84
|
+
const displayValue = import_react.default.useMemo(() => {
|
|
85
|
+
const rawValue = fieldValue || "";
|
|
86
|
+
if (formatFn && typeof formatFn === "function") {
|
|
87
|
+
return formatFn(rawValue, fieldMetadata);
|
|
88
|
+
}
|
|
89
|
+
return this.getFormattedValue(rawValue);
|
|
90
|
+
}, [fieldValue, fieldMetadata, formatFn]);
|
|
91
|
+
const phoneMaskProps = (0, import_ds_controlled_form.usePhoneMask)({
|
|
92
|
+
valueSetter: (data) => {
|
|
93
|
+
if (!props.isDisable && !isFieldDisabled) {
|
|
94
|
+
setFieldValue(data);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
const ssnMaskProps = (0, import_ds_controlled_form.useSSNMask)({
|
|
99
|
+
valueSetter: (data) => {
|
|
100
|
+
if (!props.isDisable && !isFieldDisabled) {
|
|
101
|
+
setFieldValue(data);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
const onBlurEvent = (0, import_react.useCallback)(
|
|
106
|
+
(e) => {
|
|
107
|
+
const { value } = e.target;
|
|
108
|
+
if (!isDisable && !isFieldDisabled) {
|
|
109
|
+
const formattedValue = formatFn && typeof formatFn === "function" ? formatFn(value, fieldMetadata) : this.getFormattedValue(value);
|
|
110
|
+
setFieldValue(formattedValue);
|
|
111
|
+
const rulesToCheck = [...validationRules];
|
|
112
|
+
if (rendererType === "email") {
|
|
113
|
+
rulesToCheck.push({
|
|
114
|
+
type: "email",
|
|
115
|
+
message: "Please enter a valid email address."
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const tempValResult = this.Hooks.runValidationsOnValue(
|
|
119
|
+
formattedValue,
|
|
120
|
+
rulesToCheck
|
|
121
|
+
);
|
|
122
|
+
this.VM.setValidationResult(tempValResult);
|
|
123
|
+
if (!tempValResult.isValid) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const parsedValue = parseFn && typeof parseFn === "function" ? parseFn(formattedValue, fieldMetadata) : this.getParsedValue(formattedValue);
|
|
127
|
+
if (autoFieldSet) {
|
|
128
|
+
(async () => {
|
|
129
|
+
await this.BLL.SSF.setFieldValue(fieldId, parsedValue);
|
|
130
|
+
})();
|
|
131
|
+
}
|
|
132
|
+
if (onBlur) {
|
|
133
|
+
onBlur(fieldId, parsedValue);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
138
|
+
[
|
|
139
|
+
autoFieldSet,
|
|
140
|
+
fieldId,
|
|
141
|
+
fieldMetadata,
|
|
142
|
+
formatFn,
|
|
143
|
+
isDisable,
|
|
144
|
+
isFieldDisabled,
|
|
145
|
+
onBlur,
|
|
146
|
+
parseFn,
|
|
147
|
+
rendererType,
|
|
148
|
+
setFieldValue,
|
|
149
|
+
validationRules
|
|
150
|
+
]
|
|
151
|
+
);
|
|
152
|
+
const onChangeEvent = (0, import_react.useCallback)(
|
|
153
|
+
(e) => {
|
|
154
|
+
setIsSearchedField(false);
|
|
155
|
+
const { value } = e.target;
|
|
156
|
+
if (!isDisable && !isFieldDisabled) {
|
|
157
|
+
setFieldValue(value);
|
|
158
|
+
if (onChange) {
|
|
159
|
+
onChange(fieldId, value);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
[
|
|
164
|
+
fieldId,
|
|
165
|
+
isDisable,
|
|
166
|
+
isFieldDisabled,
|
|
167
|
+
onChange,
|
|
168
|
+
setFieldValue,
|
|
169
|
+
setIsSearchedField
|
|
170
|
+
]
|
|
171
|
+
);
|
|
172
|
+
const maskProps = {
|
|
173
|
+
...maskType === "Phone" && phoneMaskProps ? phoneMaskProps : {},
|
|
174
|
+
...maskType === "SSN" && ssnMaskProps ? ssnMaskProps : {}
|
|
175
|
+
};
|
|
176
|
+
const validationProps = this.buildValidationProps(validationResult);
|
|
177
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
178
|
+
BRWrapper,
|
|
179
|
+
{
|
|
180
|
+
fieldId,
|
|
181
|
+
inputID: id || fieldId,
|
|
182
|
+
label,
|
|
183
|
+
value: displayValue,
|
|
184
|
+
...validationProps,
|
|
185
|
+
...props.brCompProps || {},
|
|
186
|
+
withHighlight: isSearchedField,
|
|
187
|
+
children: [
|
|
188
|
+
!label && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.EmptyLabel, { htmlFor: id || fieldId }),
|
|
189
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
190
|
+
AddOnRenderer,
|
|
191
|
+
{
|
|
192
|
+
rendererType: "addon",
|
|
193
|
+
fieldId,
|
|
194
|
+
isLocked: isLockedState,
|
|
195
|
+
isPadLock: isLockField,
|
|
196
|
+
isDisable: props.isDisable,
|
|
197
|
+
onPadLockToggle: () => this.toggleLockStatus(fieldId, isLockedState || false),
|
|
198
|
+
rightAddon,
|
|
199
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
200
|
+
import_ds_controlled_form.DSInputText,
|
|
201
|
+
{
|
|
202
|
+
id: id || fieldId,
|
|
203
|
+
"data-testid": fieldId,
|
|
204
|
+
value: displayValue,
|
|
205
|
+
applyAriaDisabled: isFieldDisabled || isDisable,
|
|
206
|
+
...maxLength && maxLength > 0 && { maxLength },
|
|
207
|
+
onChange: onChangeEvent,
|
|
208
|
+
onBlur: onBlurEvent,
|
|
209
|
+
...extra,
|
|
210
|
+
...maskProps,
|
|
211
|
+
...ariaDescProps,
|
|
212
|
+
...this.sanitize(rest)
|
|
213
|
+
}
|
|
214
|
+
)
|
|
215
|
+
}
|
|
216
|
+
)
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
);
|
|
220
|
+
};
|
|
221
|
+
return import_react.default.memo(TextComponent);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var ToggleRenderer_exports = {};
|
|
30
|
+
__export(ToggleRenderer_exports, {
|
|
31
|
+
ToggleRenderer: () => ToggleRenderer
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(ToggleRenderer_exports);
|
|
34
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
35
|
+
var import_react = __toESM(require("react"));
|
|
36
|
+
var import_ds_form_toggle = require("@elliemae/ds-form-toggle");
|
|
37
|
+
var import_ds_form_layout_label = require("@elliemae/ds-form-layout-label");
|
|
38
|
+
var import_renderer = require("../base/renderer");
|
|
39
|
+
var import_styles = require("../styles");
|
|
40
|
+
class ToggleRenderer extends import_renderer.Renderer {
|
|
41
|
+
constructor() {
|
|
42
|
+
super();
|
|
43
|
+
this.BRWrapper = this.renderBR();
|
|
44
|
+
}
|
|
45
|
+
render() {
|
|
46
|
+
const { BRWrapper } = this;
|
|
47
|
+
const ToggleComponent = (props) => {
|
|
48
|
+
const { fieldId, onChange, isDisable, label, extra, ...rest } = props;
|
|
49
|
+
const {
|
|
50
|
+
fieldValue,
|
|
51
|
+
isFieldDisabled,
|
|
52
|
+
setFieldValue,
|
|
53
|
+
validationResult,
|
|
54
|
+
isSearchedField,
|
|
55
|
+
setIsSearchedField
|
|
56
|
+
} = this.initVM(props);
|
|
57
|
+
const validationProps = this.buildValidationProps(validationResult);
|
|
58
|
+
const onChangeEvent = (0, import_react.useCallback)(() => {
|
|
59
|
+
setIsSearchedField(false);
|
|
60
|
+
if (!isDisable && !isFieldDisabled) {
|
|
61
|
+
const updatedValue = !fieldValue;
|
|
62
|
+
const formattedValue = this.getFormattedValue(updatedValue);
|
|
63
|
+
setFieldValue(formattedValue);
|
|
64
|
+
const parsedValue = this.getParsedValue(formattedValue);
|
|
65
|
+
(async () => {
|
|
66
|
+
await this.BLL.SSF.setFieldValue(fieldId, parsedValue);
|
|
67
|
+
if (onChange) {
|
|
68
|
+
onChange(fieldId, parsedValue);
|
|
69
|
+
}
|
|
70
|
+
})();
|
|
71
|
+
}
|
|
72
|
+
}, [
|
|
73
|
+
isDisable,
|
|
74
|
+
isFieldDisabled,
|
|
75
|
+
fieldValue,
|
|
76
|
+
onChange,
|
|
77
|
+
setFieldValue,
|
|
78
|
+
setIsSearchedField,
|
|
79
|
+
fieldId
|
|
80
|
+
]);
|
|
81
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
82
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
83
|
+
import_ds_form_layout_label.DSFormLayoutLabel,
|
|
84
|
+
{
|
|
85
|
+
fontWeight: import_styles.theme.fontWeights.semibold,
|
|
86
|
+
htmlFor: fieldId,
|
|
87
|
+
"data-public": true,
|
|
88
|
+
children: label
|
|
89
|
+
}
|
|
90
|
+
),
|
|
91
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
92
|
+
BRWrapper,
|
|
93
|
+
{
|
|
94
|
+
fieldId,
|
|
95
|
+
inputID: fieldId,
|
|
96
|
+
value: !!fieldValue,
|
|
97
|
+
...props.brCompProps || {},
|
|
98
|
+
withHighlight: isSearchedField,
|
|
99
|
+
...validationProps,
|
|
100
|
+
children: [
|
|
101
|
+
!label && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.EmptyLabel, { htmlFor: fieldId }),
|
|
102
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
103
|
+
import_ds_form_toggle.DSControlledToggle,
|
|
104
|
+
{
|
|
105
|
+
containerProps: { "data-testid": fieldId },
|
|
106
|
+
id: fieldId,
|
|
107
|
+
checked: !!fieldValue,
|
|
108
|
+
applyAriaDisabled: isFieldDisabled || isDisable,
|
|
109
|
+
onChange: onChangeEvent,
|
|
110
|
+
...extra,
|
|
111
|
+
...this.sanitize(rest)
|
|
112
|
+
}
|
|
113
|
+
)
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
] });
|
|
118
|
+
};
|
|
119
|
+
return import_react.default.memo(ToggleComponent);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var helper_exports = {};
|
|
20
|
+
__export(helper_exports, {
|
|
21
|
+
ZipCodeHelper: () => ZipCodeHelper,
|
|
22
|
+
useDebouncedCallback: () => useDebouncedCallback
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(helper_exports);
|
|
25
|
+
var import_react = require("react");
|
|
26
|
+
const useDebouncedCallback = (callback, waitTimeout = 150, options = { leading: false }) => {
|
|
27
|
+
const timeoutRef = (0, import_react.useRef)(null);
|
|
28
|
+
const leadingRef = (0, import_react.useRef)(options.leading ?? false);
|
|
29
|
+
const callbackRef = (0, import_react.useRef)(callback);
|
|
30
|
+
(0, import_react.useEffect)(() => {
|
|
31
|
+
callbackRef.current = callback;
|
|
32
|
+
}, [callback]);
|
|
33
|
+
const clearTimeoutFn = (0, import_react.useCallback)(() => {
|
|
34
|
+
if (timeoutRef.current !== null) {
|
|
35
|
+
window.clearTimeout(timeoutRef.current);
|
|
36
|
+
timeoutRef.current = null;
|
|
37
|
+
}
|
|
38
|
+
}, []);
|
|
39
|
+
(0, import_react.useEffect)(() => clearTimeoutFn, [clearTimeoutFn]);
|
|
40
|
+
const debouncedCallback = (0, import_react.useCallback)(
|
|
41
|
+
(...args) => {
|
|
42
|
+
clearTimeoutFn();
|
|
43
|
+
if (leadingRef.current) {
|
|
44
|
+
callbackRef.current(...args);
|
|
45
|
+
leadingRef.current = false;
|
|
46
|
+
} else {
|
|
47
|
+
timeoutRef.current = window.setTimeout(() => {
|
|
48
|
+
callbackRef.current(...args);
|
|
49
|
+
leadingRef.current = options.leading ?? false;
|
|
50
|
+
}, waitTimeout);
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
[waitTimeout, clearTimeoutFn, options.leading]
|
|
54
|
+
);
|
|
55
|
+
return debouncedCallback;
|
|
56
|
+
};
|
|
57
|
+
class ZipCodeHelper {
|
|
58
|
+
// Prevent instantiation - this is a static utility class
|
|
59
|
+
constructor() {
|
|
60
|
+
}
|
|
61
|
+
static SECTION_OPTION = {
|
|
62
|
+
dsId: "section",
|
|
63
|
+
type: "section",
|
|
64
|
+
label: "Please select the appropriate city",
|
|
65
|
+
options: [],
|
|
66
|
+
zipNumber: "",
|
|
67
|
+
cityData: null
|
|
68
|
+
};
|
|
69
|
+
static DEFAULT_COUNTRY_CODE = "US";
|
|
70
|
+
/**
|
|
71
|
+
* Normalizes city data from various API response formats
|
|
72
|
+
* Handles both uppercase and lowercase property names
|
|
73
|
+
* @param cityData - The city data object to normalize
|
|
74
|
+
* @returns Normalized object with lowercase property names
|
|
75
|
+
*/
|
|
76
|
+
static normalizeCityData(cityData) {
|
|
77
|
+
return {
|
|
78
|
+
city: cityData?.City ?? cityData?.city ?? "",
|
|
79
|
+
state: cityData?.State ?? cityData?.state ?? "",
|
|
80
|
+
county: cityData?.County ?? cityData?.county ?? ""
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Formats a city data option into a readable label
|
|
85
|
+
* Format: "City - County - State"
|
|
86
|
+
* @param option - The city data to format
|
|
87
|
+
* @returns Formatted string label
|
|
88
|
+
*/
|
|
89
|
+
static formatOptionLabel(option) {
|
|
90
|
+
return [
|
|
91
|
+
option.City ?? option.city ?? "",
|
|
92
|
+
option.County ?? option.county ?? "",
|
|
93
|
+
option.State ?? option.state ?? ""
|
|
94
|
+
].filter(Boolean).join(" - ");
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Builds autocomplete options from zip code lookup data
|
|
98
|
+
* When multiple cities exist for a zip code, adds a section header
|
|
99
|
+
* @param zip - The zip code string
|
|
100
|
+
* @param data - Array of city data for the zip code
|
|
101
|
+
* @returns Array of autocomplete options
|
|
102
|
+
*/
|
|
103
|
+
static buildOptions(zip, data) {
|
|
104
|
+
const optionEntries = data.map((option, index) => ({
|
|
105
|
+
dsId: `${index}`,
|
|
106
|
+
type: "option",
|
|
107
|
+
label: this.formatOptionLabel(option),
|
|
108
|
+
value: zip,
|
|
109
|
+
zipNumber: zip,
|
|
110
|
+
cityData: option
|
|
111
|
+
}));
|
|
112
|
+
if (optionEntries.length <= 1) {
|
|
113
|
+
return optionEntries;
|
|
114
|
+
}
|
|
115
|
+
return [
|
|
116
|
+
{ ...this.SECTION_OPTION, zipNumber: zip, options: optionEntries },
|
|
117
|
+
...optionEntries
|
|
118
|
+
];
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Validates whether any geo fields contain non-empty address data
|
|
122
|
+
* @param geoFields - Optional geo fields object to validate
|
|
123
|
+
* @returns True if any geo field has non-empty string value
|
|
124
|
+
*/
|
|
125
|
+
static hasAddressTargets(geoFields) {
|
|
126
|
+
return Boolean(
|
|
127
|
+
geoFields && Object.values(geoFields).some(
|
|
128
|
+
(value) => typeof value === "string" && value.length
|
|
129
|
+
)
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var hook_exports = {};
|
|
20
|
+
__export(hook_exports, {
|
|
21
|
+
useZipCodeLookup: () => useZipCodeLookup
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(hook_exports);
|
|
24
|
+
var import_react = require("react");
|
|
25
|
+
var import_helper = require("./helper");
|
|
26
|
+
const useZipCodeLookup = ({
|
|
27
|
+
ssf,
|
|
28
|
+
onGeoLookupComplete,
|
|
29
|
+
useLatLong,
|
|
30
|
+
isForeignAddress,
|
|
31
|
+
geoFields
|
|
32
|
+
}) => {
|
|
33
|
+
const [options, setOptions] = (0, import_react.useState)([]);
|
|
34
|
+
const shouldAutoFill = (0, import_react.useMemo)(
|
|
35
|
+
() => import_helper.ZipCodeHelper.hasAddressTargets(geoFields),
|
|
36
|
+
[geoFields]
|
|
37
|
+
);
|
|
38
|
+
const applyAddressData = (0, import_react.useCallback)(
|
|
39
|
+
async (zipNumber, cityData) => {
|
|
40
|
+
if (!cityData) return;
|
|
41
|
+
onGeoLookupComplete?.(zipNumber, cityData);
|
|
42
|
+
if (!shouldAutoFill || !geoFields) return;
|
|
43
|
+
const { city, state, county, country, zip } = geoFields;
|
|
44
|
+
const normalized = import_helper.ZipCodeHelper.normalizeCityData(cityData);
|
|
45
|
+
const payload = {};
|
|
46
|
+
const fieldMappings = [
|
|
47
|
+
[zip, zipNumber],
|
|
48
|
+
[city, normalized.city],
|
|
49
|
+
[state, normalized.state],
|
|
50
|
+
[county, normalized.county]
|
|
51
|
+
];
|
|
52
|
+
fieldMappings.forEach(([fieldKey, value]) => {
|
|
53
|
+
if (fieldKey && value) {
|
|
54
|
+
payload[fieldKey] = value;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
if (country && !isForeignAddress) {
|
|
58
|
+
payload[country] = import_helper.ZipCodeHelper.DEFAULT_COUNTRY_CODE;
|
|
59
|
+
}
|
|
60
|
+
if (Object.keys(payload).length) {
|
|
61
|
+
try {
|
|
62
|
+
await ssf.setFieldsValues(payload, true);
|
|
63
|
+
} catch (error) {
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
[geoFields, isForeignAddress, shouldAutoFill, ssf, onGeoLookupComplete]
|
|
68
|
+
);
|
|
69
|
+
const fetchZipResults = (0, import_react.useCallback)(
|
|
70
|
+
async (zip) => {
|
|
71
|
+
const rawResults = useLatLong ? await ssf.getZipCodeOptionsWithLatLong(zip) : await ssf.getZipCodeOptions(zip);
|
|
72
|
+
return Array.isArray(rawResults) ? rawResults : [];
|
|
73
|
+
},
|
|
74
|
+
[ssf, useLatLong]
|
|
75
|
+
);
|
|
76
|
+
const handleLookupResults = (0, import_react.useCallback)(
|
|
77
|
+
async (zip, results) => {
|
|
78
|
+
if (results.length === 1) {
|
|
79
|
+
setOptions([]);
|
|
80
|
+
await applyAddressData(zip, results[0]);
|
|
81
|
+
} else if (results.length > 1) {
|
|
82
|
+
setOptions(import_helper.ZipCodeHelper.buildOptions(zip, results));
|
|
83
|
+
} else {
|
|
84
|
+
setOptions([]);
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
[applyAddressData]
|
|
88
|
+
);
|
|
89
|
+
const runLookup = (0, import_react.useCallback)(
|
|
90
|
+
async (zip) => {
|
|
91
|
+
if (!zip || isForeignAddress) {
|
|
92
|
+
setOptions([]);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const results = await fetchZipResults(zip);
|
|
97
|
+
await handleLookupResults(zip, results);
|
|
98
|
+
} catch (error) {
|
|
99
|
+
setOptions([]);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
[fetchZipResults, handleLookupResults, isForeignAddress]
|
|
103
|
+
);
|
|
104
|
+
const clearOptions = (0, import_react.useCallback)(() => setOptions([]), []);
|
|
105
|
+
const debouncedLookup = (0, import_helper.useDebouncedCallback)((zip) => {
|
|
106
|
+
runLookup(zip);
|
|
107
|
+
});
|
|
108
|
+
const handleOptionSelect = (0, import_react.useCallback)(
|
|
109
|
+
(label) => {
|
|
110
|
+
if (!label) return null;
|
|
111
|
+
const match = options.find(
|
|
112
|
+
(item) => item.type === "option" && item.label === label
|
|
113
|
+
);
|
|
114
|
+
if (!match) return null;
|
|
115
|
+
clearOptions();
|
|
116
|
+
applyAddressData(match.zipNumber, match.cityData).catch(() => {
|
|
117
|
+
});
|
|
118
|
+
return match;
|
|
119
|
+
},
|
|
120
|
+
[applyAddressData, clearOptions, options]
|
|
121
|
+
);
|
|
122
|
+
return {
|
|
123
|
+
options,
|
|
124
|
+
searchZipCode: debouncedLookup,
|
|
125
|
+
handleOptionSelect,
|
|
126
|
+
clearOptions
|
|
127
|
+
};
|
|
128
|
+
};
|