abmp-npm 2.0.24 → 2.0.26

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.
@@ -31,7 +31,7 @@ async function findMemberByWixDataId(memberId) {
31
31
  }
32
32
  }
33
33
 
34
- async function createContactAndMemberIfNew(memberData) {
34
+ async function createContactAndMemberIfNew(memberData, allowDuplicates = false) {
35
35
  if (!memberData) {
36
36
  throw new Error('Member data is required');
37
37
  }
@@ -47,7 +47,9 @@ async function createContactAndMemberIfNew(memberData) {
47
47
  const needsWixContact = !memberData.wixContactId;
48
48
  const [newWixMemberId, newWixContactId] = await Promise.all([
49
49
  needsWixMember ? createSiteMember(toCreateMemberData) : Promise.resolve(null),
50
- needsWixContact ? createSiteContact(toCreateMemberData) : Promise.resolve(null),
50
+ needsWixContact
51
+ ? createSiteContact(toCreateMemberData, allowDuplicates)
52
+ : Promise.resolve(null),
51
53
  ]);
52
54
  let memberDataWithContactId = {
53
55
  ...memberData,
@@ -526,9 +528,10 @@ async function prepareMemberForQALogin(email) {
526
528
  * @param {Object} params - Parameters
527
529
  * @param {string} params.pageName - Name of the page/popup where button was clicked
528
530
  * @param {string} params.buttonName - Name/ID of the button that was clicked
531
+ * @param {Object} [params.data] - Optional data object to store with the click (e.g., form data being saved)
529
532
  * @returns {Promise<Object>} - Saved record or null if member not found
530
533
  */
531
- async function trackButtonClick({ pageName, buttonName }) {
534
+ async function trackButtonClick({ pageName, buttonName, data }) {
532
535
  const wixMember = await getCurrentMember();
533
536
 
534
537
  if (!wixMember) {
@@ -554,6 +557,7 @@ async function trackButtonClick({ pageName, buttonName }) {
554
557
  pageName,
555
558
  buttonName,
556
559
  clickedAt: new Date(),
560
+ ...(data && { data }),
557
561
  };
558
562
 
559
563
  try {
@@ -562,7 +562,7 @@ const scheduleCreateContactsFromMembers = async () => {
562
562
  const createContactsFromMembers = async data => {
563
563
  const { chunk, chunkIndex } = data;
564
564
  console.log(`Creating contacts from ${chunk.length} members in chunk ${chunkIndex}`);
565
- const createPromises = chunk.map(member => createContactAndMemberIfNew(member));
565
+ const createPromises = chunk.map(member => createContactAndMemberIfNew(member, true));
566
566
  const createResults = await Promise.all(createPromises);
567
567
  console.log(
568
568
  `Created ${createResults.length} contacts from ${chunk.length} members in chunk ${chunkIndex}`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abmp-npm",
3
- "version": "2.0.24",
3
+ "version": "2.0.26",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "check-cycles": "madge --circular .",
@@ -38,6 +38,13 @@ const MAIN_STATE_BOX_STATES = {
38
38
 
39
39
  const FALLBACK_ADDRESS_STATUS = ADDRESS_STATUS_TYPES.STATE_CITY_ZIP;
40
40
 
41
+ const PAGE_NAME = 'Personal Details';
42
+ const BUTTON_NAMES = {
43
+ PERSONAL: 'Save Personal Details',
44
+ BUSINESS: 'Save Business & Services',
45
+ CONTACT: 'Save Contact & Booking',
46
+ };
47
+
41
48
  const FORM_SECTION_HANDLER_MAP = {
42
49
  PERSONAL: { section: 'personal', handler: null }, // handler will be set in init
43
50
  BUSINESS_SERVICES: { section: 'businessServices', handler: null },
@@ -52,6 +59,7 @@ async function personalDetailsOnReady({
52
59
  saveRegistrationData,
53
60
  validateMemberToken,
54
61
  checkUrlUniqueness,
62
+ trackClick,
55
63
  }) {
56
64
  let itemMemberObj = {};
57
65
  let originalMemberData = {};
@@ -1094,6 +1102,12 @@ async function personalDetailsOnReady({
1094
1102
  ...personalChanges,
1095
1103
  };
1096
1104
 
1105
+ trackClick({
1106
+ pageName: PAGE_NAME,
1107
+ buttonName: BUTTON_NAMES.PERSONAL,
1108
+ data: formData,
1109
+ });
1110
+
1097
1111
  // Log the specific personal data changes
1098
1112
  console.group('Personal Details Save Attempt');
1099
1113
  console.log('Current Data:', beforeData);
@@ -1137,6 +1151,12 @@ async function personalDetailsOnReady({
1137
1151
  ...businessChanges,
1138
1152
  };
1139
1153
 
1154
+ trackClick({
1155
+ pageName: PAGE_NAME,
1156
+ buttonName: BUTTON_NAMES.BUSINESS,
1157
+ data: formData,
1158
+ });
1159
+
1140
1160
  // Log the specific business data changes
1141
1161
  console.group('Business Services Save Attempt');
1142
1162
  console.log('Current Data:', beforeData);
@@ -1385,13 +1405,27 @@ async function personalDetailsOnReady({
1385
1405
  }
1386
1406
 
1387
1407
  function setupAddressRepeaterEventListeners() {
1388
- _$w('#mainAddressCheckbox').onChange(event => {
1408
+ _$w('#mainAddressCheckbox').onChange(async event => {
1389
1409
  const data = _$w('#addressesList').data;
1390
1410
  const clickedItemData = data.find(item => item._id === event.context.itemId);
1391
1411
  const $item = _$w.at(event.context);
1412
+ const checkbox = $item('#mainAddressCheckbox');
1413
+ const isBeingUnchecked = !event.target.checked;
1414
+
1415
+ if (isBeingUnchecked) {
1416
+ const addressDisplayOptions = itemMemberObj.addressDisplayOption || [];
1417
+ const mainAddressOption = addressDisplayOptions.find(opt => opt.isMain === true);
1418
+
1419
+ // If this address is the main address, prevent unchecking
1420
+ if (mainAddressOption && mainAddressOption.key === clickedItemData._id) {
1421
+ checkbox.checked = true;
1422
+ await wixWindow.openLightbox(LIGHTBOX_NAMES.MAIN_ADDRESS_ERROR);
1423
+ return;
1424
+ }
1425
+ }
1392
1426
 
1393
1427
  _$w('#mainAddressCheckbox').checked = false;
1394
- $item('#mainAddressCheckbox').checked = true;
1428
+ checkbox.checked = true;
1395
1429
 
1396
1430
  if (clickedItemData.address.addressStatus === ADDRESS_STATUS_TYPES.DONT_SHOW) {
1397
1431
  updateAddressStatus(clickedItemData._id, ADDRESS_STATUS_TYPES.STATE_CITY_ZIP);
@@ -1970,6 +2004,12 @@ async function personalDetailsOnReady({
1970
2004
  ...contactChanges,
1971
2005
  };
1972
2006
 
2007
+ trackClick({
2008
+ pageName: PAGE_NAME,
2009
+ buttonName: BUTTON_NAMES.CONTACT,
2010
+ data: formData,
2011
+ });
2012
+
1973
2013
  // Log the specific contact & booking data changes
1974
2014
  console.group('Contact & Booking Save Attempt');
1975
2015
  console.log('Current Data:', beforeData);
package/public/consts.js CHANGED
@@ -84,6 +84,7 @@ const LIGHTBOX_NAMES = {
84
84
  DELETE_CONFIRM: 'deleteConfirm',
85
85
  SELECT_BANNER_IMAGES: 'Select Banner Images',
86
86
  CONTACT_US: 'Contact Us',
87
+ MAIN_ADDRESS_ERROR: 'mainAddressError',
87
88
  };
88
89
 
89
90
  const FREE_WEBSITE_TEXT_STATES = {