@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,195 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import { HookBase } from "./hookBase";
|
|
3
|
+
class FieldValue extends HookBase {
|
|
4
|
+
async getFieldValue(fieldId) {
|
|
5
|
+
try {
|
|
6
|
+
const value = await this.BLL.SSF.getFieldValue(fieldId);
|
|
7
|
+
return value;
|
|
8
|
+
} catch (error) {
|
|
9
|
+
this.BLL.Core.Log("error", `error fetching field value for ${fieldId}`, {
|
|
10
|
+
fieldId,
|
|
11
|
+
error
|
|
12
|
+
});
|
|
13
|
+
return void 0;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
formatValue(params) {
|
|
17
|
+
const { fieldValue, fieldFormat, options } = params;
|
|
18
|
+
if (fieldValue === null || fieldValue === void 0 || fieldValue === "") {
|
|
19
|
+
return fieldValue;
|
|
20
|
+
}
|
|
21
|
+
return this.formatByRendererType(fieldValue, fieldFormat, options);
|
|
22
|
+
}
|
|
23
|
+
formatByRendererType(fieldValue, fieldFormat, options) {
|
|
24
|
+
const { rendererType, maskType, numberMaskOptions } = options;
|
|
25
|
+
switch (rendererType) {
|
|
26
|
+
case "text":
|
|
27
|
+
case "email":
|
|
28
|
+
case "radiogroup":
|
|
29
|
+
case "radio":
|
|
30
|
+
return this.formatTextValue({
|
|
31
|
+
value: fieldValue,
|
|
32
|
+
fieldFormat,
|
|
33
|
+
maskType,
|
|
34
|
+
rendererType
|
|
35
|
+
});
|
|
36
|
+
case "number":
|
|
37
|
+
return this.formatNumberValue(
|
|
38
|
+
fieldValue,
|
|
39
|
+
fieldFormat,
|
|
40
|
+
numberMaskOptions
|
|
41
|
+
);
|
|
42
|
+
case "checkbox":
|
|
43
|
+
return this.formatBooleanValue(fieldValue);
|
|
44
|
+
case "date":
|
|
45
|
+
return this.formatDateValue(fieldValue, options.dateFormat);
|
|
46
|
+
case "dropdown":
|
|
47
|
+
return this.formatDropdownValue(fieldValue);
|
|
48
|
+
case "zipcode":
|
|
49
|
+
return this.formatZipValue(String(fieldValue));
|
|
50
|
+
default:
|
|
51
|
+
return fieldValue;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
formatTextValue({
|
|
55
|
+
value,
|
|
56
|
+
fieldFormat,
|
|
57
|
+
maskType,
|
|
58
|
+
rendererType
|
|
59
|
+
}) {
|
|
60
|
+
if ((rendererType === "radio" || rendererType === "radiogroup") && fieldFormat === "Y") {
|
|
61
|
+
return this.formatBooleanValue(value);
|
|
62
|
+
}
|
|
63
|
+
if (maskType === "SSN" || fieldFormat === "SS") {
|
|
64
|
+
return this.BLL.Formatter.createFormatter("SS").format(value);
|
|
65
|
+
}
|
|
66
|
+
if (maskType === "Phone" || fieldFormat === "P") {
|
|
67
|
+
return this.BLL.Formatter.createFormatter("P").format(value, {
|
|
68
|
+
isInternational: false
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return String(value);
|
|
72
|
+
}
|
|
73
|
+
formatNumberValue(value, fieldFormat, numberMaskOptions) {
|
|
74
|
+
return this.BLL.Formatter.createFormatter("D2").format(value, {
|
|
75
|
+
fieldFormat,
|
|
76
|
+
numberOptions: {
|
|
77
|
+
includeThousandsSeparator: true,
|
|
78
|
+
...numberMaskOptions
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
formatBooleanValue(value) {
|
|
83
|
+
return this.BLL.Formatter.createFormatter("Y").format(value);
|
|
84
|
+
}
|
|
85
|
+
formatDateValue(value, dateFormat) {
|
|
86
|
+
return this.BLL.Formatter.createFormatter("DT").format(value, {
|
|
87
|
+
dateFormat
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
formatDropdownValue(value) {
|
|
91
|
+
const formatter = this.BLL.Formatter.createFormatter("DD");
|
|
92
|
+
return formatter.format(value);
|
|
93
|
+
}
|
|
94
|
+
formatZipValue(value) {
|
|
95
|
+
const formatter = this.BLL.Formatter.createFormatter("Z");
|
|
96
|
+
return formatter.format(value);
|
|
97
|
+
}
|
|
98
|
+
useFieldValue(params) {
|
|
99
|
+
const { fieldId, fieldFormat, options } = params;
|
|
100
|
+
const [fieldValue, setFieldValue] = useState(void 0);
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
(async () => {
|
|
103
|
+
if (fieldFormat) {
|
|
104
|
+
const value = await this.getFieldValue(fieldId);
|
|
105
|
+
setFieldValue(
|
|
106
|
+
this.formatValue({
|
|
107
|
+
fieldValue: value,
|
|
108
|
+
fieldFormat,
|
|
109
|
+
options
|
|
110
|
+
})
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
})();
|
|
114
|
+
}, [fieldId, fieldFormat]);
|
|
115
|
+
return {
|
|
116
|
+
fieldValue,
|
|
117
|
+
setFieldValue
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// eslint-disable-next-line complexity
|
|
121
|
+
parseValue(params) {
|
|
122
|
+
const { fieldValue, fieldFormat, options } = params;
|
|
123
|
+
if (fieldValue === null || fieldValue === void 0 || fieldValue === "") {
|
|
124
|
+
return fieldValue;
|
|
125
|
+
}
|
|
126
|
+
const { rendererType, maskType, unmaskPattern } = options;
|
|
127
|
+
switch (rendererType) {
|
|
128
|
+
case "text":
|
|
129
|
+
case "email":
|
|
130
|
+
case "radio":
|
|
131
|
+
case "radiogroup":
|
|
132
|
+
return this.parseTextValue({
|
|
133
|
+
rendererType,
|
|
134
|
+
value: fieldValue,
|
|
135
|
+
fieldFormat,
|
|
136
|
+
maskType,
|
|
137
|
+
unmaskPattern
|
|
138
|
+
});
|
|
139
|
+
case "number":
|
|
140
|
+
return this.parseNumberValue({
|
|
141
|
+
value: fieldValue,
|
|
142
|
+
fieldFormat,
|
|
143
|
+
unmaskPattern
|
|
144
|
+
});
|
|
145
|
+
case "checkbox":
|
|
146
|
+
return this.parseBooleanValue(fieldValue);
|
|
147
|
+
case "date":
|
|
148
|
+
return this.parseDateValue({
|
|
149
|
+
value: fieldValue,
|
|
150
|
+
dateFormat: options.dateFormat
|
|
151
|
+
});
|
|
152
|
+
case "zipcode":
|
|
153
|
+
return this.parseZipValue(String(fieldValue));
|
|
154
|
+
default:
|
|
155
|
+
return fieldValue;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
parseTextValue(params) {
|
|
159
|
+
const { rendererType, value, fieldFormat, maskType, unmaskPattern } = params;
|
|
160
|
+
if ((rendererType === "radio" || rendererType === "radiogroup") && fieldFormat === "Y") {
|
|
161
|
+
return this.parseBooleanValue(value);
|
|
162
|
+
}
|
|
163
|
+
if (maskType === "SSN" || fieldFormat === "SS") {
|
|
164
|
+
return this.BLL.Formatter.createFormatter("SS").parse(String(value));
|
|
165
|
+
}
|
|
166
|
+
if (maskType === "Phone" || fieldFormat === "P") {
|
|
167
|
+
return this.BLL.Formatter.createFormatter("P").parse(String(value), {
|
|
168
|
+
unmaskPattern
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return value;
|
|
172
|
+
}
|
|
173
|
+
parseNumberValue(params) {
|
|
174
|
+
const { value, fieldFormat, unmaskPattern } = params;
|
|
175
|
+
return this.BLL.Formatter.createFormatter("D2").parse(String(value), {
|
|
176
|
+
fieldFormat,
|
|
177
|
+
unmaskPattern
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
parseBooleanValue(value) {
|
|
181
|
+
return this.BLL.Formatter.createFormatter("Y").parse(Boolean(value));
|
|
182
|
+
}
|
|
183
|
+
parseDateValue(params) {
|
|
184
|
+
const { value, dateFormat } = params;
|
|
185
|
+
return this.BLL.Formatter.createFormatter("DT").parse(String(value), {
|
|
186
|
+
dateFormat
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
parseZipValue(value) {
|
|
190
|
+
return this.BLL.Formatter.createFormatter("Z").parse(value);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
export {
|
|
194
|
+
FieldValue
|
|
195
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __decorateClass = (decorators2, target, key, kind) => {
|
|
4
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
5
|
+
for (var i = decorators2.length - 1, decorator; i >= 0; i--)
|
|
6
|
+
if (decorator = decorators2[i])
|
|
7
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
8
|
+
if (kind && result) __defProp(target, key, result);
|
|
9
|
+
return result;
|
|
10
|
+
};
|
|
11
|
+
import { decorators } from "@elliemae/pui-app-sdk";
|
|
12
|
+
import { useState, useEffect } from "react";
|
|
13
|
+
import { FieldMeta } from "./fieldMeta";
|
|
14
|
+
import { FieldValue } from "./fieldValue";
|
|
15
|
+
import { FieldDisabled } from "./fieldDisabled";
|
|
16
|
+
import { FieldLocked } from "./fieldLocked";
|
|
17
|
+
import { FieldValidation } from "./fieldValidation";
|
|
18
|
+
import { FieldSubscribers } from "./fieldSubscribers";
|
|
19
|
+
import { FieldGoTo } from "./fieldGoTo";
|
|
20
|
+
import { HookBase } from "./hookBase";
|
|
21
|
+
import { FieldDescription } from "./fieldDescription";
|
|
22
|
+
let Hooks = class extends HookBase {
|
|
23
|
+
useFieldInit(params) {
|
|
24
|
+
const {
|
|
25
|
+
fieldId,
|
|
26
|
+
label = "",
|
|
27
|
+
rendererType,
|
|
28
|
+
maskType,
|
|
29
|
+
numberMaskOptions,
|
|
30
|
+
dateFormat,
|
|
31
|
+
forceRefresh
|
|
32
|
+
} = params;
|
|
33
|
+
const [fieldMetadata, setFieldMetadata] = useState(
|
|
34
|
+
{}
|
|
35
|
+
);
|
|
36
|
+
const [fieldValue, setFieldValue] = useState(void 0);
|
|
37
|
+
const [isLockedState, setIsLockedState] = useState(false);
|
|
38
|
+
const [isSearchedField, setIsSearchedField] = useState(false);
|
|
39
|
+
const [isReadonlyLoan, setIsReadonlyLoan] = useState(false);
|
|
40
|
+
const [validationResult, setValidationResult] = useState(null);
|
|
41
|
+
const [ariaDescProps, setAriaDescProps] = useState({ "aria-label": label || "" });
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (!fieldId) return;
|
|
44
|
+
(async () => {
|
|
45
|
+
const [metadata, isLoanReadonly, lockStatus, fldValue, isGoToField] = await Promise.all([
|
|
46
|
+
this.getMetadata(fieldId),
|
|
47
|
+
this.isLoanReadonly(),
|
|
48
|
+
this.getFieldLockStatus(fieldId),
|
|
49
|
+
this.getFieldValue(fieldId),
|
|
50
|
+
this.isGoToField(fieldId)
|
|
51
|
+
]);
|
|
52
|
+
setFieldMetadata(metadata);
|
|
53
|
+
setFieldValue(
|
|
54
|
+
this.formatValue({
|
|
55
|
+
fieldValue: fldValue,
|
|
56
|
+
fieldFormat: metadata.fieldFormat,
|
|
57
|
+
options: {
|
|
58
|
+
rendererType,
|
|
59
|
+
maskType,
|
|
60
|
+
numberMaskOptions,
|
|
61
|
+
dateFormat
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
);
|
|
65
|
+
if (metadata.isLockField) {
|
|
66
|
+
setIsLockedState(lockStatus);
|
|
67
|
+
} else {
|
|
68
|
+
setIsLockedState(false);
|
|
69
|
+
}
|
|
70
|
+
setIsReadonlyLoan(isLoanReadonly);
|
|
71
|
+
setIsSearchedField(isGoToField);
|
|
72
|
+
setAriaDescProps(
|
|
73
|
+
this.getFieldAriaDescProps(label || "", metadata.description || "")
|
|
74
|
+
);
|
|
75
|
+
})();
|
|
76
|
+
}, [fieldId, forceRefresh]);
|
|
77
|
+
const isFieldDisabled = isReadonlyLoan || fieldMetadata.isLockField && !isLockedState || fieldMetadata.isReadOnly;
|
|
78
|
+
return {
|
|
79
|
+
fieldMetadata,
|
|
80
|
+
fieldValue,
|
|
81
|
+
setFieldValue,
|
|
82
|
+
isLockedState,
|
|
83
|
+
setIsLockedState,
|
|
84
|
+
isSearchedField,
|
|
85
|
+
setIsSearchedField,
|
|
86
|
+
isFieldDisabled,
|
|
87
|
+
validationResult,
|
|
88
|
+
setValidationResult,
|
|
89
|
+
ariaDescProps
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
useFieldGoTo(fieldId) {
|
|
93
|
+
const [isGoToField, setIsGoToField] = useState(false);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (!fieldId) return;
|
|
96
|
+
(async () => {
|
|
97
|
+
const goToStatus = await this.isGoToField(fieldId);
|
|
98
|
+
setIsGoToField(goToStatus);
|
|
99
|
+
})();
|
|
100
|
+
}, [fieldId]);
|
|
101
|
+
return {
|
|
102
|
+
isGoToField,
|
|
103
|
+
setIsGoToField
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
Hooks = __decorateClass([
|
|
108
|
+
decorators.class.Mixins(
|
|
109
|
+
FieldMeta,
|
|
110
|
+
FieldValue,
|
|
111
|
+
FieldDisabled,
|
|
112
|
+
FieldLocked,
|
|
113
|
+
FieldValidation,
|
|
114
|
+
FieldSubscribers,
|
|
115
|
+
FieldGoTo,
|
|
116
|
+
FieldDescription
|
|
117
|
+
)
|
|
118
|
+
], Hooks);
|
|
119
|
+
export {
|
|
120
|
+
Hooks
|
|
121
|
+
};
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { BrComponent } from "@elliemae/business-rules";
|
|
3
|
+
import { BLL } from "../../bll";
|
|
4
|
+
import { RENDERER_CONTROLLED_PROPS } from "../../bll/constants";
|
|
5
|
+
import { Hooks } from "./hooks";
|
|
6
|
+
class Renderer {
|
|
7
|
+
BrComponent = BrComponent;
|
|
8
|
+
fieldFormat = "";
|
|
9
|
+
BLL;
|
|
10
|
+
Hooks;
|
|
11
|
+
BRWrapper;
|
|
12
|
+
VM;
|
|
13
|
+
Props;
|
|
14
|
+
constructor() {
|
|
15
|
+
this.VM = {};
|
|
16
|
+
this.BLL = new BLL();
|
|
17
|
+
this.Hooks = new Hooks(this.BLL);
|
|
18
|
+
this.BRWrapper = this.renderBR();
|
|
19
|
+
this.Props = {};
|
|
20
|
+
}
|
|
21
|
+
async refreshFieldFromLoan() {
|
|
22
|
+
if (this.BLL.SSF.fieldValueResolver) return;
|
|
23
|
+
const { fieldId } = this.Props;
|
|
24
|
+
const fieldVal = await this.BLL.SSF.getFieldValue(fieldId);
|
|
25
|
+
const formattedValue = this.getFormattedValue(fieldVal);
|
|
26
|
+
this.VM.setFieldValue(formattedValue);
|
|
27
|
+
const valResult = this.Hooks.runValidationsOnValue(formattedValue, []);
|
|
28
|
+
if (!valResult.isValid) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.VM.setValidationResult(valResult);
|
|
32
|
+
}
|
|
33
|
+
initCallbacks = () => {
|
|
34
|
+
(async () => {
|
|
35
|
+
await this.refreshFieldFromLoan();
|
|
36
|
+
})();
|
|
37
|
+
};
|
|
38
|
+
renderBR() {
|
|
39
|
+
const { BrComponent: BRWrapper } = this;
|
|
40
|
+
const BrComponentWrapper = (props) => /* @__PURE__ */ jsx(BRWrapper, { ...props, init: this.initCallbacks });
|
|
41
|
+
return BrComponentWrapper;
|
|
42
|
+
}
|
|
43
|
+
syncVM(vm) {
|
|
44
|
+
Object.keys(vm).forEach(
|
|
45
|
+
(key) => {
|
|
46
|
+
this.VM[key] = vm[key];
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
return this.VM;
|
|
50
|
+
}
|
|
51
|
+
buildFormatOptions(props) {
|
|
52
|
+
const { rendererType } = props;
|
|
53
|
+
const rendererOptionMap = {
|
|
54
|
+
text: "maskType",
|
|
55
|
+
number: "numberMaskOptions",
|
|
56
|
+
date: "dateFormat"
|
|
57
|
+
};
|
|
58
|
+
const formatOptions = {};
|
|
59
|
+
const optionKey = rendererOptionMap[rendererType];
|
|
60
|
+
if (optionKey && optionKey in props && props[optionKey]) {
|
|
61
|
+
formatOptions[optionKey] = props[optionKey];
|
|
62
|
+
}
|
|
63
|
+
return formatOptions;
|
|
64
|
+
}
|
|
65
|
+
initVM(props) {
|
|
66
|
+
const { fieldId, label = "", forceRefresh } = props;
|
|
67
|
+
Object.assign(this.Props, props);
|
|
68
|
+
const formatOptions = this.buildFormatOptions(props);
|
|
69
|
+
const {
|
|
70
|
+
fieldMetadata,
|
|
71
|
+
fieldValue,
|
|
72
|
+
setFieldValue,
|
|
73
|
+
isLockedState,
|
|
74
|
+
setIsLockedState,
|
|
75
|
+
isSearchedField,
|
|
76
|
+
setIsSearchedField,
|
|
77
|
+
isFieldDisabled,
|
|
78
|
+
validationResult,
|
|
79
|
+
setValidationResult,
|
|
80
|
+
ariaDescProps
|
|
81
|
+
} = this.Hooks.useFieldInit({
|
|
82
|
+
fieldId,
|
|
83
|
+
label,
|
|
84
|
+
rendererType: props.rendererType,
|
|
85
|
+
maskType: formatOptions.maskType,
|
|
86
|
+
numberMaskOptions: formatOptions.numberMaskOptions,
|
|
87
|
+
dateFormat: formatOptions.dateFormat,
|
|
88
|
+
forceRefresh
|
|
89
|
+
});
|
|
90
|
+
return this.syncVM({
|
|
91
|
+
fieldMetadata,
|
|
92
|
+
fieldValue,
|
|
93
|
+
setFieldValue,
|
|
94
|
+
isLockedState,
|
|
95
|
+
setIsLockedState,
|
|
96
|
+
isSearchedField,
|
|
97
|
+
setIsSearchedField,
|
|
98
|
+
isFieldDisabled,
|
|
99
|
+
validationResult,
|
|
100
|
+
setValidationResult,
|
|
101
|
+
ariaDescProps
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
toggleLockStatus(fieldId, isLockedState) {
|
|
105
|
+
(async () => {
|
|
106
|
+
await this.BLL.SSF.callCalcForLock(fieldId, isLockedState);
|
|
107
|
+
})();
|
|
108
|
+
this.VM.setIsLockedState(!isLockedState);
|
|
109
|
+
}
|
|
110
|
+
buildValidationProps(validationResult) {
|
|
111
|
+
return {
|
|
112
|
+
validationMessage: validationResult && !validationResult.isValid ? validationResult.message || "" : "",
|
|
113
|
+
hasError: validationResult ? !validationResult.isValid : false
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
getFormattedValue(fieldValue) {
|
|
117
|
+
const props = this.Props;
|
|
118
|
+
const { rendererType, maskType, numberMaskOptions, dateFormat } = props;
|
|
119
|
+
const fieldFormat = this.VM.fieldMetadata?.fieldFormat || "";
|
|
120
|
+
return this.Hooks.formatValue({
|
|
121
|
+
fieldValue,
|
|
122
|
+
fieldFormat,
|
|
123
|
+
options: {
|
|
124
|
+
rendererType,
|
|
125
|
+
maskType: rendererType === "text" ? maskType : void 0,
|
|
126
|
+
numberMaskOptions: rendererType === "number" ? numberMaskOptions : void 0,
|
|
127
|
+
dateFormat: rendererType === "date" ? dateFormat : void 0
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
getParsedValue(fieldValue) {
|
|
132
|
+
const props = this.Props;
|
|
133
|
+
const { rendererType, maskType, dateFormat } = props;
|
|
134
|
+
const fieldFormat = this.VM.fieldMetadata?.fieldFormat || "";
|
|
135
|
+
return this.Hooks.parseValue({
|
|
136
|
+
fieldValue,
|
|
137
|
+
fieldFormat,
|
|
138
|
+
options: {
|
|
139
|
+
rendererType,
|
|
140
|
+
maskType: rendererType === "text" ? maskType : void 0,
|
|
141
|
+
dateFormat: rendererType === "date" ? dateFormat : void 0
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Sanitizes extra props by filtering out renderer-controlled properties.
|
|
147
|
+
* Prevents consumers from accidentally overriding internal state management.
|
|
148
|
+
* @template TExtra - Type of the extra props object
|
|
149
|
+
* @param {TExtra | undefined} extra - Additional props passed by the consumer
|
|
150
|
+
* @returns {Omit<TExtra, string>} Sanitized props object with controlled keys removed
|
|
151
|
+
* @example
|
|
152
|
+
* const sanitized = this.sanitize({ className: 'custom', onChange: () => {} });
|
|
153
|
+
* // Returns: { className: 'custom' } (onChange is filtered out)
|
|
154
|
+
*/
|
|
155
|
+
sanitize(extra) {
|
|
156
|
+
if (!extra) return {};
|
|
157
|
+
const controlledKeys = RENDERER_CONTROLLED_PROPS[this.Props.rendererType];
|
|
158
|
+
if (!controlledKeys || controlledKeys.length === 0) {
|
|
159
|
+
return extra;
|
|
160
|
+
}
|
|
161
|
+
const controlledSet = new Set(controlledKeys);
|
|
162
|
+
const sanitized = Object.keys(extra).reduce((acc, key) => {
|
|
163
|
+
if (controlledSet.has(key)) {
|
|
164
|
+
this.BLL.Core.Log(
|
|
165
|
+
"warn",
|
|
166
|
+
`[${this.Props.rendererType}Renderer] Filtered controlled prop '${key}' from extra props. This prop is managed internally.`
|
|
167
|
+
);
|
|
168
|
+
} else {
|
|
169
|
+
acc[key] = extra[key];
|
|
170
|
+
}
|
|
171
|
+
return acc;
|
|
172
|
+
}, {});
|
|
173
|
+
return sanitized;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
export {
|
|
177
|
+
Renderer
|
|
178
|
+
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { bllInstance } from "../../bll";
|
|
2
|
+
class RendererValidator {
|
|
3
|
+
static NUMERIC_FORMATS = ["DECIMAL", "INTEGER"];
|
|
4
|
+
static BOOLEAN_FORMATS = ["YN", "BOOLEAN"];
|
|
5
|
+
static DATE_FORMATS = ["DATE", "DATETIME"];
|
|
6
|
+
static validateRendererType({
|
|
7
|
+
rendererType,
|
|
8
|
+
fieldFormat
|
|
9
|
+
}) {
|
|
10
|
+
const format = fieldFormat?.toUpperCase();
|
|
11
|
+
if (rendererType === "number") {
|
|
12
|
+
return {
|
|
13
|
+
isValid: this.isNumericFormat(format),
|
|
14
|
+
expectedType: "number"
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
if (rendererType === "checkbox") {
|
|
18
|
+
return {
|
|
19
|
+
isValid: this.isBooleanFormat(format),
|
|
20
|
+
expectedType: "checkbox"
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
if (rendererType === "text" || rendererType === "email") {
|
|
24
|
+
return {
|
|
25
|
+
isValid: this.isTextCompatibleFormat(format),
|
|
26
|
+
expectedType: "text/email"
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (rendererType === "date" || rendererType === "datetime") {
|
|
30
|
+
return {
|
|
31
|
+
isValid: this.isDateFormat(format),
|
|
32
|
+
expectedType: "date/datetime"
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return { isValid: true, expectedType: "unknown" };
|
|
36
|
+
}
|
|
37
|
+
static isNumericFormat(format) {
|
|
38
|
+
return this.NUMERIC_FORMATS.some((f) => format?.includes(f)) || false;
|
|
39
|
+
}
|
|
40
|
+
static isBooleanFormat(format) {
|
|
41
|
+
return this.BOOLEAN_FORMATS.includes(format || "");
|
|
42
|
+
}
|
|
43
|
+
static isDateFormat(format) {
|
|
44
|
+
return this.DATE_FORMATS.includes(format || "");
|
|
45
|
+
}
|
|
46
|
+
static isTextCompatibleFormat(format) {
|
|
47
|
+
return !(this.isNumericFormat(format) || this.isBooleanFormat(format) || this.isDateFormat(format));
|
|
48
|
+
}
|
|
49
|
+
static logMismatch({
|
|
50
|
+
fieldId,
|
|
51
|
+
rendererType,
|
|
52
|
+
fieldFormat,
|
|
53
|
+
metadata
|
|
54
|
+
}) {
|
|
55
|
+
const { isValid, expectedType } = this.validateRendererType({
|
|
56
|
+
rendererType,
|
|
57
|
+
fieldFormat
|
|
58
|
+
});
|
|
59
|
+
if (isValid) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
bllInstance.Core.Log(
|
|
63
|
+
"error",
|
|
64
|
+
`[RendererValidator] Mismatch for field ${fieldId}: using rendererType="${rendererType}" but fieldFormat="${fieldFormat}" suggests "${expectedType}"`,
|
|
65
|
+
{
|
|
66
|
+
rendererType,
|
|
67
|
+
fieldFormat,
|
|
68
|
+
expectedType,
|
|
69
|
+
metadata
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
throw new Error("Renderer type mismatch");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
RendererValidator
|
|
77
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { TextRenderer } from "../field-renderers/TextRenderer";
|
|
2
|
+
import { NumberRenderer } from "../field-renderers/NumberRenderer";
|
|
3
|
+
import { CheckboxRenderer } from "../field-renderers/CheckboxRenderer";
|
|
4
|
+
import { RadioRenderer } from "../field-renderers/RadioRenderer";
|
|
5
|
+
import { RadioGroupRenderer } from "../field-renderers/RadioGroupRenderer";
|
|
6
|
+
import { DropdownRenderer } from "../field-renderers/DropdownRenderer";
|
|
7
|
+
import { DateRenderer } from "../field-renderers/DateRenderer";
|
|
8
|
+
import { LargeTextRenderer } from "../field-renderers/LargeTextRenderer";
|
|
9
|
+
import { ZipCodeRenderer } from "../field-renderers/ZipCodeRenderer/index";
|
|
10
|
+
import { ToggleRenderer } from "../field-renderers/ToggleRenderer";
|
|
11
|
+
const rendererMap = {
|
|
12
|
+
text: () => new TextRenderer().render(),
|
|
13
|
+
email: () => new TextRenderer().render(),
|
|
14
|
+
number: () => new NumberRenderer().render(),
|
|
15
|
+
checkbox: () => new CheckboxRenderer().render(),
|
|
16
|
+
radio: () => new RadioRenderer().render(),
|
|
17
|
+
radiogroup: () => new RadioGroupRenderer().render(),
|
|
18
|
+
dropdown: () => new DropdownRenderer().render(),
|
|
19
|
+
date: () => new DateRenderer().render(),
|
|
20
|
+
zipcode: () => new ZipCodeRenderer().render(),
|
|
21
|
+
largetext: () => new LargeTextRenderer().render(),
|
|
22
|
+
toggle: () => new ToggleRenderer().render()
|
|
23
|
+
};
|
|
24
|
+
class RendererFactory {
|
|
25
|
+
static create(type) {
|
|
26
|
+
const factory = rendererMap[type];
|
|
27
|
+
if (!factory) {
|
|
28
|
+
throw new Error(`Renderer type ${type} is not supported.`);
|
|
29
|
+
}
|
|
30
|
+
return factory();
|
|
31
|
+
}
|
|
32
|
+
render() {
|
|
33
|
+
return (props) => RendererFactory.create(props.rendererType)(props);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
RendererFactory
|
|
38
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { DSInputGroup } from "@elliemae/ds-form-layout-input-group";
|
|
3
|
+
import { LockUnlocked, LockLocked } from "@elliemae/ds-icons";
|
|
4
|
+
import { BUTTON_SIZES, DSButtonV3, BUTTON_TYPES } from "@elliemae/ds-button-v2";
|
|
5
|
+
import { Renderer } from "../base/renderer";
|
|
6
|
+
class AddonRenderer extends Renderer {
|
|
7
|
+
renderPadLock({
|
|
8
|
+
fieldId,
|
|
9
|
+
isLocked,
|
|
10
|
+
isDisabled = false,
|
|
11
|
+
onToggle
|
|
12
|
+
}) {
|
|
13
|
+
return /* @__PURE__ */ jsx(
|
|
14
|
+
DSButtonV3,
|
|
15
|
+
{
|
|
16
|
+
buttonType: BUTTON_TYPES.ICON,
|
|
17
|
+
"aria-label": isLocked ? "Lock" : "UnLock",
|
|
18
|
+
"data-testid": isLocked ? `lock-${fieldId}` : `unlock-${fieldId}`,
|
|
19
|
+
disabled: isDisabled,
|
|
20
|
+
size: BUTTON_SIZES.M,
|
|
21
|
+
onClick: onToggle,
|
|
22
|
+
children: isLocked ? /* @__PURE__ */ jsx(LockLocked, {}) : /* @__PURE__ */ jsx(LockUnlocked, {})
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
render() {
|
|
27
|
+
const Addon = (props) => {
|
|
28
|
+
const {
|
|
29
|
+
fieldId,
|
|
30
|
+
isPadLock,
|
|
31
|
+
isLocked,
|
|
32
|
+
isDisable,
|
|
33
|
+
rightAddon,
|
|
34
|
+
onPadLockToggle
|
|
35
|
+
} = props;
|
|
36
|
+
return isPadLock || rightAddon ? /* @__PURE__ */ jsx(
|
|
37
|
+
DSInputGroup,
|
|
38
|
+
{
|
|
39
|
+
leftAddon: isPadLock ? this.renderPadLock({
|
|
40
|
+
fieldId,
|
|
41
|
+
isLocked: isLocked || false,
|
|
42
|
+
isDisabled: isDisable,
|
|
43
|
+
onToggle: onPadLockToggle
|
|
44
|
+
}) : void 0,
|
|
45
|
+
rightAddon,
|
|
46
|
+
children: props.children
|
|
47
|
+
}
|
|
48
|
+
) : props.children;
|
|
49
|
+
};
|
|
50
|
+
return Addon;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
AddonRenderer
|
|
55
|
+
};
|