@nuskin/shipping-address-form 1.5.1 → 1.7.0

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 (96) hide show
  1. package/README.md +54 -12
  2. package/dist/addressLookup/AddressLookup.js +74 -0
  3. package/dist/addressLookup/AddressLookup.js.map +1 -0
  4. package/dist/addressLookup/components/LocationPinIcon.js +33 -0
  5. package/dist/addressLookup/components/LocationPinIcon.js.map +1 -0
  6. package/dist/addressLookup/components/SmartyIntlResults.js +1020 -0
  7. package/dist/addressLookup/components/SmartyIntlResults.js.map +1 -0
  8. package/dist/addressLookup/components/SmartyUSResults.js +1001 -0
  9. package/dist/addressLookup/components/SmartyUSResults.js.map +1 -0
  10. package/dist/addressLookup/config/address/countries.js +61 -0
  11. package/dist/addressLookup/config/address/countries.js.map +1 -0
  12. package/dist/addressLookup/config/address/index.js +19 -0
  13. package/dist/addressLookup/config/address/index.js.map +1 -0
  14. package/dist/addressLookup/config/googleMaps.js +12 -0
  15. package/dist/addressLookup/config/googleMaps.js.map +1 -0
  16. package/dist/addressLookup/countries.js +19 -0
  17. package/dist/addressLookup/countries.js.map +1 -0
  18. package/dist/addressLookup/hooks/useAddressFieldLabels.js +41 -0
  19. package/dist/addressLookup/hooks/useAddressFieldLabels.js.map +1 -0
  20. package/dist/addressLookup/hooks/useAddressForm.js +36 -0
  21. package/dist/addressLookup/hooks/useAddressForm.js.map +1 -0
  22. package/dist/addressLookup/hooks/useAddressMapModal.js +136 -0
  23. package/dist/addressLookup/hooks/useAddressMapModal.js.map +1 -0
  24. package/dist/addressLookup/hooks/useAddressValidationBase.js +143 -0
  25. package/dist/addressLookup/hooks/useAddressValidationBase.js.map +1 -0
  26. package/dist/addressLookup/hooks/useInitialAddressVerification.js +57 -0
  27. package/dist/addressLookup/hooks/useInitialAddressVerification.js.map +1 -0
  28. package/dist/addressLookup/hooks/useIntlAddressValidation.js +122 -0
  29. package/dist/addressLookup/hooks/useIntlAddressValidation.js.map +1 -0
  30. package/dist/addressLookup/hooks/useSmartyInternationalLookup.js +74 -0
  31. package/dist/addressLookup/hooks/useSmartyInternationalLookup.js.map +1 -0
  32. package/dist/addressLookup/hooks/useSmartyLookupBase.js +152 -0
  33. package/dist/addressLookup/hooks/useSmartyLookupBase.js.map +1 -0
  34. package/dist/addressLookup/hooks/useSmartyUSLookup.js +79 -0
  35. package/dist/addressLookup/hooks/useSmartyUSLookup.js.map +1 -0
  36. package/dist/addressLookup/hooks/useUSAddressValidation.js +166 -0
  37. package/dist/addressLookup/hooks/useUSAddressValidation.js.map +1 -0
  38. package/dist/addressLookup/index.js +41 -0
  39. package/dist/addressLookup/index.js.map +1 -0
  40. package/dist/addressLookup/styles/addressLookup.css +383 -0
  41. package/dist/addressLookup/utils/addressForm.js +150 -0
  42. package/dist/addressLookup/utils/addressForm.js.map +1 -0
  43. package/dist/addressLookup/utils/addressMapping.js +190 -0
  44. package/dist/addressLookup/utils/addressMapping.js.map +1 -0
  45. package/dist/addressLookup/utils/addressStatus.js +173 -0
  46. package/dist/addressLookup/utils/addressStatus.js.map +1 -0
  47. package/dist/addressLookup/utils/addressStrings.js +159 -0
  48. package/dist/addressLookup/utils/addressStrings.js.map +1 -0
  49. package/dist/addressLookup/utils/addressVerification.js +66 -0
  50. package/dist/addressLookup/utils/addressVerification.js.map +1 -0
  51. package/dist/addressLookup/utils/addressWrapper.js +40 -0
  52. package/dist/addressLookup/utils/addressWrapper.js.map +1 -0
  53. package/dist/addressLookup/utils/componentPropTypes.js +118 -0
  54. package/dist/addressLookup/utils/componentPropTypes.js.map +1 -0
  55. package/dist/addressLookup/utils/googleMapsLoader.js +68 -0
  56. package/dist/addressLookup/utils/googleMapsLoader.js.map +1 -0
  57. package/dist/addressLookup/utils/inFlightRequests.js +50 -0
  58. package/dist/addressLookup/utils/inFlightRequests.js.map +1 -0
  59. package/dist/addressLookup/utils/intlAutocompleteBusinessRules.js +62 -0
  60. package/dist/addressLookup/utils/intlAutocompleteBusinessRules.js.map +1 -0
  61. package/dist/addressLookup/utils/requestCache.js +44 -0
  62. package/dist/addressLookup/utils/requestCache.js.map +1 -0
  63. package/dist/addressLookup/utils/requestRateLimiter.js +53 -0
  64. package/dist/addressLookup/utils/requestRateLimiter.js.map +1 -0
  65. package/dist/addressLookup/utils/smartyConfig.js +11 -0
  66. package/dist/addressLookup/utils/smartyConfig.js.map +1 -0
  67. package/dist/addressLookup/utils/validators.js +45 -0
  68. package/dist/addressLookup/utils/validators.js.map +1 -0
  69. package/dist/index.js +28 -1
  70. package/dist/index.js.map +1 -1
  71. package/dist/{ShippingAddressForm.js → shippingAddressForm/ShippingAddressForm.js} +10 -2
  72. package/dist/shippingAddressForm/ShippingAddressForm.js.map +1 -0
  73. package/dist/{components → shippingAddressForm/components}/ShippingField.js +32 -22
  74. package/dist/shippingAddressForm/components/ShippingField.js.map +1 -0
  75. package/dist/shippingAddressForm/hooks/useAddressFieldLabels.js.map +1 -0
  76. package/dist/shippingAddressForm/hooks/useShippingAddressForm.js.map +1 -0
  77. package/dist/shippingAddressForm/hooks/useShippingFormState.js.map +1 -0
  78. package/dist/shippingAddressForm/utils/emailVerify.js.map +1 -0
  79. package/dist/{utils → shippingAddressForm/utils}/shippingAddressForm.js +3 -3
  80. package/dist/shippingAddressForm/utils/shippingAddressForm.js.map +1 -0
  81. package/dist/shippingAddressForm/utils/shippingStrings.js.map +1 -0
  82. package/package.json +2 -3
  83. package/dist/ShippingAddressForm.js.map +0 -1
  84. package/dist/components/ShippingField.js.map +0 -1
  85. package/dist/hooks/useAddressFieldLabels.js.map +0 -1
  86. package/dist/hooks/useShippingAddressForm.js.map +0 -1
  87. package/dist/hooks/useShippingFormState.js.map +0 -1
  88. package/dist/utils/emailVerify.js.map +0 -1
  89. package/dist/utils/shippingAddressForm.js.map +0 -1
  90. package/dist/utils/shippingStrings.js.map +0 -1
  91. /package/dist/{hooks → shippingAddressForm/hooks}/useAddressFieldLabels.js +0 -0
  92. /package/dist/{hooks → shippingAddressForm/hooks}/useShippingAddressForm.js +0 -0
  93. /package/dist/{hooks → shippingAddressForm/hooks}/useShippingFormState.js +0 -0
  94. /package/dist/{styles → shippingAddressForm/styles}/shippingAddressForm.css +0 -0
  95. /package/dist/{utils → shippingAddressForm/utils}/emailVerify.js +0 -0
  96. /package/dist/{utils → shippingAddressForm/utils}/shippingStrings.js +0 -0
