sr-npm 1.7.689 → 1.7.690
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.
|
@@ -12,6 +12,8 @@ const CAREERS_MULTI_BOXES_PAGE_CONSTS={
|
|
|
12
12
|
SELECTED_VALUES_REPEATER_ITEM_LABEL: '#selectedValueLabel',
|
|
13
13
|
DESELECT_BUTTON_ID: '#deselectFilterValueButton',
|
|
14
14
|
CLEAR_ALL_BUTTON_ID: '#clearAllButton',
|
|
15
|
+
PAGE_BUTTON_NEXT: '#nextPageButton',
|
|
16
|
+
PAGE_BUTTON_PREVIOUS: '#previousPageButton',
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
const FiltersIds={
|
|
@@ -23,6 +25,9 @@ const FiltersIds={
|
|
|
23
25
|
"Contract Type": 'contractType',
|
|
24
26
|
Brands: 'Brands',
|
|
25
27
|
}
|
|
28
|
+
const Pageination={
|
|
29
|
+
page
|
|
30
|
+
}
|
|
26
31
|
|
|
27
32
|
module.exports = {
|
|
28
33
|
CAREERS_MULTI_BOXES_PAGE_CONSTS,
|
package/package.json
CHANGED
|
@@ -12,37 +12,37 @@ let alljobs=[] // all jobs in the database
|
|
|
12
12
|
let allvaluesobjects=[] // all values in the database
|
|
13
13
|
let valueToJobs={} // valueId -> array of jobIds
|
|
14
14
|
let currentJobs=[] // current jobs that are displayed in the jobs repeater
|
|
15
|
+
const pagination = {
|
|
16
|
+
pageSize: 10,
|
|
17
|
+
currentPage: 1,
|
|
18
|
+
};
|
|
15
19
|
async function careersMultiBoxesPageOnReady(_$w) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
currentJobs=alljobs;
|
|
19
|
-
}
|
|
20
|
-
if(Object.keys(valueToJobs).length === 0){
|
|
21
|
-
allvaluesobjects=await getAllRecords(COLLECTIONS.CUSTOM_VALUES);
|
|
22
|
-
|
|
23
|
-
for (const value of allvaluesobjects) {
|
|
24
|
-
valueToJobs[value._id]= value.jobIds;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
if(allfields.length===0) {
|
|
28
|
-
allfields=await getAllRecords(COLLECTIONS.CUSTOM_FIELDS);
|
|
29
|
-
allfields.push({_id:"Location",title:"Location"});
|
|
30
|
-
}
|
|
31
|
-
await loadJobs(_$w);
|
|
20
|
+
await loadData(_$w);
|
|
21
|
+
await loadJobs(_$w);
|
|
32
22
|
await loadFilters(_$w);
|
|
33
|
-
//selected values repeater on item ready
|
|
34
23
|
await loadSelectedValuesRepeater(_$w);
|
|
35
|
-
console.log("CLEAR_ALL_BUTTON_ID button is loaded: ",CAREERS_MULTI_BOXES_PAGE_CONSTS.CLEAR_ALL_BUTTON_ID)
|
|
36
24
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.CLEAR_ALL_BUTTON_ID).onClick(async () => {
|
|
37
|
-
console.log("selectedByField before clear: ",selectedByField)
|
|
38
|
-
|
|
39
25
|
selectedByField.clear();
|
|
40
|
-
console.log("selectedByField after clear : ",selectedByField)
|
|
41
26
|
await applyJobFilters(_$w);
|
|
42
27
|
await refreshFacetCounts(_$w,true);
|
|
43
28
|
await updateSelectedValuesRepeater(_$w);
|
|
44
29
|
updateTotalJobsCountText(_$w);
|
|
45
30
|
});
|
|
31
|
+
await loadPaginationButtons(_$w);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function loadPaginationButtons(_$w) {
|
|
35
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PAGE_BUTTON_NEXT).onClick(async () => {
|
|
36
|
+
let nextPageJobs=currentJobs.slice(pagination.pageSize*pagination.currentPage,pagination.pageSize*(pagination.currentPage+1));
|
|
37
|
+
pagination.currentPage++;
|
|
38
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = nextPageJobs;
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PAGE_BUTTON_PREVIOUS).onClick(async () => {
|
|
42
|
+
let previousPageJobs=currentJobs.slice(pagination.pageSize*(pagination.currentPage-1),pagination.pageSize*pagination.currentPage);
|
|
43
|
+
pagination.currentPage--;
|
|
44
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = previousPageJobs;
|
|
45
|
+
});
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
async function loadSelectedValuesRepeater(_$w) {
|
|
@@ -64,29 +64,14 @@ async function loadSelectedValuesRepeater(_$w) {
|
|
|
64
64
|
} else {
|
|
65
65
|
selectedByField.delete(fieldId);
|
|
66
66
|
}
|
|
67
|
-
console.log("deselecting value for this field: ",fieldId)
|
|
68
67
|
|
|
69
68
|
for(const field of allfields) {
|
|
70
69
|
if(field._id===fieldId) {
|
|
71
|
-
console.log("field: ",field)
|
|
72
|
-
console.log("fieldId: ",fieldId)
|
|
73
|
-
console.log("valueId: ",valueId)
|
|
74
70
|
const currentVals = _$w(`#${FiltersIds[field.title]}CheckBox`).value || [];
|
|
75
71
|
const nextVals = currentVals.filter(v => v !== valueId);
|
|
76
72
|
_$w(`#${FiltersIds[field.title]}CheckBox`).value = nextVals;
|
|
77
73
|
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// Update the checkbox group UI inside the corresponding filter item
|
|
82
|
-
// _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER).forEachItem(($filterItem, filterItemData) => {
|
|
83
|
-
// if (filterItemData._id === fieldId) {
|
|
84
|
-
// const currentVals = $filterItem(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER_ITEM_CHECKBOX).value || [];
|
|
85
|
-
// const nextVals = currentVals.filter(v => v !== valueId);
|
|
86
|
-
// $filterItem(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER_ITEM_CHECKBOX).value = nextVals;
|
|
87
|
-
// }
|
|
88
|
-
// });
|
|
89
|
-
|
|
74
|
+
}
|
|
90
75
|
await applyJobFilters(_$w);
|
|
91
76
|
await refreshFacetCounts(_$w);
|
|
92
77
|
await updateSelectedValuesRepeater(_$w);
|
|
@@ -96,13 +81,32 @@ async function loadSelectedValuesRepeater(_$w) {
|
|
|
96
81
|
await updateSelectedValuesRepeater(_$w);
|
|
97
82
|
}
|
|
98
83
|
|
|
84
|
+
async function loadData(_$w) {
|
|
85
|
+
|
|
86
|
+
if(alljobs.length===0) {
|
|
87
|
+
alljobs=await getAllRecords(COLLECTIONS.JOBS);
|
|
88
|
+
currentJobs=alljobs;
|
|
89
|
+
}
|
|
90
|
+
if(Object.keys(valueToJobs).length === 0){
|
|
91
|
+
allvaluesobjects=await getAllRecords(COLLECTIONS.CUSTOM_VALUES);
|
|
92
|
+
for (const value of allvaluesobjects) {
|
|
93
|
+
valueToJobs[value._id]= value.jobIds;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if(allfields.length===0) {
|
|
97
|
+
allfields=await getAllRecords(COLLECTIONS.CUSTOM_FIELDS);
|
|
98
|
+
allfields.push({_id:"Location",title:"Location"});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
99
101
|
async function loadJobs(_$w) {
|
|
100
102
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).onItemReady(($item, itemData) => {
|
|
101
103
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_TITLE).text = itemData.title || '';
|
|
102
104
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_LOCATION).text=itemData.location.fullLocation
|
|
103
105
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_EMPLOYMENT_TYPE).text=itemData.employmentType
|
|
104
106
|
});
|
|
105
|
-
|
|
107
|
+
|
|
108
|
+
const jobsFirstPage=alljobs.slice(0,pagination.pageSize);
|
|
109
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = jobsFirstPage;
|
|
106
110
|
updateTotalJobsCountText(_$w);
|
|
107
111
|
}
|
|
108
112
|
|
|
@@ -154,7 +158,6 @@ async function loadJobs(_$w) {
|
|
|
154
158
|
countsByFieldId.set(key, new Map(originalOptions.map(o => [o.value, counter[o.label]])));
|
|
155
159
|
updateOptionsUI(_$w,field.title, field._id, ''); // no search query
|
|
156
160
|
_$w(`#${FiltersIds[field.title]}CheckBox`).selectedIndices = []; // start empty
|
|
157
|
-
//_$w("#CategoryCheckBox").options = valuesByFieldId.get(elemenet);
|
|
158
161
|
_$w(`#${FiltersIds[field.title]}CheckBox`).onChange(async (ev) => {
|
|
159
162
|
dontUpdateThisCheckBox=field._id;
|
|
160
163
|
const selected = ev.target.value; // array of selected value IDs
|
|
@@ -173,96 +176,11 @@ async function loadJobs(_$w) {
|
|
|
173
176
|
const query = (_$w(`#${FiltersIds[field.title]}input`).value || '').toLowerCase().trim();
|
|
174
177
|
updateOptionsUI(_$w, field.title, field._id, query);
|
|
175
178
|
}, 150);
|
|
176
|
-
_$w(`#${FiltersIds[field.title]}input`).onInput(runFilter);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
+
_$w(`#${FiltersIds[field.title]}input`).onInput(runFilter);
|
|
179
180
|
}
|
|
180
181
|
}
|
|
181
182
|
}
|
|
182
|
-
|
|
183
183
|
await refreshFacetCounts(_$w);
|
|
184
|
-
// _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER).forEachItem(($item, itemData) => {
|
|
185
|
-
// const query = ($item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).value || '').toLowerCase().trim();
|
|
186
|
-
// updateOptionsUI($item, itemData._id, query);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
//
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
// 3) Bind each filter repeater item
|
|
198
|
-
// _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER).onItemReady(async ($item, itemData) => {
|
|
199
|
-
// // $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).onClick(()=>{
|
|
200
|
-
// // $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_CHECKBOX_CONTAINER).collapsed ? $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_CHECKBOX_CONTAINER).expand() : $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_CHECKBOX_CONTAINER).collapse()
|
|
201
|
-
// // })
|
|
202
|
-
// const fieldId = itemData._id;
|
|
203
|
-
|
|
204
|
-
// // Set the filter label (category name)
|
|
205
|
-
// $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).placeholder = itemData.title
|
|
206
|
-
|
|
207
|
-
// // Build CheckboxGroup options for this field
|
|
208
|
-
// const fieldValues = valuesByFieldId.get(fieldId) || [];
|
|
209
|
-
// let originalOptions=[];
|
|
210
|
-
// if(fieldId==="Location") {
|
|
211
|
-
// originalOptions=fieldValues.map(city=>({
|
|
212
|
-
// label: city.city,
|
|
213
|
-
// value: city._id
|
|
214
|
-
// }));
|
|
215
|
-
// }
|
|
216
|
-
// else{
|
|
217
|
-
// originalOptions=fieldValues
|
|
218
|
-
// }
|
|
219
|
-
|
|
220
|
-
// optionsByFieldId.set(fieldId, originalOptions);
|
|
221
|
-
// const counter={}
|
|
222
|
-
|
|
223
|
-
// for (const val of allvaluesobjects) {
|
|
224
|
-
// counter[val.title]=val.totalJobs
|
|
225
|
-
// }
|
|
226
|
-
// for(const city of cities) {
|
|
227
|
-
// counter[city.city]=city.count
|
|
228
|
-
// }
|
|
229
|
-
|
|
230
|
-
// countsByFieldId.set(fieldId, new Map(originalOptions.map(o => [o.value, counter[o.label]])));
|
|
231
|
-
|
|
232
|
-
// // Initialize UI
|
|
233
|
-
// updateOptionsUI($item, fieldId, ''); // no search query
|
|
234
|
-
|
|
235
|
-
// $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER_ITEM_CHECKBOX).selectedIndices = []; // start empty
|
|
236
|
-
// $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER_ITEM_CHECKBOX).onChange(async (ev) => {
|
|
237
|
-
// dontUpdateThisCheckBox=fieldId;
|
|
238
|
-
// const selected = ev.target.value; // array of selected value IDs
|
|
239
|
-
// if (selected && selected.length) {
|
|
240
|
-
// selectedByField.set(fieldId, selected);
|
|
241
|
-
// } else {
|
|
242
|
-
// selectedByField.delete(fieldId);
|
|
243
|
-
// }
|
|
244
|
-
// await applyJobFilters(_$w,fieldId); // re-query jobs
|
|
245
|
-
// await refreshFacetCounts(_$w); // recompute and update counts in all lists
|
|
246
|
-
// await updateSelectedValuesRepeater(_$w);
|
|
247
|
-
// updateTotalJobsCountText(_$w);
|
|
248
|
-
// });
|
|
249
|
-
|
|
250
|
-
// // Input typing -> only filter this list’s visible options (no Jobs query)
|
|
251
|
-
// const runFilter = debounce(() => {
|
|
252
|
-
// const query = ($item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).value || '').toLowerCase().trim();
|
|
253
|
-
// updateOptionsUI($item, fieldId, query);
|
|
254
|
-
// }, 150);
|
|
255
|
-
// $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).onInput(runFilter);
|
|
256
|
-
// });
|
|
257
|
-
|
|
258
|
-
//await refreshFacetCounts(_$w);
|
|
259
|
-
// After counts are ready, re-render all items to show numbers
|
|
260
|
-
// _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER).forEachItem(($item, itemData) => {
|
|
261
|
-
// const query = ($item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).value || '').toLowerCase().trim();
|
|
262
|
-
// updateOptionsUI($item, itemData._id, query);
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
// });
|
|
266
184
|
|
|
267
185
|
} catch (err) {
|
|
268
186
|
console.error('Failed to load filters:', err);
|
|
@@ -365,12 +283,16 @@ async function loadJobs(_$w) {
|
|
|
365
283
|
}
|
|
366
284
|
|
|
367
285
|
currentJobs=finalFilteredJobs;
|
|
368
|
-
|
|
369
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data =
|
|
370
|
-
|
|
286
|
+
const jobsFirstPage=currentJobs.slice(0,pagination.pageSize);
|
|
287
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = jobsFirstPage;
|
|
288
|
+
handlePaginationButtons(_$w);
|
|
371
289
|
}
|
|
372
290
|
|
|
373
|
-
|
|
291
|
+
function handlePaginationButtons(_$w)
|
|
292
|
+
{
|
|
293
|
+
pagination.currentPage===1? _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PAGE_BUTTON_PREVIOUS).disable():_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PAGE_BUTTON_PREVIOUS).enable();
|
|
294
|
+
pagination.currentPage===Math.ceil(currentJobs.length/pagination.pageSize)? _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PAGE_BUTTON_NEXT).disable():_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PAGE_BUTTON_NEXT).enable();
|
|
295
|
+
}
|
|
374
296
|
async function refreshFacetCounts(_$w,clearAll=false) {
|
|
375
297
|
const fieldIds = Array.from(optionsByFieldId.keys());
|
|
376
298
|
const currentJobsIds=currentJobs.map(job=>job._id);
|
|
@@ -386,7 +308,6 @@ async function refreshFacetCounts(_$w,clearAll=false) {
|
|
|
386
308
|
}
|
|
387
309
|
countsByFieldId.set(fieldId, counter);
|
|
388
310
|
}
|
|
389
|
-
console.log("countsByFieldId after refreshFacetCounts: ",countsByFieldId)
|
|
390
311
|
|
|
391
312
|
for(const field of allfields) {
|
|
392
313
|
const query = (_$w(`#${FiltersIds[field.title]}input`).value || '').toLowerCase().trim();
|
|
@@ -418,7 +339,6 @@ async function refreshFacetCounts(_$w,clearAll=false) {
|
|
|
418
339
|
selectedItems.push({ _id: `${fieldId}:${id}`, label, fieldId, valueId: id });
|
|
419
340
|
}
|
|
420
341
|
}
|
|
421
|
-
console.log("selectedItems inside updateSelectedValuesRepeater: ",selectedItems)
|
|
422
342
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.SELECTED_VALUES_REPEATER).data = selectedItems;
|
|
423
343
|
}
|
|
424
344
|
|