@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.
Files changed (225) hide show
  1. package/dist/cjs/ARCHITECTURE.md +434 -0
  2. package/dist/cjs/OVERVIEW.md +229 -0
  3. package/dist/cjs/bll/constants.js +86 -0
  4. package/dist/cjs/bll/formatters/booleanFormatter.js +51 -0
  5. package/dist/cjs/bll/formatters/dateFormatter.js +78 -0
  6. package/dist/cjs/bll/formatters/dropdownFormatter.js +34 -0
  7. package/dist/cjs/bll/formatters/factory/index.js +115 -0
  8. package/dist/cjs/bll/formatters/index.js +24 -0
  9. package/dist/cjs/bll/formatters/numberFormatter.js +70 -0
  10. package/dist/cjs/bll/formatters/phoneFormatter.js +57 -0
  11. package/dist/cjs/bll/formatters/regexFormatter.js +52 -0
  12. package/dist/cjs/bll/formatters/ssnFormatter.js +50 -0
  13. package/dist/cjs/bll/formatters/textFormatter.js +43 -0
  14. package/dist/cjs/bll/formatters/zipFormatter.js +48 -0
  15. package/dist/cjs/bll/index.js +62 -0
  16. package/dist/cjs/bll/ssf/index.js +48 -0
  17. package/dist/cjs/bll/ssf/loan.js +81 -0
  18. package/dist/cjs/bll/ssf/loconnect.js +70 -0
  19. package/dist/cjs/bll/ssf/ssfBase.js +97 -0
  20. package/dist/cjs/bll/ssf/types.js +16 -0
  21. package/dist/cjs/bll/types.js +16 -0
  22. package/dist/cjs/bll/validators/dateValidator.js +60 -0
  23. package/dist/cjs/bll/validators/emailValidator.js +47 -0
  24. package/dist/cjs/bll/validators/factory/index.js +81 -0
  25. package/dist/cjs/bll/validators/index.js +24 -0
  26. package/dist/cjs/bll/validators/maxCharValidator.js +49 -0
  27. package/dist/cjs/bll/validators/requiredValidator.js +44 -0
  28. package/dist/cjs/bll/validators/zipValidator.js +53 -0
  29. package/dist/cjs/core/index.js +52 -0
  30. package/dist/cjs/demo/config.js +391 -0
  31. package/dist/cjs/demo/index.js +31 -0
  32. package/dist/cjs/package.json +7 -0
  33. package/dist/cjs/renderer/FieldRenderer.js +45 -0
  34. package/dist/cjs/renderer/base/hooks/fieldDescription.js +39 -0
  35. package/dist/cjs/renderer/base/hooks/fieldDisabled.js +53 -0
  36. package/dist/cjs/renderer/base/hooks/fieldGoTo.js +50 -0
  37. package/dist/cjs/renderer/base/hooks/fieldLocked.js +42 -0
  38. package/dist/cjs/renderer/base/hooks/fieldMeta.js +150 -0
  39. package/dist/cjs/renderer/base/hooks/fieldSubscribers.js +66 -0
  40. package/dist/cjs/renderer/base/hooks/fieldValidation.js +45 -0
  41. package/dist/cjs/renderer/base/hooks/fieldValue.js +215 -0
  42. package/dist/cjs/renderer/base/hooks/hookBase.js +29 -0
  43. package/dist/cjs/renderer/base/hooks/index.js +139 -0
  44. package/dist/cjs/renderer/base/renderer.js +198 -0
  45. package/dist/cjs/renderer/base/rendererValidator.js +97 -0
  46. package/dist/cjs/renderer/factory/index.js +58 -0
  47. package/dist/cjs/renderer/field-renderers/AddonRenderer.js +75 -0
  48. package/dist/cjs/renderer/field-renderers/CheckboxRenderer.js +123 -0
  49. package/dist/cjs/renderer/field-renderers/DateRenderer.js +206 -0
  50. package/dist/cjs/renderer/field-renderers/DropdownRenderer/hook.js +99 -0
  51. package/dist/cjs/renderer/field-renderers/DropdownRenderer/index.js +216 -0
  52. package/dist/cjs/renderer/field-renderers/LargeTextRenderer.js +209 -0
  53. package/dist/cjs/renderer/field-renderers/NumberRenderer.js +216 -0
  54. package/dist/cjs/renderer/field-renderers/RadioGroupRenderer.js +128 -0
  55. package/dist/cjs/renderer/field-renderers/RadioRenderer.js +121 -0
  56. package/dist/cjs/renderer/field-renderers/TextRenderer.js +223 -0
  57. package/dist/cjs/renderer/field-renderers/ToggleRenderer.js +121 -0
  58. package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/helper.js +132 -0
  59. package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/hook.js +128 -0
  60. package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/index.js +273 -0
  61. package/dist/cjs/renderer/index.js +24 -0
  62. package/dist/cjs/renderer/styles.js +51 -0
  63. package/dist/cjs/renderer/types.js +16 -0
  64. package/dist/cjs/tests/base/flowBase.js +125 -0
  65. package/dist/cjs/tests/base/index.js +52 -0
  66. package/dist/cjs/tests/flows/checkboxRendererFlows.js +85 -0
  67. package/dist/cjs/tests/flows/dateRendererFlows.js +870 -0
  68. package/dist/cjs/tests/flows/dropdownRendererFlows.js +591 -0
  69. package/dist/cjs/tests/flows/largeTextRendererFlows.js +99 -0
  70. package/dist/cjs/tests/flows/numberRendererFlows.js +175 -0
  71. package/dist/cjs/tests/flows/radioRendererFlows.js +115 -0
  72. package/dist/cjs/tests/flows/textRendererFlows.js +349 -0
  73. package/dist/cjs/tests/flows/toggleRendererFlows.js +106 -0
  74. package/dist/cjs/tests/flows/zipCodeRendererFlows.js +1163 -0
  75. package/dist/cjs/utils/dateHelper.js +65 -0
  76. package/dist/esm/ARCHITECTURE.md +434 -0
  77. package/dist/esm/OVERVIEW.md +229 -0
  78. package/dist/esm/bll/constants.js +66 -0
  79. package/dist/esm/bll/formatters/booleanFormatter.js +33 -0
  80. package/dist/esm/bll/formatters/dateFormatter.js +48 -0
  81. package/dist/esm/bll/formatters/dropdownFormatter.js +14 -0
  82. package/dist/esm/bll/formatters/factory/index.js +97 -0
  83. package/dist/esm/bll/formatters/index.js +4 -0
  84. package/dist/esm/bll/formatters/numberFormatter.js +54 -0
  85. package/dist/esm/bll/formatters/phoneFormatter.js +41 -0
  86. package/dist/esm/bll/formatters/regexFormatter.js +34 -0
  87. package/dist/esm/bll/formatters/ssnFormatter.js +32 -0
  88. package/dist/esm/bll/formatters/textFormatter.js +25 -0
  89. package/dist/esm/bll/formatters/zipFormatter.js +30 -0
  90. package/dist/esm/bll/index.js +44 -0
  91. package/dist/esm/bll/ssf/index.js +30 -0
  92. package/dist/esm/bll/ssf/loan.js +63 -0
  93. package/dist/esm/bll/ssf/loconnect.js +52 -0
  94. package/dist/esm/bll/ssf/ssfBase.js +67 -0
  95. package/dist/esm/bll/ssf/types.js +0 -0
  96. package/dist/esm/bll/types.js +0 -0
  97. package/dist/esm/bll/validators/dateValidator.js +30 -0
  98. package/dist/esm/bll/validators/emailValidator.js +29 -0
  99. package/dist/esm/bll/validators/factory/index.js +63 -0
  100. package/dist/esm/bll/validators/index.js +4 -0
  101. package/dist/esm/bll/validators/maxCharValidator.js +31 -0
  102. package/dist/esm/bll/validators/requiredValidator.js +26 -0
  103. package/dist/esm/bll/validators/zipValidator.js +35 -0
  104. package/dist/esm/core/index.js +34 -0
  105. package/dist/esm/demo/config.js +371 -0
  106. package/dist/esm/demo/index.js +11 -0
  107. package/dist/esm/package.json +7 -0
  108. package/dist/esm/renderer/FieldRenderer.js +15 -0
  109. package/dist/esm/renderer/base/hooks/fieldDescription.js +19 -0
  110. package/dist/esm/renderer/base/hooks/fieldDisabled.js +33 -0
  111. package/dist/esm/renderer/base/hooks/fieldGoTo.js +30 -0
  112. package/dist/esm/renderer/base/hooks/fieldLocked.js +22 -0
  113. package/dist/esm/renderer/base/hooks/fieldMeta.js +132 -0
  114. package/dist/esm/renderer/base/hooks/fieldSubscribers.js +36 -0
  115. package/dist/esm/renderer/base/hooks/fieldValidation.js +25 -0
  116. package/dist/esm/renderer/base/hooks/fieldValue.js +195 -0
  117. package/dist/esm/renderer/base/hooks/hookBase.js +9 -0
  118. package/dist/esm/renderer/base/hooks/index.js +121 -0
  119. package/dist/esm/renderer/base/renderer.js +178 -0
  120. package/dist/esm/renderer/base/rendererValidator.js +77 -0
  121. package/dist/esm/renderer/factory/index.js +38 -0
  122. package/dist/esm/renderer/field-renderers/AddonRenderer.js +55 -0
  123. package/dist/esm/renderer/field-renderers/CheckboxRenderer.js +93 -0
  124. package/dist/esm/renderer/field-renderers/DateRenderer.js +176 -0
  125. package/dist/esm/renderer/field-renderers/DropdownRenderer/hook.js +79 -0
  126. package/dist/esm/renderer/field-renderers/DropdownRenderer/index.js +186 -0
  127. package/dist/esm/renderer/field-renderers/LargeTextRenderer.js +179 -0
  128. package/dist/esm/renderer/field-renderers/NumberRenderer.js +188 -0
  129. package/dist/esm/renderer/field-renderers/RadioGroupRenderer.js +108 -0
  130. package/dist/esm/renderer/field-renderers/RadioRenderer.js +91 -0
  131. package/dist/esm/renderer/field-renderers/TextRenderer.js +197 -0
  132. package/dist/esm/renderer/field-renderers/ToggleRenderer.js +91 -0
  133. package/dist/esm/renderer/field-renderers/ZipCodeRenderer/helper.js +112 -0
  134. package/dist/esm/renderer/field-renderers/ZipCodeRenderer/hook.js +108 -0
  135. package/dist/esm/renderer/field-renderers/ZipCodeRenderer/index.js +247 -0
  136. package/dist/esm/renderer/index.js +4 -0
  137. package/dist/esm/renderer/styles.js +21 -0
  138. package/dist/esm/renderer/types.js +0 -0
  139. package/dist/esm/tests/base/flowBase.js +105 -0
  140. package/dist/esm/tests/base/index.js +22 -0
  141. package/dist/esm/tests/flows/checkboxRendererFlows.js +65 -0
  142. package/dist/esm/tests/flows/dateRendererFlows.js +850 -0
  143. package/dist/esm/tests/flows/dropdownRendererFlows.js +571 -0
  144. package/dist/esm/tests/flows/largeTextRendererFlows.js +79 -0
  145. package/dist/esm/tests/flows/numberRendererFlows.js +155 -0
  146. package/dist/esm/tests/flows/radioRendererFlows.js +95 -0
  147. package/dist/esm/tests/flows/textRendererFlows.js +329 -0
  148. package/dist/esm/tests/flows/toggleRendererFlows.js +86 -0
  149. package/dist/esm/tests/flows/zipCodeRendererFlows.js +1143 -0
  150. package/dist/esm/utils/dateHelper.js +35 -0
  151. package/dist/types/lib/bll/constants.d.ts +9 -0
  152. package/dist/types/lib/bll/formatters/booleanFormatter.d.ts +5 -0
  153. package/dist/types/lib/bll/formatters/dateFormatter.d.ts +28 -0
  154. package/dist/types/lib/bll/formatters/dropdownFormatter.d.ts +6 -0
  155. package/dist/types/lib/bll/formatters/factory/index.d.ts +71 -0
  156. package/dist/types/lib/bll/formatters/index.d.ts +2 -0
  157. package/dist/types/lib/bll/formatters/numberFormatter.d.ts +6 -0
  158. package/dist/types/lib/bll/formatters/phoneFormatter.d.ts +7 -0
  159. package/dist/types/lib/bll/formatters/regexFormatter.d.ts +5 -0
  160. package/dist/types/lib/bll/formatters/ssnFormatter.d.ts +5 -0
  161. package/dist/types/lib/bll/formatters/textFormatter.d.ts +6 -0
  162. package/dist/types/lib/bll/formatters/zipFormatter.d.ts +5 -0
  163. package/dist/types/lib/bll/index.d.ts +20 -0
  164. package/dist/types/lib/bll/ssf/index.d.ts +25 -0
  165. package/dist/types/lib/bll/ssf/loan.d.ts +16 -0
  166. package/dist/types/lib/bll/ssf/loconnect.d.ts +15 -0
  167. package/dist/types/lib/bll/ssf/ssfBase.d.ts +23 -0
  168. package/dist/types/lib/bll/ssf/types.d.ts +99 -0
  169. package/dist/types/lib/bll/types.d.ts +47 -0
  170. package/dist/types/lib/bll/validators/dateValidator.d.ts +16 -0
  171. package/dist/types/lib/bll/validators/emailValidator.d.ts +4 -0
  172. package/dist/types/lib/bll/validators/factory/index.d.ts +15 -0
  173. package/dist/types/lib/bll/validators/index.d.ts +2 -0
  174. package/dist/types/lib/bll/validators/maxCharValidator.d.ts +4 -0
  175. package/dist/types/lib/bll/validators/requiredValidator.d.ts +4 -0
  176. package/dist/types/lib/bll/validators/zipValidator.d.ts +5 -0
  177. package/dist/types/lib/core/index.d.ts +29 -0
  178. package/dist/types/lib/demo/config.d.ts +11 -0
  179. package/dist/types/lib/demo/index.d.ts +1 -0
  180. package/dist/types/lib/renderer/FieldRenderer.d.ts +5 -0
  181. package/dist/types/lib/renderer/base/hooks/fieldDescription.d.ts +5 -0
  182. package/dist/types/lib/renderer/base/hooks/fieldDisabled.d.ts +10 -0
  183. package/dist/types/lib/renderer/base/hooks/fieldGoTo.d.ts +4 -0
  184. package/dist/types/lib/renderer/base/hooks/fieldLocked.d.ts +4 -0
  185. package/dist/types/lib/renderer/base/hooks/fieldMeta.d.ts +10 -0
  186. package/dist/types/lib/renderer/base/hooks/fieldSubscribers.d.ts +6 -0
  187. package/dist/types/lib/renderer/base/hooks/fieldValidation.d.ts +9 -0
  188. package/dist/types/lib/renderer/base/hooks/fieldValue.d.ts +31 -0
  189. package/dist/types/lib/renderer/base/hooks/hookBase.d.ts +9 -0
  190. package/dist/types/lib/renderer/base/hooks/index.d.ts +19 -0
  191. package/dist/types/lib/renderer/base/renderer.d.ts +43 -0
  192. package/dist/types/lib/renderer/base/rendererValidator.d.ts +15 -0
  193. package/dist/types/lib/renderer/factory/index.d.ts +5 -0
  194. package/dist/types/lib/renderer/field-renderers/AddonRenderer.d.ts +12 -0
  195. package/dist/types/lib/renderer/field-renderers/CheckboxRenderer.d.ts +7 -0
  196. package/dist/types/lib/renderer/field-renderers/DateRenderer.d.ts +13 -0
  197. package/dist/types/lib/renderer/field-renderers/DropdownRenderer/hook.d.ts +23 -0
  198. package/dist/types/lib/renderer/field-renderers/DropdownRenderer/index.d.ts +12 -0
  199. package/dist/types/lib/renderer/field-renderers/LargeTextRenderer.d.ts +17 -0
  200. package/dist/types/lib/renderer/field-renderers/NumberRenderer.d.ts +12 -0
  201. package/dist/types/lib/renderer/field-renderers/RadioGroupRenderer.d.ts +8 -0
  202. package/dist/types/lib/renderer/field-renderers/RadioRenderer.d.ts +8 -0
  203. package/dist/types/lib/renderer/field-renderers/TextRenderer.d.ts +8 -0
  204. package/dist/types/lib/renderer/field-renderers/ToggleRenderer.d.ts +24 -0
  205. package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/helper.d.ts +48 -0
  206. package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/hook.d.ts +17 -0
  207. package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/index.d.ts +9 -0
  208. package/dist/types/lib/renderer/index.d.ts +2 -0
  209. package/dist/types/lib/renderer/styles.d.ts +7 -0
  210. package/dist/types/lib/renderer/types.d.ts +325 -0
  211. package/dist/types/lib/tests/base/flowBase.d.ts +13 -0
  212. package/dist/types/lib/tests/base/index.d.ts +6 -0
  213. package/dist/types/lib/tests/flows/checkboxRendererFlows.d.ts +9 -0
  214. package/dist/types/lib/tests/flows/dateRendererFlows.d.ts +120 -0
  215. package/dist/types/lib/tests/flows/dropdownRendererFlows.d.ts +92 -0
  216. package/dist/types/lib/tests/flows/largeTextRendererFlows.d.ts +9 -0
  217. package/dist/types/lib/tests/flows/numberRendererFlows.d.ts +11 -0
  218. package/dist/types/lib/tests/flows/radioRendererFlows.d.ts +10 -0
  219. package/dist/types/lib/tests/flows/textRendererFlows.d.ts +16 -0
  220. package/dist/types/lib/tests/flows/toggleRendererFlows.d.ts +10 -0
  221. package/dist/types/lib/tests/flows/zipCodeRendererFlows.d.ts +169 -0
  222. package/dist/types/lib/tests/loan-field-renderer-flows.test.d.ts +1 -0
  223. package/dist/types/lib/utils/dateHelper.d.ts +8 -0
  224. package/dist/types/tsconfig.tsbuildinfo +1 -0
  225. package/package.json +103 -0
