abmp-npm 10.0.82 → 10.0.83

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abmp-npm",
3
- "version": "10.0.82",
3
+ "version": "10.0.83",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "check-cycles": "madge --circular .",
package/pages/Home.js CHANGED
@@ -5,6 +5,7 @@ const { withWarmUpData } = require('psdev-utils/frontend');
5
5
 
6
6
  const { ADDRESS_STATUS_TYPES, DEFAULT_FILTER, DROPDOWN_OPTIONS } = require('../public/consts.js');
7
7
  const { createHomepageUtils } = require('../public/Utils/homePage.js');
8
+ const { logHomePageLoadPhase } = require('../public/Utils/homePageLoadTrace.js');
8
9
  const {
9
10
  getMainAddress,
10
11
  formatPracticeAreasForDisplay,
@@ -13,6 +14,8 @@ const {
13
14
  normalizeExternalUrl,
14
15
  } = require('../public/Utils/sharedUtils.js');
15
16
 
17
+ logHomePageLoadPhase('home_js_module_evaluated');
18
+
16
19
  let filter = JSON.parse(JSON.stringify(DEFAULT_FILTER));
17
20
  let dropDownOptions = JSON.parse(JSON.stringify(DROPDOWN_OPTIONS));
18
21
  let stateCityMap;
@@ -36,6 +39,7 @@ const homePageOnReady = async ({
36
39
  getNonCompiledFiltersOptions,
37
40
  filterProfiles,
38
41
  }) => {
42
+ logHomePageLoadPhase('wix_onready_handler_entered');
39
43
  const {
40
44
  getParamsMapping,
41
45
  handlePagination,
@@ -58,7 +62,9 @@ const homePageOnReady = async ({
58
62
  detectMobile();
59
63
  initPageUI();
60
64
  attachEventListeners();
65
+ logHomePageLoadPhase('before_handleUrlParams');
61
66
  await handleUrlParams();
67
+ logHomePageLoadPhase('after_handleUrlParams');
62
68
 
63
69
  async function detectMobile() {
64
70
  try {
@@ -288,7 +294,9 @@ const homePageOnReady = async ({
288
294
  }
289
295
 
290
296
  async function applyFilterToUI(isDefaultStateParams) {
297
+ logHomePageLoadPhase('applyFilterToUI_start', { isDefaultStateParams });
291
298
  const renderingEnv = await rendering.env();
299
+ logHomePageLoadPhase('applyFilterToUI_rendering_env', { env: renderingEnv });
292
300
  const setFilterFromParams = async (isInitializeValue = true) => {
293
301
  const params = await wixLocation.query();
294
302
  console.log('params inside setFilterFromParams ', params);
@@ -322,7 +330,9 @@ const homePageOnReady = async ({
322
330
  await setFilterFromParams(true);
323
331
  if (isDefaultStateParams) {
324
332
  console.log('default state set for nearby');
333
+ logHomePageLoadPhase('applyFilterToUI_default_path_fetch_and_nearby_start');
325
334
  await Promise.all([fetchFilterData(), nearByHandler(true)]);
335
+ logHomePageLoadPhase('applyFilterToUI_default_path_complete');
326
336
  return;
327
337
  }
328
338
  console.log('not default state');
@@ -341,12 +351,15 @@ const homePageOnReady = async ({
341
351
  : () => updateResults('filterTimeout', true);
342
352
  console.log('filter ..', filter);
343
353
  try {
354
+ logHomePageLoadPhase('applyFilterToUI_non_default_path_start');
344
355
  await Promise.all([
345
356
  fetchFilterData().then(() => setFilterFromParams(false)),
346
357
  //TODO: remove this workaround to fix issue with SSR showing invalid results
347
358
  renderingEnv === 'backend' ? Promise.resolve() : searchPromise(),
348
359
  ]);
360
+ logHomePageLoadPhase('applyFilterToUI_non_default_path_complete');
349
361
  } catch (error) {
362
+ logHomePageLoadPhase('applyFilterToUI_error', { message: String(error && error.message) });
350
363
  console.error('[applyFilterToUI] failed with error:', error);
351
364
  multiStateBoxSelector.changeState('errorState');
352
365
  }
@@ -425,6 +438,7 @@ const homePageOnReady = async ({
425
438
  }
426
439
  // NEAR BY FILTER
427
440
  async function nearByHandler(preservePagination = false) {
441
+ logHomePageLoadPhase('nearByHandler_start', { preservePagination });
428
442
  const isSearchingNearby = _$w('#nearBy').checked;
429
443
  const renderingEnv = await rendering.env();
430
444
  // 1. Disable nearby input while processing
@@ -438,6 +452,7 @@ const homePageOnReady = async ({
438
452
  filter = newFilter;
439
453
  console.log('filter inside nearByHandler', filter);
440
454
  if (!success) {
455
+ logHomePageLoadPhase('nearByHandler_geolocation_failed');
441
456
  if (renderingEnv !== 'backend') {
442
457
  //on Backend environment, geolocation API don't work, so makes no sense to change state for near by
443
458
  multiStateBoxSelector.changeState('nearByState');
@@ -452,6 +467,7 @@ const homePageOnReady = async ({
452
467
  // If location is not selected, change state to "resultsState"
453
468
  if (!isSearchingNearby) {
454
469
  if (await noSearchCriteria()) {
470
+ logHomePageLoadPhase('nearByHandler_no_search_criteria');
455
471
  multiStateBoxSelector.changeState('noSearchCriteria');
456
472
  // 4. Re-enable nearby input
457
473
  _$w('#nearBy').enable();
@@ -463,6 +479,7 @@ const homePageOnReady = async ({
463
479
 
464
480
  // 4. Re-enable nearby input when done
465
481
  _$w('#nearBy').enable();
482
+ logHomePageLoadPhase('nearByHandler_complete', { success: true });
466
483
  return true;
467
484
  }
468
485
 
@@ -470,6 +487,7 @@ const homePageOnReady = async ({
470
487
  // FETCH STATE/CITY/AREAS OF PRACTICE FROM BACKEND ONCE AND STORE IT
471
488
 
472
489
  async function fetchFilterData() {
490
+ logHomePageLoadPhase('fetchFilterData_start');
473
491
  let completeStateList, areasOfPracticesList, stateCityMapList;
474
492
  try {
475
493
  const { COMPILED_STATE_LIST, COMPILED_AREAS_OF_PRACTICES, COMPILED_STATE_CITY_MAP } =
@@ -510,6 +528,7 @@ const homePageOnReady = async ({
510
528
 
511
529
  // Update filter states after data is loaded
512
530
  updateFiltersState();
531
+ logHomePageLoadPhase('fetchFilterData_complete');
513
532
  }
514
533
 
515
534
  // CONSTRUCT DROPDOWN OPTIONS FOR STATE, CITY, AREA OF PRACTICES
@@ -3,6 +3,7 @@ const { window: wixWindow, rendering } = require('@wix/site-window');
3
3
 
4
4
  const { DEFAULT_FILTER } = require('../consts.js');
5
5
 
6
+ const { logHomePageLoadPhase } = require('./homePageLoadTrace.js');
6
7
  const { debouncedFunction } = require('./sharedUtils.js');
7
8
 
8
9
  const createHomepageUtils = (_$w, filterProfiles) => {
@@ -362,6 +363,7 @@ const createHomepageUtils = (_$w, filterProfiles) => {
362
363
  });
363
364
  }
364
365
  async function getAndSetUserLocation(isSearchingNearby, filter) {
366
+ logHomePageLoadPhase('getAndSetUserLocation_start', { isSearchingNearby });
365
367
  try {
366
368
  let location = {
367
369
  coords: {
@@ -369,6 +371,7 @@ const createHomepageUtils = (_$w, filterProfiles) => {
369
371
  longitude: 0,
370
372
  },
371
373
  };
374
+ logHomePageLoadPhase('getAndSetUserLocation_before_getCurrentGeolocation');
372
375
  location = await wixWindow.getCurrentGeolocation();
373
376
 
374
377
  console.log('location inside getAndSetUserLocation', location);
@@ -384,8 +387,15 @@ const createHomepageUtils = (_$w, filterProfiles) => {
384
387
  latitude: userLat,
385
388
  longitude: userLong,
386
389
  };
390
+ logHomePageLoadPhase('getAndSetUserLocation_success', {
391
+ lat: userLat,
392
+ lng: userLong,
393
+ });
387
394
  return { success: true, filter };
388
395
  } catch (error) {
396
+ logHomePageLoadPhase('getAndSetUserLocation_error', {
397
+ message: String(error && error.message),
398
+ });
389
399
  console.warn('Failed to get user location in getAndSetUserLocation', error);
390
400
  return { success: false, filter };
391
401
  }
@@ -504,6 +514,7 @@ const createHomepageUtils = (_$w, filterProfiles) => {
504
514
  );
505
515
  }
506
516
  async function parseAndValidateQueryParams(filter, pagination) {
517
+ logHomePageLoadPhase('parseAndValidateQueryParams_start');
507
518
  const params = await wixLocation.query();
508
519
  const paramsMapping = getParamsMapping(filter, pagination);
509
520
  const {
@@ -515,6 +526,11 @@ const createHomepageUtils = (_$w, filterProfiles) => {
515
526
  const isSearchingNearby = params.nearby === 'true';
516
527
  const isNoParams = !withoutPreviewParams || Object.keys(withoutPreviewParams).length === 0;
517
528
  const { success, filter: newFilter } = await getAndSetUserLocation(isSearchingNearby, filter);
529
+ logHomePageLoadPhase('parseAndValidateQueryParams_after_geolocation', {
530
+ isNoParams,
531
+ isSearchingNearby,
532
+ success,
533
+ });
518
534
 
519
535
  // Auto-enable nearby if GPS permission granted on fresh page load
520
536
  if (
@@ -525,6 +541,7 @@ const createHomepageUtils = (_$w, filterProfiles) => {
525
541
  !isSearchingNearby
526
542
  ) {
527
543
  await wixQueryParams.add({ nearby: 'true', page: '1' });
544
+ logHomePageLoadPhase('parseAndValidateQueryParams_return', { branch: 'auto_nearby_url' });
528
545
  return { isDefaultStateParams: true, filter: newFilter };
529
546
  }
530
547
 
@@ -538,6 +555,7 @@ const createHomepageUtils = (_$w, filterProfiles) => {
538
555
  // });
539
556
  // Don't search yet - let the caller decide what to do
540
557
  // The search will be handled in applyFilterToUI
558
+ logHomePageLoadPhase('parseAndValidateQueryParams_return', { branch: 'default_no_params' });
541
559
  return { isDefaultStateParams: true, filter: newFilter };
542
560
  }
543
561
  let autoAdjustFilters = false;
@@ -577,6 +595,10 @@ const createHomepageUtils = (_$w, filterProfiles) => {
577
595
  withoutPreviewParams.page) ||
578
596
  (Object.keys(withoutPreviewParams).length === 1 && withoutPreviewParams.nearby);
579
597
  const isDefaultStateParams = isNoParams || isNearbyFilter;
598
+ logHomePageLoadPhase('parseAndValidateQueryParams_return', {
599
+ branch: 'with_query_params',
600
+ isDefaultStateParams,
601
+ });
580
602
  return { isDefaultStateParams, filter: newFilter };
581
603
  }
582
604
 
@@ -660,6 +682,7 @@ const createHomepageUtils = (_$w, filterProfiles) => {
660
682
  isSearchingNearby,
661
683
  preservePagination = false,
662
684
  }) {
685
+ logHomePageLoadPhase('search_start', { timeoutType, isSearchingNearby });
663
686
  const multiStateBoxSelector = _$w('#resultsStateBox');
664
687
  const renderingEnv = await rendering.env();
665
688
  const initSearchResultsUI = () => {
@@ -681,6 +704,7 @@ const createHomepageUtils = (_$w, filterProfiles) => {
681
704
  longitude: 0,
682
705
  }) === JSON.stringify(DEFAULT_FILTER)
683
706
  ) {
707
+ logHomePageLoadPhase('search_short_circuit_no_criteria');
684
708
  multiStateBoxSelector.changeState('noSearchCriteria');
685
709
  return [];
686
710
  }
@@ -704,14 +728,19 @@ const createHomepageUtils = (_$w, filterProfiles) => {
704
728
  timeoutType,
705
729
  args: { filter, isSearchingNearby },
706
730
  });
731
+ logHomePageLoadPhase('search_before_filterProfiles', { renderingEnv });
707
732
  const { success, response, error } = await funcPromise();
708
733
  if (!success) {
709
734
  _$w('#numberOfResults').text = '';
710
735
  console.error('[search] failed with error:', error);
736
+ logHomePageLoadPhase('search_filterProfiles_failed', {
737
+ message: String(error && error.message),
738
+ });
711
739
  multiStateBoxSelector.changeState('errorState');
712
740
  return [];
713
741
  }
714
742
  const totalCount = response.items.length;
743
+ logHomePageLoadPhase('search_filterProfiles_success', { totalCount });
715
744
  if (!totalCount) {
716
745
  _$w('#numberOfResults').text = 'Showing 0 results';
717
746
  _$w('#noResultsMessage').text = `${
@@ -0,0 +1,58 @@
1
+ /**
2
+ * One session per full page load. First log call creates `loadId` (send this to support for GCL search).
3
+ * Logs a plain object so DevTools shows an expandable tree; `loadId` is still easy to copy for GCL.
4
+ */
5
+
6
+ function randomSegment() {
7
+ return Math.random().toString(36).slice(2, 10);
8
+ }
9
+
10
+ function nowMs() {
11
+ if (typeof performance !== 'undefined' && typeof performance.now === 'function') {
12
+ return performance.now();
13
+ }
14
+ return Date.now();
15
+ }
16
+
17
+ let session = null;
18
+
19
+ function ensureSession() {
20
+ if (session) {
21
+ return session;
22
+ }
23
+ const t0 = nowMs();
24
+ session = {
25
+ loadId: `hpl_${Date.now()}_${randomSegment()}_${randomSegment()}`,
26
+ t0,
27
+ };
28
+ return session;
29
+ }
30
+
31
+ /**
32
+ * @param {string} phase
33
+ * @param {Record<string, unknown>} [detail]
34
+ */
35
+ function logHomePageLoadPhase(phase, detail) {
36
+ const s = ensureSession();
37
+ const elapsed = Math.round(nowMs() - s.t0);
38
+ const payload = {
39
+ type: 'HomePageLoad',
40
+ loadId: s.loadId,
41
+ phase,
42
+ elapsedSinceStartMs: elapsed,
43
+ wallTimeIso: new Date().toISOString(),
44
+ };
45
+ if (detail && typeof detail === 'object') {
46
+ payload.detail = detail;
47
+ }
48
+ console.log('[HomePageLoad]', payload);
49
+ }
50
+
51
+ function getHomePageLoadId() {
52
+ return ensureSession().loadId;
53
+ }
54
+
55
+ module.exports = {
56
+ logHomePageLoadPhase,
57
+ getHomePageLoadId,
58
+ };