sr-npm 3.1.10 → 3.1.12
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 +7 -0
- package/backend/utils.js +2 -1
- package/package.json +1 -1
- package/pages/boardPeoplePage.js +2 -3
- package/pages/careersMultiBoxesPage.js +31 -19
- package/pages/homePage.js +19 -26
- package/pages/pagesUtils.js +191 -166
- package/pages/positionPage.js +2 -1
- package/pages/supportTeamsPage.js +2 -1
- package/public/filterUtils.js +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const CAREERS_MULTI_BOXES_PAGE_CONSTS={
|
|
2
|
+
JOBS_DATASET: '#jobsDataset',
|
|
2
3
|
FILTER_REPEATER: '#filterReapter',
|
|
3
4
|
JOBS_REPEATER: '#jobsReapter',
|
|
4
5
|
JOBS_REPEATER_ITEM_TITLE: '#jobTitle',
|
|
@@ -68,10 +69,16 @@ const possibleUrlParams=[
|
|
|
68
69
|
"storename",
|
|
69
70
|
]
|
|
70
71
|
|
|
72
|
+
|
|
73
|
+
const LINK_JOBS_TITLE = "link-jobs-title";
|
|
74
|
+
const LINK_JOBS_REF_ID_SLUG = "link-jobs-refId-slug";
|
|
75
|
+
|
|
71
76
|
module.exports = {
|
|
72
77
|
CAREERS_MULTI_BOXES_PAGE_CONSTS,
|
|
73
78
|
FiltersIds,
|
|
74
79
|
fieldTitlesInCMS,
|
|
75
80
|
CATEGORY_CUSTOM_FIELD_ID_IN_CMS,
|
|
76
81
|
possibleUrlParams,
|
|
82
|
+
LINK_JOBS_TITLE,
|
|
83
|
+
LINK_JOBS_REF_ID_SLUG,
|
|
77
84
|
}
|
package/backend/utils.js
CHANGED
|
@@ -61,7 +61,8 @@ function normalizeString(str) {
|
|
|
61
61
|
return str
|
|
62
62
|
.normalize('NFD')
|
|
63
63
|
.replace(/\p{Diacritic}/gu, '')
|
|
64
|
-
.replace(
|
|
64
|
+
.replace(/-/g, '') // remove all hyphens
|
|
65
|
+
.replace(/[^A-Za-z0-9]/g, '') // allow only alphanumerics (no hyphens now)
|
|
65
66
|
.trim();
|
|
66
67
|
}
|
|
67
68
|
|
package/package.json
CHANGED
package/pages/boardPeoplePage.js
CHANGED
|
@@ -6,18 +6,17 @@ async function boardPeoplePageOnReady(_$w,) {
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
async function bindBoardPeopleRepeaters(_$w) {
|
|
9
|
-
|
|
10
9
|
_$w('#directorsRepeaterItem').onClick((event) => {
|
|
11
10
|
const $item = _$w.at(event.context);
|
|
12
11
|
const clickedItemData = $item('#dynamicDataset').getCurrentItem();
|
|
13
|
-
location.to(
|
|
12
|
+
location.to(`${clickedItemData['link-board-people-title_fld']}`);
|
|
14
13
|
|
|
15
14
|
});
|
|
16
15
|
|
|
17
16
|
_$w('#executivesRepeaterItem').onClick((event) => {
|
|
18
17
|
const $item = _$w.at(event.context);
|
|
19
18
|
const clickedItemData = $item('#dataset1').getCurrentItem();
|
|
20
|
-
location.to(
|
|
19
|
+
location.to(`${clickedItemData['link-board-people-title_fld']}`);
|
|
21
20
|
|
|
22
21
|
});
|
|
23
22
|
}
|
|
@@ -5,7 +5,18 @@ const { window } = require('@wix/site-window');
|
|
|
5
5
|
const { queryParams,onChange} = require('wix-location-frontend');
|
|
6
6
|
const { location } = require("@wix/site-location");
|
|
7
7
|
const {CAREERS_MULTI_BOXES_PAGE_CONSTS,FiltersIds,fieldTitlesInCMS,possibleUrlParams} = require('../backend/careersMultiBoxesPageIds');
|
|
8
|
-
const { groupValuesByField,
|
|
8
|
+
const { groupValuesByField,
|
|
9
|
+
debounce,
|
|
10
|
+
getAllRecords,
|
|
11
|
+
getFieldById,
|
|
12
|
+
getFieldByTitle,
|
|
13
|
+
getCorrectOption,
|
|
14
|
+
getOptionIndexFromCheckBox,
|
|
15
|
+
loadPrimarySearchRepeater,
|
|
16
|
+
bindPrimarySearch,
|
|
17
|
+
primarySearch,
|
|
18
|
+
getAllDatasetItems
|
|
19
|
+
} = require('./pagesUtils');
|
|
9
20
|
|
|
10
21
|
|
|
11
22
|
let dontUpdateThisCheckBox;
|
|
@@ -132,10 +143,13 @@ async function handleUrlParams(_$w,urlParams,handleBackAndForth=false) {
|
|
|
132
143
|
let currentApplyFilterFlag=false;
|
|
133
144
|
//apply this first to determine all jobs
|
|
134
145
|
if(urlParams.keyword) {
|
|
135
|
-
applyFiltering=await primarySearch(_$w, decodeURIComponent(urlParams.keyword)
|
|
136
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value=decodeURIComponent(urlParams.keyword);
|
|
137
|
-
|
|
138
|
-
|
|
146
|
+
applyFiltering = await primarySearch(_$w, decodeURIComponent(urlParams.keyword));
|
|
147
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value = decodeURIComponent(urlParams.keyword);
|
|
148
|
+
|
|
149
|
+
const items = await getAllDatasetItems(_$w, CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_DATASET);
|
|
150
|
+
|
|
151
|
+
currentJobs = items;
|
|
152
|
+
keywordAllJobs = items;
|
|
139
153
|
}
|
|
140
154
|
|
|
141
155
|
for (const url of possibleUrlParams)
|
|
@@ -149,10 +163,11 @@ async function handleUrlParams(_$w,urlParams,handleBackAndForth=false) {
|
|
|
149
163
|
}
|
|
150
164
|
currentApplyFilterFlag=false;
|
|
151
165
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
166
|
+
|
|
167
|
+
if(applyFiltering || keywordAllJobs || handleBackAndForth) {
|
|
168
|
+
await updateJobsAndNumbersAndFilters(_$w);
|
|
169
|
+
|
|
170
|
+
}
|
|
156
171
|
|
|
157
172
|
if(urlParams.page) {
|
|
158
173
|
if(Number.isNaN(Number(urlParams.page)) || Number(urlParams.page)<=1 || Number(urlParams.page)>Math.ceil(currentJobs.length/pagination.pageSize)) {
|
|
@@ -297,7 +312,7 @@ async function loadJobsRepeater(_$w) {
|
|
|
297
312
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).onItemReady(($item, itemData) => {
|
|
298
313
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_TITLE).text = itemData.title;
|
|
299
314
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_TITLE).onClick(() => {
|
|
300
|
-
location.to(itemData[
|
|
315
|
+
location.to(itemData[CAREERS_MULTI_BOXES_PAGE_CONSTS.LINK_JOBS_TITLE] || itemData[CAREERS_MULTI_BOXES_PAGE_CONSTS.LINK_JOBS_REF_ID_SLUG]);
|
|
301
316
|
});
|
|
302
317
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_LOCATION).text=itemData.location.fullLocation
|
|
303
318
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_EMPLOYMENT_TYPE).text=itemData.employmentType
|
|
@@ -461,8 +476,7 @@ function getValueFromValueId(valueIds, value) {
|
|
|
461
476
|
}
|
|
462
477
|
}
|
|
463
478
|
|
|
464
|
-
async function applyJobFilters(_$w
|
|
465
|
-
// if(!clearAll) {
|
|
479
|
+
async function applyJobFilters(_$w) {
|
|
466
480
|
let tempFilteredJobs=[];
|
|
467
481
|
let finalFilteredJobs=[];
|
|
468
482
|
secondarySearchIsFilled? finalFilteredJobs=allsecondarySearchJobs:finalFilteredJobs=alljobs;
|
|
@@ -484,7 +498,7 @@ function getValueFromValueId(valueIds, value) {
|
|
|
484
498
|
}
|
|
485
499
|
else{
|
|
486
500
|
//if it is not location then we check if selecred values (which is an array) have one of the job values (whcih is also an array)
|
|
487
|
-
if(job[JOBS_COLLECTION_FIELDS.MULTI_REF_JOBS_CUSTOM_VALUES].some(value=>values.includes(value.
|
|
501
|
+
if(job[JOBS_COLLECTION_FIELDS.MULTI_REF_JOBS_CUSTOM_VALUES].some(value=>values.includes(value.valueId))) {
|
|
488
502
|
if(!addedJobsIds.has(job._id)) {
|
|
489
503
|
tempFilteredJobs.push(job);
|
|
490
504
|
addedJobsIds.add(job._id);
|
|
@@ -514,8 +528,7 @@ function getValueFromValueId(valueIds, value) {
|
|
|
514
528
|
}
|
|
515
529
|
pagination.currentPage=1;
|
|
516
530
|
handlePaginationButtons(_$w);
|
|
517
|
-
|
|
518
|
-
// }
|
|
531
|
+
}
|
|
519
532
|
|
|
520
533
|
function handlePaginationButtons(_$w)
|
|
521
534
|
{
|
|
@@ -622,16 +635,15 @@ async function secondarySearch(_$w,query) {
|
|
|
622
635
|
await refreshFacetCounts(_$w);
|
|
623
636
|
return allsecondarySearchJobs;
|
|
624
637
|
}
|
|
625
|
-
|
|
638
|
+
function bindSearchInput(_$w) {
|
|
626
639
|
try {
|
|
627
|
-
|
|
640
|
+
bindPrimarySearch(_$w, allvaluesobjects);
|
|
628
641
|
|
|
629
|
-
|
|
642
|
+
const secondarySearchDebounced = debounce(async () => {
|
|
630
643
|
const query = (_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.SECONDARY_SEARCH_INPUT).value || '').toLowerCase().trim();
|
|
631
644
|
await secondarySearch(_$w, query);
|
|
632
645
|
}, 150);
|
|
633
646
|
|
|
634
|
-
|
|
635
647
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.SECONDARY_SEARCH_INPUT).onInput(secondarySearchDebounced);
|
|
636
648
|
|
|
637
649
|
} catch (error) {
|
package/pages/homePage.js
CHANGED
|
@@ -1,28 +1,23 @@
|
|
|
1
|
-
const {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
} = require('../public/filterUtils');
|
|
5
|
-
const { handleOnLocationClick } = require('../public/mapUtils');
|
|
6
|
-
const { filterBrokenMarkers } = require('../public/utils');
|
|
1
|
+
const { debounce, getFilter } = require('../public/filterUtils');
|
|
2
|
+
const { handleOnLocationClick } = require('../public/mapUtils');
|
|
3
|
+
const { filterBrokenMarkers } = require('../public/utils');
|
|
7
4
|
const { location } = require('@wix/site-location');
|
|
8
5
|
const {wixData} = require('wix-data');
|
|
9
6
|
const { COLLECTIONS } = require('../backend/collectionConsts');
|
|
10
|
-
const { bindPrimarySearch,getAllRecords,loadPrimarySearchRepeater } = require('./pagesUtils');
|
|
11
|
-
|
|
7
|
+
const { bindPrimarySearch, getAllRecords, loadPrimarySearchRepeater } = require('./pagesUtils');
|
|
12
8
|
|
|
13
9
|
let thisObjectVar;
|
|
14
10
|
let searchByCityFlag=false;
|
|
15
11
|
let loadedCategories=false;
|
|
16
12
|
|
|
17
|
-
async function homePageOnReady(_$w,thisObject=null) {
|
|
13
|
+
async function homePageOnReady(_$w,thisObject = null) {
|
|
18
14
|
const queryResult = await wixData.query(COLLECTIONS.SITE_CONFIGS).find();
|
|
19
15
|
const siteconfig = queryResult.items[0];
|
|
20
16
|
|
|
21
|
-
if(siteconfig.twg) {
|
|
22
|
-
const allJobs = await getAllRecords(COLLECTIONS.JOBS);
|
|
23
|
-
const allvaluesobjects = await getAllRecords(COLLECTIONS.CUSTOM_VALUES);
|
|
24
17
|
|
|
25
|
-
|
|
18
|
+
if(siteconfig.twg) {
|
|
19
|
+
const allvaluesobjects = await getAllRecords(COLLECTIONS.CUSTOM_VALUES);
|
|
20
|
+
bindPrimarySearch(_$w, allvaluesobjects);
|
|
26
21
|
loadPrimarySearchRepeater(_$w)
|
|
27
22
|
console.log("siteconfig.twg: ",siteconfig.twg);
|
|
28
23
|
|
|
@@ -32,17 +27,16 @@ async function homePageOnReady(_$w,thisObject=null) {
|
|
|
32
27
|
}
|
|
33
28
|
}
|
|
34
29
|
else{
|
|
35
|
-
thisObjectVar=thisObject;
|
|
30
|
+
thisObjectVar = thisObject;
|
|
36
31
|
bind(_$w);
|
|
37
32
|
init(_$w);
|
|
38
33
|
}
|
|
39
|
-
|
|
34
|
+
|
|
35
|
+
}
|
|
40
36
|
|
|
41
37
|
function bind(_$w) {
|
|
42
|
-
|
|
43
38
|
bindTeamRepeater(_$w);
|
|
44
39
|
|
|
45
|
-
|
|
46
40
|
_$w('#citiesDataset').onReady(async () => {
|
|
47
41
|
const numOfItems = await _$w('#citiesDataset').getTotalCount();
|
|
48
42
|
const items = await _$w('#citiesDataset').getItems(0, numOfItems);
|
|
@@ -56,8 +50,8 @@ function bind(_$w) {
|
|
|
56
50
|
latitude: location.latitude,
|
|
57
51
|
longitude: location.longitude
|
|
58
52
|
},
|
|
59
|
-
|
|
60
|
-
|
|
53
|
+
address: item.locationAddress.formatted,
|
|
54
|
+
title: item.title,
|
|
61
55
|
link: cityLinkUrl,
|
|
62
56
|
linkTitle:`View ${item.count} Open Positions`
|
|
63
57
|
};
|
|
@@ -106,7 +100,6 @@ function bindTeamRepeater(_$w) {
|
|
|
106
100
|
}
|
|
107
101
|
|
|
108
102
|
function bindViewAllButton(_$w) {
|
|
109
|
-
|
|
110
103
|
_$w('#viewAllCategoriesButton').onClick(()=>{
|
|
111
104
|
if(!loadedCategories) {
|
|
112
105
|
loadedCategories=true;
|
|
@@ -125,11 +118,11 @@ function bindViewAllButton(_$w) {
|
|
|
125
118
|
|
|
126
119
|
|
|
127
120
|
function init(_$w) {
|
|
128
|
-
const debouncedInput = debounce(()=>handleSearchInput(_$w), 400,thisObjectVar);
|
|
121
|
+
const debouncedInput = debounce(() => handleSearchInput(_$w), 400, thisObjectVar);
|
|
129
122
|
|
|
130
123
|
_$w('#searchInput').onInput(debouncedInput);
|
|
131
124
|
_$w('#searchInput').maxLength = 40;
|
|
132
|
-
_$w('#searchButton').onClick(()=>handleSearch(_$w('#searchInput').value));
|
|
125
|
+
_$w('#searchButton').onClick(() => handleSearch(_$w('#searchInput').value));
|
|
133
126
|
|
|
134
127
|
_$w('#searchInput').onKeyPress((event) => {
|
|
135
128
|
if (event.key === 'Enter') {
|
|
@@ -174,17 +167,17 @@ async function handleSearchInput(_$w) {
|
|
|
174
167
|
count = _$w('#jobsDataset').getTotalCount();
|
|
175
168
|
|
|
176
169
|
if (count > 0) {
|
|
177
|
-
searchByCityFlag=false;
|
|
170
|
+
searchByCityFlag = false;
|
|
178
171
|
_$w('#resultsContainer').expand();
|
|
179
172
|
_$w('#searchMultiStateBox').changeState('results');
|
|
180
173
|
} else {
|
|
181
|
-
filter=await getFilter(searchByCity);
|
|
174
|
+
filter = await getFilter(searchByCity);
|
|
182
175
|
await _$w('#jobsDataset').setFilter(filter);
|
|
183
176
|
await _$w('#jobsDataset').refresh();
|
|
184
177
|
count = _$w('#jobsDataset').getTotalCount();
|
|
185
|
-
if(count > 0)
|
|
178
|
+
if( count > 0 )
|
|
186
179
|
{
|
|
187
|
-
searchByCityFlag=true;
|
|
180
|
+
searchByCityFlag = true;
|
|
188
181
|
_$w('#resultsContainer').expand();
|
|
189
182
|
_$w('#searchMultiStateBox').changeState('results');
|
|
190
183
|
}
|
package/pages/pagesUtils.js
CHANGED
|
@@ -3,6 +3,7 @@ const { JOBS_COLLECTION_FIELDS,COLLECTIONS } = require('../backend/collectionCon
|
|
|
3
3
|
const { CAREERS_MULTI_BOXES_PAGE_CONSTS,CATEGORY_CUSTOM_FIELD_ID_IN_CMS } = require('../backend/careersMultiBoxesPageIds');
|
|
4
4
|
const { location } = require("@wix/site-location");
|
|
5
5
|
const { normalizeString } = require('../backend/utils');
|
|
6
|
+
const { getFilter } = require('../public/filterUtils');
|
|
6
7
|
|
|
7
8
|
function groupValuesByField(values, refKey) {
|
|
8
9
|
const map = new Map();
|
|
@@ -15,71 +16,86 @@ function groupValuesByField(values, refKey) {
|
|
|
15
16
|
});
|
|
16
17
|
}
|
|
17
18
|
return map;
|
|
18
|
-
|
|
19
|
+
}
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
};
|
|
21
|
+
const debounce = (fn, ms = 150) => {
|
|
22
|
+
let t;
|
|
23
|
+
return (...args) => {
|
|
24
|
+
clearTimeout(t);
|
|
25
|
+
t = setTimeout(() => fn(...args), ms);
|
|
26
26
|
};
|
|
27
|
+
};
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
items.push(...res.items);
|
|
39
|
-
}
|
|
40
|
-
return items;
|
|
29
|
+
async function getAllDatasetItems(_$w, datasetSelector) {
|
|
30
|
+
await _$w(datasetSelector).onReadyAsync();
|
|
31
|
+
|
|
32
|
+
let items = [];
|
|
33
|
+
let data = await _$w(datasetSelector).getItems(0, 1000);
|
|
34
|
+
items.push(...data.items);
|
|
35
|
+
|
|
36
|
+
while (_$w(datasetSelector).hasNextPage()) {
|
|
37
|
+
const nextItems = await _$w(datasetSelector).nextPage();
|
|
38
|
+
items.push(...nextItems);
|
|
41
39
|
}
|
|
42
40
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
return items;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async function getAllRecords(collectionId) {
|
|
45
|
+
const q = wixData.query(collectionId).include(JOBS_COLLECTION_FIELDS.MULTI_REF_JOBS_CUSTOM_VALUES)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
const items = [];
|
|
49
|
+
let res = await q.limit(1000).find();
|
|
50
|
+
items.push(...res.items);
|
|
51
|
+
|
|
52
|
+
while (res.hasNext()) {
|
|
53
|
+
res = await res.next();
|
|
49
54
|
items.push(...res.items);
|
|
50
|
-
|
|
51
|
-
while (res.hasNext()) {
|
|
52
|
-
res = await res.next();
|
|
53
|
-
items.push(...res.items);
|
|
54
|
-
}
|
|
55
|
-
return items;
|
|
56
55
|
}
|
|
56
|
+
return items;
|
|
57
|
+
}
|
|
57
58
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
async function getAllRecordsWithoutMultiRef(collectionId) {
|
|
60
|
+
const q = wixData.query(collectionId)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
const items = [];
|
|
64
|
+
let res = await q.limit(1000).find();
|
|
65
|
+
items.push(...res.items);
|
|
61
66
|
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
while (res.hasNext()) {
|
|
68
|
+
res = await res.next();
|
|
69
|
+
items.push(...res.items);
|
|
64
70
|
}
|
|
71
|
+
return items;
|
|
72
|
+
}
|
|
65
73
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
function getFieldById(fieldId,allFields) {
|
|
75
|
+
return allFields.find(field=>field._id===fieldId);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function getFieldByTitle(title,allFields) {
|
|
79
|
+
return allFields.find(field=>field.title===title);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function getCorrectOption(value,options,param) {
|
|
83
|
+
const standardizedValue = normalizeString(value.toLowerCase())
|
|
84
|
+
if(param==="employmenttype") //employmenttype have a problematic value
|
|
85
|
+
{
|
|
86
|
+
return options.find(option=>normalizeString(option.value.toLowerCase())===standardizedValue);
|
|
73
87
|
}
|
|
88
|
+
return options.find(option=>normalizeString(option.label.toLowerCase())===standardizedValue);
|
|
89
|
+
}
|
|
74
90
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
91
|
+
function getOptionIndexFromCheckBox(options,value) {
|
|
92
|
+
const normalizedValue=normalizeString(value.toLowerCase());
|
|
93
|
+
for(let index=0;index<options.length;index++) {
|
|
94
|
+
if(normalizeString(options[index].value.toLowerCase())===normalizedValue) {
|
|
95
|
+
return index;
|
|
81
96
|
}
|
|
82
97
|
}
|
|
98
|
+
}
|
|
83
99
|
|
|
84
100
|
function loadPrimarySearchRepeater(_$w) {
|
|
85
101
|
|
|
@@ -93,159 +109,168 @@ function loadPrimarySearchRepeater(_$w) {
|
|
|
93
109
|
(item) => item._id === event.context.itemId,
|
|
94
110
|
|
|
95
111
|
);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
);
|
|
100
|
-
if (linkKey && clickedItemData[linkKey] ) {
|
|
101
|
-
if(clickedItemData[linkKey].includes("copy-of-jobs")) {
|
|
102
|
-
clickedItemData[linkKey]=clickedItemData[linkKey].replace("copy-of-jobs","jobs")
|
|
103
|
-
}
|
|
104
|
-
location.to(clickedItemData[linkKey]);
|
|
112
|
+
if(!clickedItemData[CAREERS_MULTI_BOXES_PAGE_CONSTS.LINK_JOBS_TITLE] && !clickedItemData[CAREERS_MULTI_BOXES_PAGE_CONSTS.LINK_JOBS_REF_ID_SLUG]) {
|
|
113
|
+
console.error("clickedItemData does not have link-jobs-title or link-jobs-refId-slug");
|
|
114
|
+
return;
|
|
105
115
|
}
|
|
106
116
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_CATEGORY_BUTTON).label = itemData.title || '';
|
|
110
|
-
});
|
|
117
|
+
location.to(clickedItemData[CAREERS_MULTI_BOXES_PAGE_CONSTS.LINK_JOBS_TITLE]||clickedItemData[CAREERS_MULTI_BOXES_PAGE_CONSTS.LINK_JOBS_REF_ID_SLUG]);
|
|
118
|
+
|
|
111
119
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
120
|
+
});
|
|
121
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).onItemReady(async ($item, itemData) => {
|
|
122
|
+
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_CATEGORY_BUTTON).label = itemData.title || '';
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER_ITEM).onClick(async (event) => {
|
|
126
|
+
const data = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).data;
|
|
127
|
+
const clickedItemData = data.find(
|
|
128
|
+
(item) => item._id === event.context.itemId,
|
|
129
|
+
);
|
|
130
|
+
const baseUrl = await location.baseUrl();
|
|
131
|
+
const encodedCategory=encodeURIComponent(clickedItemData._id);
|
|
132
|
+
location.to(`${baseUrl}/search?category=${encodedCategory}`);
|
|
133
|
+
});
|
|
121
134
|
|
|
122
135
|
}
|
|
123
136
|
|
|
124
|
-
|
|
137
|
+
function bindPrimarySearch(_$w, allvaluesobjects) {
|
|
125
138
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
139
|
+
const handleSearchInput = async () => {
|
|
140
|
+
const query = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value?.toLowerCase().trim() || '';
|
|
141
|
+
await primarySearch(_$w, query);
|
|
142
|
+
}
|
|
130
143
|
|
|
131
|
-
|
|
132
|
-
await primarySearchDebounced();
|
|
133
|
-
});
|
|
144
|
+
const primarySearchDebounced = debounce(() => handleSearchInput(), 400);
|
|
134
145
|
|
|
135
|
-
|
|
136
|
-
|
|
146
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onInput(async () => {
|
|
147
|
+
await primarySearchDebounced();
|
|
148
|
+
});
|
|
137
149
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
await loadCategoriesListPrimarySearch(_$w, allvaluesobjects);
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).onMouseOut(async () => {
|
|
147
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).collapse();
|
|
148
|
-
});
|
|
150
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onClick(async () => {
|
|
151
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
|
|
149
152
|
|
|
150
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
location.to(`${baseUrl}/search`);
|
|
159
|
-
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
let encodedKeyWord=encodeURIComponent(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value);
|
|
163
|
-
const baseUrl = await location.baseUrl();
|
|
164
|
-
location.to(`${baseUrl}/search?keyword=${encodedKeyWord}`);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
});
|
|
153
|
+
if(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value.trim()!=='') {
|
|
154
|
+
const query = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value?.toLowerCase().trim() || '';
|
|
155
|
+
await primarySearch(_$w, query);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
await loadCategoriesListPrimarySearch(_$w,allvaluesobjects);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
168
161
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
162
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).onMouseOut(async () => {
|
|
163
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).collapse();
|
|
164
|
+
});
|
|
172
165
|
|
|
166
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onKeyPress(async (event) => {
|
|
167
|
+
if( event.key === 'Enter') {
|
|
173
168
|
if(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value.trim()==='') {
|
|
169
|
+
// _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).collapse();
|
|
174
170
|
const baseUrl = await location.baseUrl();
|
|
175
171
|
location.to(`${baseUrl}/search`);
|
|
176
|
-
|
|
172
|
+
|
|
173
|
+
}
|
|
177
174
|
else {
|
|
178
175
|
let encodedKeyWord=encodeURIComponent(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value);
|
|
179
176
|
const baseUrl = await location.baseUrl();
|
|
180
177
|
location.to(`${baseUrl}/search?keyword=${encodedKeyWord}`);
|
|
181
178
|
}
|
|
182
|
-
}
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_BUTTON).onClick(async () => {
|
|
183
|
+
if(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value.trim()==='') {
|
|
184
|
+
const baseUrl = await location.baseUrl();
|
|
185
|
+
location.to(`${baseUrl}/search`);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
let encodedKeyWord=encodeURIComponent(_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value);
|
|
189
|
+
const baseUrl = await location.baseUrl();
|
|
190
|
+
location.to(`${baseUrl}/search?keyword=${encodedKeyWord}`);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
183
193
|
}
|
|
184
194
|
|
|
185
195
|
async function loadCategoriesListPrimarySearch(_$w, allvaluesobjects) {
|
|
186
|
-
|
|
196
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("categoryResults");
|
|
187
197
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}
|
|
198
|
+
let categoryValues=[]
|
|
199
|
+
for(const value of allvaluesobjects) {
|
|
200
|
+
if(value.customField === CATEGORY_CUSTOM_FIELD_ID_IN_CMS) {
|
|
201
|
+
categoryValues.push({title: value.title+` (${value.count})` , _id: value.valueId});
|
|
193
202
|
}
|
|
194
|
-
|
|
203
|
+
}
|
|
204
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).data = categoryValues;
|
|
195
205
|
}
|
|
196
206
|
|
|
197
|
-
async function primarySearch(_$w,query
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
207
|
+
async function primarySearch(_$w, query) {
|
|
208
|
+
if(query === undefined || query === '') {
|
|
209
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("categoryResults");
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
const searchByTitle = [{field: 'title', searchTerm: query}];
|
|
214
|
+
const searchByCity = [{field: 'location.fullLocation', searchTerm: query}];
|
|
215
|
+
|
|
216
|
+
let filter = await getFilter(searchByTitle);
|
|
217
|
+
|
|
218
|
+
await _$w('#jobsDataset').setFilter(filter);
|
|
219
|
+
await _$w('#jobsDataset').refresh();
|
|
220
|
+
|
|
221
|
+
let count = _$w('#jobsDataset').getTotalCount();
|
|
222
|
+
|
|
223
|
+
if( count > 0 ) {
|
|
224
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
|
|
225
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("jobResults");
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
filter = await getFilter(searchByCity);
|
|
229
|
+
await _$w('#jobsDataset').setFilter(filter);
|
|
230
|
+
await _$w('#jobsDataset').refresh();
|
|
231
|
+
|
|
232
|
+
count = _$w('#jobsDataset').getTotalCount();
|
|
233
|
+
if (count > 0) {
|
|
234
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.RESULTS_CONTAINER).expand();
|
|
204
235
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("jobResults");
|
|
205
236
|
}
|
|
206
|
-
else
|
|
207
|
-
console.log("searching by location")
|
|
208
|
-
filteredJobs=alljobs.filter(job=>job.location.fullLocation.toLowerCase().includes(query));
|
|
209
|
-
if(filteredJobs.length>0) {
|
|
210
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("jobResults");
|
|
211
|
-
}
|
|
212
|
-
else{
|
|
237
|
+
else{
|
|
213
238
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_MULTI_BOX).changeState("noResults");
|
|
214
|
-
}
|
|
215
239
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return count > 0;
|
|
219
243
|
}
|
|
220
244
|
|
|
221
245
|
async function getValueFromValueId(valueId) {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
246
|
+
const result = await getAllRecords(COLLECTIONS.CUSTOM_VALUES);
|
|
247
|
+
console.log("result: ",result);
|
|
248
|
+
console.log("valueId: ",valueId);
|
|
225
249
|
|
|
226
|
-
|
|
250
|
+
return result.find(value => value.valueId === valueId);
|
|
227
251
|
}
|
|
228
252
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
253
|
+
async function getLatestJobsByValue(Value) {
|
|
254
|
+
const jobs=Value.multiRefJobsCustomValues;
|
|
255
|
+
const latestJobs = jobs
|
|
256
|
+
.sort((a, b) => new Date(b.releasedDate) - new Date(a.releasedDate))
|
|
257
|
+
.slice(0, 5);
|
|
258
|
+
return latestJobs;
|
|
259
|
+
}
|
|
236
260
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
261
|
+
module.exports = {
|
|
262
|
+
groupValuesByField,
|
|
263
|
+
debounce,
|
|
264
|
+
getAllRecords,
|
|
265
|
+
getFieldById,
|
|
266
|
+
getFieldByTitle,
|
|
267
|
+
getCorrectOption,
|
|
268
|
+
getOptionIndexFromCheckBox,
|
|
269
|
+
loadPrimarySearchRepeater,
|
|
270
|
+
bindPrimarySearch,
|
|
271
|
+
primarySearch,
|
|
272
|
+
getLatestJobsByValue,
|
|
273
|
+
getValueFromValueId,
|
|
274
|
+
getAllRecordsWithoutMultiRef,
|
|
275
|
+
getAllDatasetItems
|
|
251
276
|
}
|
package/pages/positionPage.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const { query } = require("wix-location-frontend");
|
|
2
2
|
const { getPositionWithMultiRefField } = require('../backend/queries');
|
|
3
3
|
const { COLLECTIONS,JOBS_COLLECTION_FIELDS,CUSTOM_FIELDS_COLLECTION_FIELDS } = require('../backend/collectionConsts');
|
|
4
|
+
const { CAREERS_MULTI_BOXES_PAGE_CONSTS } = require('../backend/careersMultiBoxesPageIds');
|
|
4
5
|
const { items: wixData } = require('@wix/data');
|
|
5
6
|
const { location } = require("@wix/site-location");
|
|
6
7
|
const{isElementExistOnPage} = require('psdev-utils');
|
|
@@ -73,7 +74,7 @@ async function getCategoryValue(customValues) {
|
|
|
73
74
|
const clickedItemData = data.find(
|
|
74
75
|
(item) => item._id === event.context.itemId,
|
|
75
76
|
);
|
|
76
|
-
location.to(clickedItemData[
|
|
77
|
+
location.to(clickedItemData[CAREERS_MULTI_BOXES_PAGE_CONSTS.LINK_JOBS_TITLE] || clickedItemData[CAREERS_MULTI_BOXES_PAGE_CONSTS.LINK_JOBS_REF_ID_SLUG]);
|
|
77
78
|
});
|
|
78
79
|
}
|
|
79
80
|
if(isElementExistOnPage(_$w('#relatedJobsDataset')))
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const { getLatestJobsByValue, getValueFromValueId } = require('./pagesUtils');
|
|
2
2
|
const { location } = require("@wix/site-location");
|
|
3
3
|
const { supportTeamsPageIds,supportTeamsPageSections } = require('../backend/consts');
|
|
4
|
+
const { CAREERS_MULTI_BOXES_PAGE_CONSTS } = require('../backend/careersMultiBoxesPageIds');
|
|
4
5
|
const { getAllRecordsWithoutMultiRef } = require('./pagesUtils');
|
|
5
6
|
|
|
6
7
|
let currentItem;
|
|
@@ -60,7 +61,7 @@ async function handleRecentJobsSection(_$w) {
|
|
|
60
61
|
const clickedItemData = data.find(
|
|
61
62
|
(item) => item._id === event.context.itemId,
|
|
62
63
|
);
|
|
63
|
-
location.to(clickedItemData[
|
|
64
|
+
location.to(clickedItemData[CAREERS_MULTI_BOXES_PAGE_CONSTS.LINK_JOBS_TITLE] || clickedItemData[CAREERS_MULTI_BOXES_PAGE_CONSTS.LINK_JOBS_REF_ID_SLUG]);
|
|
64
65
|
});
|
|
65
66
|
|
|
66
67
|
_$w(supportTeamsPageIds.RECENT_JOBS_BUTTON).onClick( () => {
|
package/public/filterUtils.js
CHANGED