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.
- package/backend/careersMultiBoxesPageIds.js +8 -0
- package/package.json +2 -2
- package/pages/careersMultiBoxesPage.js +6 -13
- package/pages/careersPage.js +13 -13
- package/pages/homePage.js +10 -9
- package/pages/pagesUtils.js +0 -151
- package/public/index.js +1 -0
- package/public/primarySearchUtils.js +156 -0
- package/public/selectors.js +6 -2
|
@@ -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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
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,
|
|
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);
|
package/pages/careersPage.js
CHANGED
|
@@ -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(
|
|
61
|
+
_$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).onReady(() => {
|
|
62
62
|
updateCount(_$w);
|
|
63
63
|
_$w(CAREERS_PAGE_SELECTORS.FOOTER).onViewportEnter(() => {
|
|
64
|
-
if (currentLoadedItems<_$w(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
341
|
-
await _$w(
|
|
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(
|
|
361
|
-
await _$w(
|
|
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(
|
|
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(
|
|
489
|
-
const items = await _$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);
|
|
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 {
|
|
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
|
-
|
|
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(
|
|
165
|
-
await _$w(
|
|
165
|
+
await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).setFilter(filter);
|
|
166
|
+
await _$w(GLOBAL_SECTIONS_SELECTORS.JOBS_DATASET).refresh();
|
|
166
167
|
|
|
167
|
-
count = _$w(
|
|
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(
|
|
176
|
-
await _$w(
|
|
177
|
-
count = _$w(
|
|
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;
|
package/pages/pagesUtils.js
CHANGED
|
@@ -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
|
@@ -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
|
+
}
|
package/public/selectors.js
CHANGED
|
@@ -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
|
}
|