sr-npm 1.7.1201 → 1.7.1203

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.
@@ -34,12 +34,6 @@ const CAREERS_MULTI_BOXES_PAGE_CONSTS={
34
34
  RESULTS_MULTI_STATE_BOX: '#multiStateBox1',
35
35
  }
36
36
 
37
- const PRIMARY_SEARCH_STATES={
38
- CATEGORY_RESULTS: 'categoryResults',
39
- JOB_RESULTS: 'jobResults',
40
- NO_RESULTS: 'noResults',
41
- }
42
-
43
37
  const TWG_JOBS_COLLECTION_FIELDS={
44
38
  LINK_JOBS_TITLE: 'link-jobs-title',
45
39
  LINK_JOBS_REF_ID_SLUG: 'link-jobs-refId-slug',
@@ -88,5 +82,4 @@ module.exports = {
88
82
  CATEGORY_CUSTOM_FIELD_ID_IN_CMS,
89
83
  possibleUrlParams,
90
84
  TWG_JOBS_COLLECTION_FIELDS,
91
- PRIMARY_SEARCH_STATES,
92
85
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sr-npm",
3
- "version": "1.7.1201",
3
+ "version": "1.7.1203",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -18,7 +18,7 @@
18
18
  "homepage": "https://github.com/psdevteamenterprise/sr-npm#readme",
19
19
  "dependencies": {
20
20
  "@hisense-staging/velo-npm": "3.0.19",
21
- "@wix/data": "^1.0.349",
21
+ "@wix/data": "^1.0.211",
22
22
  "@wix/essentials": "^0.1.24",
23
23
  "@wix/secrets": "1.0.53",
24
24
  "@wix/site-location": "^1.0.0",
@@ -1,5 +1,5 @@
1
1
  const { COLLECTIONS,CUSTOM_VALUES_COLLECTION_FIELDS,JOBS_COLLECTION_FIELDS } = require('../backend/collectionConsts');
2
- const { CAREERS_PAGE_SELECTORS, GLOBAL_SECTIONS_SELECTORS } = require('../public/selectors');
2
+ const { CAREERS_PAGE_SELECTORS } = require('../public/selectors');
3
3
 
4
4
  const { window } = require('@wix/site-window');
5
5
  const { queryParams,onChange} = require('wix-location-frontend');
@@ -18,9 +18,11 @@ const { groupValuesByField,
18
18
  getFieldByTitle,
19
19
  getCorrectOption,
20
20
  getOptionIndexFromCheckBox,
21
+ loadPrimarySearchRepeater,
22
+ bindPrimarySearch,
23
+ primarySearch,
21
24
  getAllDatasetItems
22
25
  } = require('./pagesUtils');
23
- const { handlePrimarySearch, queryPrimarySearchResults } = require('../public/primarySearchUtils');
24
26
 
25
27
 
26
28
  let dontUpdateThisCheckBox;
@@ -38,6 +40,7 @@ let secondarySearchIsFilled=false // whether the secondary search is filled with
38
40
  let keywordAllJobs; // all jobs that are displayed in the jobs repeater when the keyword is filled
39
41
  let ActivateURLOnchange=true; // whether to activate the url onchange
40
42
  let considerAllJobs=false; // whether to consider all jobs or not
43
+
41
44
  const pagination = {
42
45
  pageSize: 10,
43
46
  currentPage: 1,
@@ -50,19 +53,18 @@ async function careersMultiBoxesPageOnReady(_$w,urlParams) {
50
53
  });
51
54
  await loadData(_$w);
52
55
  await loadJobsRepeater(_$w); // if we remove the await here the job list will be flaky , it doesn't fill it properly
53
- handlePrimarySearch(_$w, allvaluesobjects);
56
+ loadPrimarySearchRepeater(_$w);
54
57
  await loadFilters(_$w);
55
58
  loadSelectedValuesRepeater(_$w);
56
59
  bindSearchInput(_$w);
57
60
  loadPaginationButtons(_$w);
58
-
61
+ if (await window.formFactor() === "Mobile") {
62
+ handleFilterInMobile(_$w);
63
+ }
59
64
  await handleUrlParams(_$w, urlParams);
60
65
  _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CLEAR_ALL_BUTTON_ID).onClick(async () => {
61
66
  await clearAll(_$w);
62
67
  });
63
- if (await window.formFactor() === "Mobile") {
64
- handleFilterInMobile(_$w);
65
- }
66
68
  _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_MULTI_STATE_BOX).changeState("results");
67
69
  }
68
70
 