@@ -0,0 +1,371 @@
1
+ class Config {
2
+ static getTextFields() {
3
+ return [
4
+ {
5
+ label: "Text Field",
6
+ fieldId: "4003",
7
+ rendererType: "text"
8
+ },
9
+ {
10
+ label: "Email Field",
11
+ fieldId: "1178",
12
+ rendererType: "email",
13
+ onBlur: (fieldId, value) => {
14
+ console.log(
15
+ `OnBlur called for fieldId: ${fieldId} with value: ${String(
16
+ value
17
+ )}`
18
+ );
19
+ },
20
+ onChange: (fieldId, value) => {
21
+ console.log(
22
+ `OnChange called for fieldId: ${fieldId} with value: ${String(
23
+ value
24
+ )}`
25
+ );
26
+ }
27
+ },
28
+ {
29
+ label: "Phone Field",
30
+ fieldId: "USDA.X103",
31
+ rendererType: "text",
32
+ maskType: "Phone"
33
+ },
34
+ {
35
+ label: "SSN Field",
36
+ fieldId: "65",
37
+ rendererType: "text",
38
+ maskType: "SSN"
39
+ },
40
+ {
41
+ label: "Lock Text Field",
42
+ fieldId: "LE1.X5",
43
+ rendererType: "text"
44
+ },
45
+ {
46
+ label: "Custom Format Field",
47
+ fieldId: "LE1.X6",
48
+ rendererType: "text",
49
+ formatFn: (value) => {
50
+ if (!value) return "";
51
+ return value.toUpperCase();
52
+ },
53
+ parseFn: (displayValue) => {
54
+ if (!displayValue) return "";
55
+ return displayValue.toLowerCase();
56
+ }
57
+ },
58
+ {
59
+ label: "City",
60
+ fieldId: "FR0106",
61
+ rendererType: "text"
62
+ },
63
+ {
64
+ label: "State",
65
+ fieldId: "FR0107",
66
+ rendererType: "dropdown",
67
+ onBlur: (fieldId, value) => {
68
+ console.log(`Dropdown onBlur: ${fieldId} = ${String(value)}`);
69
+ }
70
+ },
71
+ {
72
+ label: "Zip Code Field",
73
+ fieldId: "FR0108",
74
+ geoFields: {
75
+ city: "FR0106",
76
+ state: "FR0107",
77
+ county: "FR0109"
78
+ },
79
+ useLatLong: true,
80
+ rendererType: "zipcode",
81
+ onGeoLookupComplete: (zip, cityData) => {
82
+ console.log("Zip Code Updated:", zip, cityData);
83
+ },
84
+ onChange: (fieldId, value) => {
85
+ console.log(`ZipCode onChange: ${fieldId} = ${String(value)}`);
86
+ },
87
+ onBlur: (fieldId, value) => {
88
+ console.log(`ZipCode onBlur: ${fieldId} = ${String(value)}`);
89
+ }
90
+ },
91
+ {
92
+ label: "LE1 Address Zip Code",
93
+ fieldId: "15",
94
+ geoFields: {
95
+ city: "12",
96
+ state: "14",
97
+ county: "16"
98
+ },
99
+ rendererType: "zipcode",
100
+ onChange: (fieldId, value) => {
101
+ console.log(`ZipCode onChange: ${fieldId} = ${String(value)}`);
102
+ },
103
+ onBlur: (fieldId, value) => {
104
+ console.log(`ZipCode onBlur: ${fieldId} = ${String(value)}`);
105
+ }
106
+ },
107
+ {
108
+ label: "LE1 Applicants: City",
109
+ fieldId: "1417",
110
+ rendererType: "text"
111
+ },
112
+ {
113
+ label: "LE1 Applicants: State",
114
+ fieldId: "1418",
115
+ rendererType: "text"
116
+ },
117
+ {
118
+ label: "LE1 Applicants: Zip Code (Foreign)",
119
+ fieldId: "1419",
120
+ geoFields: {
121
+ city: "1417",
122
+ state: "1418",
123
+ country: "URLA.X269"
124
+ },
125
+ isForeignAddress: true,
126
+ rendererType: "zipcode",
127
+ onChange: (fieldId, value) => {
128
+ console.log(
129
+ `Foreign ZipCode onChange: ${fieldId} = ${String(value)}`
130
+ );
131
+ },
132
+ onBlur: (fieldId, value) => {
133
+ console.log(`Foreign ZipCode onBlur: ${fieldId} = ${String(value)}`);
134
+ }
135
+ },
136
+ {
137
+ label: "LE1 Applicants: Country",
138
+ fieldId: "URLA.X269",
139
+ rendererType: "text"
140
+ },
141
+ {
142
+ label: "LE1 Applicants Zip Code",
143
+ fieldId: "1260",
144
+ geoFields: {
145
+ city: "1258",
146
+ state: "1259"
147
+ },
148
+ rendererType: "zipcode"
149
+ },
150
+ {
151
+ label: "State",
152
+ fieldId: "1259",
153
+ rendererType: "dropdown"
154
+ },
155
+ {
156
+ label: "City",
157
+ fieldId: "1258",
158
+ rendererType: "text"
159
+ },
160
+ {
161
+ label: "Editable Lock Dropdown Field",
162
+ fieldId: "33",
163
+ rendererType: "dropdown",
164
+ isEditable: true
165
+ }
166
+ ];
167
+ }
168
+ static getNumberFields() {
169
+ return [
170
+ {
171
+ label: "Number Field with D3 format",
172
+ fieldId: "3",
173
+ rendererType: "number",
174
+ numberMaskOptions: {
175
+ suffix: "%"
176
+ }
177
+ },
178
+ {
179
+ label: "Number Field with D2 format",
180
+ fieldId: "2",
181
+ rendererType: "number",
182
+ numberMaskOptions: {
183
+ prefix: "$"
184
+ }
185
+ },
186
+ {
187
+ label: "Number Field with Integer format",
188
+ fieldId: "4",
189
+ rendererType: "number",
190
+ onBlur: (fieldId, value) => {
191
+ console.log(
192
+ `OnBlur called for fieldId: ${fieldId} with value: ${String(
193
+ value
194
+ )}`
195
+ );
196
+ },
197
+ onChange: (fieldId, value) => {
198
+ console.log(
199
+ `OnChange called for fieldId: ${fieldId} with value: ${String(
200
+ value
201
+ )}`
202
+ );
203
+ }
204
+ },
205
+ {
206
+ label: "Number Field with D6 format",
207
+ fieldId: "3422",
208
+ rendererType: "number",
209
+ numberMaskOptions: {
210
+ prefix: " $"
211
+ }
212
+ },
213
+ {
214
+ label: "Lock number integer field",
215
+ fieldId: "LE2.X1",
216
+ rendererType: "number"
217
+ }
218
+ ];
219
+ }
220
+ static getCheckboxFields() {
221
+ return [
222
+ {
223
+ label: "Checkbox Field 1",
224
+ fieldId: "LE1.X78",
225
+ rendererType: "checkbox",
226
+ onBlur(fieldId, value) {
227
+ console.log(
228
+ `Checkbox onBlur called for fieldId: ${fieldId} with value: ${String(
229
+ value
230
+ )}`
231
+ );
232
+ }
233
+ },
234
+ {
235
+ label: "Checkbox Field 2",
236
+ fieldId: "LE1.X79",
237
+ rendererType: "checkbox",
238
+ isDisable: true
239
+ }
240
+ ];
241
+ }
242
+ static getRadioButtonFields() {
243
+ return [
244
+ {
245
+ label: "Radio Button Field",
246
+ fieldId: "RESPA.X28",
247
+ rendererType: "radio",
248
+ name: "Service your loan. If so, you will make your payment to us.",
249
+ value: true,
250
+ onSelect(fieldId, value) {
251
+ console.log(
252
+ `Radio onSelect called for fieldId: ${fieldId} with value: ${String(
253
+ value
254
+ )}`
255
+ );
256
+ }
257
+ },
258
+ {
259
+ label: "Radio Group Field",
260
+ fieldId: "LE3.X11",
261
+ rendererType: "radiogroup",
262
+ onSelect(fieldId, value) {
263
+ console.log(
264
+ `Radio Group onSelect called for fieldId: ${fieldId} with value: ${String(
265
+ value
266
+ )}`
267
+ );
268
+ }
269
+ },
270
+ {
271
+ label: "check disabled Radio Group Field",
272
+ fieldId: "LE3.X12",
273
+ rendererType: "radiogroup",
274
+ isDisable: true
275
+ }
276
+ ];
277
+ }
278
+ static getDateFields() {
279
+ return [
280
+ {
281
+ label: "Application Date",
282
+ fieldId: "748",
283
+ rendererType: "date",
284
+ onBlur: (fieldId, value) => {
285
+ console.log(`Date onBlur: ${fieldId} = ${String(value)}`);
286
+ },
287
+ onChange: (fieldId, value) => {
288
+ console.log(`Date onChange: ${fieldId} = ${String(value)}`);
289
+ }
290
+ },
291
+ {
292
+ label: "Closing Date",
293
+ fieldId: "763",
294
+ rendererType: "date"
295
+ },
296
+ {
297
+ label: "Disabled Date Field",
298
+ fieldId: "762",
299
+ rendererType: "date",
300
+ isDisable: true
301
+ },
302
+ {
303
+ label: "Date Field (autoFieldSet=false)",
304
+ fieldId: "761",
305
+ rendererType: "date",
306
+ autoFieldSet: false,
307
+ onBlur: (fieldId, value) => {
308
+ console.log(`Date (manual) onBlur: ${fieldId} = ${String(value)}`);
309
+ }
310
+ }
311
+ ];
312
+ }
313
+ static getLargeTextField() {
314
+ return [
315
+ {
316
+ label: "Large Text Field",
317
+ fieldId: "3169",
318
+ rendererType: "largetext",
319
+ onBlur: (fieldId, value) => {
320
+ console.log(`Large Text onBlur: ${fieldId} = ${String(value)}`);
321
+ },
322
+ onChange: (fieldId, value) => {
323
+ console.log(`Large Text onChange: ${fieldId} = ${String(value)}`);
324
+ }
325
+ },
326
+ {
327
+ label: "Large Text Field with max length 10",
328
+ fieldId: "1867",
329
+ rendererType: "largetext",
330
+ maxCharactersDisplay: true,
331
+ maxCharCounter: 10
332
+ }
333
+ ];
334
+ }
335
+ static getToggleFields() {
336
+ return [
337
+ {
338
+ label: "Toggle Field",
339
+ fieldId: "LE1.X80",
340
+ rendererType: "toggle",
341
+ onChange: (fieldId, value) => {
342
+ console.log(
343
+ `Toggle onChange called for fieldId: ${fieldId} with value: ${String(
344
+ value
345
+ )}`
346
+ );
347
+ }
348
+ },
349
+ {
350
+ label: "Disabled Toggle Field",
351
+ fieldId: "LE1.X81",
352
+ rendererType: "toggle",
353
+ isDisable: true
354
+ }
355
+ ];
356
+ }
357
+ static getRendererConfigs() {
358
+ return [
359
+ ...Config.getTextFields(),
360
+ ...Config.getNumberFields(),
361
+ ...Config.getCheckboxFields(),
362
+ ...Config.getRadioButtonFields(),
363
+ ...Config.getDateFields(),
364
+ ...Config.getLargeTextField(),
365
+ ...Config.getToggleFields()
366
+ ];
367
+ }
368
+ }
369
+ export {
370
+ Config
371
+ };
@@ -0,0 +1,11 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Grid } from "@elliemae/ds-grid";
3
+ import { FieldRenderer } from "../renderer";
4
+ import { Config } from "./config";
5
+ const Demo = () => /* @__PURE__ */ jsxs(Grid, { children: [
6
+ /* @__PURE__ */ jsx(Grid, { "data-testid": "demo-title", children: "This is a demo page for loan field renderers" }),
7
+ /* @__PURE__ */ jsx(Grid, { cols: [1, 1], children: /* @__PURE__ */ jsx(Grid, { children: Config.getRendererConfigs().map((fieldConfig) => /* @__PURE__ */ jsx(FieldRenderer, { ...fieldConfig }, fieldConfig.fieldId)) }) })
8
+ ] });
9
+ export {
10
+ Demo
11
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "type": "module",
3
+ "sideEffects": false,
4
+ "publishConfig": {
5
+ "access": "public"
6
+ }
7
+ }
@@ -0,0 +1,15 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import React, { useMemo } from "react";
3
+ import { RendererFactory } from "./factory";
4
+ const FieldRenderer = (props) => {
5
+ const RendererComponent = useMemo(
6
+ () => RendererFactory.create(props.rendererType),
7
+ [props.rendererType]
8
+ );
9
+ return /* @__PURE__ */ jsx(RendererComponent, { ...props });
10
+ };
11
+ var FieldRenderer_default = React.memo(FieldRenderer);
12
+ export {
13
+ FieldRenderer,
14
+ FieldRenderer_default as default
15
+ };
@@ -0,0 +1,19 @@
1
+ import { HookBase } from "./hookBase";
2
+ class FieldDescription extends HookBase {
3
+ getFieldAriaDescProps(label, description) {
4
+ if (description) {
5
+ if (this.BLL.Core.CoreUtils.Validate.isNullOrUndefined(label) || label === "") {
6
+ return {
7
+ "aria-label": description
8
+ };
9
+ }
10
+ return {
11
+ "aria-description": description
12
+ };
13
+ }
14
+ return {};
15
+ }
16
+ }
17
+ export {
18
+ FieldDescription
19
+ };
@@ -0,0 +1,33 @@
1
+ import { useState, useEffect } from "react";
2
+ import { HookBase } from "./hookBase";
3
+ class FieldDisabled extends HookBase {
4
+ async isLoanReadonly() {
5
+ try {
6
+ const readonlyStatus = await this.BLL.SSF.isReadOnlyLoan();
7
+ return readonlyStatus;
8
+ } catch (error) {
9
+ this.BLL.Core.Log("error", `error fetching loan readonly status`, {
10
+ error
11
+ });
12
+ return false;
13
+ }
14
+ }
15
+ useFieldDisabled({
16
+ fieldId,
17
+ metadata,
18
+ isLockedState
19
+ }) {
20
+ const { isLockField = false, isReadOnly = false } = metadata || {};
21
+ const [isReadonlyLoan, setIsReadonlyLoan] = useState(false);
22
+ useEffect(() => {
23
+ (async () => {
24
+ const readonlyStatus = await this.isLoanReadonly();
25
+ setIsReadonlyLoan(readonlyStatus);
26
+ })();
27
+ }, [fieldId]);
28
+ return isReadonlyLoan || isLockField && !isLockedState || isReadOnly;
29
+ }
30
+ }
31
+ export {
32
+ FieldDisabled
33
+ };
@@ -0,0 +1,30 @@
1
+ import { HookBase } from "./hookBase";
2
+ class FieldGoTo extends HookBase {
3
+ async isGoToField(fieldId) {
4
+ const formDetails = this.BLL.SSF.getCachedGTFFormDetails();
5
+ if (formDetails) {
6
+ return formDetails.fieldId === fieldId;
7
+ }
8
+ try {
9
+ const fetchedDetails = await this.BLL.SSF.getGTFSelectedFormDetails();
10
+ if (fetchedDetails) {
11
+ this.BLL.SSF.setCachedGTFFormDetails(fetchedDetails);
12
+ return fetchedDetails.fieldId === fieldId;
13
+ }
14
+ return false;
15
+ } catch (error) {
16
+ this.BLL.Core.Log(
17
+ "error",
18
+ `Error fetching GTF selected form details in fetchGTFFormDetails for fieldId ${fieldId}`,
19
+ {
20
+ fieldId,
21
+ error
22
+ }
23
+ );
24
+ return false;
25
+ }
26
+ }
27
+ }
28
+ export {
29
+ FieldGoTo
30
+ };
@@ -0,0 +1,22 @@
1
+ import { HookBase } from "./hookBase";
2
+ class FieldLocked extends HookBase {
3
+ async getFieldLockStatus(fieldId) {
4
+ try {
5
+ const lockedStatus = await this.BLL.SSF.getLockStatus(fieldId);
6
+ return lockedStatus;
7
+ } catch (error) {
8
+ this.BLL.Core.Log(
9
+ "error",
10
+ `error fetching field lock status for ${fieldId}`,
11
+ {
12
+ fieldId,
13
+ error
14
+ }
15
+ );
16
+ return false;
17
+ }
18
+ }
19
+ }
20
+ export {
21
+ FieldLocked
22
+ };
@@ -0,0 +1,132 @@
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 { HookBase } from "./hookBase";
13
+ class FieldMeta extends HookBase {
14
+ async getMetadata(fieldId) {
15
+ try {
16
+ const fieldPaths = await this.BLL.SSF.getFieldContractPaths();
17
+ const { fieldData, isCollection } = await this.lookupFieldData(
18
+ fieldId,
19
+ fieldPaths
20
+ );
21
+ const [
22
+ contractPath,
23
+ isNullable,
24
+ fieldFormat,
25
+ description,
26
+ isReadOnly,
27
+ maxLength,
28
+ options,
29
+ isLockField
30
+ ] = fieldData;
31
+ const finalContractPath = await this.transformContractPath(
32
+ contractPath,
33
+ fieldId,
34
+ isCollection
35
+ );
36
+ return await this.buildFieldMetadata({
37
+ contractPath: finalContractPath,
38
+ isNullable,
39
+ fieldFormat,
40
+ description,
41
+ isReadOnly,
42
+ maxLength,
43
+ options,
44
+ isLockField
45
+ });
46
+ } catch (error) {
47
+ return this.handleMetadataError(fieldId, error);
48
+ }
49
+ }
50
+ async lookupFieldData(fieldId, fieldPaths) {
51
+ let fieldData = fieldPaths[fieldId];
52
+ let isCollection = false;
53
+ let lookupFieldId = fieldId;
54
+ if (!fieldData) {
55
+ lookupFieldId = await this.BLL.SSF.resolveBaseCollectionId(fieldId);
56
+ isCollection = lookupFieldId !== fieldId;
57
+ fieldData = fieldPaths[lookupFieldId];
58
+ }
59
+ if (!fieldData) {
60
+ throw new Error(
61
+ `Field metadata not found for ${fieldId}${isCollection ? ` (base: ${lookupFieldId})` : ""}`
62
+ );
63
+ }
64
+ return { fieldData, isCollection };
65
+ }
66
+ async transformContractPath(contractPath, fieldId, isCollection) {
67
+ if (!isCollection) {
68
+ return contractPath;
69
+ }
70
+ const rowIndex = await this.BLL.SSF.getCollectionRowIndex(fieldId);
71
+ const collectionIndex = rowIndex - 1;
72
+ return contractPath.replace(/\[%\]/g, `[${collectionIndex}]`);
73
+ }
74
+ async buildFieldMetadata(params) {
75
+ const {
76
+ contractPath,
77
+ isNullable,
78
+ fieldFormat,
79
+ description,
80
+ isReadOnly,
81
+ maxLength,
82
+ options,
83
+ isLockField
84
+ } = params;
85
+ const fieldMetadata = {
86
+ contractPath,
87
+ isNullable: Boolean(isNullable),
88
+ fieldFormat,
89
+ description: description || "",
90
+ isReadOnly: Boolean(isReadOnly),
91
+ maxLength,
92
+ isLockField: Boolean(isLockField),
93
+ fieldOptions: options && options.length > 0 ? options.map((option, currentIdx) => ({
94
+ dsId: `${currentIdx}`,
95
+ type: "option",
96
+ label: option[0],
97
+ value: option[1]
98
+ })) : []
99
+ };
100
+ if (fieldMetadata.fieldFormat === "ST") {
101
+ fieldMetadata.fieldOptions = await this.fetchStateOptions();
102
+ }
103
+ return fieldMetadata;
104
+ }
105
+ handleMetadataError(fieldId, error) {
106
+ this.BLL.Core.Log("error", `error fetching field metadata for ${fieldId}`, {
107
+ fieldId,
108
+ error
109
+ });
110
+ throw this.BLL.Core.ExceptionUtils.runtimeException(
111
+ error.message || "Unknown error",
112
+ {
113
+ context: `field metadata for fieldId: ${fieldId} not found`
114
+ }
115
+ );
116
+ }
117
+ async fetchStateOptions() {
118
+ const stateOptions = await this.BLL.SSF.getStateDropDownList();
119
+ return stateOptions?.map((state, idx) => ({
120
+ dsId: `${idx}`,
121
+ type: "option",
122
+ label: state.name,
123
+ value: state.value
124
+ }));
125
+ }
126
+ }
127
+ __decorateClass([
128
+ decorators.function.MemoizeAsync
129
+ ], FieldMeta.prototype, "fetchStateOptions", 1);
130
+ export {
131
+ FieldMeta
132
+ };
@@ -0,0 +1,36 @@
1
+ import * as elli from "@elliemae/em-ssf-guest";
2
+ import { useEffect } from "react";
3
+ import { HookBase } from "./hookBase";
4
+ class FieldSubscribers extends HookBase {
5
+ useSubscribeEffect({
6
+ objectId = "loan",
7
+ eventName = "loanUpdated",
8
+ callback
9
+ }) {
10
+ useEffect(() => {
11
+ const token = elli.subscribe(objectId, eventName, callback);
12
+ return () => {
13
+ if (token) {
14
+ elli.unsubscribe(objectId, eventName, token);
15
+ }
16
+ };
17
+ }, []);
18
+ }
19
+ useLoanUpdatedCB(callback) {
20
+ this.useSubscribeEffect({
21
+ objectId: "loan",
22
+ eventName: "loanUpdated",
23
+ callback
24
+ });
25
+ }
26
+ useLoanChangeCB(callback) {
27
+ this.useSubscribeEffect({
28
+ objectId: "loan",
29
+ eventName: "change",
30
+ callback
31
+ });
32
+ }
33
+ }
34
+ export {
35
+ FieldSubscribers
36
+ };
@@ -0,0 +1,25 @@
1
+ import { useState } from "react";
2
+ import { HookBase } from "./hookBase";
3
+ class FieldValidation extends HookBase {
4
+ runValidationsOnValue(value, validationRules, customValidation) {
5
+ const result = { isValid: true, message: "" };
6
+ if (customValidation) {
7
+ customValidation(value);
8
+ return result;
9
+ }
10
+ if (validationRules.length > 0) {
11
+ return this.BLL.Validator.runValidators(validationRules, value);
12
+ }
13
+ return result;
14
+ }
15
+ useFieldValidation() {
16
+ const [validationResult, setValidationResult] = useState(null);
17
+ return {
18
+ validationResult,
19
+ setValidationResult
20
+ };
21
+ }
22
+ }
23
+ export {
24
+ FieldValidation
25
+ };