abmp-npm 1.7.2 → 1.8.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.
- package/.husky/pre-commit +22 -0
- package/.prettierignore +7 -0
- package/.prettierrc.json +16 -0
- package/backend/automations-methods.js +13 -0
- package/backend/consts.js +9 -48
- package/backend/elevated-modules.js +16 -0
- package/backend/forms-methods.js +52 -0
- package/backend/index.js +2 -5
- package/backend/members-area-methods.js +36 -0
- package/backend/members-data-methods.js +55 -0
- package/backend/utils.js +30 -130
- package/eslint.config.js +113 -0
- package/index.js +1 -1
- package/package.json +28 -3
- package/pages/ContactUs.js +129 -0
- package/pages/Profile.js +351 -0
- package/pages/index.js +4 -0
- package/public/consts.js +15 -0
- package/public/index.js +5 -0
- package/public/messages.js +16 -0
- package/public/utils.js +58 -0
- package/backend/updateMemberData.js +0 -210
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import { generateGeoHash } from './utils.js';
|
|
2
|
-
import {
|
|
3
|
-
ADDRESS_STATUS_TYPES,
|
|
4
|
-
DEFAULT_MEMBER_DISPLAY_SETTINGS,
|
|
5
|
-
MEMBER_ACTIONS,
|
|
6
|
-
} from './consts.js';
|
|
7
|
-
import {
|
|
8
|
-
determineAddressDisplayStatus,
|
|
9
|
-
isValidArray,
|
|
10
|
-
processInterests,
|
|
11
|
-
createFullName,
|
|
12
|
-
} from './utils.js';
|
|
13
|
-
import { findMemberById } from './utils.js';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Validates core member data requirements
|
|
17
|
-
* @param {Object} inputMemberData - Raw member data from API to validate
|
|
18
|
-
* @returns {boolean} - True if all required fields are valid, false otherwise
|
|
19
|
-
*/
|
|
20
|
-
const validateCoreMemberData = (inputMemberData) => {
|
|
21
|
-
// Check memberid
|
|
22
|
-
if (!inputMemberData?.memberid) {
|
|
23
|
-
console.warn('validateCoreMemberData: Missing required field - memberid is mandatory');
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Check email
|
|
28
|
-
if (!inputMemberData?.email ||
|
|
29
|
-
typeof inputMemberData.email !== 'string' ||
|
|
30
|
-
!inputMemberData.email.trim()) {
|
|
31
|
-
console.warn('validateCoreMemberData: Missing required field - email (valid string) is mandatory');
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Check memberships
|
|
36
|
-
if (!inputMemberData?.memberships || !Array.isArray(inputMemberData.memberships) || inputMemberData.memberships.length === 0) {
|
|
37
|
-
console.warn('validateCoreMemberData: Missing required field - memberships (non-empty array) is mandatory');
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return true;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Creates base member data structure with core properties
|
|
46
|
-
* @param {Object} inputMemberData - Raw member data from API
|
|
47
|
-
* @param {Object} existingDbMember - Existing member data from database
|
|
48
|
-
* @param {number} currentPageNumber - Current page number being processed
|
|
49
|
-
* @returns {Object|null} - Structured base member data or null if required fields are missing
|
|
50
|
-
*/
|
|
51
|
-
const createCoreMemberData = (
|
|
52
|
-
inputMemberData,
|
|
53
|
-
existingDbMember,
|
|
54
|
-
currentPageNumber
|
|
55
|
-
) => {
|
|
56
|
-
// Validate required fields
|
|
57
|
-
if (!validateCoreMemberData(inputMemberData)) {
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const sanitizedFirstName = inputMemberData.firstname?.trim() || '';
|
|
62
|
-
const sanitizedLastName = inputMemberData.lastname?.trim() || '';
|
|
63
|
-
const bookingUrl = inputMemberData.migrationData?.schedule_code?.startsWith('http') ? inputMemberData.migrationData?.schedule_code : '';
|
|
64
|
-
return {
|
|
65
|
-
...existingDbMember,
|
|
66
|
-
memberId: inputMemberData.memberid,
|
|
67
|
-
firstName: sanitizedFirstName,
|
|
68
|
-
lastName: sanitizedLastName,
|
|
69
|
-
fullName: createFullName(sanitizedFirstName, sanitizedLastName),
|
|
70
|
-
email: inputMemberData.email.trim(),
|
|
71
|
-
phones: inputMemberData.phones || [],
|
|
72
|
-
toShowPhone: inputMemberData.migrationData?.show_phone || '',
|
|
73
|
-
action: inputMemberData.action,
|
|
74
|
-
licenses: inputMemberData.licenses || [],
|
|
75
|
-
memberships: inputMemberData.memberships,
|
|
76
|
-
pageNumber: currentPageNumber,
|
|
77
|
-
optOut: inputMemberData.migrationData?.opted_out || false,
|
|
78
|
-
showABMP: inputMemberData.migrationData?.show_member_since || false,
|
|
79
|
-
locHash: generateGeoHash(inputMemberData.addresses || []),
|
|
80
|
-
...DEFAULT_MEMBER_DISPLAY_SETTINGS,
|
|
81
|
-
isVisible: inputMemberData.action !== MEMBER_ACTIONS.DROP,
|
|
82
|
-
url: inputMemberData.url,
|
|
83
|
-
bookingUrl,
|
|
84
|
-
APIBookingUrl: inputMemberData.migrationData?.schedule_code,//keeping it as a ref if in future they want original
|
|
85
|
-
};
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Enriches member data with optional migration properties
|
|
90
|
-
* @param {Object} memberDataToUpdate - Member data object to enhance
|
|
91
|
-
* @param {Object} migrationData - Migration data containing optional properties
|
|
92
|
-
*/
|
|
93
|
-
const enrichWithMigrationData = (memberDataToUpdate, migrationData) => {
|
|
94
|
-
if (!migrationData) return;
|
|
95
|
-
|
|
96
|
-
memberDataToUpdate.logoImage = migrationData.logo_url;
|
|
97
|
-
memberDataToUpdate.aboutYouHtml = migrationData.detailtext;
|
|
98
|
-
memberDataToUpdate.addressInfo = migrationData.addressinfo;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (migrationData.website) {
|
|
102
|
-
memberDataToUpdate.website = migrationData.website;
|
|
103
|
-
memberDataToUpdate.showWebsite = true;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (migrationData.interests) {
|
|
107
|
-
memberDataToUpdate.areasOfPractices = processInterests(
|
|
108
|
-
migrationData.interests
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Processes multiple addresses with their display statuses
|
|
115
|
-
* @param {Array} addressesList - Array of address objects
|
|
116
|
-
* @param {Object} displayConfiguration - Address display configuration
|
|
117
|
-
* @returns {Array} - Processed addresses with status information
|
|
118
|
-
*/
|
|
119
|
-
const processAddressesWithStatus = (
|
|
120
|
-
addressesList,
|
|
121
|
-
displayConfiguration = {}
|
|
122
|
-
) => {
|
|
123
|
-
if (!isValidArray(addressesList)) {
|
|
124
|
-
return [];
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return addressesList.map((address) => {
|
|
128
|
-
const displayStatus = displayConfiguration[address.key]
|
|
129
|
-
? determineAddressDisplayStatus(displayConfiguration[address.key])
|
|
130
|
-
: ADDRESS_STATUS_TYPES.STATE_CITY_ZIP;
|
|
131
|
-
|
|
132
|
-
return {
|
|
133
|
-
...address,
|
|
134
|
-
addressStatus: displayStatus,
|
|
135
|
-
};
|
|
136
|
-
});
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Processes and adds address data with proper status
|
|
141
|
-
* @param {Object} memberDataToUpdate - Member data object to enhance
|
|
142
|
-
* @param {Array} addressesList - Array of address objects
|
|
143
|
-
* @param {Object} addressDisplayInfo - Address visibility configuration
|
|
144
|
-
*/
|
|
145
|
-
const enrichWithAddressData = (
|
|
146
|
-
memberDataToUpdate,
|
|
147
|
-
addressesList,
|
|
148
|
-
addressDisplayInfo
|
|
149
|
-
) => {
|
|
150
|
-
if (isValidArray(addressesList)) {
|
|
151
|
-
memberDataToUpdate.addresses = processAddressesWithStatus(
|
|
152
|
-
addressesList,
|
|
153
|
-
addressDisplayInfo
|
|
154
|
-
);
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Generates complete updated member data by combining existing and migration data
|
|
160
|
-
* @param {Object} inputMemberData - Raw member data from API
|
|
161
|
-
* @param {number} currentPageNumber - Current page number being processed
|
|
162
|
-
* @returns {Promise<Object|null>} - Complete updated member data or null if validation fails
|
|
163
|
-
*/
|
|
164
|
-
const generateUpdatedMemberData = async (
|
|
165
|
-
inputMemberData,
|
|
166
|
-
currentPageNumber,
|
|
167
|
-
isVelo = false
|
|
168
|
-
) => {
|
|
169
|
-
if (!validateCoreMemberData(inputMemberData)) {
|
|
170
|
-
throw new Error('Invalid member data: memberid, email (valid string), and memberships (array) are required');
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
try {
|
|
174
|
-
|
|
175
|
-
const existingDbMember = isVelo? await findMemberById(inputMemberData.memberid) : {};
|
|
176
|
-
const updatedMemberData = createCoreMemberData(
|
|
177
|
-
inputMemberData,
|
|
178
|
-
existingDbMember,
|
|
179
|
-
currentPageNumber
|
|
180
|
-
);
|
|
181
|
-
|
|
182
|
-
// If createCoreMemberData returns null due to validation failure, return null
|
|
183
|
-
if (!updatedMemberData) {
|
|
184
|
-
return null;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
enrichWithMigrationData(updatedMemberData, inputMemberData.migrationData);
|
|
188
|
-
|
|
189
|
-
enrichWithAddressData(
|
|
190
|
-
updatedMemberData,
|
|
191
|
-
inputMemberData.addresses,
|
|
192
|
-
inputMemberData.migrationData?.addressinfo
|
|
193
|
-
);
|
|
194
|
-
|
|
195
|
-
return updatedMemberData;
|
|
196
|
-
} catch (error) {
|
|
197
|
-
throw error;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
module.exports = {
|
|
202
|
-
validateCoreMemberData,
|
|
203
|
-
createCoreMemberData,
|
|
204
|
-
enrichWithMigrationData,
|
|
205
|
-
processAddressesWithStatus,
|
|
206
|
-
enrichWithAddressData,
|
|
207
|
-
generateUpdatedMemberData,
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
|