@@ -93,7 +95,6 @@ async function clearAll(_$w,urlOnChange=false) {
93
95
  secondarySearchIsFilled=false;
94
96
  currentJobs=alljobs;
95
97
  keywordAllJobs=undefined;
96
- considerAllJobs=false;
97
98
  if(!urlOnChange) {
98
99
  console.log("inside clearAll removing url params");
99
100
  ActivateURLOnchange=false;
@@ -116,26 +117,16 @@ function handleFilterInMobile(_$w) {
116
117
  CAREERS_PAGE_SELECTORS.SECTION_3,
117
118
  CAREERS_PAGE_SELECTORS.LINE_3,
118
119
  CAREERS_PAGE_SELECTORS.FILTER_ICON];
119
-
120
- const mobileFilterBoxSelectors = [
121
- CAREERS_PAGE_SELECTORS.FILTER_BOX,
122
- CAREERS_PAGE_SELECTORS.REFINE_SEARCH_BUTTON,
123
- CAREERS_PAGE_SELECTORS.EXIT_BUTTON,
124
- ];
125
120
 
126
121
  _$w(CAREERS_PAGE_SELECTORS.FILTER_ICON).onClick(()=>{
127
- mobileFilterBoxSelectors.forEach(selector => {
128
- _$w(selector).expand();
129
- });
122
+ _$w(CAREERS_PAGE_SELECTORS.FILTER_BOX).expand();
130
123
  searchResultsSelectors.forEach(selector => {
131
124
  _$w(selector).collapse();
132
125
  });
133
126
  });
134
127
 
135
128
  const exitFilterBox = () => {
136
- mobileFilterBoxSelectors.forEach(selector => {
137
- _$w(selector).collapse();
138
- });
129
+ _$w(CAREERS_PAGE_SELECTORS.FILTER_BOX).collapse();
139
130
  searchResultsSelectors.forEach(selector => {
140
131
  _$w(selector).expand();
141
132
  });
@@ -148,11 +139,6 @@ function handleFilterInMobile(_$w) {
148
139
  _$w(CAREERS_PAGE_SELECTORS.REFINE_SEARCH_BUTTON).onClick(()=>{
149
140
  exitFilterBox();
150
141
  });
151
-
152
- //onmobile we should collapse the filter box and the refine search button by default
153
- mobileFilterBoxSelectors.forEach(selector => {
154
- _$w(selector).collapse();
155
- });
156
142
  }
157
143
 
158
144
 
@@ -162,10 +148,10 @@ async function handleUrlParams(_$w,urlParams,handleBackAndForth=false) {
162
148
  let currentApplyFilterFlag=false;
163
149
  //apply this first to determine all jobs
164
150
  if(urlParams.keyword) {
165
- applyFiltering = await queryPrimarySearchResults(_$w, decodeURIComponent(urlParams.keyword));
151
+ applyFiltering = await primarySearch(_$w, decodeURIComponent(urlParams.keyword));
166
152
  _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value = decodeURIComponent(urlParams.keyword);
167
153
 
168
- const items = await getAllDatasetItems(_$w, GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET);
154
+ const items = await getAllDatasetItems(_$w, CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_DATASET);
169
155
 
170
156
  currentJobs = items;
171
157
  keywordAllJobs = items;
@@ -286,14 +272,14 @@ async function handleParams(_$w,param,values) {
286
272
  fieldTitle==="brands"? fieldTitle="brand":fieldTitle;
287
273
  ActivateURLOnchange=false;
288
274
  const previousSelectedSize=selectedByField.size;
289
-
290
275
  if (updated.length) {
291
276
  selectedByField.set(fieldId, updated);
292
- handleConsiderAllJobs(previousSelectedSize,selectedByField.size);
277
+
293
278
  queryParams.add({ [fieldTitle] : updated.map(val=>encodeURIComponent(val)).join(',') });
294
279
  } else {
295
280
  selectedByField.delete(fieldId);
296
281
  handleConsiderAllJobs(previousSelectedSize,selectedByField.size);
282
+
297
283
  queryParams.remove([fieldTitle ]);
298
284
  }
299
285
 
@@ -403,10 +389,11 @@ async function loadJobsRepeater(_$w) {
403
389
  fieldTitle==="brands"? fieldTitle="brand":fieldTitle;
404
390
  ActivateURLOnchange=false;
405
391
  const previousSelectedSize=selectedByField.size;
392
+
406
393
  if (selected && selected.length) {
407
-
408
394
  selectedByField.set(field._id, selected);
409
- handleConsiderAllJobs(previousSelectedSize,selectedByField.size);
395
+
396
+
410
397
  if(fieldTitle==="brand" || fieldTitle==="storename") {
411
398
  //in this case we need the label not valueid
412
399
  const valueLabels=getValueFromValueId(selected,value);
@@ -417,7 +404,7 @@ async function loadJobsRepeater(_$w) {
417
404
  }
418
405
 
419
406
  } else {
420
- selectedByField.delete(field._id);
407
+ selectedByField.delete(field._id);
421
408
  handleConsiderAllJobs(previousSelectedSize,selectedByField.size);
422
409
  queryParams.remove([fieldTitle ]);
423
410
  }
@@ -440,17 +427,6 @@ async function loadJobsRepeater(_$w) {
440
427
  }
441
428
  }
442
429
 
443
-
444
- function handleConsiderAllJobs(previousSelectedSize,currentSelectedSize) {
445
- if(previousSelectedSize===2 && currentSelectedSize===1) {
446
- considerAllJobs=true;
447
- }
448
- else{
449
- considerAllJobs=false;
450
- }
451
- }
452
-
453
-
454
430
  function getValueFromValueId(valueIds, value) {
455
431
  let valueLabels = [];
456
432
  let currentVal
@@ -470,14 +446,35 @@ function getValueFromValueId(valueIds, value) {
470
446
  updateTotalJobsCountText(_$w);
471
447
  }
472
448
 
449
+ function handleConsiderAllJobs(previousSelectedSize,currentSelectedSize) {
450
+ if(previousSelectedSize===2 && currentSelectedSize===1) {
451
+
452
+ considerAllJobs=true;
453
+ }
454
+ else{
455
+ considerAllJobs=false;
456
+ }
457
+ }
458
+
473
459
  function updateOptionsUI(_$w,fieldTitle, fieldId, searchQuery,clearAll=false) {
474
460
  let base = optionsByFieldId.get(fieldId) || [];
475
- const countsMap = countsByFieldId.get(fieldId) || new Map();
461
+ let countsMap;
462
+ //const countsMap = countsByFieldId.get(fieldId) || new Map();
463
+ if(considerAllJobs)
464
+ {
465
+ const selectedFieldId=Array.from( selectedByField.keys() )[0]
466
+ const relevantFields=allvaluesobjects.filter(val=>val.customField===selectedFieldId)
467
+ countsMap = new Map(relevantFields.map(val=>[val.valueId, val.count]));
468
+ }
469
+ else{
470
+ countsMap = countsByFieldId.get(fieldId) || new Map();
471
+ }
476
472
  if(dontUpdateThisCheckBox===fieldId && !clearAll && selectedByField.has(fieldId) )
477
473
  {
478
474
  dontUpdateThisCheckBox=null;
479
475
  return;
480
476
  }
477
+
481
478
  let filteredbase=[]
482
479
  for (const element of base)
483
480
  {
@@ -630,8 +627,8 @@ async function refreshFacetCounts(_$w,clearAll=false) {
630
627
 
631
628
  function countJobsPerField(jobs) {
632
629
  const fieldIds = Array.from(optionsByFieldId.keys());
633
- let currentJobsIds;
634
- considerAllJobs? currentJobsIds=alljobs.map(job=>job._id):currentJobsIds=jobs.map(job=>job._id);
630
+
631
+ const currentJobsIds=jobs.map(job=>job._id);
635
632
  for (const fieldId of fieldIds) {
636
633
  let currentoptions = optionsByFieldId.get(fieldId)
637
634
  let counter=new Map();
@@ -702,6 +699,8 @@ async function secondarySearch(_$w,query) {
702
699
  }
703
700
  function bindSearchInput(_$w) {
704
701
  try {
702
+ bindPrimarySearch(_$w, allvaluesobjects);
703
+
705
704
  const secondarySearchDebounced = debounce(async () => {
706
705
  const query = (_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.SECONDARY_SEARCH_INPUT).value || '').toLowerCase().trim();
707
706
  await secondarySearch(_$w, query);
@@ -6,7 +6,7 @@ const { location } = require("@wix/site-location");
6
6
  const { COLLECTIONS } = require('../backend/collectionConsts');
7
7
  const { careersMultiBoxesPageOnReady } = require('./careersMultiBoxesPage');
8
8
  const { debounce, getFilter} = require('../public/filterUtils');
9
- const { CAREERS_PAGE_SELECTORS, FILTER_FIELDS, GLOBAL_SECTIONS_SELECTORS } = require('../public/selectors');
9
+ const { CAREERS_PAGE_SELECTORS, FILTER_FIELDS } = require('../public/selectors');
10
10
  const { filterBrokenMarkers } = require('../public/utils');
11
11
 
12
12
  let currentLoadedItems =100;
@@ -58,10 +58,10 @@ async function careersPageOnReady(_$w,thisObject=null,queryParams=null) {
58
58
 
59
59
  function activateAutoLoad(_$w)
60
60
  {
61
- _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).onReady(() => {
61
+ _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).onReady(() => {
62
62
  updateCount(_$w);
63
63
  _$w(CAREERS_PAGE_SELECTORS.FOOTER).onViewportEnter(() => {
64
- if (currentLoadedItems<_$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).getTotalCount()) {
64
+ if (currentLoadedItems<_$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getTotalCount()) {
65
65
  loadMoreJobs(_$w);
66
66
  }
67
67
  else {
@@ -81,7 +81,7 @@ async function loadMoreJobs(_$w) {
81
81
  pageParamSet = Number(pageParamSet) + 1;
82
82
  }
83
83
  if (shouldLoad) {
84
- _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).loadMore();
84
+ _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).loadMore();
85
85
  console.log("loading more jobs");
86
86
 
87
87
  currentLoadedItems = currentLoadedItems + itemsPerPage;
@@ -148,7 +148,7 @@ async function handlePageParam(_$w) {
148
148
  //scrolls a bit to load the dataset data
149
149
  await window.scrollTo(0, 200,{scrollAnimation:false});
150
150
  for (let i = 2; i <= queryPageVar; i++) {
151
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).loadMore();
151
+ await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).loadMore();
152
152
  currentLoadedItems=currentLoadedItems+itemsPerPage
153
153
  }
154
154
  // the timeout is to wait for the repeater to render, then scroll to the last item.
@@ -170,7 +170,7 @@ async function handlePageParam(_$w) {
170
170
  }
171
171
 
172
172
  async function bind(_$w) {
173
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).onReady(async () => {
173
+ await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).onReady(async () => {
174
174
  await updateCount(_$w);
175
175
  await updateMapMarkers(_$w);
176
176
 
@@ -337,8 +337,8 @@ async function applyFilters(_$w, skipUrlUpdate = false) {
337
337
  });
338
338
 
339
339
  const filter = await getFilter(filters, 'and');
340
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).setFilter(filter);
341
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).refresh();
340
+ await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).setFilter(filter);
341
+ await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).refresh();
342
342
 
343
343
  const count = await updateCount(_$w);
344
344
  console.log("updating map markers");
@@ -357,8 +357,8 @@ async function applyFilters(_$w, skipUrlUpdate = false) {
357
357
  async function resetFilters(_$w) {
358
358
  _$w(CAREERS_PAGE_SELECTORS.SEARCH_INPUT, CAREERS_PAGE_SELECTORS.DROPDOWN_DEPARTMENT, CAREERS_PAGE_SELECTORS.DROPDOWN_LOCATION, CAREERS_PAGE_SELECTORS.DROPDOWN_JOB_TYPE, CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND).value = '';
359
359
 
360
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).setFilter(wixData.filter());
361
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).refresh();
360
+ await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).setFilter(wixData.filter());
361
+ await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).refresh();
362
362
 
363
363
  _$w(CAREERS_PAGE_SELECTORS.RESULTS_MULTI_STATE).changeState('results');
364
364
 
@@ -374,7 +374,7 @@ async function resetFilters(_$w) {
374
374
  }
375
375
 
376
376
  async function updateCount(_$w) {
377
- const count = await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).getTotalCount();
377
+ const count = await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getTotalCount();
378
378
  _$w('#numOfPositionText').text = `Showing ${count} Open Positions`;
379
379
 
380
380
  return count;
@@ -485,8 +485,8 @@ async function handleJobTypeParam(_$w,jobType) {
485
485
  }
486
486
 
487
487
  async function updateMapMarkers(_$w){
488
- const numOfItems = await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).getTotalCount();
489
- const items = await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).getItems(0, numOfItems);
488
+ const numOfItems = await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getTotalCount();
489
+ const items = await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getItems(0, numOfItems);
490
490
  const markers = filterBrokenMarkers(items.items).map(item => {
491
491
  const location = item.locationAddress.location;
492
492
  return {
package/pages/homePage.js CHANGED
@@ -4,9 +4,7 @@ const { filterBrokenMarkers } = require('../public/utils');
4
4
  const { location } = require('@wix/site-location');
5
5
  const {wixData} = require('wix-data');
6
6
  const { COLLECTIONS } = require('../backend/collectionConsts');
7
- const { getAllRecords } = require('./pagesUtils');
8
- const { handlePrimarySearch } = require('../public/primarySearchUtils');
9
- const { GLOBAL_SECTIONS_SELECTORS } = require('../public/selectors');
7
+ const { bindPrimarySearch, getAllRecords, loadPrimarySearchRepeater } = require('./pagesUtils');
10
8
 
11
9
  let thisObjectVar;
12
10
  let searchByCityFlag=false;
@@ -19,7 +17,8 @@ async function homePageOnReady(_$w,thisObject = null) {
19
17
 
20
18
  if(siteconfig.twg) {
21
19
  const allvaluesobjects = await getAllRecords(COLLECTIONS.CUSTOM_VALUES);
22
- handlePrimarySearch(_$w, allvaluesobjects);
20
+ bindPrimarySearch(_$w, allvaluesobjects);
21
+ loadPrimarySearchRepeater(_$w)
23
22
  console.log("siteconfig.twg: ",siteconfig.twg);
24
23
 
25
24
  if(siteconfig.twg === "external") {
@@ -162,10 +161,10 @@ async function handleSearchInput(_$w) {
162
161
 
163
162
  let filter = await getFilter(searchByTitle);
164
163
 
165
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).setFilter(filter);
166
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).refresh();
164
+ await _$w('#jobsDataset').setFilter(filter);
165
+ await _$w('#jobsDataset').refresh();
167
166
 
168
- count = _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).getTotalCount();
167
+ count = _$w('#jobsDataset').getTotalCount();
169
168
 
170
169
  if (count > 0) {
171
170
  searchByCityFlag = false;
@@ -173,9 +172,9 @@ async function handleSearchInput(_$w) {
173
172
  _$w('#searchMultiStateBox').changeState('results');
174
173
  } else {
175
174
  filter = await getFilter(searchByCity);
176
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).setFilter(filter);
177
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).refresh();
178
- count = _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).getTotalCount();
175
+ await _$w('#jobsDataset').setFilter(filter);
176
+ await _$w('#jobsDataset').refresh();
177
+ count = _$w('#jobsDataset').getTotalCount();
179
178
  if( count > 0 )
180
179
  {
181
180
  searchByCityFlag = true;
@@ -1,6 +1,9 @@
1
1
  const { items: wixData } = require('@wix/data');
2
2
  const { JOBS_COLLECTION_FIELDS,COLLECTIONS } = require('../backend/collectionConsts');
3
+ const { CAREERS_MULTI_BOXES_PAGE_CONSTS, CATEGORY_CUSTOM_FIELD_ID_IN_CMS, TWG_JOBS_COLLECTION_FIELDS } = require('../backend/careersMultiBoxesPageIds');
4
+ const { location } = require("@wix/site-location");
3
5
  const { normalizeString } = require('../backend/utils');
6
+ const { getFilter } = require('../public/filterUtils');
4
7
 
5
8
  function groupValuesByField(values, refKey) {
6
9
  const map = new Map();
@@ -78,13 +81,7 @@ function getFieldByTitle(title,allFields) {
78
81
 
79
82
  function getCorrectOption(value,options,param) {
80
83
  const standardizedValue = normalizeString(value.toLowerCase())
81
- if(param==="employmenttype" || param==="Employment Type" || param==="Store Name") //employmenttype have a problematic value, added Employment Type for updateOptionsUI fuinction, added Store Name because Store name and location have for example Blenheim
82
- {
83
- //option.value is the id,
84
- return options.find(option=>normalizeString(option.value.toLowerCase())===standardizedValue);
85
- }
86
- //option.label is what we see live in the UI
87
- return options.find(option=>normalizeString(option.label.toLowerCase())===standardizedValue);
84
+ return options.find(option=>normalizeString(option.value.toLowerCase())===standardizedValue || normalizeString(option.label.toLowerCase())===standardizedValue);
88
85
  }
89
86
 
90
87
  function getOptionIndexFromCheckBox(options,value) {
@@ -96,6 +93,151 @@ function getOptionIndexFromCheckBox(options,value) {
96
93
  }
97
94
  }
98
95
 
96
+ function loadPrimarySearchRepeater(_$w) {
97
+
98
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOB_RESULTS_REPEATER).onItemReady(async ($item, itemData) => {
99
+ $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_POSITION_BUTTON).label = itemData.title || '';
100
+ });
101
+
102
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOB_RESULTS_REPEATER_ITEM).onClick((event) => {
103
+ const data = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOB_RESULTS_REPEATER).data;
104
+ const clickedItemData = data.find(
105
+ (item) => item._id === event.context.itemId,
106
+
107
+ );
108
+ if(!clickedItemData[TWG_JOBS_COLLECTION_FIELDS.LINK_JOBS_TITLE] && !clickedItemData[TWG_JOBS_COLLECTION_FIELDS.LINK_JOBS_REF_ID_SLUG]) {
109
+ console.error("clickedItemData does not have link-jobs-title or link-jobs-refId-slug");
110
+ return;
111
+ }
112
+
113
+ location.to( clickedItemData[TWG_JOBS_COLLECTION_FIELDS.LINK_JOBS_TITLE]|| clickedItemData[TWG_JOBS_COLLECTION_FIELDS.LINK_JOBS_REF_ID_SLUG]);
114
+
115
+
116
+ });
117
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).onItemReady(async ($item, itemData) => {
118
+ $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_CATEGORY_BUTTON).label = itemData.title || '';
119
+ });
120
+
121
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER_ITEM).onClick(async (event) => {
122
+ const data = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).data;
123
+ const clickedItemData = data.find(
124
+ (item) => item._id === event.context.itemId,
125
+ );
126
+ const baseUrl = await location.baseUrl();
127
+ const encodedCategory=encodeURIComponent(clickedItemData._id);
128
+ location.to(`${baseUrl}/search?category=${encodedCategory}`);
129
+ });
130
+
131
+ }
132
+
133
+ function bindPrimarySearch(_$w, allvaluesobjects) {
134
+
135
+ const handleSearchInput = async () => {
136
+ const query = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value?.toLowerCase().trim() || '';
137
+ await primarySearch(_$w, query);
138
+ }
139
+
140
+ const primarySearchDebounced = debounce(() => handleSearchInput(), 400);
141
+
142
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onInput(async () => {
143
+ await primarySearchDebounced();
144
+ });
145
+
146
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onClick(async () => {
147
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
148
+
149
+ if(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value.trim()!=='') {
150
+ const query = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value?.toLowerCase().trim() || '';
151
+ await primarySearch(_$w, query);
152
+ }
153
+ else {
154
+ await loadCategoriesListPrimarySearch(_$w,allvaluesobjects);
155
+ }
156
+ });
157
+
158
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).onMouseOut(async () => {
159
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).collapse();
160
+ });
161
+
162
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onKeyPress(async (event) => {
163
+ if( event.key === 'Enter') {
164
+ if(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value.trim()==='') {
165
+ // _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).collapse();
166
+ const baseUrl = await location.baseUrl();
167
+ location.to(`${baseUrl}/search`);
168
+
169
+ }
170
+ else {
171
+ let encodedKeyWord=encodeURIComponent(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value);
172
+ const baseUrl = await location.baseUrl();
173
+ location.to(`${baseUrl}/search?keyword=${encodedKeyWord}`);
174
+ }
175
+ }
176
+ });
177
+
178
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_BUTTON).onClick(async () => {
179
+ if(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value.trim()==='') {
180
+ const baseUrl = await location.baseUrl();
181
+ location.to(`${baseUrl}/search`);
182
+ }
183
+ else {
184
+ let encodedKeyWord=encodeURIComponent(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value);
185
+ const baseUrl = await location.baseUrl();
186
+ location.to(`${baseUrl}/search?keyword=${encodedKeyWord}`);
187
+ }
188
+ });
189
+ }
190
+
191
+ async function loadCategoriesListPrimarySearch(_$w, allvaluesobjects) {
192
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("categoryResults");
193
+
194
+ let categoryValues=[]
195
+ for(const value of allvaluesobjects) {
196
+ if(value.customField === CATEGORY_CUSTOM_FIELD_ID_IN_CMS) {
197
+ categoryValues.push({title: value.title+` (${value.count})` , _id: value.valueId});
198
+ }
199
+ }
200
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).data = categoryValues;
201
+ }
202
+
203
+ async function primarySearch(_$w, query) {
204
+ if(query === undefined || query === '') {
205
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("categoryResults");
206
+ return false;
207
+ }
208
+
209
+ const searchByTitle = [{field: 'title', searchTerm: query}];
210
+ const searchByCity = [{field: 'location.fullLocation', searchTerm: query}];
211
+
212
+ let filter = await getFilter(searchByTitle);
213
+
214
+ await _$w('#jobsDataset').setFilter(filter);
215
+ await _$w('#jobsDataset').refresh();
216
+
217
+ let count = _$w('#jobsDataset').getTotalCount();
218
+
219
+ if( count > 0 ) {
220
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
221
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("jobResults");
222
+ }
223
+ else {
224
+ filter = await getFilter(searchByCity);
225
+ await _$w('#jobsDataset').setFilter(filter);
226
+ await _$w('#jobsDataset').refresh();
227
+
228
+ count = _$w('#jobsDataset').getTotalCount();
229
+ if (count > 0) {
230
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
231
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("jobResults");
232
+ }
233
+ else{
234
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("noResults");
235
+ }
236
+ }
237
+
238
+ return count > 0;
239
+ }
240
+
99
241
  async function getValueFromValueId(valueId) {
100
242
  const result = await getAllRecords(COLLECTIONS.CUSTOM_VALUES);
101
243
  console.log("result: ",result);
@@ -120,6 +262,9 @@ module.exports = {
120
262
  getFieldByTitle,
121
263
  getCorrectOption,
122
264
  getOptionIndexFromCheckBox,
265
+ loadPrimarySearchRepeater,
266
+ bindPrimarySearch,
267
+ primarySearch,
123
268
  getLatestJobsByValue,
124
269
  getValueFromValueId,
125
270
  getAllRecordsWithoutMultiRef,
@@ -10,6 +10,8 @@ const {
10
10
  } = require('../public/utils');
11
11
 
12
12
 
13
+
14
+
13
15
  async function positionPageOnReady(_$w) {
14
16
  console.log("positionPageOnReady called");
15
17
  await bind(_$w);
@@ -88,14 +90,8 @@ async function getCategoryValue(customValues) {
88
90
  }
89
91
 
90
92
  function handleReferFriendButton(_$w,item) {
91
- if(isElementExistOnPage(_$w('#referFriendButton'))){
92
- if(!item.referFriendLink){
93
- _$w('#referFriendButton').hide();
94
- }
95
- else {
96
- _$w('#referFriendButton').target="_blank";
97
- _$w('#referFriendButton').link=item.referFriendLink;
98
- }
93
+ if(!item.referFriendLink && isElementExistOnPage(_$w('#referFriendButton'))){
94
+ _$w('#referFriendButton').hide();
99
95
  }
100
96
  }
101
97
 
package/public/index.js CHANGED
@@ -2,6 +2,5 @@ module.exports = {
2
2
  ...require('./utils'),
3
3
  ...require('./filterUtils'),
4
4
  ...require('./mapUtils'),
5
- ...require('./primarySearchUtils'),
6
5
  };
7
6
 
@@ -26,22 +26,19 @@ const CAREERS_PAGE_SELECTORS = {
26
26
  OPEN_FILTERS_BUTTON: '#openFiltersButton',
27
27
  CLOSE_FILTERS_BUTTON: '#closeFiltersButton',
28
28
  RESET_FILTERS_BUTTON: '#resetFiltersButton',
29
+ RESET_FILTERS_BUTTON: '#resetFiltersButton',
29
30
 
30
31
  RESULTS_MULTI_STATE: '#resultsMultiState',
31
32
  BRANDS_DATASET: '#brandsDataset',
32
33
  DEPARTMENTS_DATASET: '#departmentsDataset',
33
34
  LOCATIONS_DATASET: '#locationsDataset',
34
35
  JOB_TYPES_DATASET: '#jobTypesDataset',
36
+ JOBS_DATASET: '#jobsDataset',
35
37
 
36
38
  GOOGLE_MAPS: '#googleMaps',
37
39
  FOOTER: '#footer',
38
40
  }
39
41
 
40
- const GLOBAL_SECTIONS_SELECTORS = {
41
- JOBS_DATASET: '#jobsDataset',
42
-
43
- }
44
-
45
42
  const FILTER_FIELDS = {
46
43
  DEPARTMENT: 'department',
47
44
  LOCATION: 'cityText',
@@ -52,6 +49,5 @@ const FILTER_FIELDS = {
52
49
 
53
50
  module.exports = {
54
51
  CAREERS_PAGE_SELECTORS,
55
- GLOBAL_SECTIONS_SELECTORS,
56
52
  FILTER_FIELDS,
57
53
  }
@@ -1,157 +0,0 @@
1
- const { location } = require("@wix/site-location");
2
-
3
- const { CAREERS_MULTI_BOXES_PAGE_CONSTS, CATEGORY_CUSTOM_FIELD_ID_IN_CMS, PRIMARY_SEARCH_STATES } = require('../backend/careersMultiBoxesPageIds');
4
- const { GLOBAL_SECTIONS_SELECTORS } = require('../public/selectors');
5
- const { getFilter } = require('../public/filterUtils');
6
- const { debounce } = require('../pages/pagesUtils');
7
-
8
- async function handlePrimarySearch(_$w, allvaluesobjects) {
9
- // load the categories list before clicking on the primary search input
10
- loadCategoryRepeaterData(_$w, allvaluesobjects);
11
-
12
- // wait for the jobs dataset to be ready
13
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).onReadyAsync();
14
-
15
- await bindPrimarySearch(_$w);
16
- }
17
-
18
- function loadCategoryRepeaterData(_$w, allvaluesobjects) {
19
- let categoryValues=[]
20
- for(const value of allvaluesobjects) {
21
- if(value.customField === CATEGORY_CUSTOM_FIELD_ID_IN_CMS) {
22
- categoryValues.push({title: value.title+` (${value.count})` , _id: value.valueId});
23
- }
24
- }
25
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).data = categoryValues;
26
- }
27
-
28
- async function bindPrimarySearch(_$w) {
29
- handleCategoryEvents(_$w);
30
-
31
- await handleSearchInput(_$w);
32
-
33
- // on mouse out collapse the results container
34
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).onMouseOut(async () => {
35
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).collapse();
36
- });
37
-
38
- // handle the click on the search button
39
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_BUTTON).onClick(async () => {
40
- if(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value.trim()==='') {
41
- const baseUrl = await location.baseUrl();
42
- location.to(`${baseUrl}/search`);
43
- }
44
- else {
45
- let encodedKeyWord=encodeURIComponent(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value);
46
- const baseUrl = await location.baseUrl();
47
- location.to(`${baseUrl}/search?keyword=${encodedKeyWord}`);
48
- }
49
- });
50
- }
51
-
52
- function handleCategoryEvents(_$w) {
53
- // set the label of the category repeater item
54
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).onItemReady(async ($item, itemData) => {
55
- $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_CATEGORY_BUTTON).label = itemData.title || '';
56
- });
57
-
58
- // handle the category repeater item on click
59
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER_ITEM).onClick(async (event) => {
60
- const data = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).data;
61
- const clickedItemData = data.find(
62
- (item) => item._id === event.context.itemId,
63
- );
64
- const baseUrl = await location.baseUrl();
65
- const encodedCategory=encodeURIComponent(clickedItemData._id);
66
- location.to(`${baseUrl}/search?category=${encodedCategory}`);
67
- });
68
-
69
- }
70
-
71
- function getSearchQuery(_$w) {
72
- return _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value?.toLowerCase().trim() || '';
73
- }
74
-
75
- async function handleSearchInput(_$w) {
76
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).enable();
77
-
78
- // on Input call the queryPrimarySearchResults function
79
- const callQueryPrimarySearchResults = async () => {
80
- await queryPrimarySearchResults(_$w, getSearchQuery(_$w));
81
- }
82
-
83
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onInput(async () => {
84
- await debounce(() => callQueryPrimarySearchResults(), 300)();
85
- });
86
-
87
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onClick(async () => {
88
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
89
-
90
- const searchQuery = getSearchQuery(_$w);
91
- if(searchQuery !== '') {
92
- await queryPrimarySearchResults(_$w, searchQuery);
93
- }
94
- else {
95
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState(PRIMARY_SEARCH_STATES.CATEGORY_RESULTS);
96
- }
97
- });
98
-
99
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onKeyPress(async (event) => {
100
- if( event.key === 'Enter') {
101
- if(getSearchQuery(_$w) === '') {
102
- // _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).collapse();
103
- const baseUrl = await location.baseUrl();
104
- location.to(`${baseUrl}/search`);
105
-
106
- }
107
- else {
108
- let encodedKeyWord=encodeURIComponent(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value);
109
- const baseUrl = await location.baseUrl();
110
- location.to(`${baseUrl}/search?keyword=${encodedKeyWord}`);
111
- }
112
- }
113
- });
114
- }
115
-
116
- async function queryPrimarySearchResults(_$w, query) {
117
- if(query === undefined || query === '') {
118
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState(PRIMARY_SEARCH_STATES.CATEGORY_RESULTS);
119
- return false;
120
- }
121
-
122
- const searchByTitle = [{field: 'title', searchTerm: query}];
123
- const searchByCity = [{field: 'location.fullLocation', searchTerm: query}];
124
-
125
- let filter = await getFilter(searchByTitle);
126
-
127
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).setFilter(filter);
128
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).refresh();
129
-
130
- let count = _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).getTotalCount();
131
-
132
- if( count > 0 ) {
133
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
134
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState(PRIMARY_SEARCH_STATES.JOB_RESULTS);
135
- }
136
- else {
137
- filter = await getFilter(searchByCity);
138
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).setFilter(filter);
139
- await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).refresh();
140
-
141
- count = _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).getTotalCount();
142
- if (count > 0) {
143
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
144
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState(PRIMARY_SEARCH_STATES.JOB_RESULTS);
145
- }
146
- else{
147
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState(PRIMARY_SEARCH_STATES.NO_RESULTS);
148
- }
149
- }
150
-
151
- return count > 0;
152
- }
153
-
154
- module.exports = {
155
- handlePrimarySearch,
156
- queryPrimarySearchResults
157
- }