sr-npm 3.1.17 → 3.1.19

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,6 +31,13 @@ const CAREERS_MULTI_BOXES_PAGE_CONSTS={
31
31
  PRIMARY_SEARCH_CATEGORY_BUTTON: '#primarySearchCategoryButton',
32
32
  RESULTS_CONTAINER: '#resultsContainer',
33
33
  PRIMARY_SEARCH_BUTTON: '#primarySearchButton',
34
+ RESULTS_MULTI_STATE_BOX: '#multiStateBox1',
35
+ }
36
+
37
+ const PRIMARY_SEARCH_STATES={
38
+ CATEGORY_RESULTS: 'categoryResults',
39
+ JOB_RESULTS: 'jobResults',
40
+ NO_RESULTS: 'noResults',
34
41
  }
35
42
 
36
43
  const TWG_JOBS_COLLECTION_FIELDS={
@@ -81,4 +88,5 @@ module.exports = {
81
88
  CATEGORY_CUSTOM_FIELD_ID_IN_CMS,
82
89
  possibleUrlParams,
83
90
  TWG_JOBS_COLLECTION_FIELDS,
91
+ PRIMARY_SEARCH_STATES,
84
92
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sr-npm",
3
- "version": "3.1.17",
3
+ "version": "3.1.19",
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.211",
21
+ "@wix/data": "^1.0.349",
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 } = require('../public/selectors');
2
+ const { CAREERS_PAGE_SELECTORS, GLOBAL_SECTIONS_SELECTORS } = require('../public/selectors');
3
3
 
4
4
  const { window } = require('@wix/site-window');
5
5
  const { queryParams,onChange} = require('wix-location-frontend');
@@ -18,11 +18,9 @@ const { groupValuesByField,
18
18
  getFieldByTitle,
19
19
  getCorrectOption,
20
20
  getOptionIndexFromCheckBox,
21
- loadPrimarySearchRepeater,
22
- bindPrimarySearch,
23
- primarySearch,
24
21
  getAllDatasetItems
25
22
  } = require('./pagesUtils');
23
+ const { handlePrimarySearch, queryPrimarySearchResults } = require('../public/primarySearchUtils');
26
24
 
27
25
 
28
26
  let dontUpdateThisCheckBox;
@@ -49,24 +47,21 @@ async function careersMultiBoxesPageOnReady(_$w,urlParams) {
49
47
  onChange(async ()=>{
50
48
  await handleBackAndForth(_$w);
51
49
  });
52
-
53
50
  await loadData(_$w);
54
51
  await loadJobsRepeater(_$w); // if we remove the await here the job list will be flaky , it doesn't fill it properly
55
- loadPrimarySearchRepeater(_$w);
52
+ handlePrimarySearch(_$w, allvaluesobjects);
56
53
  await loadFilters(_$w);
57
54
  loadSelectedValuesRepeater(_$w);
58
55
  bindSearchInput(_$w);
59
56
  loadPaginationButtons(_$w);
60
-
61
57
  if (await window.formFactor() === "Mobile") {
62
58
  handleFilterInMobile(_$w);
63
59
  }
64
-
65
60
  await handleUrlParams(_$w, urlParams);
66
61
  _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CLEAR_ALL_BUTTON_ID).onClick(async () => {
67
62
  await clearAll(_$w);
68
63
  });
69
-
64
+ _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_MULTI_STATE_BOX).changeState("results");
70
65
  }
71
66
 
