abmp-npm 10.3.10 → 10.3.12

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/backend/jobs.js CHANGED
@@ -98,20 +98,20 @@ async function scheduleNormalizeMemberEmailsTask() {
98
98
  }
99
99
 
100
100
  /**
101
- * Schedules hiding ALL addresses for ALL members that have any address (sets each address's
102
- * addressStatus to DONT_SHOW). Manually triggered one-off maintenance task.
101
+ * Schedules setting ALL addresses for ALL members that have any address to STATE_CITY_ZIP
102
+ * (show city/state/zip, hide the street). Manually triggered one-off maintenance task.
103
103
  */
104
- async function scheduleHideAllMemberAddressesTask() {
104
+ async function scheduleSetAddressesToCityStateTask() {
105
105
  try {
106
- console.log('scheduleHideAllMemberAddresses started!');
106
+ console.log('scheduleSetAddressesToCityState started!');
107
107
  return await taskManager().schedule({
108
- name: TASKS_NAMES.scheduleHideAllMemberAddresses,
108
+ name: TASKS_NAMES.scheduleSetAddressesToCityState,
109
109
  data: {},
110
110
  type: 'scheduled',
111
111
  });
112
112
  } catch (error) {
113
- console.error(`Failed to scheduleHideAllMemberAddresses: ${error.message}`);
114
- throw new Error(`Failed to scheduleHideAllMemberAddresses: ${error.message}`);
113
+ console.error(`Failed to scheduleSetAddressesToCityState: ${error.message}`);
114
+ throw new Error(`Failed to scheduleSetAddressesToCityState: ${error.message}`);
115
115
  }
116
116
  }
117
117
 
@@ -153,6 +153,6 @@ module.exports = {
153
153
  scheduleFixPrimaryAddressForMembersTask,
154
154
  scheduleFixUrlsWithSpacesTask,
155
155
  scheduleNormalizeMemberEmailsTask,
156
- scheduleHideAllMemberAddressesTask,
156
+ scheduleSetAddressesToCityStateTask,
157
157
  runDailyPullExecutionCheck,
158
158
  };
@@ -9,35 +9,36 @@ const { TASKS_NAMES } = require('./consts');
9
9
 
10
10
  const CHUNK_SIZE = 1000;
11
11
 
12
+ // Target visibility for every address: show city / state / zip, hide the street address.
13
+ const TARGET_STATUS = ADDRESS_STATUS_TYPES.STATE_CITY_ZIP;
14
+
12
15
  const getMemberAddresses = member => (Array.isArray(member.addresses) ? member.addresses : []);
13
16
 
14
17
  /**
15
- * Whether a member has at least one address that is not already hidden.
18
+ * Whether a member has at least one address not already at the target status.
16
19
  * @param {Object} member
17
20
  * @returns {boolean}
18
21
  */
19
- const hasVisibleAddress = member =>
20
- getMemberAddresses(member).some(
21
- address => address && address.addressStatus !== ADDRESS_STATUS_TYPES.DONT_SHOW
22
- );
22
+ const needsCityStateUpdate = member =>
23
+ getMemberAddresses(member).some(address => address && address.addressStatus !== TARGET_STATUS);
23
24
 
24
25
  /**
25
- * Sets every address on a member to DONT_SHOW (other address fields are preserved).
26
+ * Sets every address on a member to STATE_CITY_ZIP (other address fields are preserved).
26
27
  * @param {Object} member
27
- * @returns {Array} the member's addresses with addressStatus set to DONT_SHOW
28
+ * @returns {Array} the member's addresses with addressStatus set to STATE_CITY_ZIP
28
29
  */
29
- const hideMemberAddresses = member =>
30
+ const setAddressesToCityState = member =>
30
31
  getMemberAddresses(member).map(address => ({
31
32
  ...address,
32
- addressStatus: ADDRESS_STATUS_TYPES.DONT_SHOW,
33
+ addressStatus: TARGET_STATUS,
33
34
  }));
34
35
 
35
36
  /**
36
- * Schedules tasks to hide ALL addresses for ALL members that have any address.
37
- * Manually triggered (not cron-wired). Sets each address's addressStatus to DONT_SHOW.
37
+ * Schedules tasks to set ALL addresses for ALL members to STATE_CITY_ZIP (show city/state/zip,
38
+ * hide the street). Manually triggered (not cron-wired).
38
39
  */
39
- async function scheduleHideAllMemberAddresses() {
40
- console.log('=== Scheduling Hide All Member Addresses Tasks ===');
40
+ async function scheduleSetAddressesToCityState() {
41
+ console.log('=== Scheduling Set Addresses To City/State Tasks ===');
41
42
 
42
43
  try {
43
44
  const membersQuery = await wixData
@@ -47,22 +48,22 @@ async function scheduleHideAllMemberAddresses() {
47
48
  const members = await queryAllItems(membersQuery);
48
49
  console.log(`Fetched ${members.length} members with addresses`);
49
50
 
50
- // Only members that still have at least one visible address need updating.
51
+ // Only members that still have an address not at the target status need updating.
51
52
  const memberIds = [
52
53
  ...new Set(
53
54
  members
54
- .filter(hasVisibleAddress)
55
+ .filter(needsCityStateUpdate)
55
56
  .map(member => Number(member.memberId))
56
57
  .filter(memberId => Number.isFinite(memberId) && memberId > 0)
57
58
  ),
58
59
  ];
59
- console.log(`Members with at least one visible address: ${memberIds.length}`);
60
+ console.log(`Members needing a city/state update: ${memberIds.length}`);
60
61
 
61
62
  if (memberIds.length === 0) {
62
- console.log('No members need their addresses hidden');
63
+ console.log('No members need their addresses set to city/state');
63
64
  return {
64
65
  success: true,
65
- message: 'No members need their addresses hidden',
66
+ message: 'No members need their addresses set to city/state',
66
67
  totalMembers: 0,
67
68
  tasksScheduled: 0,
68
69
  };
@@ -72,7 +73,7 @@ async function scheduleHideAllMemberAddresses() {
72
73
  for (let i = 0; i < chunks.length; i++) {
73
74
  const chunk = chunks[i];
74
75
  await taskManager().schedule({
75
- name: TASKS_NAMES.hideMemberAddressesChunk,
76
+ name: TASKS_NAMES.setAddressesToCityStateChunk,
76
77
  data: {
77
78
  memberIds: chunk,
78
79
  chunkIndex: i,
@@ -93,22 +94,22 @@ async function scheduleHideAllMemberAddresses() {
93
94
  console.log(JSON.stringify(result, null, 2));
94
95
  return result;
95
96
  } catch (error) {
96
- console.error('Error scheduling hide-all-addresses:', error);
97
+ console.error('Error scheduling set-addresses-to-city-state:', error);
97
98
  throw error;
98
99
  }
99
100
  }
100
101
 
101
102
  /**
102
- * Processes a chunk of members and sets every address to DONT_SHOW.
103
+ * Processes a chunk of members and sets every address to STATE_CITY_ZIP.
103
104
  * @param {Object} data
104
105
  * @param {Array<number|string>} data.memberIds
105
106
  * @param {number} data.chunkIndex
106
107
  * @param {number} data.totalChunks
107
108
  */
108
- async function hideMemberAddressesChunk(data) {
109
+ async function setAddressesToCityStateChunk(data) {
109
110
  const { memberIds, chunkIndex, totalChunks } = data;
110
111
  console.log(
111
- `Processing hide-addresses chunk ${chunkIndex + 1}/${totalChunks} (${memberIds.length} members)`
112
+ `Processing set-city-state chunk ${chunkIndex + 1}/${totalChunks} (${memberIds.length} members)`
112
113
  );
113
114
 
114
115
  const result = { successful: 0, failed: 0, skipped: 0, errors: [], failedIds: [] };
@@ -119,14 +120,14 @@ async function hideMemberAddressesChunk(data) {
119
120
 
120
121
  const membersToUpdate = [];
121
122
  members.forEach(member => {
122
- // Skip members that have no address or are already fully hidden.
123
- if (!hasVisibleAddress(member)) {
123
+ // Skip members that have no address or are already all at the target status.
124
+ if (!needsCityStateUpdate(member)) {
124
125
  result.skipped++;
125
126
  return;
126
127
  }
127
128
  membersToUpdate.push({
128
129
  ...member,
129
- addresses: hideMemberAddresses(member),
130
+ addresses: setAddressesToCityState(member),
130
131
  });
131
132
  });
132
133
 
@@ -138,7 +139,7 @@ async function hideMemberAddressesChunk(data) {
138
139
  try {
139
140
  await bulkSaveMembers(membersToUpdate);
140
141
  result.successful += membersToUpdate.length;
141
- console.log(`✅ Successfully hid addresses for ${membersToUpdate.length} members`);
142
+ console.log(`✅ Set addresses to city/state for ${membersToUpdate.length} members`);
142
143
  } catch (error) {
143
144
  console.error('❌ Error bulk saving members:', error);
144
145
  result.failed += membersToUpdate.length;
@@ -148,12 +149,12 @@ async function hideMemberAddressesChunk(data) {
148
149
 
149
150
  return result;
150
151
  } catch (error) {
151
- console.error(`Error processing hide-addresses chunk ${chunkIndex}:`, error);
152
+ console.error(`Error processing set-city-state chunk ${chunkIndex}:`, error);
152
153
  throw error;
153
154
  }
154
155
  }
155
156
 
156
157
  module.exports = {
157
- scheduleHideAllMemberAddresses,
158
- hideMemberAddressesChunk,
158
+ scheduleSetAddressesToCityState,
159
+ setAddressesToCityStateChunk,
159
160
  };
@@ -22,8 +22,8 @@ const TASKS_NAMES = {
22
22
  fixPrimaryAddressChunk: 'fixPrimaryAddressChunk',
23
23
  scheduleFixUrlsWithSpaces: 'scheduleFixUrlsWithSpaces',
24
24
  fixUrlsWithSpacesChunk: 'fixUrlsWithSpacesChunk',
25
- scheduleHideAllMemberAddresses: 'scheduleHideAllMemberAddresses',
26
- hideMemberAddressesChunk: 'hideMemberAddressesChunk',
25
+ scheduleSetAddressesToCityState: 'scheduleSetAddressesToCityState',
26
+ setAddressesToCityStateChunk: 'setAddressesToCityStateChunk',
27
27
  scheduleNormalizeMemberEmails: 'scheduleNormalizeMemberEmails',
28
28
  normalizeMemberEmailsChunk: 'normalizeMemberEmailsChunk',
29
29
  dailyPullExecutionCheck: 'dailyPullExecutionCheck',
@@ -8,16 +8,16 @@ const {
8
8
  scheduleFixPrimaryAddressForMembers,
9
9
  fixPrimaryAddressChunk,
10
10
  } = require('./address-primary-methods');
11
+ const {
12
+ scheduleSetAddressesToCityState,
13
+ setAddressesToCityStateChunk,
14
+ } = require('./address-visibility-methods');
11
15
  const { TASKS_NAMES } = require('./consts');
12
16
  const { dailyPullExecutionCheck } = require('./daily-pull-check-methods');
13
17
  const {
14
18
  scheduleNormalizeMemberEmails,
15
19
  normalizeMemberEmailsChunk,
16
20
  } = require('./email-normalize-methods');
17
- const {
18
- scheduleHideAllMemberAddresses,
19
- hideMemberAddressesChunk,
20
- } = require('./hide-addresses-methods');
21
21
  const {
22
22
  scheduleTaskForEmptyAboutYouMembers,
23
23
  convertAboutYouHtmlToRichContent,
@@ -211,17 +211,17 @@ const TASKS = {
211
211
  shouldSkipCheck: () => false,
212
212
  estimatedDurationSec: 80,
213
213
  },
214
- [TASKS_NAMES.scheduleHideAllMemberAddresses]: {
215
- name: TASKS_NAMES.scheduleHideAllMemberAddresses,
214
+ [TASKS_NAMES.scheduleSetAddressesToCityState]: {
215
+ name: TASKS_NAMES.scheduleSetAddressesToCityState,
216
216
  getIdentifier: () => 'SHOULD_NEVER_SKIP',
217
- process: scheduleHideAllMemberAddresses,
217
+ process: scheduleSetAddressesToCityState,
218
218
  shouldSkipCheck: () => false,
219
219
  estimatedDurationSec: 80,
220
220
  },
221
- [TASKS_NAMES.hideMemberAddressesChunk]: {
222
- name: TASKS_NAMES.hideMemberAddressesChunk,
221
+ [TASKS_NAMES.setAddressesToCityStateChunk]: {
222
+ name: TASKS_NAMES.setAddressesToCityStateChunk,
223
223
  getIdentifier: task => task.data,
224
- process: hideMemberAddressesChunk,
224
+ process: setAddressesToCityStateChunk,
225
225
  shouldSkipCheck: () => false,
226
226
  estimatedDurationSec: 80,
227
227
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abmp-npm",
3
- "version": "10.3.10",
3
+ "version": "10.3.12",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "check-cycles": "madge --circular .",
@@ -1077,7 +1077,10 @@ async function personalDetailsOnReady({
1077
1077
  }
1078
1078
 
1079
1079
  function renderServices() {
1080
- setupRepeater('#servicesRepeater', selectedServices);
1080
+ // Pass a fresh array copy so the Wix repeater detects the change and
1081
+ // re-renders. Assigning the same array reference (mutated in place by
1082
+ // add/delete) is treated as a no-op, leaving stale chips on screen.
1083
+ setupRepeater('#servicesRepeater', [...selectedServices]);
1081
1084
  }
1082
1085
 
1083
1086
  function setupRepeater(repeaterId, data) {