sr-npm 1.2.18 → 1.2.20
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/.github/workflows/update-sites.yml +1 -1
- package/backend/careersMultiBoxesPageIds.js +16 -0
- package/backend/collectionConsts.js +2 -0
- package/backend/consts.js +9 -15
- package/backend/data.js +24 -20
- package/backend/fetchPositionsFromSRAPI.js +2 -1
- package/package.json +1 -1
- package/pages/careersMultiBoxesPage.js +164 -66
- package/pages/careersPage.js +107 -100
- package/pages/homePage.js +2 -0
- package/pages/pagesUtils.js +14 -5
- package/public/selectors.js +53 -0
- package/tests/multiSearchBoxCareers.spec.js +28 -5
|
@@ -39,6 +39,11 @@ const fieldTitlesInCMS={
|
|
|
39
39
|
"brand": "Brands",
|
|
40
40
|
category: "Category",
|
|
41
41
|
visibility: "Visibility",
|
|
42
|
+
location: "Location",
|
|
43
|
+
employmenttype: "Employment Type",
|
|
44
|
+
contracttype: "Contract Type",
|
|
45
|
+
companysegment: "Company Segment",
|
|
46
|
+
storename: "Store Name",
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
const FiltersIds={
|
|
@@ -52,10 +57,21 @@ const FiltersIds={
|
|
|
52
57
|
Visibility: 'Visibility',
|
|
53
58
|
}
|
|
54
59
|
|
|
60
|
+
const possibleUrlParams=[
|
|
61
|
+
"brand",
|
|
62
|
+
"location",
|
|
63
|
+
"employmenttype",
|
|
64
|
+
"contracttype",
|
|
65
|
+
"visibility",
|
|
66
|
+
"category",
|
|
67
|
+
"companysegment",
|
|
68
|
+
"storename",
|
|
69
|
+
]
|
|
55
70
|
|
|
56
71
|
module.exports = {
|
|
57
72
|
CAREERS_MULTI_BOXES_PAGE_CONSTS,
|
|
58
73
|
FiltersIds,
|
|
59
74
|
fieldTitlesInCMS,
|
|
60
75
|
CATEGORY_CUSTOM_FIELD_ID_IN_CMS,
|
|
76
|
+
possibleUrlParams,
|
|
61
77
|
}
|
|
@@ -31,6 +31,7 @@ const JOBS_COLLECTION_FIELDS = {
|
|
|
31
31
|
MULTI_REF_JOBS_CUSTOM_VALUES: 'multiRefJobsCustomValues',
|
|
32
32
|
EMPLOYMENT_TYPE: 'employmentType',
|
|
33
33
|
RELEASED_DATE: 'releasedDate',
|
|
34
|
+
REF_ID: 'refId',
|
|
34
35
|
}
|
|
35
36
|
const AMOUNT_OF_JOBS_PER_DEPARTMENT_COLLECTION_FIELDS = {
|
|
36
37
|
TITLE: 'title',
|
|
@@ -93,6 +94,7 @@ const COLLECTIONS_FIELDS = {
|
|
|
93
94
|
{key: 'image', type: 'IMAGE' },
|
|
94
95
|
{key:'employmentType', type: 'TEXT'},
|
|
95
96
|
{key:'releasedDate', type: 'TEXT'},
|
|
97
|
+
{key:'refId', type: 'TEXT'},
|
|
96
98
|
],
|
|
97
99
|
TEMPLATE_TYPE: [
|
|
98
100
|
{key:'templateType', type: 'TEXT'},
|
package/backend/consts.js
CHANGED
|
@@ -72,9 +72,6 @@ const TASKS = {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
75
|
const TASK_TYPE = {
|
|
79
76
|
SCHEDULED: 'scheduled',
|
|
80
77
|
EVENT: 'event',
|
|
@@ -92,10 +89,6 @@ const supportTeamsPageIds={
|
|
|
92
89
|
VIDEO_TITLE: "#videoTitle",
|
|
93
90
|
VIDEO_PLAYER: "#videoPlayer",
|
|
94
91
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
92
|
RECENTLEY_ADDED_JOBS_ITEM: "#recentleyAddedJobsItem",
|
|
100
93
|
JOB_LOCATION: "#jobLocation",
|
|
101
94
|
JOB_TITLE: "#jobTitle",
|
|
@@ -137,12 +130,13 @@ const supportTeamsPageSections={
|
|
|
137
130
|
VIDEO: "video",
|
|
138
131
|
}
|
|
139
132
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
133
|
+
|
|
134
|
+
module.exports = {
|
|
135
|
+
TASKS_NAMES,
|
|
136
|
+
TASK_TYPE,
|
|
137
|
+
TASKS,
|
|
138
|
+
QUERY_MAX_LIMIT,
|
|
139
|
+
supportTeamsPageIds,
|
|
140
|
+
LINKS,
|
|
141
|
+
supportTeamsPageSections,
|
|
148
142
|
};
|
package/backend/data.js
CHANGED
|
@@ -6,8 +6,6 @@ const { chunkedBulkOperation, countJobsPerGivenField, fillCityLocationAndLocatio
|
|
|
6
6
|
const { getAllPositions } = require('./queries');
|
|
7
7
|
const { retrieveSecretVal, getTokenFromCMS ,getApiKeys} = require('./secretsData');
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
9
|
let customValuesToJobs = {}
|
|
12
10
|
let locationToJobs = {}
|
|
13
11
|
let siteconfig;
|
|
@@ -21,6 +19,7 @@ async function getSiteConfig() {
|
|
|
21
19
|
const queryresult = await wixData.query(COLLECTIONS.SITE_CONFIGS).find();
|
|
22
20
|
siteconfig = queryresult.items[0];
|
|
23
21
|
}
|
|
22
|
+
|
|
24
23
|
function validatePosition(position) {
|
|
25
24
|
if (!position.id) {
|
|
26
25
|
throw new Error('Position id is required');
|
|
@@ -40,22 +39,22 @@ function validatePosition(position) {
|
|
|
40
39
|
async function filterBasedOnBrand(positions) {
|
|
41
40
|
try{
|
|
42
41
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
} catch (error) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
42
|
+
const desiredBrand = await getTokenFromCMS(TOKEN_NAME.DESIRED_BRAND);
|
|
43
|
+
validateSingleDesiredBrand(desiredBrand);
|
|
44
|
+
console.log("filtering positions based on brand: ", desiredBrand);\
|
|
45
|
+
return positions.content.filter(position => {
|
|
46
|
+
const brand = getBrand(position.customField);
|
|
47
|
+
if (!brand) return false;
|
|
48
|
+
return brand === desiredBrand;
|
|
49
|
+
});
|
|
50
|
+
} catch (error) {
|
|
51
|
+
if(error.message==="[getTokenFromCMS], No desiredBrand found")
|
|
52
|
+
{
|
|
53
|
+
console.log("no desiredBrand found, fetching all positions")
|
|
54
|
+
return positions.content;
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
56
57
|
}
|
|
57
|
-
throw error;
|
|
58
|
-
}
|
|
59
58
|
}
|
|
60
59
|
|
|
61
60
|
function validateSingleDesiredBrand(desiredBrand) {
|
|
@@ -63,11 +62,12 @@ function validateSingleDesiredBrand(desiredBrand) {
|
|
|
63
62
|
throw new Error("Desired brand must be a single brand");
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
|
-
function getLocation(position,basicJob) {
|
|
67
65
|
|
|
66
|
+
function getLocation(position,basicJob) {
|
|
68
67
|
locationToJobs[basicJob.cityText] ? locationToJobs[basicJob.cityText].push(position.id) : locationToJobs[basicJob.cityText]=[position.id]
|
|
69
68
|
|
|
70
69
|
}
|
|
70
|
+
|
|
71
71
|
function getVisibility(position,customFieldsValues) {
|
|
72
72
|
if (!customFieldsValues["Visibility"]) {
|
|
73
73
|
customFieldsValues["Visibility"] = {};
|
|
@@ -99,8 +99,8 @@ function getCustomFieldsAndValuesFromPosition(position,customFieldsLabels,custom
|
|
|
99
99
|
if (!customFieldsValues[fieldId]) {
|
|
100
100
|
customFieldsValues[fieldId] = {};
|
|
101
101
|
}
|
|
102
|
+
|
|
102
103
|
customFieldsValues[fieldId][valueId] = valueLabel;
|
|
103
|
-
|
|
104
104
|
customValuesToJobs[valueId] ? customValuesToJobs[valueId].add(position.id) : customValuesToJobs[valueId]=new Set([position.id])
|
|
105
105
|
}
|
|
106
106
|
}
|
|
@@ -140,7 +140,8 @@ async function saveJobsDataToCMS() {
|
|
|
140
140
|
brand: siteconfig.disableMultiBrand==="false" ? getBrand(position.customField) : '',
|
|
141
141
|
jobDescription: null, // Will be filled later
|
|
142
142
|
employmentType: position.typeOfEmployment.label,
|
|
143
|
-
releasedDate: position.releasedDate
|
|
143
|
+
releasedDate: position.releasedDate,
|
|
144
|
+
refId: position.refNumber
|
|
144
145
|
};
|
|
145
146
|
|
|
146
147
|
getCustomFieldsAndValuesFromPosition(position,customFieldsLabels,customFieldsValues);
|
|
@@ -485,11 +486,14 @@ async function syncJobsFast() {
|
|
|
485
486
|
await createCollections();
|
|
486
487
|
await clearCollections();
|
|
487
488
|
await fillSecretManagerMirror();
|
|
489
|
+
|
|
488
490
|
console.log("saving jobs data to CMS");
|
|
489
491
|
await saveJobsDataToCMS();
|
|
490
492
|
console.log("saved jobs data to CMS successfully");
|
|
493
|
+
|
|
491
494
|
console.log("saving jobs descriptions and location apply url to CMS");
|
|
492
495
|
await saveJobsDescriptionsAndLocationApplyUrlReferencesToCMS();
|
|
496
|
+
|
|
493
497
|
console.log("saved jobs descriptions and location apply url to CMS successfully");
|
|
494
498
|
await aggregateJobs();
|
|
495
499
|
await referenceJobs();
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
const { fetch } = require('wix-fetch');
|
|
2
2
|
const { TEMPLATE_TYPE,TOKEN_NAME } = require('./collectionConsts');
|
|
3
3
|
const { getTokenFromCMS,getApiKeys } = require('./secretsData');
|
|
4
|
+
|
|
4
5
|
async function makeSmartRecruitersRequest(path,templateType) {
|
|
5
|
-
|
|
6
|
+
const baseUrl = 'https://api.smartrecruiters.com';
|
|
6
7
|
const fullUrl = `${baseUrl}${path}`;
|
|
7
8
|
|
|
8
9
|
try {
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
const { COLLECTIONS,CUSTOM_VALUES_COLLECTION_FIELDS,JOBS_COLLECTION_FIELDS } = require('../backend/collectionConsts');
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
const { queryParams,onChange} = require('wix-location-frontend');
|
|
3
4
|
const { location } = require("@wix/site-location");
|
|
4
|
-
const {CAREERS_MULTI_BOXES_PAGE_CONSTS,FiltersIds,fieldTitlesInCMS} = require('../backend/careersMultiBoxesPageIds');
|
|
5
|
+
const {CAREERS_MULTI_BOXES_PAGE_CONSTS,FiltersIds,fieldTitlesInCMS,possibleUrlParams} = require('../backend/careersMultiBoxesPageIds');
|
|
5
6
|
const { groupValuesByField, debounce, getAllRecords, getFieldById, getFieldByTitle,getCorrectOption,getOptionIndexFromCheckBox,loadPrimarySearchRepeater,bindPrimarySearch,primarySearch } = require('./pagesUtils');
|
|
6
7
|
|
|
7
8
|
let dontUpdateThisCheckBox;
|
|
@@ -22,25 +23,38 @@ const pagination = {
|
|
|
22
23
|
currentPage: 1,
|
|
23
24
|
};
|
|
24
25
|
async function careersMultiBoxesPageOnReady(_$w,urlParams) {
|
|
26
|
+
//to handle back and forth , url changes
|
|
27
|
+
onChange(async ()=>{
|
|
28
|
+
await handleBackAndForth(_$w);
|
|
29
|
+
});
|
|
25
30
|
bindSearchInput(_$w);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
loadPaginationButtons(_$w);
|
|
32
|
+
await loadData(_$w);
|
|
33
|
+
loadJobsRepeater(_$w);
|
|
34
|
+
loadPrimarySearchRepeater(_$w);
|
|
35
|
+
await loadFilters(_$w);
|
|
36
|
+
loadSelectedValuesRepeater(_$w);
|
|
37
|
+
|
|
38
|
+
if (await window.formFactor() === "Mobile") {
|
|
39
|
+
handleFilterInMobile(_$w);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
await handleUrlParams(_$w, urlParams);
|
|
43
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CLEAR_ALL_BUTTON_ID).onClick(async () => {
|
|
44
|
+
await clearAll(_$w);
|
|
45
|
+
});
|
|
31
46
|
|
|
32
|
-
|
|
33
|
-
// loadSelectedValuesRepeater(_$w);
|
|
47
|
+
}
|
|
34
48
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
async function handleBackAndForth(_$w){
|
|
50
|
+
const newQueryParams=await location.query();
|
|
51
|
+
console.log("newQueryParams: ", newQueryParams);
|
|
52
|
+
await clearAll(_$w,true);
|
|
53
|
+
await handleUrlParams(_$w,newQueryParams);
|
|
54
|
+
|
|
41
55
|
}
|
|
42
56
|
|
|
43
|
-
async function clearAll(_$w) {
|
|
57
|
+
async function clearAll(_$w,urlOnChange=false) {
|
|
44
58
|
if(selectedByField.size>0 || _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.SECONDARY_SEARCH_INPUT).value || _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value) {
|
|
45
59
|
for(const field of allfields) {
|
|
46
60
|
_$w(`#${FiltersIds[field.title]}CheckBox`).selectedIndices = [];
|
|
@@ -51,34 +65,76 @@ async function clearAll(_$w) {
|
|
|
51
65
|
secondarySearchIsFilled=false;
|
|
52
66
|
currentJobs=alljobs;
|
|
53
67
|
keywordAllJobs=undefined;
|
|
68
|
+
if(!urlOnChange) {
|
|
69
|
+
queryParams.remove(possibleUrlParams.concat(["keyword", "page"]));
|
|
70
|
+
}
|
|
54
71
|
await updateJobsAndNumbersAndFilters(_$w,true);
|
|
55
72
|
}
|
|
56
73
|
}
|
|
57
74
|
|
|
75
|
+
function handleFilterInMobile(_$w) {
|
|
76
|
+
const searchResultsSelectors = [
|
|
77
|
+
CAREERS_PAGE_SELECTORS.RESULT_BOX,
|
|
78
|
+
CAREERS_PAGE_SELECTORS.PAGINATION_BTN,
|
|
79
|
+
CAREERS_PAGE_SELECTORS.HEAD_BTNS,
|
|
80
|
+
CAREERS_PAGE_SELECTORS.SELECTED_VALUES_REPEATER,
|
|
81
|
+
CAREERS_PAGE_SELECTORS.BUTTOM_TXT,
|
|
82
|
+
CAREERS_PAGE_SELECTORS.SECTION_24,
|
|
83
|
+
CAREERS_PAGE_SELECTORS.SECTION_3,
|
|
84
|
+
CAREERS_PAGE_SELECTORS.LINE_3,
|
|
85
|
+
CAREERS_PAGE_SELECTORS.FILTER_ICON];
|
|
86
|
+
|
|
87
|
+
_$w(CAREERS_PAGE_SELECTORS.FILTER_ICON).onClick(()=>{
|
|
88
|
+
_$w(CAREERS_PAGE_SELECTORS.FILTER_BOX).expand();
|
|
89
|
+
searchResultsSelectors.forEach(selector => {
|
|
90
|
+
_$w(selector).collapse();
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const exitFilterBox = () => {
|
|
95
|
+
_$w(CAREERS_PAGE_SELECTORS.FILTER_BOX).collapse();
|
|
96
|
+
searchResultsSelectors.forEach(selector => {
|
|
97
|
+
_$w(selector).expand();
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
_$w(CAREERS_PAGE_SELECTORS.EXIT_BUTTON).onClick(()=>{
|
|
102
|
+
exitFilterBox();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
_$w(CAREERS_PAGE_SELECTORS.REFINE_SEARCH_BUTTON).onClick(()=>{
|
|
106
|
+
exitFilterBox();
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
58
110
|
|
|
59
111
|
async function handleUrlParams(_$w,urlParams) {
|
|
60
112
|
try {
|
|
61
113
|
let applyFiltering=false;
|
|
62
|
-
|
|
114
|
+
let currentApplyFilterFlag=false;
|
|
115
|
+
//apply this first to determine all jobs
|
|
63
116
|
if(urlParams.keyword) {
|
|
64
117
|
applyFiltering=await primarySearch(_$w, decodeURIComponent(urlParams.keyword), alljobs);
|
|
65
118
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value=decodeURIComponent(urlParams.keyword);
|
|
66
119
|
currentJobs=_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOB_RESULTS_REPEATER).data;
|
|
67
120
|
keywordAllJobs=_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOB_RESULTS_REPEATER).data;
|
|
68
121
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if(urlParams
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
122
|
+
|
|
123
|
+
for (const url of possibleUrlParams)
|
|
124
|
+
{
|
|
125
|
+
if(urlParams[url])
|
|
126
|
+
{
|
|
127
|
+
currentApplyFilterFlag=await handleParams(_$w,url,urlParams[url])
|
|
128
|
+
if(currentApplyFilterFlag) {
|
|
129
|
+
applyFiltering=true;
|
|
130
|
+
}
|
|
77
131
|
}
|
|
78
|
-
|
|
132
|
+
currentApplyFilterFlag=false;
|
|
133
|
+
}
|
|
79
134
|
if(applyFiltering || keywordAllJobs) {
|
|
80
135
|
await updateJobsAndNumbersAndFilters(_$w);
|
|
81
136
|
}
|
|
137
|
+
|
|
82
138
|
if(urlParams.page) {
|
|
83
139
|
if(Number.isNaN(Number(urlParams.page)) || Number(urlParams.page)<=1 || Number(urlParams.page)>Math.ceil(currentJobs.length/pagination.pageSize)) {
|
|
84
140
|
console.warn("page number is invalid, removing page from url");
|
|
@@ -86,14 +142,14 @@ async function handleUrlParams(_$w,urlParams) {
|
|
|
86
142
|
return;
|
|
87
143
|
}
|
|
88
144
|
pagination.currentPage=Number(urlParams.page);
|
|
89
|
-
let paginationCurrentText=
|
|
145
|
+
//let paginationCurrentText=urlParams.page;
|
|
90
146
|
let startSlicIndex=pagination.pageSize*(pagination.currentPage-1);
|
|
91
147
|
let endSlicIndex=(pagination.pageSize)*(pagination.currentPage);
|
|
92
148
|
if(Number(urlParams.page)==Math.ceil(currentJobs.length/pagination.pageSize)) {
|
|
93
|
-
|
|
149
|
+
// paginationCurrentText=(paginationCurrentText-(pagination.pageSize-(currentJobs.length%pagination.pageSize))).toString();
|
|
94
150
|
endSlicIndex=currentJobs.length;
|
|
95
151
|
}
|
|
96
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationCurrentText).text =
|
|
152
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationCurrentText).text = urlParams.page
|
|
97
153
|
const jobsFirstPage=currentJobs.slice(startSlicIndex,endSlicIndex);
|
|
98
154
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = jobsFirstPage;
|
|
99
155
|
handlePaginationButtons(_$w);
|
|
@@ -103,31 +159,49 @@ async function handleUrlParams(_$w,urlParams) {
|
|
|
103
159
|
}
|
|
104
160
|
}
|
|
105
161
|
|
|
106
|
-
async function handleParams(_$w,param,
|
|
162
|
+
async function handleParams(_$w,param,values) {
|
|
107
163
|
let applyFiltering=false;
|
|
164
|
+
let valuesAsArray = values.split(',')
|
|
165
|
+
valuesAsArray=valuesAsArray.filter(value=>value.trim()!=='');
|
|
166
|
+
|
|
167
|
+
let selectedIndices=[];
|
|
168
|
+
const field=getFieldByTitle(fieldTitlesInCMS[param],allfields);
|
|
169
|
+
|
|
170
|
+
let existing = selectedByField.get(field._id) || [];
|
|
171
|
+
for(const value of valuesAsArray) {
|
|
172
|
+
|
|
108
173
|
const decodedValue = decodeURIComponent(value);
|
|
109
|
-
|
|
174
|
+
|
|
110
175
|
const options=optionsByFieldId.get(field._id);
|
|
111
|
-
|
|
176
|
+
|
|
177
|
+
const option=getCorrectOption(decodedValue,options,param);
|
|
178
|
+
|
|
112
179
|
if(option) {
|
|
113
180
|
const optionIndex=getOptionIndexFromCheckBox(_$w(`#${FiltersIds[field.title]}CheckBox`).options,option.value);
|
|
114
|
-
|
|
115
|
-
|
|
181
|
+
selectedIndices.push(optionIndex);
|
|
182
|
+
existing.push(option.value);
|
|
116
183
|
applyFiltering=true;
|
|
117
184
|
dontUpdateThisCheckBox=field._id;
|
|
118
185
|
}
|
|
119
186
|
else {
|
|
120
187
|
console.warn(`${param} value not found in dropdown options`);
|
|
121
188
|
}
|
|
122
|
-
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
selectedByField.set(field._id, existing);
|
|
192
|
+
_$w(`#${FiltersIds[field.title]}CheckBox`).selectedIndices=selectedIndices;
|
|
193
|
+
|
|
194
|
+
return applyFiltering;
|
|
195
|
+
|
|
123
196
|
}
|
|
124
197
|
|
|
125
198
|
function loadPaginationButtons(_$w) {
|
|
126
199
|
try {
|
|
127
200
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PAGE_BUTTON_NEXT).onClick(async () => {
|
|
128
201
|
let nextPageJobs=currentJobs.slice(pagination.pageSize*pagination.currentPage,pagination.pageSize*(pagination.currentPage+1));
|
|
129
|
-
|
|
202
|
+
|
|
130
203
|
pagination.currentPage++;
|
|
204
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationCurrentText).text = pagination.currentPage.toString();
|
|
131
205
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = nextPageJobs;
|
|
132
206
|
handlePaginationButtons(_$w);
|
|
133
207
|
});
|
|
@@ -135,7 +209,7 @@ async function handleParams(_$w,param,value) {
|
|
|
135
209
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PAGE_BUTTON_PREVIOUS).onClick(async () => {
|
|
136
210
|
let previousPageJobs=currentJobs.slice(pagination.pageSize*(pagination.currentPage-2),pagination.pageSize*(pagination.currentPage-1));
|
|
137
211
|
pagination.currentPage--;
|
|
138
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationCurrentText).text =
|
|
212
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationCurrentText).text = pagination.currentPage.toString();
|
|
139
213
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = previousPageJobs;
|
|
140
214
|
handlePaginationButtons(_$w);
|
|
141
215
|
});
|
|
@@ -150,21 +224,22 @@ async function handleParams(_$w,param,value) {
|
|
|
150
224
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.SELECTED_VALUES_REPEATER_ITEM_LABEL).text = itemData.label || '';
|
|
151
225
|
// Deselect this value from both the selected map and the multibox
|
|
152
226
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.DESELECT_BUTTON_ID).onClick(async () => {
|
|
153
|
-
|
|
154
227
|
const fieldId = itemData.fieldId;
|
|
155
228
|
const valueId = itemData.valueId;
|
|
156
229
|
dontUpdateThisCheckBox=fieldId;
|
|
157
230
|
if (!fieldId || !valueId) return;
|
|
158
|
-
|
|
159
231
|
const existing = selectedByField.get(fieldId) || [];
|
|
160
232
|
const updated = existing.filter(v => v !== valueId);
|
|
233
|
+
const field=getFieldById(fieldId,allfields);
|
|
234
|
+
let fieldTitle=field.title.toLowerCase().replace(' ', '');
|
|
235
|
+
fieldTitle==="brands"? fieldTitle="brand":fieldTitle;
|
|
161
236
|
if (updated.length) {
|
|
162
237
|
selectedByField.set(fieldId, updated);
|
|
238
|
+
queryParams.add({ [fieldTitle] : updated.map(val=>encodeURIComponent(val)).join(',') });
|
|
163
239
|
} else {
|
|
164
240
|
selectedByField.delete(fieldId);
|
|
241
|
+
queryParams.remove([fieldTitle ]);
|
|
165
242
|
}
|
|
166
|
-
|
|
167
|
-
const field=getFieldById(fieldId,allfields);
|
|
168
243
|
const currentVals = _$w(`#${FiltersIds[field.title]}CheckBox`).value || [];
|
|
169
244
|
const nextVals = currentVals.filter(v => v !== valueId);
|
|
170
245
|
_$w(`#${FiltersIds[field.title]}CheckBox`).value = nextVals;
|
|
@@ -212,8 +287,8 @@ async function loadJobsRepeater(_$w) {
|
|
|
212
287
|
|
|
213
288
|
const jobsFirstPage=alljobs.slice(0,pagination.pageSize);
|
|
214
289
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = jobsFirstPage;
|
|
215
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationCurrentText).text =
|
|
216
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationTotalCountText).text = currentJobs.length.toString();
|
|
290
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationCurrentText).text = "1"
|
|
291
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationTotalCountText).text = Math.ceil(currentJobs.length/pagination.pageSize).toString();
|
|
217
292
|
updateTotalJobsCountText(_$w);
|
|
218
293
|
handlePaginationButtons(_$w);
|
|
219
294
|
} catch (error) {
|
|
@@ -254,32 +329,41 @@ async function loadJobsRepeater(_$w) {
|
|
|
254
329
|
else{
|
|
255
330
|
originalOptions=value
|
|
256
331
|
}
|
|
257
|
-
|
|
258
332
|
optionsByFieldId.set(key, originalOptions);
|
|
259
333
|
for (const val of allvaluesobjects) {
|
|
260
334
|
counter[val.title]=val.count
|
|
261
335
|
}
|
|
262
|
-
|
|
263
336
|
countsByFieldId.set(key, new Map(originalOptions.map(o => [o.value, counter[o.label]])));
|
|
264
337
|
updateOptionsUI(_$w,field.title, field._id, ''); // no search query
|
|
265
338
|
_$w(`#${FiltersIds[field.title]}CheckBox`).selectedIndices = []; // start empty
|
|
266
339
|
_$w(`#${FiltersIds[field.title]}CheckBox`).onChange(async (ev) => {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
340
|
+
dontUpdateThisCheckBox=field._id;
|
|
341
|
+
const selected = ev.target.value; // array of selected value IDs
|
|
342
|
+
let fieldTitle=field.title.toLowerCase().replace(' ', '');
|
|
343
|
+
fieldTitle==="brands"? fieldTitle="brand":fieldTitle;
|
|
344
|
+
|
|
345
|
+
if (selected && selected.length) {
|
|
346
|
+
selectedByField.set(field._id, selected);
|
|
347
|
+
if(fieldTitle==="brand" || fieldTitle==="storename") {
|
|
348
|
+
//in this case we need the label not valueid
|
|
349
|
+
const valueLabels=getValueFromValueId(selected,value);
|
|
350
|
+
queryParams.add({ [fieldTitle] : valueLabels.map(val=>encodeURIComponent(val)).join(',') });
|
|
351
|
+
}
|
|
352
|
+
else{
|
|
353
|
+
queryParams.add({ [fieldTitle] : selected.map(val=>encodeURIComponent(val)).join(',') });
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
} else {
|
|
357
|
+
selectedByField.delete(field._id);
|
|
358
|
+
queryParams.remove([fieldTitle ]);
|
|
359
|
+
}
|
|
282
360
|
|
|
361
|
+
await updateJobsAndNumbersAndFilters(_$w);
|
|
362
|
+
|
|
363
|
+
});
|
|
364
|
+
const runFilter = debounce(() => {
|
|
365
|
+
const query = (_$w(`#${FiltersIds[field.title]}input`).value || '').toLowerCase().trim();
|
|
366
|
+
updateOptionsUI(_$w, field.title, field._id, query);
|
|
283
367
|
}, 150);
|
|
284
368
|
_$w(`#${FiltersIds[field.title]}input`).onInput(runFilter);
|
|
285
369
|
}
|
|
@@ -290,8 +374,18 @@ async function loadJobsRepeater(_$w) {
|
|
|
290
374
|
}
|
|
291
375
|
}
|
|
292
376
|
|
|
377
|
+
function getValueFromValueId(valueIds,value) {
|
|
378
|
+
let valueLabels=[];
|
|
379
|
+
let currentVal
|
|
380
|
+
for(const valueId of valueIds) {
|
|
381
|
+
currentVal=value.find(val=>val.value===valueId);
|
|
382
|
+
if(currentVal) {
|
|
383
|
+
valueLabels.push(currentVal.label);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
return valueLabels
|
|
387
|
+
}
|
|
293
388
|
|
|
294
|
-
|
|
295
389
|
async function updateJobsAndNumbersAndFilters(_$w,clearAll=false) {
|
|
296
390
|
await applyJobFilters(_$w); // re-query jobs
|
|
297
391
|
await refreshFacetCounts(_$w,clearAll); // recompute and update counts in all lists
|
|
@@ -302,7 +396,6 @@ async function loadJobsRepeater(_$w) {
|
|
|
302
396
|
function updateOptionsUI(_$w,fieldTitle, fieldId, searchQuery,clearAll=false) {
|
|
303
397
|
let base = optionsByFieldId.get(fieldId) || [];
|
|
304
398
|
const countsMap = countsByFieldId.get(fieldId) || new Map();
|
|
305
|
-
|
|
306
399
|
if(dontUpdateThisCheckBox===fieldId && !clearAll)
|
|
307
400
|
{
|
|
308
401
|
dontUpdateThisCheckBox=null;
|
|
@@ -378,12 +471,15 @@ async function loadJobsRepeater(_$w) {
|
|
|
378
471
|
finalFilteredJobs=tempFilteredJobs;
|
|
379
472
|
tempFilteredJobs=[];
|
|
380
473
|
}
|
|
474
|
+
|
|
381
475
|
secondarySearchIsFilled? currentSecondarySearchJobs=finalFilteredJobs:currentJobs=finalFilteredJobs;
|
|
476
|
+
|
|
477
|
+
|
|
382
478
|
let jobsFirstPage=[];
|
|
383
479
|
secondarySearchIsFilled? jobsFirstPage=currentSecondarySearchJobs.slice(0,pagination.pageSize):jobsFirstPage=currentJobs.slice(0,pagination.pageSize);
|
|
384
480
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = jobsFirstPage;
|
|
385
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationCurrentText).text =
|
|
386
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationTotalCountText).text = secondarySearchIsFilled? currentSecondarySearchJobs.length.toString():currentJobs.length.toString();
|
|
481
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationCurrentText).text = "1";
|
|
482
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationTotalCountText).text = secondarySearchIsFilled? Math.ceil(currentSecondarySearchJobs.length/pagination.pageSize).toString():Math.ceil(currentJobs.length/pagination.pageSize).toString();
|
|
387
483
|
if(jobsFirstPage.length===0) {
|
|
388
484
|
await _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_MULTI_STATE_BOX).changeState("noJobs");
|
|
389
485
|
}
|
|
@@ -429,6 +525,7 @@ async function refreshFacetCounts(_$w,clearAll=false) {
|
|
|
429
525
|
|
|
430
526
|
secondarySearchIsFilled? countJobsPerField(currentSecondarySearchJobs):countJobsPerField(currentJobs);
|
|
431
527
|
for(const field of allfields) {
|
|
528
|
+
|
|
432
529
|
const query = (_$w(`#${FiltersIds[field.title]}input`).value || '').toLowerCase().trim();
|
|
433
530
|
clearAll? updateOptionsUI(_$w,field.title, field._id, '',true):updateOptionsUI(_$w,field.title, field._id, query);
|
|
434
531
|
// no search query
|
|
@@ -481,9 +578,10 @@ async function secondarySearch(_$w,query) {
|
|
|
481
578
|
currentSecondarySearchJobs=allsecondarySearchJobs;
|
|
482
579
|
const jobsFirstPage=allsecondarySearchJobs.slice(0,pagination.pageSize);
|
|
483
580
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = jobsFirstPage;
|
|
484
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationCurrentText).text =
|
|
485
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationTotalCountText).text = allsecondarySearchJobs.length.toString();
|
|
581
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationCurrentText).text = "1";
|
|
582
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.paginationTotalCountText).text = Math.ceil(allsecondarySearchJobs.length/pagination.pageSize).toString();
|
|
486
583
|
pagination.currentPage=1;
|
|
584
|
+
|
|
487
585
|
if(jobsFirstPage.length===0) {
|
|
488
586
|
await _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_MULTI_STATE_BOX).changeState("noJobs");
|
|
489
587
|
}
|
package/pages/careersPage.js
CHANGED
|
@@ -5,12 +5,10 @@ const { query,queryParams,onChange} = require("wix-location-frontend");
|
|
|
5
5
|
const { location } = require("@wix/site-location");
|
|
6
6
|
const { COLLECTIONS } = require('../backend/collectionConsts');
|
|
7
7
|
const { careersMultiBoxesPageOnReady } = require('./careersMultiBoxesPage');
|
|
8
|
-
|
|
9
|
-
const {
|
|
10
|
-
debounce,
|
|
11
|
-
getFilter,
|
|
12
|
-
} = require('../public/filterUtils');
|
|
8
|
+
const { debounce, getFilter} = require('../public/filterUtils');
|
|
9
|
+
const { CAREERS_PAGE_SELECTORS, FILTER_FIELDS } = require('../public/selectors');
|
|
13
10
|
const { filterBrokenMarkers } = require('../public/utils');
|
|
11
|
+
|
|
14
12
|
let currentLoadedItems =100;
|
|
15
13
|
const itemsPerPage = 100;
|
|
16
14
|
let allJobs=[]
|
|
@@ -31,6 +29,10 @@ async function careersPageOnReady(_$w,thisObject=null,queryParams=null) {
|
|
|
31
29
|
const queryResult = await wixData.query(COLLECTIONS.SITE_CONFIGS).find();
|
|
32
30
|
siteconfig = queryResult.items[0];
|
|
33
31
|
}
|
|
32
|
+
if(siteconfig===undefined) {
|
|
33
|
+
const queryResult = await wixData.query(COLLECTIONS.SITE_CONFIGS).find();
|
|
34
|
+
siteconfig = queryResult.items[0];
|
|
35
|
+
}
|
|
34
36
|
|
|
35
37
|
if(siteconfig.customFields==="true") {
|
|
36
38
|
await careersMultiBoxesPageOnReady(_$w,queryParams);
|
|
@@ -45,22 +47,25 @@ async function careersPageOnReady(_$w,thisObject=null,queryParams=null) {
|
|
|
45
47
|
queryJobTypeVar=jobType;
|
|
46
48
|
queryBrandVar=brand;
|
|
47
49
|
thisObjectVar=thisObject;
|
|
48
|
-
allJobs=await getAllPositions();
|
|
50
|
+
allJobs = await getAllPositions();
|
|
51
|
+
|
|
49
52
|
activateAutoLoad(_$w);
|
|
50
53
|
await bind(_$w);
|
|
51
54
|
init(_$w);
|
|
52
55
|
await handleBrandDropdown(_$w);
|
|
53
56
|
await handleUrlParams(_$w);
|
|
57
|
+
|
|
54
58
|
}
|
|
55
|
-
}
|
|
56
59
|
|
|
60
|
+
|
|
61
|
+
}
|
|
57
62
|
|
|
58
63
|
function activateAutoLoad(_$w)
|
|
59
64
|
{
|
|
60
|
-
_$w(
|
|
65
|
+
_$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).onReady(() => {
|
|
61
66
|
updateCount(_$w);
|
|
62
|
-
_$w(
|
|
63
|
-
if (currentLoadedItems<_$w(
|
|
67
|
+
_$w(CAREERS_PAGE_SELECTORS.FOOTER).onViewportEnter(() => {
|
|
68
|
+
if (currentLoadedItems<_$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getTotalCount()) {
|
|
64
69
|
loadMoreJobs(_$w);
|
|
65
70
|
}
|
|
66
71
|
else {
|
|
@@ -80,10 +85,12 @@ async function loadMoreJobs(_$w) {
|
|
|
80
85
|
pageParamSet = Number(pageParamSet) + 1;
|
|
81
86
|
}
|
|
82
87
|
if (shouldLoad) {
|
|
83
|
-
_$w(
|
|
88
|
+
_$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).loadMore();
|
|
84
89
|
console.log("loading more jobs");
|
|
90
|
+
|
|
85
91
|
currentLoadedItems = currentLoadedItems + itemsPerPage;
|
|
86
|
-
const data = _$w(
|
|
92
|
+
const data = _$w(CAREERS_PAGE_SELECTORS.POSITIONS_REPEATER).data;
|
|
93
|
+
|
|
87
94
|
console.log("data length is : ", data.length);
|
|
88
95
|
setPageParamInUrl();
|
|
89
96
|
}
|
|
@@ -106,26 +113,26 @@ async function handleUrlParams(_$w) {
|
|
|
106
113
|
if (queryKeyWordVar) {
|
|
107
114
|
await handleKeyWordParam(_$w,queryKeyWordVar);
|
|
108
115
|
}
|
|
109
|
-
if (queryBrandVar && _$w(
|
|
116
|
+
if (queryBrandVar && _$w(CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND).isVisible) { //if it is not visible, ignore it
|
|
110
117
|
await handleBrandParam(_$w,queryBrandVar);
|
|
111
118
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
119
|
+
if (queryPageVar) {
|
|
120
|
+
await handlePageParam(_$w);
|
|
121
|
+
}
|
|
122
|
+
if (queryDepartmentVar) {
|
|
123
|
+
await handleDepartmentParam(_$w,queryDepartmentVar);
|
|
124
|
+
}
|
|
125
|
+
if (queryLocationVar) {
|
|
126
|
+
await handleLocationParam(_$w,queryLocationVar);
|
|
127
|
+
}
|
|
128
|
+
if (queryJobTypeVar) {
|
|
129
|
+
await handleJobTypeParam(_$w,queryJobTypeVar);
|
|
130
|
+
}
|
|
124
131
|
await applyFilters(_$w, true); // Skip URL update since we're handling initial URL params
|
|
125
132
|
}
|
|
126
133
|
|
|
127
134
|
async function handleKeyWordParam(_$w,keyWord) {
|
|
128
|
-
_$w(
|
|
135
|
+
_$w(CAREERS_PAGE_SELECTORS.SEARCH_INPUT).value = keyWord;
|
|
129
136
|
// Use applyFilters to maintain consistency instead of directly setting filter
|
|
130
137
|
}
|
|
131
138
|
|
|
@@ -145,18 +152,18 @@ async function handlePageParam(_$w) {
|
|
|
145
152
|
//scrolls a bit to load the dataset data
|
|
146
153
|
await window.scrollTo(0, 200,{scrollAnimation:false});
|
|
147
154
|
for (let i = 2; i <= queryPageVar; i++) {
|
|
148
|
-
await _$w(
|
|
155
|
+
await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).loadMore();
|
|
149
156
|
currentLoadedItems=currentLoadedItems+itemsPerPage
|
|
150
157
|
}
|
|
151
158
|
// the timeout is to wait for the repeater to render, then scroll to the last item.
|
|
152
159
|
setTimeout(() => {
|
|
153
|
-
const data = _$w(
|
|
160
|
+
const data = _$w(CAREERS_PAGE_SELECTORS.POSITIONS_REPEATER).data;
|
|
154
161
|
if (data && data.length > 0) {
|
|
155
162
|
//the dataset each time it loads 100 items
|
|
156
163
|
const lastIndex = data.length - itemsPerPage;
|
|
157
|
-
_$w(
|
|
164
|
+
_$w(CAREERS_PAGE_SELECTORS.POSITIONS_REPEATER).forEachItem(async ($item, itemData, index) => {
|
|
158
165
|
if (index === lastIndex) {
|
|
159
|
-
await $item(
|
|
166
|
+
await $item(CAREERS_PAGE_SELECTORS.POSITION_ITEM).scrollTo();
|
|
160
167
|
console.log("finishied scrolling inside handlePageParam")
|
|
161
168
|
}
|
|
162
169
|
});
|
|
@@ -167,40 +174,40 @@ async function handlePageParam(_$w) {
|
|
|
167
174
|
}
|
|
168
175
|
|
|
169
176
|
async function bind(_$w) {
|
|
170
|
-
await _$w(
|
|
177
|
+
await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).onReady(async () => {
|
|
171
178
|
await updateCount(_$w);
|
|
172
179
|
await updateMapMarkers(_$w);
|
|
173
180
|
|
|
174
181
|
});
|
|
175
182
|
|
|
176
183
|
if (await window.formFactor() === "Mobile") {
|
|
177
|
-
_$w(
|
|
184
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_CONTAINER).collapse();
|
|
178
185
|
}
|
|
179
186
|
|
|
180
187
|
}
|
|
181
188
|
|
|
182
189
|
function init(_$w) {
|
|
183
190
|
const debouncedSearch = debounce(()=>applyFilters(_$w), 400,thisObjectVar);
|
|
184
|
-
_$w(
|
|
185
|
-
_$w(
|
|
186
|
-
if(searchInputBlurredFirstTime && _$w(
|
|
191
|
+
_$w(CAREERS_PAGE_SELECTORS.SEARCH_INPUT).onInput(debouncedSearch);
|
|
192
|
+
_$w(CAREERS_PAGE_SELECTORS.SEARCH_INPUT).onBlur(()=>{
|
|
193
|
+
if(searchInputBlurredFirstTime && _$w(CAREERS_PAGE_SELECTORS.SEARCH_INPUT).value.trim() !== '')
|
|
187
194
|
{
|
|
188
|
-
|
|
189
|
-
|
|
195
|
+
_$w(CAREERS_PAGE_SELECTORS.SEARCH_INPUT).focus();
|
|
196
|
+
searchInputBlurredFirstTime=false;
|
|
190
197
|
}
|
|
191
198
|
});
|
|
192
|
-
_$w(
|
|
199
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_DEPARTMENT, CAREERS_PAGE_SELECTORS.DROPDOWN_LOCATION, CAREERS_PAGE_SELECTORS.DROPDOWN_JOB_TYPE, CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND).onChange(()=>{
|
|
193
200
|
console.log("dropdown onChange is triggered");
|
|
194
201
|
applyFilters(_$w);
|
|
195
202
|
});
|
|
196
|
-
_$w(
|
|
203
|
+
_$w(CAREERS_PAGE_SELECTORS.RESET_FILTERS_BUTTON, CAREERS_PAGE_SELECTORS.CLEAR_SEARCH).onClick(()=>resetFilters(_$w));
|
|
197
204
|
|
|
198
|
-
_$w(
|
|
199
|
-
_$w(
|
|
205
|
+
_$w(CAREERS_PAGE_SELECTORS.OPEN_FILTERS_BUTTON).onClick(()=>{
|
|
206
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_CONTAINER, CAREERS_PAGE_SELECTORS.CLOSE_FILTERS_BUTTON).expand();
|
|
200
207
|
});
|
|
201
208
|
|
|
202
|
-
_$w(
|
|
203
|
-
_$w(
|
|
209
|
+
_$w(CAREERS_PAGE_SELECTORS.CLOSE_FILTERS_BUTTON).onClick(()=>{
|
|
210
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_CONTAINER, CAREERS_PAGE_SELECTORS.CLOSE_FILTERS_BUTTON).collapse();
|
|
204
211
|
});
|
|
205
212
|
|
|
206
213
|
//URL onChange
|
|
@@ -219,7 +226,7 @@ async function handleBackAndForth(_$w){
|
|
|
219
226
|
else{
|
|
220
227
|
queryDepartmentVar=undefined;
|
|
221
228
|
deletedParam=true;
|
|
222
|
-
_$w(
|
|
229
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_DEPARTMENT).value = '';
|
|
223
230
|
}
|
|
224
231
|
if(newQueryParams.location){
|
|
225
232
|
queryLocationVar=newQueryParams.location;
|
|
@@ -227,7 +234,7 @@ async function handleBackAndForth(_$w){
|
|
|
227
234
|
else{
|
|
228
235
|
queryLocationVar=undefined;
|
|
229
236
|
deletedParam=true
|
|
230
|
-
_$w(
|
|
237
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_LOCATION).value = '';
|
|
231
238
|
}
|
|
232
239
|
if(newQueryParams.keyWord){
|
|
233
240
|
queryKeyWordVar=newQueryParams.keyWord;
|
|
@@ -235,7 +242,7 @@ async function handleBackAndForth(_$w){
|
|
|
235
242
|
else{
|
|
236
243
|
queryKeyWordVar=undefined;
|
|
237
244
|
deletedParam=true;
|
|
238
|
-
_$w(
|
|
245
|
+
_$w(CAREERS_PAGE_SELECTORS.SEARCH_INPUT).value = '';
|
|
239
246
|
}
|
|
240
247
|
if(newQueryParams.jobType){
|
|
241
248
|
queryJobTypeVar=newQueryParams.jobType;
|
|
@@ -243,16 +250,16 @@ async function handleBackAndForth(_$w){
|
|
|
243
250
|
else{
|
|
244
251
|
queryJobTypeVar=undefined;
|
|
245
252
|
deletedParam=true;
|
|
246
|
-
_$w(
|
|
253
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_JOB_TYPE).value = '';
|
|
247
254
|
}
|
|
248
|
-
if(_$w(
|
|
255
|
+
if(_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND).isVisible){
|
|
249
256
|
if(newQueryParams.brand){
|
|
250
257
|
queryBrandVar=newQueryParams.brand;
|
|
251
258
|
}
|
|
252
259
|
else{
|
|
253
260
|
queryBrandVar=undefined;
|
|
254
261
|
deletedParam=true;
|
|
255
|
-
_$w(
|
|
262
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND).value = '';
|
|
256
263
|
}
|
|
257
264
|
}
|
|
258
265
|
await handleUrlParams(_$w);
|
|
@@ -262,11 +269,11 @@ async function handleBackAndForth(_$w){
|
|
|
262
269
|
async function applyFilters(_$w, skipUrlUpdate = false) {
|
|
263
270
|
console.log("applying filters");
|
|
264
271
|
const dropdownFiltersMapping = [
|
|
265
|
-
|
|
266
|
-
{ elementId:
|
|
267
|
-
{ elementId:
|
|
268
|
-
{ elementId:
|
|
269
|
-
{ elementId:
|
|
272
|
+
{ elementId: CAREERS_PAGE_SELECTORS.DROPDOWN_DEPARTMENT, field: 'department', value: _$w(CAREERS_PAGE_SELECTORS.DROPDOWN_DEPARTMENT).value },
|
|
273
|
+
{ elementId: CAREERS_PAGE_SELECTORS.DROPDOWN_LOCATION, field: 'cityText', value: _$w(CAREERS_PAGE_SELECTORS.DROPDOWN_LOCATION).value },
|
|
274
|
+
{ elementId: CAREERS_PAGE_SELECTORS.DROPDOWN_JOB_TYPE, field: 'remote', value: _$w(CAREERS_PAGE_SELECTORS.DROPDOWN_JOB_TYPE).value},
|
|
275
|
+
{ elementId: CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND, field: 'brand', value: _$w(CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND).value},
|
|
276
|
+
{ elementId: CAREERS_PAGE_SELECTORS.SEARCH_INPUT, field: 'title', value: _$w(CAREERS_PAGE_SELECTORS.SEARCH_INPUT).value }
|
|
270
277
|
];
|
|
271
278
|
console.log("dropdownFiltersMapping: ", dropdownFiltersMapping);
|
|
272
279
|
|
|
@@ -285,16 +292,16 @@ async function applyFilters(_$w, skipUrlUpdate = false) {
|
|
|
285
292
|
// build filters
|
|
286
293
|
if (filter.value && filter.value.trim() !== '') {
|
|
287
294
|
if (!skipUrlUpdate) {
|
|
288
|
-
if(filter.field ===
|
|
295
|
+
if(filter.field === FILTER_FIELDS.SEARCH){
|
|
289
296
|
queryParams.add({ keyWord: filter.value });
|
|
290
297
|
}
|
|
291
|
-
if(filter.field ===
|
|
298
|
+
if(filter.field === FILTER_FIELDS.DEPARTMENT){
|
|
292
299
|
queryParams.add({ department: encodeURIComponent(filter.value) });
|
|
293
300
|
}
|
|
294
|
-
if(filter.field ===
|
|
301
|
+
if(filter.field === FILTER_FIELDS.LOCATION){
|
|
295
302
|
queryParams.add({ location: encodeURIComponent(filter.value) });
|
|
296
303
|
}
|
|
297
|
-
if(filter.field ===
|
|
304
|
+
if(filter.field === FILTER_FIELDS.JOB_TYPE){
|
|
298
305
|
if(filter.value === 'true'){
|
|
299
306
|
queryParams.add({ jobType: encodeURIComponent("remote") });
|
|
300
307
|
}
|
|
@@ -302,11 +309,11 @@ async function applyFilters(_$w, skipUrlUpdate = false) {
|
|
|
302
309
|
queryParams.add({ jobType: encodeURIComponent("onsite") });
|
|
303
310
|
}
|
|
304
311
|
}
|
|
305
|
-
if(filter.field ===
|
|
312
|
+
if(filter.field === FILTER_FIELDS.BRAND){
|
|
306
313
|
queryParams.add({ brand: encodeURIComponent(filter.value) });
|
|
307
314
|
}
|
|
308
315
|
}
|
|
309
|
-
if(filter.field ===
|
|
316
|
+
if(filter.field === FILTER_FIELDS.JOB_TYPE) {
|
|
310
317
|
value = filter.value === 'true';
|
|
311
318
|
} else {
|
|
312
319
|
value = filter.value;
|
|
@@ -315,22 +322,22 @@ async function applyFilters(_$w, skipUrlUpdate = false) {
|
|
|
315
322
|
}
|
|
316
323
|
else{
|
|
317
324
|
if (!skipUrlUpdate) {
|
|
318
|
-
if(filter.field ===
|
|
325
|
+
if(filter.field === FILTER_FIELDS.SEARCH){
|
|
319
326
|
queryParams.remove(["keyWord" ]);
|
|
320
327
|
}
|
|
321
|
-
if(filter.field ===
|
|
328
|
+
if(filter.field === FILTER_FIELDS.DEPARTMENT){
|
|
322
329
|
console.log("removing department from url")
|
|
323
330
|
queryParams.remove(["department" ]);
|
|
324
331
|
}
|
|
325
|
-
if(filter.field ===
|
|
332
|
+
if(filter.field === FILTER_FIELDS.LOCATION){
|
|
326
333
|
console.log("removing location from url")
|
|
327
334
|
queryParams.remove(["location" ]);
|
|
328
335
|
}
|
|
329
|
-
if(filter.field ===
|
|
336
|
+
if(filter.field === FILTER_FIELDS.JOB_TYPE){
|
|
330
337
|
console.log("removing jobType from url")
|
|
331
338
|
queryParams.remove(["jobType" ]);
|
|
332
339
|
}
|
|
333
|
-
if(filter.field ===
|
|
340
|
+
if(filter.field === FILTER_FIELDS.BRAND){
|
|
334
341
|
console.log("removing brand from url")
|
|
335
342
|
queryParams.remove(["brand" ]);
|
|
336
343
|
}
|
|
@@ -339,32 +346,32 @@ async function applyFilters(_$w, skipUrlUpdate = false) {
|
|
|
339
346
|
});
|
|
340
347
|
|
|
341
348
|
const filter = await getFilter(filters, 'and');
|
|
342
|
-
await _$w(
|
|
343
|
-
await _$w(
|
|
349
|
+
await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).setFilter(filter);
|
|
350
|
+
await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).refresh();
|
|
344
351
|
|
|
345
352
|
const count = await updateCount(_$w);
|
|
346
353
|
console.log("updating map markers");
|
|
347
354
|
await updateMapMarkers(_$w);
|
|
348
355
|
console.log("updating map markers completed");
|
|
349
|
-
count ? _$w(
|
|
356
|
+
count ? _$w(CAREERS_PAGE_SELECTORS.RESULTS_MULTI_STATE).changeState('results') : _$w(CAREERS_PAGE_SELECTORS.RESULTS_MULTI_STATE).changeState('noResults');
|
|
350
357
|
|
|
351
358
|
|
|
352
359
|
// Update reset button state
|
|
353
360
|
const hasActiveFilters = filters.length > 0;
|
|
354
|
-
hasActiveFilters? _$w(
|
|
361
|
+
hasActiveFilters? _$w(CAREERS_PAGE_SELECTORS.RESET_FILTERS_BUTTON).enable() : _$w(CAREERS_PAGE_SELECTORS.RESET_FILTERS_BUTTON).disable();
|
|
355
362
|
|
|
356
363
|
|
|
357
364
|
}
|
|
358
365
|
|
|
359
366
|
async function resetFilters(_$w) {
|
|
360
|
-
_$w(
|
|
367
|
+
_$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 = '';
|
|
361
368
|
|
|
362
|
-
await _$w(
|
|
363
|
-
await _$w(
|
|
369
|
+
await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).setFilter(wixData.filter());
|
|
370
|
+
await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).refresh();
|
|
364
371
|
|
|
365
|
-
_$w(
|
|
372
|
+
_$w(CAREERS_PAGE_SELECTORS.RESULTS_MULTI_STATE).changeState('results');
|
|
366
373
|
|
|
367
|
-
_$w(
|
|
374
|
+
_$w(CAREERS_PAGE_SELECTORS.RESET_FILTERS_BUTTON).disable();
|
|
368
375
|
|
|
369
376
|
queryParams.remove(["keyWord", "department","page","location","jobType","brand"]);
|
|
370
377
|
|
|
@@ -376,7 +383,7 @@ async function resetFilters(_$w) {
|
|
|
376
383
|
}
|
|
377
384
|
|
|
378
385
|
async function updateCount(_$w) {
|
|
379
|
-
const count = await _$w(
|
|
386
|
+
const count = await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getTotalCount();
|
|
380
387
|
_$w('#numOfPositionText').text = `Showing ${count} Open Positions`;
|
|
381
388
|
|
|
382
389
|
return count;
|
|
@@ -387,19 +394,19 @@ async function handleDepartmentParam(_$w,department) {
|
|
|
387
394
|
|
|
388
395
|
|
|
389
396
|
|
|
390
|
-
let dropdownOptions = _$w(
|
|
397
|
+
let dropdownOptions = _$w(CAREERS_PAGE_SELECTORS.DROPDOWN_DEPARTMENT).options;
|
|
391
398
|
console.log("dropdown options:", dropdownOptions);
|
|
392
399
|
const optionsFromCMS=await wixData.query("AmountOfJobsPerDepartment").find();
|
|
393
400
|
//+1 because of the "All" option
|
|
394
401
|
|
|
395
402
|
if(dropdownOptions.length!==optionsFromCMS.items.length+1){
|
|
396
|
-
fixDropdownOptions(
|
|
403
|
+
fixDropdownOptions(CAREERS_PAGE_SELECTORS.DROPDOWN_DEPARTMENT,optionsFromCMS, _$w);
|
|
397
404
|
}
|
|
398
405
|
|
|
399
|
-
if (_$w(
|
|
406
|
+
if (_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_DEPARTMENT).options.find(option => option.value === departmentValue))
|
|
400
407
|
{
|
|
401
408
|
console.log("department value found in dropdown options ",departmentValue);
|
|
402
|
-
_$w(
|
|
409
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_DEPARTMENT).value = departmentValue;
|
|
403
410
|
}
|
|
404
411
|
else{
|
|
405
412
|
console.warn("department value not found in dropdown options");
|
|
@@ -428,18 +435,18 @@ function fixDropdownOptions(dropdown,optionsFromCMS, _$w){
|
|
|
428
435
|
|
|
429
436
|
async function handleLocationParam(_$w,location) {
|
|
430
437
|
const locationValue = decodeURIComponent(location);
|
|
431
|
-
let dropdownOptions = _$w(
|
|
438
|
+
let dropdownOptions = _$w(CAREERS_PAGE_SELECTORS.DROPDOWN_LOCATION).options;
|
|
432
439
|
console.log("location dropdown options:", dropdownOptions);
|
|
433
440
|
const optionsFromCMS=await wixData.query("cities").find();
|
|
434
441
|
//+1 because of the "All" option
|
|
435
442
|
if(dropdownOptions.length!==optionsFromCMS.items.length+1){
|
|
436
|
-
fixDropdownOptions(
|
|
443
|
+
fixDropdownOptions(CAREERS_PAGE_SELECTORS.DROPDOWN_LOCATION,optionsFromCMS, _$w);
|
|
437
444
|
}
|
|
438
445
|
|
|
439
|
-
const option=_$w(
|
|
446
|
+
const option=_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_LOCATION).options.find(option => option.value.toLowerCase() === locationValue.toLowerCase())
|
|
440
447
|
|
|
441
448
|
if(option){
|
|
442
|
-
_$w(
|
|
449
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_LOCATION).value = option.value;
|
|
443
450
|
}
|
|
444
451
|
else{
|
|
445
452
|
console.warn("location value not found in dropdown options");
|
|
@@ -450,15 +457,15 @@ async function handleLocationParam(_$w,location) {
|
|
|
450
457
|
|
|
451
458
|
async function handleBrandParam(_$w,brand){
|
|
452
459
|
const brandValue = decodeURIComponent(brand);
|
|
453
|
-
let dropdownOptions = _$w(
|
|
460
|
+
let dropdownOptions = _$w(CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND).options;
|
|
454
461
|
console.log("brand dropdown options:", dropdownOptions);
|
|
455
462
|
const optionsFromCMS=await wixData.query(COLLECTIONS.BRANDS).find();
|
|
456
463
|
if(dropdownOptions.length!==optionsFromCMS.items.length+1){
|
|
457
|
-
fixDropdownOptions(
|
|
464
|
+
fixDropdownOptions(CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND,optionsFromCMS, _$w);
|
|
458
465
|
}
|
|
459
|
-
const option=_$w(
|
|
466
|
+
const option=_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND).options.find(option => option.value.toLowerCase() === brandValue.toLowerCase())
|
|
460
467
|
if(option){
|
|
461
|
-
_$w(
|
|
468
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND).value = option.value;
|
|
462
469
|
}
|
|
463
470
|
else{
|
|
464
471
|
console.warn("brand value not found in dropdown options");
|
|
@@ -468,7 +475,7 @@ async function handleBrandParam(_$w,brand){
|
|
|
468
475
|
|
|
469
476
|
async function handleJobTypeParam(_$w,jobType) {
|
|
470
477
|
const jobTypeValue = decodeURIComponent(jobType);
|
|
471
|
-
let dropdownOptions = _$w(
|
|
478
|
+
let dropdownOptions = _$w(CAREERS_PAGE_SELECTORS.DROPDOWN_JOB_TYPE).options;
|
|
472
479
|
console.log("jobType dropdown options:", dropdownOptions);
|
|
473
480
|
let option;
|
|
474
481
|
if(jobTypeValue.toLowerCase()==="remote"){
|
|
@@ -478,7 +485,7 @@ async function handleJobTypeParam(_$w,jobType) {
|
|
|
478
485
|
option="false";
|
|
479
486
|
}
|
|
480
487
|
if(option){
|
|
481
|
-
_$w(
|
|
488
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_JOB_TYPE).value = option;
|
|
482
489
|
}
|
|
483
490
|
else{
|
|
484
491
|
console.warn("jobType value not found in dropdown options");
|
|
@@ -487,8 +494,8 @@ async function handleJobTypeParam(_$w,jobType) {
|
|
|
487
494
|
}
|
|
488
495
|
|
|
489
496
|
async function updateMapMarkers(_$w){
|
|
490
|
-
const numOfItems = await _$w(
|
|
491
|
-
const items = await _$w(
|
|
497
|
+
const numOfItems = await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getTotalCount();
|
|
498
|
+
const items = await _$w(CAREERS_PAGE_SELECTORS.JOBS_DATASET).getItems(0, numOfItems);
|
|
492
499
|
const markers = filterBrokenMarkers(items.items).map(item => {
|
|
493
500
|
const location = item.locationAddress.location;
|
|
494
501
|
return {
|
|
@@ -501,21 +508,21 @@ async function updateMapMarkers(_$w){
|
|
|
501
508
|
};
|
|
502
509
|
});
|
|
503
510
|
//@ts-ignore
|
|
504
|
-
_$w(
|
|
511
|
+
_$w(CAREERS_PAGE_SELECTORS.GOOGLE_MAPS).setMarkers(markers);
|
|
505
512
|
|
|
506
513
|
}
|
|
507
514
|
|
|
508
515
|
async function handleBrandDropdown(_$w){
|
|
509
516
|
if(siteconfig.disableMultiBrand==="false"){
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
517
|
+
const brands=await wixData.query(COLLECTIONS.BRANDS).find();
|
|
518
|
+
if(brands.items.length>1){
|
|
519
|
+
console.log("showing brand dropdown");
|
|
520
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND).show();
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
else{
|
|
524
|
+
_$w(CAREERS_PAGE_SELECTORS.DROPDOWN_BRAND).hide();
|
|
514
525
|
}
|
|
515
|
-
}
|
|
516
|
-
else{
|
|
517
|
-
_$w('#dropdownBrand').hide();
|
|
518
|
-
}
|
|
519
526
|
}
|
|
520
527
|
module.exports = {
|
|
521
528
|
careersPageOnReady,
|
package/pages/homePage.js
CHANGED
|
@@ -13,6 +13,8 @@ let searchByCityFlag=false;
|
|
|
13
13
|
let loadedCategories=false;
|
|
14
14
|
async function homePageOnReady(_$w,thisObject=null) {
|
|
15
15
|
|
|
16
|
+
console.log("homePageOnReady version 1.2.20");
|
|
17
|
+
|
|
16
18
|
const queryResult = await wixData.query(COLLECTIONS.SITE_CONFIGS).find();
|
|
17
19
|
const siteconfig = queryResult.items[0];
|
|
18
20
|
if(siteconfig.categorySearch==="true") {
|
package/pages/pagesUtils.js
CHANGED
|
@@ -2,6 +2,7 @@ const { items: wixData } = require('@wix/data');
|
|
|
2
2
|
const { JOBS_COLLECTION_FIELDS,COLLECTIONS } = require('../backend/collectionConsts');
|
|
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
|
+
const { normalizeString } = require('../backend/utils');
|
|
5
6
|
|
|
6
7
|
function groupValuesByField(values, refKey) {
|
|
7
8
|
const map = new Map();
|
|
@@ -62,14 +63,19 @@ function groupValuesByField(values, refKey) {
|
|
|
62
63
|
return allFields.find(field=>field.title===title);
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
function getCorrectOption(value,options) {
|
|
66
|
-
const standardizedValue = value.toLowerCase()
|
|
67
|
-
|
|
66
|
+
function getCorrectOption(value,options,param) {
|
|
67
|
+
const standardizedValue = normalizeString(value.toLowerCase())
|
|
68
|
+
if(param==="employmenttype") //employmenttype have a problematic value
|
|
69
|
+
{
|
|
70
|
+
return options.find(option=>normalizeString(option.value.toLowerCase())===standardizedValue);
|
|
71
|
+
}
|
|
72
|
+
return options.find(option=>normalizeString(option.label.toLowerCase())===standardizedValue);
|
|
68
73
|
}
|
|
69
74
|
|
|
70
75
|
function getOptionIndexFromCheckBox(options,value) {
|
|
76
|
+
const normalizedValue=normalizeString(value.toLowerCase());
|
|
71
77
|
for(let index=0;index<options.length;index++) {
|
|
72
|
-
if(options[index].value===
|
|
78
|
+
if(normalizeString(options[index].value.toLowerCase())===normalizedValue) {
|
|
73
79
|
return index;
|
|
74
80
|
}
|
|
75
81
|
}
|
|
@@ -85,7 +91,10 @@ function loadPrimarySearchRepeater(_$w) {
|
|
|
85
91
|
const data = _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOB_RESULTS_REPEATER).data;
|
|
86
92
|
const clickedItemData = data.find(
|
|
87
93
|
(item) => item._id === event.context.itemId,
|
|
94
|
+
|
|
88
95
|
);
|
|
96
|
+
console.log("clickedItemData: ",clickedItemData);
|
|
97
|
+
console.log("clickedItemData['link-jobs-title']: ",clickedItemData["link-jobs-title"]);
|
|
89
98
|
location.to(clickedItemData["link-jobs-title"]);
|
|
90
99
|
});
|
|
91
100
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CATEGORY_RESULTS_REPEATER).onItemReady(async ($item, itemData) => {
|
|
@@ -109,7 +118,7 @@ function loadPrimarySearchRepeater(_$w) {
|
|
|
109
118
|
const primarySearchDebounced = debounce(async () => {
|
|
110
119
|
const query = (_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).value || '').toLowerCase().trim();
|
|
111
120
|
await primarySearch(_$w, query, alljobs);
|
|
112
|
-
},
|
|
121
|
+
}, 300);
|
|
113
122
|
|
|
114
123
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PRIMARY_SEARCH_INPUT).onInput(async () => {
|
|
115
124
|
await primarySearchDebounced();
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const CAREERS_PAGE_SELECTORS = {
|
|
2
|
+
FILTER_ICON: '#filterIcon',
|
|
3
|
+
FILTER_BOX: '#filterBox',
|
|
4
|
+
RESULT_BOX: '#resultBox',
|
|
5
|
+
PAGINATION_BTN: '#paginationBtn',
|
|
6
|
+
HEAD_BTNS: '#headBtns',
|
|
7
|
+
SELECTED_VALUES_REPEATER: '#selectedValuesReapter',
|
|
8
|
+
BUTTOM_TXT: '#buttomTxt',
|
|
9
|
+
SECTION_24: '#section24',
|
|
10
|
+
SECTION_3: '#section3',
|
|
11
|
+
LINE_3: '#line3',
|
|
12
|
+
EXIT_BUTTON: '#exitBtn',
|
|
13
|
+
REFINE_SEARCH_BUTTON: '#refineSearchBtn',
|
|
14
|
+
|
|
15
|
+
POSITIONS_REPEATER: '#positionsRepeater',
|
|
16
|
+
POSITION_ITEM: '#positionItem',
|
|
17
|
+
SEARCH_INPUT: '#searchInput',
|
|
18
|
+
CLEAR_SEARCH: '#clearSearch',
|
|
19
|
+
|
|
20
|
+
DROPDOWN_BRAND: '#dropdownBrand',
|
|
21
|
+
DROPDOWN_CONTAINER: '#dropdownsContainer',
|
|
22
|
+
DROPDOWN_DEPARTMENT: '#dropdownDepartment',
|
|
23
|
+
DROPDOWN_LOCATION: '#dropdownLocation',
|
|
24
|
+
DROPDOWN_JOB_TYPE: '#dropdownJobType',
|
|
25
|
+
|
|
26
|
+
OPEN_FILTERS_BUTTON: '#openFiltersButton',
|
|
27
|
+
CLOSE_FILTERS_BUTTON: '#closeFiltersButton',
|
|
28
|
+
RESET_FILTERS_BUTTON: '#resetFiltersButton',
|
|
29
|
+
RESET_FILTERS_BUTTON: '#resetFiltersButton',
|
|
30
|
+
|
|
31
|
+
RESULTS_MULTI_STATE: '#resultsMultiState',
|
|
32
|
+
BRANDS_DATASET: '#brandsDataset',
|
|
33
|
+
DEPARTMENTS_DATASET: '#departmentsDataset',
|
|
34
|
+
LOCATIONS_DATASET: '#locationsDataset',
|
|
35
|
+
JOB_TYPES_DATASET: '#jobTypesDataset',
|
|
36
|
+
JOBS_DATASET: '#jobsDataset',
|
|
37
|
+
|
|
38
|
+
GOOGLE_MAPS: '#googleMaps',
|
|
39
|
+
FOOTER: '#footer',
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const FILTER_FIELDS = {
|
|
43
|
+
DEPARTMENT: 'department',
|
|
44
|
+
LOCATION: 'cityText',
|
|
45
|
+
JOB_TYPE: 'remote',
|
|
46
|
+
BRAND: 'brand',
|
|
47
|
+
SEARCH: 'title',
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
module.exports = {
|
|
51
|
+
CAREERS_PAGE_SELECTORS,
|
|
52
|
+
FILTER_FIELDS,
|
|
53
|
+
}
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
jest.mock('wix-location-frontend');
|
|
2
|
+
jest.mock('@wix/site-location', () => ({
|
|
3
|
+
location: {
|
|
4
|
+
to: jest.fn()
|
|
5
|
+
}
|
|
6
|
+
}));
|
|
7
|
+
jest.mock('@wix/data', () => ({
|
|
8
|
+
items: {
|
|
9
|
+
query: jest.fn(() => ({
|
|
10
|
+
eq: jest.fn().mockReturnThis(),
|
|
11
|
+
find: jest.fn().mockResolvedValue({ items: [] }),
|
|
12
|
+
include: jest.fn().mockReturnThis(),
|
|
13
|
+
hasSome: jest.fn().mockReturnThis(),
|
|
14
|
+
ne: jest.fn().mockReturnThis(),
|
|
15
|
+
limit: jest.fn().mockReturnThis()
|
|
16
|
+
})),
|
|
17
|
+
queryReferenced: jest.fn()
|
|
18
|
+
}
|
|
19
|
+
}));
|
|
1
20
|
const rewire = require('rewire');
|
|
2
21
|
const MockJobBuilder = require('./mockJobBuilder');
|
|
3
22
|
const { CAREERS_MULTI_BOXES_PAGE_CONSTS, CATEGORY_CUSTOM_FIELD_ID_IN_CMS } = require('../backend/careersMultiBoxesPageIds');
|
|
@@ -9,7 +28,13 @@ const pagesUtils = rewire('../pages/pagesUtils');
|
|
|
9
28
|
const secondarySearch = careersMultiBoxesPage.__get__('secondarySearch');
|
|
10
29
|
const primarySearch = pagesUtils.__get__('primarySearch');
|
|
11
30
|
const loadCategoriesListPrimarySearch = pagesUtils.__get__('loadCategoriesListPrimarySearch');
|
|
12
|
-
|
|
31
|
+
const mockQueryParams = {
|
|
32
|
+
add: jest.fn(),
|
|
33
|
+
remove: jest.fn()
|
|
34
|
+
};
|
|
35
|
+
const mockOnChange = jest.fn();
|
|
36
|
+
careersMultiBoxesPage.__set__('queryParams', mockQueryParams);
|
|
37
|
+
careersMultiBoxesPage.__set__('onChange', mockOnChange);
|
|
13
38
|
|
|
14
39
|
describe('secondarySearch function tests', () => {
|
|
15
40
|
let mockW;
|
|
@@ -79,13 +104,11 @@ describe('secondarySearch function tests', () => {
|
|
|
79
104
|
mockJobs.push(new MockJobBuilder().withTitle('Frontend Engineer').build());
|
|
80
105
|
|
|
81
106
|
careersMultiBoxesPage.__set__('currentJobs', mockJobs);
|
|
82
|
-
|
|
83
107
|
const result = await secondarySearch(mockW, 'product');
|
|
84
|
-
|
|
85
108
|
expect(result.length).toBe(11);
|
|
86
109
|
expect(mockTotalJobsCountText.text).toContain('11');
|
|
87
|
-
expect(mockPaginationCurrentText.text).toBe('
|
|
88
|
-
expect(mockPaginationTotalCountText.text).toBe('
|
|
110
|
+
expect(mockPaginationCurrentText.text).toBe('1');
|
|
111
|
+
expect(mockPaginationTotalCountText.text).toBe('2');
|
|
89
112
|
expect(mockPageButtonNext.enable).toHaveBeenCalled();
|
|
90
113
|
expect(mockPageButtonPrevious.disable).toHaveBeenCalled();
|
|
91
114
|
});
|