@@ -0,0 +1,383 @@
1
+ .ns-address-lookup {
2
+ --nsal-text-color: #1f2937;
3
+ --nsal-muted-text: #6b7280;
4
+ --nsal-link-color: #007bff;
5
+ --nsal-border-color: #999;
6
+ --nsal-error-color: #c62828;
7
+ --nsal-surface-color: #fff;
8
+ --nsal-disabled-surface: #f5f5f5;
9
+ --nsal-validation-surface: #f8fbff;
10
+ --nsal-validation-border: #8ab4f8;
11
+ --nsal-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
12
+ --nsal-radius: 4px;
13
+ --nsal-field-gap: 10px;
14
+ --nsal-field-gutter: 12px;
15
+ --nsal-error-gap: 2px;
16
+ --nsal-input-padding-y: 8px;
17
+ --nsal-input-padding-x: 8px;
18
+ color: var(--nsal-text-color);
19
+ }
20
+
21
+ .ns-address-lookup__panel {
22
+ flex: 1 1 300px;
23
+ min-width: 300px;
24
+ }
25
+
26
+ .ns-address-lookup__message {
27
+ color: var(--nsal-error-color);
28
+ margin-bottom: 10px;
29
+ }
30
+
31
+ .ns-address-lookup__form {
32
+ display: block;
33
+ margin-left: calc(var(--nsal-field-gutter) / -2);
34
+ margin-right: calc(var(--nsal-field-gutter) / -2);
35
+ }
36
+
37
+ .ns-address-lookup__field {
38
+ display: inline-block;
39
+ box-sizing: border-box;
40
+ position: relative;
41
+ padding-bottom: var(--nsal-field-gap);
42
+ padding-left: calc(var(--nsal-field-gutter) / 2);
43
+ padding-right: calc(var(--nsal-field-gutter) / 2);
44
+ vertical-align: top;
45
+ }
46
+
47
+ .ns-address-lookup__field--with-error {
48
+ padding-bottom: var(--nsal-field-gap);
49
+ }
50
+
51
+ .ns-address-lookup__label-row {
52
+ display: flex;
53
+ justify-content: space-between;
54
+ align-items: center;
55
+ gap: 8px;
56
+ margin-bottom: 5px;
57
+ }
58
+
59
+ .ns-address-lookup__label-row--field {
60
+ margin-bottom: 7px;
61
+ }
62
+
63
+ .ns-address-lookup__label {
64
+ font-size: 12px;
65
+ }
66
+
67
+ .ns-address-lookup__toggle {
68
+ padding: 0;
69
+ border: 0;
70
+ background: transparent;
71
+ font-size: 12px;
72
+ color: var(--nsal-link-color);
73
+ text-decoration: none;
74
+ cursor: pointer;
75
+ }
76
+
77
+ .ns-address-lookup__toggle:hover {
78
+ text-decoration: underline;
79
+ }
80
+
81
+ .ns-address-lookup__toggle:focus-visible {
82
+ outline: 2px solid var(--nsal-link-color);
83
+ outline-offset: 2px;
84
+ }
85
+
86
+ .ns-address-lookup__toggle--icon {
87
+ display: inline-flex;
88
+ align-items: center;
89
+ gap: 4px;
90
+ }
91
+
92
+ .ns-address-lookup__actions {
93
+ display: flex;
94
+ align-items: center;
95
+ gap: 10px;
96
+ justify-content: flex-end;
97
+ flex-wrap: wrap;
98
+ }
99
+
100
+ .ns-address-lookup__input {
101
+ width: 100%;
102
+ margin: 0;
103
+ box-sizing: border-box;
104
+ }
105
+
106
+ .ns-address-lookup__input--readonly {
107
+ background-color: transparent;
108
+ }
109
+
110
+ .ns-address-lookup__input .MuiInputBase-root {
111
+ background-color: var(--nsal-surface-color);
112
+ }
113
+
114
+ .ns-address-lookup__input--readonly .MuiInputBase-root,
115
+ .ns-address-lookup__input--readonly .MuiInputBase-root:hover,
116
+ .ns-address-lookup__input--readonly .MuiInputBase-root.Mui-focused {
117
+ background-color: var(--nsal-disabled-surface) !important;
118
+ }
119
+
120
+ .ns-address-lookup__input--invalid {
121
+ border-color: var(--nsal-error-color);
122
+ }
123
+
124
+ .ns-address-lookup__input--loading {
125
+ padding-right: 35px;
126
+ }
127
+
128
+ .ns-address-lookup__error-text {
129
+ color: var(--nsal-error-color);
130
+ font-size: 12px;
131
+ line-height: 1.2;
132
+ margin-top: var(--nsal-error-gap);
133
+ }
134
+
135
+ .ns-address-lookup__spinner {
136
+ position: absolute;
137
+ right: 15px;
138
+ top: 50%;
139
+ width: 16px;
140
+ height: 16px;
141
+ border: 2px solid #f3f3f3;
142
+ border-top: 2px solid #3498db;
143
+ border-radius: 50%;
144
+ transform: translateY(-50%);
145
+ animation: ns-address-lookup-spin 1s linear infinite;
146
+ }
147
+
148
+ .ns-address-lookup__list {
149
+ position: absolute;
150
+ z-index: 1000;
151
+ list-style: none;
152
+ margin: 0;
153
+ padding: 0;
154
+ border: 1px solid #ccc;
155
+ border-radius: 5px;
156
+ background-color: var(--nsal-surface-color);
157
+ overflow-y: auto;
158
+ box-shadow: var(--nsal-shadow);
159
+ }
160
+
161
+ .ns-address-lookup__list--suggestions {
162
+ top: 100%;
163
+ left: 5px;
164
+ right: 5px;
165
+ max-height: 200px;
166
+ }
167
+
168
+ .ns-address-lookup__list--validation-inline {
169
+ top: 100%;
170
+ left: 5px;
171
+ right: 5px;
172
+ max-height: 250px;
173
+ border-color: var(--nsal-validation-border);
174
+ background-color: var(--nsal-validation-surface);
175
+ }
176
+
177
+ .ns-address-lookup__list--validation {
178
+ top: 100%;
179
+ left: 0;
180
+ right: 0;
181
+ margin-top: 5px;
182
+ max-height: 250px;
183
+ }
184
+
185
+ .ns-address-lookup__list-item {
186
+ background: var(--nsal-surface-color);
187
+ }
188
+
189
+ .ns-address-lookup__list--validation-inline .ns-address-lookup__list-item {
190
+ background: var(--nsal-validation-surface);
191
+ }
192
+
193
+ .ns-address-lookup__list-button {
194
+ display: block;
195
+ width: 100%;
196
+ padding: 8px;
197
+ border: 0;
198
+ background: transparent;
199
+ text-align: left;
200
+ color: inherit;
201
+ font: inherit;
202
+ cursor: pointer;
203
+ }
204
+
205
+ .ns-address-lookup__list--validation-inline .ns-address-lookup__list-button {
206
+ padding-top: 5px;
207
+ padding-bottom: 5px;
208
+ }
209
+
210
+ .ns-address-lookup__list-button:hover {
211
+ background: #f5f5f5;
212
+ }
213
+
214
+ .ns-address-lookup__list-button:focus-visible {
215
+ background: #eef4ff;
216
+ outline: 2px solid var(--nsal-link-color);
217
+ outline-offset: -2px;
218
+ box-shadow: inset 0 0 0 1px rgba(0, 123, 255, 0.25);
219
+ }
220
+
221
+ .ns-address-lookup__list--validation-inline .ns-address-lookup__list-button:hover {
222
+ background: #eef6ff;
223
+ }
224
+
225
+ .ns-address-lookup__list--validation-inline .ns-address-lookup__list-button:focus-visible {
226
+ background: #e3f0ff;
227
+ }
228
+
229
+ .ns-address-lookup__list-item--divided {
230
+ border-bottom: 1px solid #eee;
231
+ }
232
+
233
+ .ns-address-lookup__list-title {
234
+ font-size: 14px;
235
+ font-weight: 700;
236
+ }
237
+
238
+ .ns-address-lookup__list-item--not-verified .ns-address-lookup__list-title {
239
+ color: var(--nsal-error-color);
240
+ }
241
+
242
+ .ns-address-lookup__list-subtitle {
243
+ font-size: 12px;
244
+ }
245
+
246
+ .ns-address-lookup__icon {
247
+ width: 14px;
248
+ height: 14px;
249
+ display: inline-block;
250
+ flex: 0 0 auto;
251
+ }
252
+
253
+ .ns-address-lookup__modal-backdrop {
254
+ position: fixed;
255
+ inset: 0;
256
+ z-index: 2000;
257
+ display: flex;
258
+ align-items: center;
259
+ justify-content: center;
260
+ padding: 16px;
261
+ background: rgba(0, 0, 0, 0.45);
262
+ }
263
+
264
+ .ns-address-lookup__modal {
265
+ width: min(90vw, 720px);
266
+ max-height: 90vh;
267
+ overflow: hidden;
268
+ border-radius: 8px;
269
+ background: var(--nsal-surface-color);
270
+ box-shadow: var(--nsal-shadow);
271
+ }
272
+
273
+ .ns-address-lookup__modal-header {
274
+ display: flex;
275
+ align-items: center;
276
+ justify-content: space-between;
277
+ gap: 12px;
278
+ padding: 12px 16px;
279
+ border-bottom: 1px solid #e5e7eb;
280
+ }
281
+
282
+ .ns-address-lookup__modal-title {
283
+ font-size: 16px;
284
+ font-weight: 600;
285
+ }
286
+
287
+ .ns-address-lookup__map {
288
+ width: 100%;
289
+ height: 400px;
290
+ }
291
+
292
+ .ns-address-lookup__map-info {
293
+ max-width: 280px;
294
+ font: 13px/1.4 Arial, sans-serif;
295
+ }
296
+
297
+ .ns-address-lookup__map-info-address {
298
+ margin-bottom: 6px;
299
+ }
300
+
301
+ .ns-address-lookup__map-info-link {
302
+ display: inline-block;
303
+ color: var(--nsal-link-color);
304
+ font-size: 12px;
305
+ line-height: 1.3;
306
+ text-decoration: none;
307
+ white-space: normal;
308
+ }
309
+
310
+ .ns-address-lookup__validation {
311
+ margin-top: 10px;
312
+ position: relative;
313
+ }
314
+
315
+ .ns-address-lookup__button {
316
+ padding: 8px 16px;
317
+ background-color: #007bff;
318
+ color: #fff;
319
+ border: none;
320
+ border-radius: var(--nsal-radius);
321
+ cursor: pointer;
322
+ }
323
+
324
+ .ns-address-lookup__button--compact {
325
+ padding: 4px 10px;
326
+ font-size: 12px;
327
+ }
328
+
329
+ .ns-address-lookup__button:disabled {
330
+ cursor: not-allowed;
331
+ opacity: 0.6;
332
+ }
333
+
334
+ @keyframes ns-address-lookup-spin {
335
+ 0% {
336
+ transform: translateY(-50%) rotate(0deg);
337
+ }
338
+
339
+ 100% {
340
+ transform: translateY(-50%) rotate(360deg);
341
+ }
342
+ }
343
+
344
+ @media (max-width: 640px) {
345
+ .ns-address-lookup__panel {
346
+ min-width: 0;
347
+ }
348
+
349
+ .ns-address-lookup__field {
350
+ width: 100% !important;
351
+ }
352
+
353
+ .ns-address-lookup__label-row {
354
+ align-items: flex-start;
355
+ flex-direction: column;
356
+ }
357
+
358
+ .ns-address-lookup__actions {
359
+ width: 100%;
360
+ justify-content: flex-start;
361
+ }
362
+
363
+ .ns-address-lookup__list--suggestions,
364
+ .ns-address-lookup__list--validation-inline {
365
+ left: 0;
366
+ right: 0;
367
+ }
368
+
369
+ .ns-address-lookup__modal-backdrop {
370
+ padding: 0;
371
+ }
372
+
373
+ .ns-address-lookup__modal {
374
+ width: 100vw;
375
+ height: 100vh;
376
+ max-height: none;
377
+ border-radius: 0;
378
+ }
379
+
380
+ .ns-address-lookup__map {
381
+ height: calc(100vh - 57px);
382
+ }
383
+ }
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.normalizeAddressForm = exports.getAddressForm = exports.clearAddressFormCache = exports.DEFAULT_ADDRESS_FORM = void 0;
7
+ var _contentstackLib = require("@nuskin/contentstack-lib");
8
+ const cache = {};
9
+ const DEFAULT_ADDRESS_FORM = exports.DEFAULT_ADDRESS_FORM = {
10
+ addressElements: [],
11
+ lookupField: 'address1',
12
+ requiredFields: [],
13
+ postalCodeRegex: null,
14
+ verifyAfterAutocomplete: false,
15
+ wrapAddress1ToAddress2: false
16
+ };
17
+ const coerceAddressElement = (element = {}) => {
18
+ const nextElement = {
19
+ ...element
20
+ };
21
+ if (nextElement.max_length !== undefined && nextElement.max_length !== null) {
22
+ nextElement.max_length = Number(nextElement.max_length);
23
+ }
24
+ return nextElement;
25
+ };
26
+ const extractAddressForm = (addressForm = null) => {
27
+ if (!addressForm || typeof addressForm !== 'object') {
28
+ return addressForm;
29
+ }
30
+ return {
31
+ ...addressForm,
32
+ address_elements: Array.isArray(addressForm.address_elements) ? addressForm.address_elements.map(coerceAddressElement) : []
33
+ };
34
+ };
35
+ const normalizeApiMappings = (apiMappings = null) => {
36
+ if (!apiMappings || typeof apiMappings !== 'object') {
37
+ return null;
38
+ }
39
+ const autocomplete = typeof apiMappings.autocomplete === 'string' ? apiMappings.autocomplete : '';
40
+ const verification = typeof apiMappings.verification === 'string' ? apiMappings.verification : '';
41
+ if (!autocomplete && !verification) {
42
+ return null;
43
+ }
44
+ return {
45
+ autocomplete: autocomplete || null,
46
+ verification: verification || null
47
+ };
48
+ };
49
+ const normalizeAllowedCharacters = allowedCharacters => {
50
+ if (!allowedCharacters || typeof allowedCharacters !== 'string') {
51
+ return null;
52
+ }
53
+ try {
54
+ return new RegExp(allowedCharacters);
55
+ } catch (err) {
56
+ return null;
57
+ }
58
+ };
59
+ const normalizeMaxLength = (element = {}) => {
60
+ if (typeof element.maxLength === 'number') {
61
+ return element.maxLength;
62
+ }
63
+ if (typeof element.max_length === 'number') {
64
+ return element.max_length;
65
+ }
66
+ return null;
67
+ };
68
+ const normalizeWidth = width => {
69
+ if (width === 'half' || width === 'third') {
70
+ return width;
71
+ }
72
+ return 'full';
73
+ };
74
+ const normalizeAddressElement = (element = {}) => ({
75
+ field: element.field || '',
76
+ width: normalizeWidth(element.width),
77
+ editable: Boolean(element.editable),
78
+ maxLength: normalizeMaxLength(element),
79
+ required: Boolean(element.required),
80
+ allowedCharacters: normalizeAllowedCharacters(element.allowedCharacters || element.allowed_characters),
81
+ apiMappings: normalizeApiMappings(element.api_mappings || element.apiMappings)
82
+ });
83
+ const normalizeRequiredFields = (addressElements = []) => {
84
+ const seen = new Set();
85
+ return addressElements.filter(element => element.required && element.field).map(element => element.field).filter(field => {
86
+ if (seen.has(field)) {
87
+ return false;
88
+ }
89
+ seen.add(field);
90
+ return true;
91
+ });
92
+ };
93
+ const normalizePostalCodeRegex = postalCodeRegex => {
94
+ if (!postalCodeRegex) {
95
+ return null;
96
+ }
97
+ if (postalCodeRegex instanceof RegExp) {
98
+ return postalCodeRegex;
99
+ }
100
+ if (typeof postalCodeRegex !== 'string') {
101
+ return null;
102
+ }
103
+ try {
104
+ return new RegExp(postalCodeRegex);
105
+ } catch (err) {
106
+ return null;
107
+ }
108
+ };
109
+ const normalizeAddressForm = (result = {}) => {
110
+ var _addressElements$;
111
+ const addressElementsSource = result.address_elements || result.addressElements;
112
+ const addressElements = Array.isArray(addressElementsSource) ? addressElementsSource.map(normalizeAddressElement).filter(element => element.field) : [];
113
+ return {
114
+ addressElements,
115
+ lookupField: ((_addressElements$ = addressElements[0]) === null || _addressElements$ === void 0 ? void 0 : _addressElements$.field) || DEFAULT_ADDRESS_FORM.lookupField,
116
+ requiredFields: normalizeRequiredFields(addressElements),
117
+ postalCodeRegex: normalizePostalCodeRegex(result.postal_code_regex || result.postalCodeRegex),
118
+ verifyAfterAutocomplete: Boolean(result.verify_after_autocomplete || result.verifyAfterAutocomplete),
119
+ wrapAddress1ToAddress2: Boolean(result.wrap_address1_to_address2 || result.wrapAddress1ToAddress2)
120
+ };
121
+ };
122
+ exports.normalizeAddressForm = normalizeAddressForm;
123
+ const getAddressForm = async country => {
124
+ const countryCode = country || 'US';
125
+ const cacheKey = `${countryCode}`;
126
+ if (cache[cacheKey]) {
127
+ return cache[cacheKey];
128
+ }
129
+ try {
130
+ const stack = (0, _contentstackLib.getStack)();
131
+ const results = await stack.getMultiEntries('address_form', true, [countryCode]);
132
+ const form = normalizeAddressForm(extractAddressForm(results === null || results === void 0 ? void 0 : results[0]));
133
+ cache[cacheKey] = form;
134
+ return form;
135
+ } catch (err) {
136
+ const fallback = {
137
+ ...DEFAULT_ADDRESS_FORM
138
+ };
139
+ cache[cacheKey] = fallback;
140
+ return fallback;
141
+ }
142
+ };
143
+ exports.getAddressForm = getAddressForm;
144
+ const clearAddressFormCache = () => {
145
+ Object.keys(cache).forEach(cacheKey => {
146
+ delete cache[cacheKey];
147
+ });
148
+ };
149
+ exports.clearAddressFormCache = clearAddressFormCache;
150
+ //# sourceMappingURL=addressForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressForm.js","names":["_contentstackLib","require","cache","DEFAULT_ADDRESS_FORM","exports","addressElements","lookupField","requiredFields","postalCodeRegex","verifyAfterAutocomplete","wrapAddress1ToAddress2","coerceAddressElement","element","nextElement","max_length","undefined","Number","extractAddressForm","addressForm","address_elements","Array","isArray","map","normalizeApiMappings","apiMappings","autocomplete","verification","normalizeAllowedCharacters","allowedCharacters","RegExp","err","normalizeMaxLength","maxLength","normalizeWidth","width","normalizeAddressElement","field","editable","Boolean","required","allowed_characters","api_mappings","normalizeRequiredFields","seen","Set","filter","has","add","normalizePostalCodeRegex","normalizeAddressForm","result","_addressElements$","addressElementsSource","postal_code_regex","verify_after_autocomplete","wrap_address1_to_address2","getAddressForm","country","countryCode","cacheKey","stack","getStack","results","getMultiEntries","form","fallback","clearAddressFormCache","Object","keys","forEach"],"sources":["../../../src/addressLookup/utils/addressForm.js"],"sourcesContent":["import { getStack } from '@nuskin/contentstack-lib';\n\nconst cache = {};\nconst DEFAULT_ADDRESS_FORM = {\n addressElements: [],\n lookupField: 'address1',\n requiredFields: [],\n postalCodeRegex: null,\n verifyAfterAutocomplete: false,\n wrapAddress1ToAddress2: false\n};\n\nconst coerceAddressElement = (element = {}) => {\n const nextElement = { ...element };\n\n if (nextElement.max_length !== undefined && nextElement.max_length !== null) {\n nextElement.max_length = Number(nextElement.max_length);\n }\n\n return nextElement;\n};\n\nconst extractAddressForm = (addressForm = null) => {\n if (!addressForm || typeof addressForm !== 'object') {\n return addressForm;\n }\n\n return {\n ...addressForm,\n address_elements: Array.isArray(addressForm.address_elements) ?\n addressForm.address_elements.map(coerceAddressElement) :\n []\n };\n};\n\nconst normalizeApiMappings = (apiMappings = null) => {\n if (!apiMappings || typeof apiMappings !== 'object') {\n return null;\n }\n\n const autocomplete = typeof apiMappings.autocomplete === 'string' ? apiMappings.autocomplete : '';\n const verification = typeof apiMappings.verification === 'string' ? apiMappings.verification : '';\n\n if (!autocomplete && !verification) {\n return null;\n }\n\n return {\n autocomplete: autocomplete || null,\n verification: verification || null\n };\n};\n\nconst normalizeAllowedCharacters = (allowedCharacters) => {\n if (!allowedCharacters || typeof allowedCharacters !== 'string') {\n return null;\n }\n\n try {\n return new RegExp(allowedCharacters);\n } catch (err) {\n return null;\n }\n};\n\nconst normalizeMaxLength = (element = {}) => {\n if (typeof element.maxLength === 'number') {\n return element.maxLength;\n }\n\n if (typeof element.max_length === 'number') {\n return element.max_length;\n }\n\n return null;\n};\n\nconst normalizeWidth = (width) => {\n if (width === 'half' || width === 'third') {\n return width;\n }\n\n return 'full';\n};\n\nconst normalizeAddressElement = (element = {}) => ({\n field: element.field || '',\n width: normalizeWidth(element.width),\n editable: Boolean(element.editable),\n maxLength: normalizeMaxLength(element),\n required: Boolean(element.required),\n allowedCharacters: normalizeAllowedCharacters(element.allowedCharacters || element.allowed_characters),\n apiMappings: normalizeApiMappings(element.api_mappings || element.apiMappings)\n});\n\nconst normalizeRequiredFields = (addressElements = []) => {\n const seen = new Set();\n\n return addressElements\n .filter((element) => element.required && element.field)\n .map((element) => element.field)\n .filter((field) => {\n if (seen.has(field)) {\n return false;\n }\n seen.add(field);\n return true;\n });\n};\n\nconst normalizePostalCodeRegex = (postalCodeRegex) => {\n if (!postalCodeRegex) {\n return null;\n }\n\n if (postalCodeRegex instanceof RegExp) {\n return postalCodeRegex;\n }\n\n if (typeof postalCodeRegex !== 'string') {\n return null;\n }\n\n try {\n return new RegExp(postalCodeRegex);\n } catch (err) {\n return null;\n }\n};\n\nexport const normalizeAddressForm = (result = {}) => {\n const addressElementsSource = result.address_elements || result.addressElements;\n\n const addressElements = Array.isArray(addressElementsSource) ?\n addressElementsSource.map(normalizeAddressElement).filter((element) => element.field) :\n [];\n\n return {\n addressElements,\n lookupField: addressElements[0]?.field || DEFAULT_ADDRESS_FORM.lookupField,\n requiredFields: normalizeRequiredFields(addressElements),\n postalCodeRegex: normalizePostalCodeRegex(result.postal_code_regex || result.postalCodeRegex),\n verifyAfterAutocomplete: Boolean(result.verify_after_autocomplete || result.verifyAfterAutocomplete),\n wrapAddress1ToAddress2: Boolean(result.wrap_address1_to_address2 || result.wrapAddress1ToAddress2)\n };\n};\n\nexport const getAddressForm = async (country) => {\n const countryCode = country || 'US';\n const cacheKey = `${countryCode}`;\n\n if (cache[cacheKey]) {\n return cache[cacheKey];\n }\n\n try {\n const stack = getStack();\n const results = await stack.getMultiEntries('address_form', true, [countryCode]);\n const form = normalizeAddressForm(extractAddressForm(results?.[0]));\n cache[cacheKey] = form;\n return form;\n } catch (err) {\n const fallback = { ...DEFAULT_ADDRESS_FORM };\n cache[cacheKey] = fallback;\n return fallback;\n }\n};\n\nexport const clearAddressFormCache = () => {\n Object.keys(cache).forEach((cacheKey) => {\n delete cache[cacheKey];\n });\n};\n\nexport { DEFAULT_ADDRESS_FORM };\n"],"mappings":"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","ignoreList":[]}