72
67
  async function handleBackAndForth(_$w){
@@ -149,10 +144,10 @@ async function handleUrlParams(_$w,urlParams,handleBackAndForth=false) {
149
144
  let currentApplyFilterFlag=false;
150
145
  //apply this first to determine all jobs
151
146
  if(urlParams.keyword) {
152
- applyFiltering = await primarySearch(_$w, decodeURIComponent(urlParams.keyword));
147
+ applyFiltering = await queryPrimarySearchResults(_$w, decodeURIComponent(urlParams.keyword));
153
148
  _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value = decodeURIComponent(urlParams.keyword);
154
149
 
155
- const items = await getAllDatasetItems(_$w, CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_DATASET);
150
+ const items = await getAllDatasetItems(_$w, GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET);
156
151
 
157
152
  currentJobs = items;
158
153
  keywordAllJobs = items;
@@ -670,8 +665,6 @@ async function secondarySearch(_$w,query) {
670
665
  }
671
666
  function bindSearchInput(_$w) {
672
667
  try {
673
- bindPrimarySearch(_$w, allvaluesobjects);
674
-
675
668
  const secondarySearchDebounced = debounce(async () => {
676
669
  const query = (_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.SECONDARY_SEARCH_INPUT).value || '').toLowerCase().trim();
677
670
  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 } = require('../public/selectors');
9
+ const { CAREERS_PAGE_SELECTORS, FILTER_FIELDS, GLOBAL_SECTIONS_SELECTORS } = 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(CAREERS_PAGE_SELECTORS.JOBS_DATASET).onReady(() => {
61
+ _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).onReady(() => {
62
62
  updateCount(_$w);
63
63
  _$w(CAREERS_PAGE_SELECTORS.FOOTER).onViewportEnter(() => {
64
- if (currentLoadedItems<_$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getTotalCount()) {
64
+ if (currentLoadedItems<_$w(GLOBAL_SECTIONS_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(CAREERS_PAGE_SELECTORS.JOBS_DATASET).loadMore();
84
+ _$w(GLOBAL_SECTIONS_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(CAREERS_PAGE_SELECTORS.JOBS_DATASET).loadMore();
151
+ await _$w(GLOBAL_SECTIONS_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(CAREERS_PAGE_SELECTORS.JOBS_DATASET).onReady(async () => {
173
+ await _$w(GLOBAL_SECTIONS_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(CAREERS_PAGE_SELECTORS.JOBS_DATASET).setFilter(filter);
341
- await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).refresh();
340
+ await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).setFilter(filter);
341
+ await _$w(GLOBAL_SECTIONS_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(CAREERS_PAGE_SELECTORS.JOBS_DATASET).setFilter(wixData.filter());
361
- await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).refresh();
360
+ await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).setFilter(wixData.filter());
361
+ await _$w(GLOBAL_SECTIONS_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(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getTotalCount();
377
+ const count = await _$w(GLOBAL_SECTIONS_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(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getTotalCount();
489
- const items = await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getItems(0, numOfItems);
488
+ const numOfItems = await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).getTotalCount();
489
+ const items = await _$w(GLOBAL_SECTIONS_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,7 +4,9 @@ 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 { bindPrimarySearch, getAllRecords, loadPrimarySearchRepeater } = require('./pagesUtils');
7
+ const { getAllRecords } = require('./pagesUtils');
8
+ const { handlePrimarySearch } = require('../public/primarySearchUtils');
9
+ const { GLOBAL_SECTIONS_SELECTORS } = require('../public/selectors');
8
10
 
9
11
  let thisObjectVar;
10
12
  let searchByCityFlag=false;
@@ -17,8 +19,7 @@ async function homePageOnReady(_$w,thisObject = null) {
17
19
 
18
20
  if(siteconfig.twg) {
19
21
  const allvaluesobjects = await getAllRecords(COLLECTIONS.CUSTOM_VALUES);
20
- bindPrimarySearch(_$w, allvaluesobjects);
21
- loadPrimarySearchRepeater(_$w)
22
+ handlePrimarySearch(_$w, allvaluesobjects);
22
23
  console.log("siteconfig.twg: ",siteconfig.twg);
23
24
 
24
25
  if(siteconfig.twg === "external") {
@@ -161,10 +162,10 @@ async function handleSearchInput(_$w) {
161
162
 
162
163
  let filter = await getFilter(searchByTitle);
163
164
 
164
- await _$w('#jobsDataset').setFilter(filter);
165
- await _$w('#jobsDataset').refresh();
165
+ await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).setFilter(filter);
166
+ await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).refresh();
166
167
 
167
- count = _$w('#jobsDataset').getTotalCount();
168
+ count = _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).getTotalCount();
168
169
 
169
170
  if (count > 0) {
170
171
  searchByCityFlag = false;
@@ -172,9 +173,9 @@ async function handleSearchInput(_$w) {
172
173
  _$w('#searchMultiStateBox').changeState('results');
173
174
  } else {
174
175
  filter = await getFilter(searchByCity);
175
- await _$w('#jobsDataset').setFilter(filter);
176
- await _$w('#jobsDataset').refresh();
177
- count = _$w('#jobsDataset').getTotalCount();
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();
178
179
  if( count > 0 )
179
180
  {
180
181
  searchByCityFlag = true;
@@ -1,9 +1,6 @@
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");
5
3
  const { normalizeString } = require('../backend/utils');
6
- const { getFilter } = require('../public/filterUtils');
7
4
 
8
5
  function groupValuesByField(values, refKey) {
9
6
  const map = new Map();
@@ -99,151 +96,6 @@ function getOptionIndexFromCheckBox(options,value) {
99
96
  }
100
97
  }
101
98
 
102
- function loadPrimarySearchRepeater(_$w) {
103
-
104
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOB_RESULTS_REPEATER).onItemReady(async ($item, itemData) => {
105
- $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_POSITION_BUTTON).label = itemData.title || '';
106
- });
107
-
108
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOB_RESULTS_REPEATER_ITEM).onClick((event) => {
109
- const data = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOB_RESULTS_REPEATER).data;
110
- const clickedItemData = data.find(
111
- (item) => item._id === event.context.itemId,
112
-
113
- );
114
- if(!clickedItemData[TWG_JOBS_COLLECTION_FIELDS.LINK_JOBS_TITLE] && !clickedItemData[TWG_JOBS_COLLECTION_FIELDS.LINK_JOBS_REF_ID_SLUG]) {
115
- console.error("clickedItemData does not have link-jobs-title or link-jobs-refId-slug");
116
- return;
117
- }
118
-
119
- location.to( clickedItemData[TWG_JOBS_COLLECTION_FIELDS.LINK_JOBS_TITLE]|| clickedItemData[TWG_JOBS_COLLECTION_FIELDS.LINK_JOBS_REF_ID_SLUG]);
120
-
121
-
122
- });
123
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).onItemReady(async ($item, itemData) => {
124
- $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_CATEGORY_BUTTON).label = itemData.title || '';
125
- });
126
-
127
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER_ITEM).onClick(async (event) => {
128
- const data = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).data;
129
- const clickedItemData = data.find(
130
- (item) => item._id === event.context.itemId,
131
- );
132
- const baseUrl = await location.baseUrl();
133
- const encodedCategory=encodeURIComponent(clickedItemData._id);
134
- location.to(`${baseUrl}/search?category=${encodedCategory}`);
135
- });
136
-
137
- }
138
-
139
- function bindPrimarySearch(_$w, allvaluesobjects) {
140
-
141
- const handleSearchInput = async () => {
142
- const query = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value?.toLowerCase().trim() || '';
143
- await primarySearch(_$w, query);
144
- }
145
-
146
- const primarySearchDebounced = debounce(() => handleSearchInput(), 400);
147
-
148
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onInput(async () => {
149
- await primarySearchDebounced();
150
- });
151
-
152
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onClick(async () => {
153
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
154
-
155
- if(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value.trim()!=='') {
156
- const query = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value?.toLowerCase().trim() || '';
157
- await primarySearch(_$w, query);
158
- }
159
- else {
160
- await loadCategoriesListPrimarySearch(_$w,allvaluesobjects);
161
- }
162
- });
163
-
164
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).onMouseOut(async () => {
165
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).collapse();
166
- });
167
-
168
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onKeyPress(async (event) => {
169
- if( event.key === 'Enter') {
170
- if(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value.trim()==='') {
171
- // _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).collapse();
172
- const baseUrl = await location.baseUrl();
173
- location.to(`${baseUrl}/search`);
174
-
175
- }
176
- else {
177
- let encodedKeyWord=encodeURIComponent(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value);
178
- const baseUrl = await location.baseUrl();
179
- location.to(`${baseUrl}/search?keyword=${encodedKeyWord}`);
180
- }
181
- }
182
- });
183
-
184
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_BUTTON).onClick(async () => {
185
- if(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value.trim()==='') {
186
- const baseUrl = await location.baseUrl();
187
- location.to(`${baseUrl}/search`);
188
- }
189
- else {
190
- let encodedKeyWord=encodeURIComponent(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value);
191
- const baseUrl = await location.baseUrl();
192
- location.to(`${baseUrl}/search?keyword=${encodedKeyWord}`);
193
- }
194
- });
195
- }
196
-
197
- async function loadCategoriesListPrimarySearch(_$w, allvaluesobjects) {
198
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("categoryResults");
199
-
200
- let categoryValues=[]
201
- for(const value of allvaluesobjects) {
202
- if(value.customField === CATEGORY_CUSTOM_FIELD_ID_IN_CMS) {
203
- categoryValues.push({title: value.title+` (${value.count})` , _id: value.valueId});
204
- }
205
- }
206
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).data = categoryValues;
207
- }
208
-
209
- async function primarySearch(_$w, query) {
210
- if(query === undefined || query === '') {
211
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("categoryResults");
212
- return false;
213
- }
214
-
215
- const searchByTitle = [{field: 'title', searchTerm: query}];
216
- const searchByCity = [{field: 'location.fullLocation', searchTerm: query}];
217
-
218
- let filter = await getFilter(searchByTitle);
219
-
220
- await _$w('#jobsDataset').setFilter(filter);
221
- await _$w('#jobsDataset').refresh();
222
-
223
- let count = _$w('#jobsDataset').getTotalCount();
224
-
225
- if( count > 0 ) {
226
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
227
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("jobResults");
228
- }
229
- else {
230
- filter = await getFilter(searchByCity);
231
- await _$w('#jobsDataset').setFilter(filter);
232
- await _$w('#jobsDataset').refresh();
233
-
234
- count = _$w('#jobsDataset').getTotalCount();
235
- if (count > 0) {
236
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
237
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("jobResults");
238
- }
239
- else{
240
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("noResults");
241
- }
242
- }
243
-
244
- return count > 0;
245
- }
246
-
247
99
  async function getValueFromValueId(valueId) {
248
100
  const result = await getAllRecords(COLLECTIONS.CUSTOM_VALUES);
249
101
  console.log("result: ",result);
@@ -268,9 +120,6 @@ module.exports = {
268
120
  getFieldByTitle,
269
121
  getCorrectOption,
270
122
  getOptionIndexFromCheckBox,
271
- loadPrimarySearchRepeater,
272
- bindPrimarySearch,
273
- primarySearch,
274
123
  getLatestJobsByValue,
275
124
  getValueFromValueId,
276
125
  getAllRecordsWithoutMultiRef,
package/public/index.js CHANGED
@@ -2,5 +2,6 @@ module.exports = {
2
2
  ...require('./utils'),
3
3
  ...require('./filterUtils'),
4
4
  ...require('./mapUtils'),
5
+ ...require('./primarySearchUtils'),
5
6
  };
6
7
 
@@ -0,0 +1,156 @@
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
+ }
@@ -26,19 +26,22 @@ 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',
30
29
 
31
30
  RESULTS_MULTI_STATE: '#resultsMultiState',
32
31
  BRANDS_DATASET: '#brandsDataset',
33
32
  DEPARTMENTS_DATASET: '#departmentsDataset',
34
33
  LOCATIONS_DATASET: '#locationsDataset',
35
34
  JOB_TYPES_DATASET: '#jobTypesDataset',
36
- JOBS_DATASET: '#jobsDataset',
37
35
 
38
36
  GOOGLE_MAPS: '#googleMaps',
39
37
  FOOTER: '#footer',
40
38
  }
41
39
 
40
+ const GLOBAL_SECTIONS_SELECTORS = {
41
+ JOBS_DATASET: '#jobsDataset',
42
+
43
+ }
44
+
42
45
  const FILTER_FIELDS = {
43
46
  DEPARTMENT: 'department',
44
47
  LOCATION: 'cityText',
@@ -49,5 +52,6 @@ const FILTER_FIELDS = {
49
52
 
50
53
  module.exports = {
51
54
  CAREERS_PAGE_SELECTORS,
55
+ GLOBAL_SECTIONS_SELECTORS,
52
56
  FILTER_FIELDS,
53
57
  }