sr-npm 1.7.688 → 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,73 +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
|
-
await refreshFacetCounts(_$w);
|
|
27
|
+
await refreshFacetCounts(_$w,true);
|
|
43
28
|
await updateSelectedValuesRepeater(_$w);
|
|
44
29
|
updateTotalJobsCountText(_$w);
|
|
45
30
|
});
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// } else {
|
|
62
|
-
// selectedByField.delete(fieldId);
|
|
63
|
-
// }
|
|
64
|
-
|
|
65
|
-
// // Update the checkbox group UI inside the corresponding filter item
|
|
66
|
-
// _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER).forEachItem(($filterItem, filterItemData) => {
|
|
67
|
-
// if (filterItemData._id === fieldId) {
|
|
68
|
-
// const currentVals = $filterItem(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER_ITEM_CHECKBOX).value || [];
|
|
69
|
-
// const nextVals = currentVals.filter(v => v !== valueId);
|
|
70
|
-
// $filterItem(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER_ITEM_CHECKBOX).value = nextVals;
|
|
71
|
-
// }
|
|
72
|
-
// });
|
|
73
|
-
|
|
74
|
-
// await applyJobFilters(_$w,fieldId);
|
|
75
|
-
// await refreshFacetCounts(_$w);
|
|
76
|
-
// await updateSelectedValuesRepeater(_$w);
|
|
77
|
-
// updateTotalJobsCountText(_$w);
|
|
78
|
-
// });
|
|
79
|
-
// });
|
|
80
|
-
// await updateSelectedValuesRepeater(_$w);
|
|
81
|
-
|
|
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
|
+
});
|
|
82
46
|
}
|
|
83
47
|
|
|
84
48
|
async function loadSelectedValuesRepeater(_$w) {
|
|
@@ -100,29 +64,14 @@ async function loadSelectedValuesRepeater(_$w) {
|
|
|
100
64
|
} else {
|
|
101
65
|
selectedByField.delete(fieldId);
|
|
102
66
|
}
|
|
103
|
-
console.log("deselecting value for this field: ",fieldId)
|
|
104
67
|
|
|
105
68
|
for(const field of allfields) {
|
|
106
69
|
if(field._id===fieldId) {
|
|
107
|
-
console.log("field: ",field)
|
|
108
|
-
console.log("fieldId: ",fieldId)
|
|
109
|
-
console.log("valueId: ",valueId)
|
|
110
70
|
const currentVals = _$w(`#${FiltersIds[field.title]}CheckBox`).value || [];
|
|
111
71
|
const nextVals = currentVals.filter(v => v !== valueId);
|
|
112
72
|
_$w(`#${FiltersIds[field.title]}CheckBox`).value = nextVals;
|
|
113
73
|
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
// Update the checkbox group UI inside the corresponding filter item
|
|
118
|
-
// _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER).forEachItem(($filterItem, filterItemData) => {
|
|
119
|
-
// if (filterItemData._id === fieldId) {
|
|
120
|
-
// const currentVals = $filterItem(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER_ITEM_CHECKBOX).value || [];
|
|
121
|
-
// const nextVals = currentVals.filter(v => v !== valueId);
|
|
122
|
-
// $filterItem(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER_ITEM_CHECKBOX).value = nextVals;
|
|
123
|
-
// }
|
|
124
|
-
// });
|
|
125
|
-
|
|
74
|
+
}
|
|
126
75
|
await applyJobFilters(_$w);
|
|
127
76
|
await refreshFacetCounts(_$w);
|
|
128
77
|
await updateSelectedValuesRepeater(_$w);
|
|
@@ -132,13 +81,32 @@ async function loadSelectedValuesRepeater(_$w) {
|
|
|
132
81
|
await updateSelectedValuesRepeater(_$w);
|
|
133
82
|
}
|
|
134
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
|
+
}
|
|
135
101
|
async function loadJobs(_$w) {
|
|
136
102
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).onItemReady(($item, itemData) => {
|
|
137
103
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_TITLE).text = itemData.title || '';
|
|
138
104
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_LOCATION).text=itemData.location.fullLocation
|
|
139
105
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_EMPLOYMENT_TYPE).text=itemData.employmentType
|
|
140
106
|
});
|
|
141
|
-
|
|
107
|
+
|
|
108
|
+
const jobsFirstPage=alljobs.slice(0,pagination.pageSize);
|
|
109
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = jobsFirstPage;
|
|
142
110
|
updateTotalJobsCountText(_$w);
|
|
143
111
|
}
|
|
144
112
|
|
|
@@ -190,7 +158,6 @@ async function loadJobs(_$w) {
|
|
|
190
158
|
countsByFieldId.set(key, new Map(originalOptions.map(o => [o.value, counter[o.label]])));
|
|
191
159
|
updateOptionsUI(_$w,field.title, field._id, ''); // no search query
|
|
192
160
|
_$w(`#${FiltersIds[field.title]}CheckBox`).selectedIndices = []; // start empty
|
|
193
|
-
//_$w("#CategoryCheckBox").options = valuesByFieldId.get(elemenet);
|
|
194
161
|
_$w(`#${FiltersIds[field.title]}CheckBox`).onChange(async (ev) => {
|
|
195
162
|
dontUpdateThisCheckBox=field._id;
|
|
196
163
|
const selected = ev.target.value; // array of selected value IDs
|
|
@@ -209,96 +176,11 @@ async function loadJobs(_$w) {
|
|
|
209
176
|
const query = (_$w(`#${FiltersIds[field.title]}input`).value || '').toLowerCase().trim();
|
|
210
177
|
updateOptionsUI(_$w, field.title, field._id, query);
|
|
211
178
|
}, 150);
|
|
212
|
-
_$w(`#${FiltersIds[field.title]}input`).onInput(runFilter);
|
|
213
|
-
|
|
214
|
-
|
|
179
|
+
_$w(`#${FiltersIds[field.title]}input`).onInput(runFilter);
|
|
215
180
|
}
|
|
216
181
|
}
|
|
217
182
|
}
|
|
218
|
-
|
|
219
183
|
await refreshFacetCounts(_$w);
|
|
220
|
-
// _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER).forEachItem(($item, itemData) => {
|
|
221
|
-
// const query = ($item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).value || '').toLowerCase().trim();
|
|
222
|
-
// updateOptionsUI($item, itemData._id, query);
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
//
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
// 3) Bind each filter repeater item
|
|
234
|
-
// _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER).onItemReady(async ($item, itemData) => {
|
|
235
|
-
// // $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).onClick(()=>{
|
|
236
|
-
// // $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()
|
|
237
|
-
// // })
|
|
238
|
-
// const fieldId = itemData._id;
|
|
239
|
-
|
|
240
|
-
// // Set the filter label (category name)
|
|
241
|
-
// $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).placeholder = itemData.title
|
|
242
|
-
|
|
243
|
-
// // Build CheckboxGroup options for this field
|
|
244
|
-
// const fieldValues = valuesByFieldId.get(fieldId) || [];
|
|
245
|
-
// let originalOptions=[];
|
|
246
|
-
// if(fieldId==="Location") {
|
|
247
|
-
// originalOptions=fieldValues.map(city=>({
|
|
248
|
-
// label: city.city,
|
|
249
|
-
// value: city._id
|
|
250
|
-
// }));
|
|
251
|
-
// }
|
|
252
|
-
// else{
|
|
253
|
-
// originalOptions=fieldValues
|
|
254
|
-
// }
|
|
255
|
-
|
|
256
|
-
// optionsByFieldId.set(fieldId, originalOptions);
|
|
257
|
-
// const counter={}
|
|
258
|
-
|
|
259
|
-
// for (const val of allvaluesobjects) {
|
|
260
|
-
// counter[val.title]=val.totalJobs
|
|
261
|
-
// }
|
|
262
|
-
// for(const city of cities) {
|
|
263
|
-
// counter[city.city]=city.count
|
|
264
|
-
// }
|
|
265
|
-
|
|
266
|
-
// countsByFieldId.set(fieldId, new Map(originalOptions.map(o => [o.value, counter[o.label]])));
|
|
267
|
-
|
|
268
|
-
// // Initialize UI
|
|
269
|
-
// updateOptionsUI($item, fieldId, ''); // no search query
|
|
270
|
-
|
|
271
|
-
// $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER_ITEM_CHECKBOX).selectedIndices = []; // start empty
|
|
272
|
-
// $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER_ITEM_CHECKBOX).onChange(async (ev) => {
|
|
273
|
-
// dontUpdateThisCheckBox=fieldId;
|
|
274
|
-
// const selected = ev.target.value; // array of selected value IDs
|
|
275
|
-
// if (selected && selected.length) {
|
|
276
|
-
// selectedByField.set(fieldId, selected);
|
|
277
|
-
// } else {
|
|
278
|
-
// selectedByField.delete(fieldId);
|
|
279
|
-
// }
|
|
280
|
-
// await applyJobFilters(_$w,fieldId); // re-query jobs
|
|
281
|
-
// await refreshFacetCounts(_$w); // recompute and update counts in all lists
|
|
282
|
-
// await updateSelectedValuesRepeater(_$w);
|
|
283
|
-
// updateTotalJobsCountText(_$w);
|
|
284
|
-
// });
|
|
285
|
-
|
|
286
|
-
// // Input typing -> only filter this list’s visible options (no Jobs query)
|
|
287
|
-
// const runFilter = debounce(() => {
|
|
288
|
-
// const query = ($item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).value || '').toLowerCase().trim();
|
|
289
|
-
// updateOptionsUI($item, fieldId, query);
|
|
290
|
-
// }, 150);
|
|
291
|
-
// $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).onInput(runFilter);
|
|
292
|
-
// });
|
|
293
|
-
|
|
294
|
-
//await refreshFacetCounts(_$w);
|
|
295
|
-
// After counts are ready, re-render all items to show numbers
|
|
296
|
-
// _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER).forEachItem(($item, itemData) => {
|
|
297
|
-
// const query = ($item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).value || '').toLowerCase().trim();
|
|
298
|
-
// updateOptionsUI($item, itemData._id, query);
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
// });
|
|
302
184
|
|
|
303
185
|
} catch (err) {
|
|
304
186
|
console.error('Failed to load filters:', err);
|
|
@@ -329,10 +211,10 @@ async function loadJobs(_$w) {
|
|
|
329
211
|
};
|
|
330
212
|
};
|
|
331
213
|
|
|
332
|
-
function updateOptionsUI(_$w,fieldTitle, fieldId, searchQuery) {
|
|
214
|
+
function updateOptionsUI(_$w,fieldTitle, fieldId, searchQuery,clearAll=false) {
|
|
333
215
|
let base = optionsByFieldId.get(fieldId) || [];
|
|
334
216
|
const countsMap = countsByFieldId.get(fieldId) || new Map();
|
|
335
|
-
if(dontUpdateThisCheckBox===fieldId)
|
|
217
|
+
if(dontUpdateThisCheckBox===fieldId && !clearAll)
|
|
336
218
|
{
|
|
337
219
|
dontUpdateThisCheckBox=null;
|
|
338
220
|
return;
|
|
@@ -359,8 +241,8 @@ async function loadJobs(_$w) {
|
|
|
359
241
|
: withCounts;
|
|
360
242
|
|
|
361
243
|
// Preserve currently selected values that are still visible
|
|
362
|
-
|
|
363
|
-
|
|
244
|
+
let prevSelected=[]
|
|
245
|
+
clearAll? prevSelected=[]:prevSelected= _$w(`#${FiltersIds[fieldTitle]}CheckBox`).value;
|
|
364
246
|
const visibleSet = new Set(filtered.map(o => o.value));
|
|
365
247
|
const preserved = prevSelected.filter(v => visibleSet.has(v));
|
|
366
248
|
|
|
@@ -401,13 +283,17 @@ async function loadJobs(_$w) {
|
|
|
401
283
|
}
|
|
402
284
|
|
|
403
285
|
currentJobs=finalFilteredJobs;
|
|
404
|
-
|
|
405
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data =
|
|
406
|
-
|
|
286
|
+
const jobsFirstPage=currentJobs.slice(0,pagination.pageSize);
|
|
287
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = jobsFirstPage;
|
|
288
|
+
handlePaginationButtons(_$w);
|
|
407
289
|
}
|
|
408
290
|
|
|
409
|
-
|
|
410
|
-
|
|
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
|
+
}
|
|
296
|
+
async function refreshFacetCounts(_$w,clearAll=false) {
|
|
411
297
|
const fieldIds = Array.from(optionsByFieldId.keys());
|
|
412
298
|
const currentJobsIds=currentJobs.map(job=>job._id);
|
|
413
299
|
for (const fieldId of fieldIds) {
|
|
@@ -422,14 +308,11 @@ async function refreshFacetCounts(_$w) {
|
|
|
422
308
|
}
|
|
423
309
|
countsByFieldId.set(fieldId, counter);
|
|
424
310
|
}
|
|
425
|
-
|
|
426
|
-
// _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER).forEachItem(($item, itemData) => {
|
|
427
|
-
// const query = ($item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_LABEL).value || '').toLowerCase().trim();
|
|
428
|
-
// updateOptionsUI($item, itemData._id, query);
|
|
429
|
-
// });
|
|
311
|
+
|
|
430
312
|
for(const field of allfields) {
|
|
431
313
|
const query = (_$w(`#${FiltersIds[field.title]}input`).value || '').toLowerCase().trim();
|
|
432
|
-
updateOptionsUI(_$w,field.title, field._id,
|
|
314
|
+
clearAll? updateOptionsUI(_$w,field.title, field._id, '',true):updateOptionsUI(_$w,field.title, field._id, query);
|
|
315
|
+
// no search query
|
|
433
316
|
}
|
|
434
317
|
}
|
|
435
318
|
|
|
@@ -456,7 +339,6 @@ async function refreshFacetCounts(_$w) {
|
|
|
456
339
|
selectedItems.push({ _id: `${fieldId}:${id}`, label, fieldId, valueId: id });
|
|
457
340
|
}
|
|
458
341
|
}
|
|
459
|
-
console.log("selectedItems inside updateSelectedValuesRepeater: ",selectedItems)
|
|
460
342
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.SELECTED_VALUES_REPEATER).data = selectedItems;
|
|
461
343
|
}
|
|
462
344
|
|