abmp-npm 2.0.76 → 2.0.78
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/package.json +8 -1
- package/pages/Home.js +27 -55
- package/pages/index.js +0 -1
- package/public/Utils/personalDetailsUtils.js +5 -1
- package/public/Utils/sharedUtils.js +32 -0
- package/public/consts.js +0 -1
- package/.claude/worktrees/fix-save-button-disable/.husky/pre-commit +0 -19
- package/.claude/worktrees/fix-save-button-disable/.prettierignore +0 -7
- package/.claude/worktrees/fix-save-button-disable/.prettierrc.json +0 -16
- package/.claude/worktrees/fix-save-button-disable/README.md +0 -1
- package/.claude/worktrees/fix-save-button-disable/backend/README-member-contact-flows.md +0 -136
- package/.claude/worktrees/fix-save-button-disable/backend/__tests__/daily-pull-execution-check.test.js +0 -124
- package/.claude/worktrees/fix-save-button-disable/backend/__tests__/ensure-unique-urls-in-batch.test.js +0 -129
- package/.claude/worktrees/fix-save-button-disable/backend/__tests__/login-email-sync.test.js +0 -49
- package/.claude/worktrees/fix-save-button-disable/backend/__tests__/transient-retry-and-bulk-lookup.test.js +0 -129
- package/.claude/worktrees/fix-save-button-disable/backend/__tests__/url-uniqueness.test.js +0 -194
- package/.claude/worktrees/fix-save-button-disable/backend/automations-methods.js +0 -13
- package/.claude/worktrees/fix-save-button-disable/backend/cms-data-methods.js +0 -251
- package/.claude/worktrees/fix-save-button-disable/backend/consts.js +0 -58
- package/.claude/worktrees/fix-save-button-disable/backend/contacts-methods.js +0 -67
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/bulk-process-methods.js +0 -222
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/consts.js +0 -39
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/index.js +0 -5
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/process-member-methods.js +0 -213
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/schedule-methods.js +0 -41
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/sync-to-cms-methods.js +0 -161
- package/.claude/worktrees/fix-save-button-disable/backend/daily-pull/utils.js +0 -151
- package/.claude/worktrees/fix-save-button-disable/backend/data-hooks.js +0 -29
- package/.claude/worktrees/fix-save-button-disable/backend/dev-only-methods.js +0 -58
- package/.claude/worktrees/fix-save-button-disable/backend/elevated-modules.js +0 -18
- package/.claude/worktrees/fix-save-button-disable/backend/forms-methods.js +0 -52
- package/.claude/worktrees/fix-save-button-disable/backend/http-functions/httpFunctions.js +0 -86
- package/.claude/worktrees/fix-save-button-disable/backend/http-functions/index.js +0 -3
- package/.claude/worktrees/fix-save-button-disable/backend/http-functions/interests.js +0 -35
- package/.claude/worktrees/fix-save-button-disable/backend/index.js +0 -19
- package/.claude/worktrees/fix-save-button-disable/backend/jobs.js +0 -158
- package/.claude/worktrees/fix-save-button-disable/backend/login/generate-member-session-token.js +0 -27
- package/.claude/worktrees/fix-save-button-disable/backend/login/index.js +0 -8
- package/.claude/worktrees/fix-save-button-disable/backend/login/qa-login-methods.js +0 -54
- package/.claude/worktrees/fix-save-button-disable/backend/login/sso-methods.js +0 -159
- package/.claude/worktrees/fix-save-button-disable/backend/member-contact-orchestration.js +0 -111
- package/.claude/worktrees/fix-save-button-disable/backend/members-area-methods.js +0 -88
- package/.claude/worktrees/fix-save-button-disable/backend/members-data-methods.js +0 -789
- package/.claude/worktrees/fix-save-button-disable/backend/pac-api-methods.js +0 -54
- package/.claude/worktrees/fix-save-button-disable/backend/routers/index.js +0 -3
- package/.claude/worktrees/fix-save-button-disable/backend/routers/methods.js +0 -191
- package/.claude/worktrees/fix-save-button-disable/backend/routers/utils.js +0 -128
- package/.claude/worktrees/fix-save-button-disable/backend/search-filters-methods.js +0 -124
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/address-primary-methods.js +0 -256
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/address-visibility-methods.js +0 -160
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/consts.js +0 -34
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/daily-pull-check-methods.js +0 -78
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/email-normalize-methods.js +0 -134
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/index.js +0 -10
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/migration-methods.js +0 -46
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-configs.js +0 -251
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-helpers-methods.js +0 -433
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/tasks-process-methods.js +0 -606
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/url-migration-methods.js +0 -378
- package/.claude/worktrees/fix-save-button-disable/backend/tasks/url-space-fix-methods.js +0 -174
- package/.claude/worktrees/fix-save-button-disable/backend/utils.js +0 -277
- package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/extract-duplicate-url-groups.js +0 -201
- package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/find-duplicate-ids.js +0 -159
- package/.claude/worktrees/fix-save-button-disable/dev-only-scripts/find-duplicate-urls.js +0 -201
- package/.claude/worktrees/fix-save-button-disable/eslint.config.js +0 -120
- package/.claude/worktrees/fix-save-button-disable/index.js +0 -5
- package/.claude/worktrees/fix-save-button-disable/package-lock.json +0 -12160
- package/.claude/worktrees/fix-save-button-disable/package.json +0 -60
- package/.claude/worktrees/fix-save-button-disable/pages/ContactUs.js +0 -129
- package/.claude/worktrees/fix-save-button-disable/pages/Home.js +0 -779
- package/.claude/worktrees/fix-save-button-disable/pages/LearnMore.js +0 -27
- package/.claude/worktrees/fix-save-button-disable/pages/LoadingPage.js +0 -29
- package/.claude/worktrees/fix-save-button-disable/pages/Profile.js +0 -354
- package/.claude/worktrees/fix-save-button-disable/pages/QAPage.js +0 -39
- package/.claude/worktrees/fix-save-button-disable/pages/SaveAlerts.js +0 -13
- package/.claude/worktrees/fix-save-button-disable/pages/SelectBannerImages.js +0 -46
- package/.claude/worktrees/fix-save-button-disable/pages/deleteConfirm.js +0 -19
- package/.claude/worktrees/fix-save-button-disable/pages/index.js +0 -12
- package/.claude/worktrees/fix-save-button-disable/pages/personalDetails.js +0 -2486
- package/.claude/worktrees/fix-save-button-disable/public/Utils/homePage.js +0 -798
- package/.claude/worktrees/fix-save-button-disable/public/Utils/personalDetailsUtils.js +0 -25
- package/.claude/worktrees/fix-save-button-disable/public/Utils/sharedUtils.js +0 -235
- package/.claude/worktrees/fix-save-button-disable/public/consts.js +0 -113
- package/.claude/worktrees/fix-save-button-disable/public/index.js +0 -5
- package/.claude/worktrees/fix-save-button-disable/public/messages.js +0 -16
- package/.claude/worktrees/fix-save-button-disable/public/sso-auth-methods.js +0 -43
- package/.husky/pre-commit +0 -19
- package/.prettierignore +0 -7
- package/.prettierrc.json +0 -16
- package/backend/__tests__/daily-pull-execution-check.test.js +0 -124
- package/backend/__tests__/ensure-unique-urls-in-batch.test.js +0 -129
- package/backend/__tests__/login-email-sync.test.js +0 -49
- package/backend/__tests__/transient-retry-and-bulk-lookup.test.js +0 -129
- package/backend/__tests__/url-uniqueness.test.js +0 -194
- package/dev-only-scripts/extract-duplicate-url-groups.js +0 -201
- package/dev-only-scripts/find-duplicate-ids.js +0 -159
- package/dev-only-scripts/find-duplicate-urls.js +0 -201
- package/eslint.config.js +0 -120
- package/pages/contactForLocation.js +0 -28
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
const PAGE_NAME = 'Learn More';
|
|
2
|
-
const BUTTON_NAME = 'Upgrade Now';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Creates the Learn More popup handler
|
|
6
|
-
* @param {Object} params - Parameters
|
|
7
|
-
* @param {Function} params.$w - Wix $w selector
|
|
8
|
-
* @param {Function} params.trackClick - Backend function to track the click (handles member lookup internally)
|
|
9
|
-
*/
|
|
10
|
-
function learnMoreOnReady({ $w: _$w, trackClick }) {
|
|
11
|
-
_$w('#learnMoreBtn').onClick(async () => {
|
|
12
|
-
try {
|
|
13
|
-
await trackClick({
|
|
14
|
-
pageName: PAGE_NAME,
|
|
15
|
-
buttonName: BUTTON_NAME,
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
console.log(`Tracked ${BUTTON_NAME} click on ${PAGE_NAME}`);
|
|
19
|
-
} catch (error) {
|
|
20
|
-
console.error('Error tracking button click:', error);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
module.exports = {
|
|
26
|
-
learnMoreOnReady,
|
|
27
|
-
};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
const { location: wixLocationFrontend } = require('@wix/site-location');
|
|
2
|
-
const { local } = require('@wix/site-storage');
|
|
3
|
-
const { window: wixWindow, rendering } = require('@wix/site-window');
|
|
4
|
-
|
|
5
|
-
const { LIGHTBOX_NAMES, PAGES_PATHS } = require('../public/consts');
|
|
6
|
-
const { checkAndLogin } = require('../public/sso-auth-methods');
|
|
7
|
-
|
|
8
|
-
async function loadingPageOnReady(authenticateSSOToken) {
|
|
9
|
-
const renderingEnv = await rendering.env();
|
|
10
|
-
//This calls needs to triggered on client side, otherwise PAC API will return 401 error
|
|
11
|
-
if (renderingEnv === 'browser') {
|
|
12
|
-
//Need to pass authenticateSSOToken to checkAndLogin so it will run as a web method not a public one.
|
|
13
|
-
await checkAndLogin(authenticateSSOToken).catch(async error => {
|
|
14
|
-
console.error(`Something went wrong while logging in: ${error}`);
|
|
15
|
-
// If we already have a session (memberId), redirect to form instead of showing error.
|
|
16
|
-
const storedMemberId = await local.getItem('memberId');
|
|
17
|
-
if (storedMemberId) {
|
|
18
|
-
const redirectTo = `${PAGES_PATHS.MEMBERS_FORM}?token=${encodeURIComponent(storedMemberId)}`;
|
|
19
|
-
await wixLocationFrontend.to(`/${redirectTo}`);
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
wixWindow.openLightbox(LIGHTBOX_NAMES.LOGIN_ERROR_ALERT);
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
module.exports = {
|
|
28
|
-
loadingPageOnReady,
|
|
29
|
-
};
|
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
const { location: wixLocation } = require('@wix/site-location');
|
|
2
|
-
const { window: wixWindow } = require('@wix/site-window');
|
|
3
|
-
|
|
4
|
-
const { LIGHTBOX_NAMES } = require('../public/consts');
|
|
5
|
-
const {
|
|
6
|
-
generateId,
|
|
7
|
-
formatPracticeAreasForDisplay,
|
|
8
|
-
isWixHostedImage,
|
|
9
|
-
} = require('../public/Utils/sharedUtils');
|
|
10
|
-
|
|
11
|
-
const TESTIMONIALS_PER_PAGE_CONFIG = {
|
|
12
|
-
DESKTOP: 4,
|
|
13
|
-
TABLET: 2,
|
|
14
|
-
MOBILE: 1,
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
const BREAKPOINTS = {
|
|
18
|
-
DESKTOP: 1301,
|
|
19
|
-
TABLET: 750,
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
async function profileOnReady({ $w: _$w }) {
|
|
23
|
-
const profileData = await wixWindow.getRouterData();
|
|
24
|
-
console.log('profileData', profileData);
|
|
25
|
-
|
|
26
|
-
let testimonialsPerPage = TESTIMONIALS_PER_PAGE_CONFIG.TABLET;
|
|
27
|
-
let currentTestimonialPage = 0;
|
|
28
|
-
|
|
29
|
-
if (!profileData) {
|
|
30
|
-
wixLocation.to(`${wixLocation.baseUrl}/404`);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
initializePage();
|
|
35
|
-
|
|
36
|
-
function initializePage() {
|
|
37
|
-
bindProfileData();
|
|
38
|
-
setupAddressToggle();
|
|
39
|
-
setupResponsiveTestimonials();
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Profile data binding
|
|
43
|
-
function bindProfileData() {
|
|
44
|
-
bindAddressData();
|
|
45
|
-
bindMemberInfo();
|
|
46
|
-
bindContactInfo();
|
|
47
|
-
bindBusinessInfo();
|
|
48
|
-
bindGalleryData();
|
|
49
|
-
bindTestimonialsData();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function bindAddressData() {
|
|
53
|
-
if (profileData.mainAddress) {
|
|
54
|
-
setTextForElements(
|
|
55
|
-
['#LocationText', '#LocationText2', '#LocationText3'],
|
|
56
|
-
profileData.mainAddress
|
|
57
|
-
);
|
|
58
|
-
} else {
|
|
59
|
-
deleteElements(['#locationContainer', '#location1Container', '#locationContainer2']);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
setupAdditionalAddresses();
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function setupAdditionalAddresses() {
|
|
66
|
-
_$w('#moreAdressesRepeater').data = profileData.moreAddressesToDisplay;
|
|
67
|
-
|
|
68
|
-
if (profileData.moreAddressesToDisplay.length > 0) {
|
|
69
|
-
_$w('#moreLocationButton').expand();
|
|
70
|
-
_$w('#addressTitle').collapse();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
_$w('#moreAdressesRepeater').onItemReady(($item, itemData) => {
|
|
74
|
-
console.log('Item Data:', itemData);
|
|
75
|
-
$item('#adressText').text = itemData.address || '';
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function setupAddressToggle() {
|
|
80
|
-
toggleContainer('#moreLocationButton', '#addressContainer');
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function toggleContainer(buttonId, containerId) {
|
|
84
|
-
const $button = _$w(buttonId);
|
|
85
|
-
const $container = _$w(containerId);
|
|
86
|
-
|
|
87
|
-
$button.onClick(() => {
|
|
88
|
-
const isCollapsed = $container.collapsed;
|
|
89
|
-
$container[isCollapsed ? 'expand' : 'collapse']();
|
|
90
|
-
$button.label = isCollapsed ? 'Less Locations -' : 'More Locations +';
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function bindMemberInfo() {
|
|
95
|
-
bindMemberSince();
|
|
96
|
-
bindStudentBadge();
|
|
97
|
-
bindProfileImages();
|
|
98
|
-
bindFullName();
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
function bindMemberSince() {
|
|
102
|
-
if (profileData.memberSince) {
|
|
103
|
-
_$w('#sinceYearText').text = profileData.memberSince;
|
|
104
|
-
} else {
|
|
105
|
-
_$w('#memberSinceBox').delete();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function bindStudentBadge() {
|
|
110
|
-
if (profileData.shouldHaveStudentBadge) {
|
|
111
|
-
_$w('#studentContainer, #studentContainerMobile').expand();
|
|
112
|
-
} else {
|
|
113
|
-
_$w('#studentContainer, #studentContainerMobile').delete();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
function bindProfileImages() {
|
|
118
|
-
if (profileData.logoImage) {
|
|
119
|
-
_$w('#logoImage').src = profileData.logoImage;
|
|
120
|
-
} else {
|
|
121
|
-
_$w('#logoImage').delete();
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
if (profileData.profileImage && isWixHostedImage(profileData.profileImage)) {
|
|
125
|
-
_$w('#profileImage').src = profileData.profileImage;
|
|
126
|
-
} else {
|
|
127
|
-
_$w('#profileImage').src = profileData.defaultProfileImage;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function bindFullName() {
|
|
132
|
-
if (profileData.fullName) {
|
|
133
|
-
setTextForElements(
|
|
134
|
-
['#fullNameText', '#fullNameText2', '#fullNameTextFoter'],
|
|
135
|
-
profileData.fullName
|
|
136
|
-
);
|
|
137
|
-
} else {
|
|
138
|
-
deleteElements(['#fullNameText', '#fullNameText2', '#fullNameTextFoter']);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Contact information binding
|
|
143
|
-
function bindContactInfo() {
|
|
144
|
-
bindContactForm();
|
|
145
|
-
bindBookingUrl();
|
|
146
|
-
bindPhoneNumber();
|
|
147
|
-
bindLicenseNumber();
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function bindContactForm() {
|
|
151
|
-
if (profileData.showContactForm) {
|
|
152
|
-
_$w('#contactButton').onClick(() =>
|
|
153
|
-
wixWindow.openLightbox(LIGHTBOX_NAMES.CONTACT_US, profileData)
|
|
154
|
-
);
|
|
155
|
-
} else {
|
|
156
|
-
_$w('#contactButton').delete();
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
function bindBookingUrl() {
|
|
161
|
-
if (profileData.bookingUrl) {
|
|
162
|
-
_$w('#bookNowButton').link = profileData.bookingUrl;
|
|
163
|
-
} else {
|
|
164
|
-
_$w('#bookNowButton').delete();
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
function bindPhoneNumber() {
|
|
169
|
-
if (profileData.phone) {
|
|
170
|
-
const formattedPhoneNumber = profileData.phone.replace(/[^\d+]/g, '');
|
|
171
|
-
const getPhoneHTML = $phoneSelector =>
|
|
172
|
-
$phoneSelector.html.replace(
|
|
173
|
-
$phoneSelector.text,
|
|
174
|
-
`<a href="${`tel:${formattedPhoneNumber}`}">${profileData.phone}</a>`
|
|
175
|
-
);
|
|
176
|
-
_$w('#phoneText').html = getPhoneHTML(_$w('#phoneText'));
|
|
177
|
-
_$w('#phoneText2').html = getPhoneHTML(_$w('#phoneText2'));
|
|
178
|
-
} else {
|
|
179
|
-
deleteElements(['#phoneContainer', '#phoneContainer2']);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
function bindLicenseNumber() {
|
|
184
|
-
if (profileData.licenceNo) {
|
|
185
|
-
_$w('#licenceNoText').text = profileData.licenceNo;
|
|
186
|
-
} else {
|
|
187
|
-
_$w('#licensesContainer').delete();
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
function bindBusinessInfo() {
|
|
192
|
-
bindAboutService();
|
|
193
|
-
bindBusinessName();
|
|
194
|
-
bindAreasOfPractice();
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
function bindAboutService() {
|
|
198
|
-
if (profileData.aboutService) {
|
|
199
|
-
_$w('#aboutYouText').html = profileData.aboutService;
|
|
200
|
-
} else {
|
|
201
|
-
_$w('#aboutSection').delete();
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
function bindBusinessName() {
|
|
206
|
-
if (profileData.businessName) {
|
|
207
|
-
_$w('#businessName').text = profileData.businessName;
|
|
208
|
-
_$w('#businessName').expand();
|
|
209
|
-
} else {
|
|
210
|
-
_$w('#businessName').delete();
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
function bindAreasOfPractice() {
|
|
215
|
-
const areasText = formatPracticeAreasForDisplay(profileData.areasOfPractices);
|
|
216
|
-
|
|
217
|
-
if (areasText) {
|
|
218
|
-
_$w('#areaOfPracticesText').text = areasText;
|
|
219
|
-
} else {
|
|
220
|
-
_$w('#areaOfPracticesText').delete();
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
if (Array.isArray(profileData.areasOfPractices) && profileData.areasOfPractices.length > 0) {
|
|
224
|
-
populateRepeater(profileData.areasOfPractices, '#areaOfPracticesRepeater', '#practiceText');
|
|
225
|
-
} else {
|
|
226
|
-
_$w('#servicesSection').delete();
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
function bindGalleryData() {
|
|
231
|
-
if (profileData.bannerImages && profileData.bannerImages.length > 0) {
|
|
232
|
-
_$w('#bannerImage').src = profileData.bannerImages[0];
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
if (!profileData.gallery?.length) {
|
|
236
|
-
_$w('#gallerySection').delete();
|
|
237
|
-
} else {
|
|
238
|
-
_$w('#gallery').items = profileData.gallery;
|
|
239
|
-
_$w('#gallerySection').restore();
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
function bindTestimonialsData() {
|
|
244
|
-
if (!profileData.testimonials?.length) {
|
|
245
|
-
_$w('#testimonialsSection').delete();
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
// Responsive testimonials setup
|
|
250
|
-
async function setupResponsiveTestimonials() {
|
|
251
|
-
const { window } = await wixWindow.getBoundingRect();
|
|
252
|
-
testimonialsPerPage = getTestimonialsPerPage(window.width);
|
|
253
|
-
|
|
254
|
-
// Monitor window resize
|
|
255
|
-
setInterval(async () => {
|
|
256
|
-
const { window: win } = await wixWindow.getBoundingRect();
|
|
257
|
-
const newTestimonialsPerPage = getTestimonialsPerPage(win.width);
|
|
258
|
-
|
|
259
|
-
if (newTestimonialsPerPage !== testimonialsPerPage) {
|
|
260
|
-
testimonialsPerPage = newTestimonialsPerPage;
|
|
261
|
-
currentTestimonialPage = 0;
|
|
262
|
-
displayTestimonialsPage(profileData.testimonials);
|
|
263
|
-
}
|
|
264
|
-
}, 500);
|
|
265
|
-
|
|
266
|
-
setupTestimonialsIfAvailable();
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
function setupTestimonialsIfAvailable() {
|
|
270
|
-
if (profileData.testimonials.length > 0) {
|
|
271
|
-
setupTestimonialsPagination(profileData.testimonials);
|
|
272
|
-
_$w('#testimonialsSection').expand();
|
|
273
|
-
} else {
|
|
274
|
-
_$w('#testimonialsSection').delete();
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
function getTestimonialsPerPage(width) {
|
|
279
|
-
if (width >= BREAKPOINTS.DESKTOP) return TESTIMONIALS_PER_PAGE_CONFIG.DESKTOP;
|
|
280
|
-
if (width >= BREAKPOINTS.TABLET) return TESTIMONIALS_PER_PAGE_CONFIG.TABLET;
|
|
281
|
-
return TESTIMONIALS_PER_PAGE_CONFIG.MOBILE;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
function setTextForElements(elementIds, text) {
|
|
285
|
-
elementIds.forEach(id => {
|
|
286
|
-
_$w(id).text = text;
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
function deleteElements(elementIds) {
|
|
291
|
-
elementIds.forEach(id => {
|
|
292
|
-
_$w(id).delete();
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
function populateRepeater(data, repeaterId, textElementId) {
|
|
297
|
-
const repeaterData = data.map(item => ({
|
|
298
|
-
_id: generateId(),
|
|
299
|
-
text: item.trim(),
|
|
300
|
-
}));
|
|
301
|
-
_$w(repeaterId).data = repeaterData;
|
|
302
|
-
_$w(repeaterId).onItemReady(($item, itemData) => {
|
|
303
|
-
$item(textElementId).text = itemData.text;
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// Testimonials pagination
|
|
308
|
-
function setupTestimonialsPagination(allTestimonials) {
|
|
309
|
-
currentTestimonialPage = 0;
|
|
310
|
-
|
|
311
|
-
_$w('#prevTestimonialBtn').onClick(() => {
|
|
312
|
-
if (currentTestimonialPage > 0) {
|
|
313
|
-
currentTestimonialPage--;
|
|
314
|
-
displayTestimonialsPage(allTestimonials);
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
|
|
318
|
-
_$w('#nextTestimonialBtn').onClick(() => {
|
|
319
|
-
const maxPage = Math.floor((allTestimonials.length - 1) / testimonialsPerPage);
|
|
320
|
-
if (currentTestimonialPage < maxPage) {
|
|
321
|
-
currentTestimonialPage++;
|
|
322
|
-
displayTestimonialsPage(allTestimonials);
|
|
323
|
-
}
|
|
324
|
-
});
|
|
325
|
-
|
|
326
|
-
displayTestimonialsPage(allTestimonials);
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
function displayTestimonialsPage(allTestimonials) {
|
|
330
|
-
const start = currentTestimonialPage * testimonialsPerPage;
|
|
331
|
-
const end = start + testimonialsPerPage;
|
|
332
|
-
const currentBatch = allTestimonials.slice(start, end);
|
|
333
|
-
|
|
334
|
-
populateRepeater(currentBatch, '#testimonialsrepeater', '#testimonialText');
|
|
335
|
-
updateTestimonialNavigation(end, allTestimonials.length);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
function updateTestimonialNavigation(end, totalLength) {
|
|
339
|
-
_$w('#prevTestimonialBtn').hide();
|
|
340
|
-
_$w('#nextTestimonialBtn').hide();
|
|
341
|
-
|
|
342
|
-
if (currentTestimonialPage > 0) {
|
|
343
|
-
_$w('#prevTestimonialBtn').show();
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
if (end < totalLength) {
|
|
347
|
-
_$w('#nextTestimonialBtn').show();
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
module.exports = {
|
|
353
|
-
profileOnReady,
|
|
354
|
-
};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
const { location: wixLocationFrontend } = require('@wix/site-location');
|
|
2
|
-
const { authentication } = require('@wix/site-members');
|
|
3
|
-
const { local } = require('@wix/site-storage');
|
|
4
|
-
|
|
5
|
-
async function qaPageOnReady({ $w: _$w, loginQAMember }) {
|
|
6
|
-
try {
|
|
7
|
-
const { userEmail, secret, redirectTo, ...restQueryParams } = await wixLocationFrontend.query();
|
|
8
|
-
|
|
9
|
-
if (!userEmail || !secret) {
|
|
10
|
-
throw new Error('Missing required parameters: userEmail and/or secret');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const result = await loginQAMember({ userEmail, secret });
|
|
14
|
-
|
|
15
|
-
if (!result.success || !result.token) {
|
|
16
|
-
throw new Error(result.error || 'Login failed');
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
await authentication.applySessionToken(result.token);
|
|
20
|
-
console.log('QA user logged in successfully');
|
|
21
|
-
|
|
22
|
-
await local.setItem('memberId', result.memberCMSId);
|
|
23
|
-
const queryParams = new URLSearchParams({ ...restQueryParams, token: result.memberCMSId });
|
|
24
|
-
const redirectUrl = redirectTo ? `/${redirectTo}?${queryParams.toString()}` : '/';
|
|
25
|
-
|
|
26
|
-
await wixLocationFrontend.to(redirectUrl);
|
|
27
|
-
} catch (error) {
|
|
28
|
-
console.error('QA login failed:', error);
|
|
29
|
-
|
|
30
|
-
const qaTextElement = _$w('#qaText');
|
|
31
|
-
if (qaTextElement) {
|
|
32
|
-
qaTextElement.text = 'Login failed: ' + (error.message || 'Unknown error');
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
module.exports = {
|
|
38
|
-
qaPageOnReady,
|
|
39
|
-
};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
const { lightbox } = require('@wix/site-window');
|
|
2
|
-
|
|
3
|
-
async function saveAlertsOnReady({ $w: _$w }) {
|
|
4
|
-
const receivedData = await lightbox.getContext();
|
|
5
|
-
_$w('#closeButton').onClick(() => lightbox.close());
|
|
6
|
-
_$w('#cancelButton').onClick(() => lightbox.close());
|
|
7
|
-
_$w('#leaveButton').link = receivedData?.membersExternalPortalUrl;
|
|
8
|
-
_$w('#leaveButton').target = '_blank';
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
module.exports = {
|
|
12
|
-
saveAlertsOnReady,
|
|
13
|
-
};
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
const { lightbox } = require('@wix/site-window');
|
|
2
|
-
|
|
3
|
-
function selectBannerImagesOnReady({ $w: _$w }) {
|
|
4
|
-
_$w('#imageDataset').onReady(async () => {
|
|
5
|
-
const numOfItems = _$w('#imageDataset').getTotalCount();
|
|
6
|
-
const result = await _$w('#imageDataset').getItems(0, numOfItems);
|
|
7
|
-
const items = result.items;
|
|
8
|
-
console.log('Loaded items from dataset:', items);
|
|
9
|
-
|
|
10
|
-
_$w('#bannerImagesRepeater').data = items;
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
_$w('#bannerImagesRepeater').onItemReady(($item, itemData, index) => {
|
|
14
|
-
$item('#bannerImage').src = itemData.image; // image field
|
|
15
|
-
$item('#bannerSelected').checked = false;
|
|
16
|
-
|
|
17
|
-
// Only one checkbox can be selected
|
|
18
|
-
$item('#bannerSelected').onChange(() => {
|
|
19
|
-
if ($item('#bannerSelected').checked) {
|
|
20
|
-
_$w('#bannerImagesRepeater').forEachItem(($otherItem, _, otherIndex) => {
|
|
21
|
-
if (otherIndex !== index) {
|
|
22
|
-
$otherItem('#bannerSelected').checked = false;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
_$w('#uploadSelectedImages').onClick(() => {
|
|
30
|
-
let selectedImage = null;
|
|
31
|
-
|
|
32
|
-
_$w('#bannerImagesRepeater').forEachItem(($item, itemData) => {
|
|
33
|
-
if ($item('#bannerSelected').checked) {
|
|
34
|
-
selectedImage = {
|
|
35
|
-
image: itemData.image,
|
|
36
|
-
title: itemData.title,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
lightbox.close(selectedImage);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
module.exports = {
|
|
45
|
-
selectBannerImagesOnReady,
|
|
46
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
const { lightbox } = require('@wix/site-window');
|
|
2
|
-
|
|
3
|
-
function deleteConfirmOnReady({ $w: _$w }) {
|
|
4
|
-
_$w('#delete').onClick(() => {
|
|
5
|
-
lightbox.close({
|
|
6
|
-
toDelete: true,
|
|
7
|
-
});
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
_$w('#cancel').onClick(() => {
|
|
11
|
-
lightbox.close({
|
|
12
|
-
toDelete: false,
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
module.exports = {
|
|
18
|
-
deleteConfirmOnReady,
|
|
19
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
...require('./ContactUs.js'),
|
|
3
|
-
...require('./Profile.js'),
|
|
4
|
-
...require('./Home.js'),
|
|
5
|
-
...require('./personalDetails.js'),
|
|
6
|
-
...require('./QAPage.js'),
|
|
7
|
-
...require('./LoadingPage.js'),
|
|
8
|
-
...require('./SelectBannerImages.js'),
|
|
9
|
-
...require('./deleteConfirm.js'),
|
|
10
|
-
...require('./SaveAlerts.js'),
|
|
11
|
-
...require('./LearnMore.js'),
|
|
12
|
-
};
|