sr-npm 1.7.689 → 1.7.691
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={
|
|
@@ -24,6 +26,7 @@ const FiltersIds={
|
|
|
24
26
|
Brands: 'Brands',
|
|
25
27
|
}
|
|
26
28
|
|
|
29
|
+
|
|
27
30
|
module.exports = {
|
|
28
31
|
CAREERS_MULTI_BOXES_PAGE_CONSTS,
|
|
29
32
|
FiltersIds,
|
package/package.json
CHANGED
|
@@ -12,37 +12,39 @@ 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
|
+
handlePaginationButtons(_$w);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PAGE_BUTTON_PREVIOUS).onClick(async () => {
|
|
43
|
+
let previousPageJobs=currentJobs.slice(pagination.pageSize*(pagination.currentPage-1),pagination.pageSize*pagination.currentPage);
|
|
44
|
+
pagination.currentPage--;
|
|
45
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = previousPageJobs;
|
|
46
|
+
handlePaginationButtons(_$w);
|
|
47
|
+
});
|
|
46
48
|
}
|
|
47
49
|
|
|
48
50
|
async function loadSelectedValuesRepeater(_$w) {
|
|
@@ -64,29 +66,14 @@ async function loadSelectedValuesRepeater(_$w) {
|
|
|
64
66
|
} else {
|
|
65
67
|
selectedByField.delete(fieldId);
|
|
66
68
|
}
|
|
67
|
-
console.log("deselecting value for this field: ",fieldId)
|
|
68
69
|
|
|
69
70
|
for(const field of allfields) {
|
|
70
71
|
if(field._id===fieldId) {
|
|
71
|
-
console.log("field: ",field)
|
|
72
|
-
console.log("fieldId: ",fieldId)
|
|
73
|
-
console.log("valueId: ",valueId)
|
|
74
72
|
const currentVals = _$w(`#${FiltersIds[field.title]}CheckBox`).value || [];
|
|
75
73
|
const nextVals = currentVals.filter(v => v !== valueId);
|
|
76
74
|
_$w(`#${FiltersIds[field.title]}CheckBox`).value = nextVals;
|
|
77
75
|
}
|
|
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
|
-
|
|
76
|
+
}
|
|
90
77
|
await applyJobFilters(_$w);
|
|
91
78
|
await refreshFacetCounts(_$w);
|
|
92
79
|
await updateSelectedValuesRepeater(_$w);
|
|
@@ -96,13 +83,32 @@ async function loadSelectedValuesRepeater(_$w) {
|
|
|
96
83
|
await updateSelectedValuesRepeater(_$w);
|
|
97
84
|
}
|
|
98
85
|
|
|
86
|
+
async function loadData(_$w) {
|
|
87
|
+
|
|
88
|
+
if(alljobs.length===0) {
|
|
89
|
+
alljobs=await getAllRecords(COLLECTIONS.JOBS);
|
|
90
|
+
currentJobs=alljobs;
|
|
91
|
+
}
|
|
92
|
+
if(Object.keys(valueToJobs).length === 0){
|
|
93
|
+
allvaluesobjects=await getAllRecords(COLLECTIONS.CUSTOM_VALUES);
|
|
94
|
+
for (const value of allvaluesobjects) {
|
|
95
|
+
valueToJobs[value._id]= value.jobIds;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if(allfields.length===0) {
|
|
99
|
+
allfields=await getAllRecords(COLLECTIONS.CUSTOM_FIELDS);
|
|
100
|
+
allfields.push({_id:"Location",title:"Location"});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
99
103
|
async function loadJobs(_$w) {
|
|
100
104
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).onItemReady(($item, itemData) => {
|
|
101
105
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_TITLE).text = itemData.title || '';
|
|
102
106
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_LOCATION).text=itemData.location.fullLocation
|
|
103
107
|
$item(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER_ITEM_EMPLOYMENT_TYPE).text=itemData.employmentType
|
|
104
108
|
});
|
|
105
|
-
|
|
109
|
+
|
|
110
|
+
const jobsFirstPage=alljobs.slice(0,pagination.pageSize);
|
|
111
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = jobsFirstPage;
|
|
106
112
|
updateTotalJobsCountText(_$w);
|
|
107
113
|
}
|
|
108
114
|
|
|
@@ -154,7 +160,6 @@ async function loadJobs(_$w) {
|
|
|
154
160
|
countsByFieldId.set(key, new Map(originalOptions.map(o => [o.value, counter[o.label]])));
|
|
155
161
|
updateOptionsUI(_$w,field.title, field._id, ''); // no search query
|
|
156
162
|
_$w(`#${FiltersIds[field.title]}CheckBox`).selectedIndices = []; // start empty
|
|
157
|
-
//_$w("#CategoryCheckBox").options = valuesByFieldId.get(elemenet);
|
|
158
163
|
_$w(`#${FiltersIds[field.title]}CheckBox`).onChange(async (ev) => {
|
|
159
164
|
dontUpdateThisCheckBox=field._id;
|
|
160
165
|
const selected = ev.target.value; // array of selected value IDs
|
|
@@ -173,96 +178,11 @@ async function loadJobs(_$w) {
|
|
|
173
178
|
const query = (_$w(`#${FiltersIds[field.title]}input`).value || '').toLowerCase().trim();
|
|
174
179
|
updateOptionsUI(_$w, field.title, field._id, query);
|
|
175
180
|
}, 150);
|
|
176
|
-
_$w(`#${FiltersIds[field.title]}input`).onInput(runFilter);
|
|
177
|
-
|
|
178
|
-
|
|
181
|
+
_$w(`#${FiltersIds[field.title]}input`).onInput(runFilter);
|
|
179
182
|
}
|
|
180
183
|
}
|
|
181
184
|
}
|
|
182
|
-
|
|
183
185
|
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
186
|
|
|
267
187
|
} catch (err) {
|
|
268
188
|
console.error('Failed to load filters:', err);
|
|
@@ -365,12 +285,16 @@ async function loadJobs(_$w) {
|
|
|
365
285
|
}
|
|
366
286
|
|
|
367
287
|
currentJobs=finalFilteredJobs;
|
|
368
|
-
|
|
369
|
-
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data =
|
|
370
|
-
|
|
288
|
+
const jobsFirstPage=currentJobs.slice(0,pagination.pageSize);
|
|
289
|
+
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = jobsFirstPage;
|
|
290
|
+
handlePaginationButtons(_$w);
|
|
371
291
|
}
|
|
372
292
|
|
|
373
|
-
|
|
293
|
+
function handlePaginationButtons(_$w)
|
|
294
|
+
{
|
|
295
|
+
pagination.currentPage===1? _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PAGE_BUTTON_PREVIOUS).disable():_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.PAGE_BUTTON_PREVIOUS).enable();
|
|
296
|
+
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();
|
|
297
|
+
}
|
|
374
298
|
async function refreshFacetCounts(_$w,clearAll=false) {
|
|
375
299
|
const fieldIds = Array.from(optionsByFieldId.keys());
|
|
376
300
|
const currentJobsIds=currentJobs.map(job=>job._id);
|
|
@@ -386,7 +310,6 @@ async function refreshFacetCounts(_$w,clearAll=false) {
|
|
|
386
310
|
}
|
|
387
311
|
countsByFieldId.set(fieldId, counter);
|
|
388
312
|
}
|
|
389
|
-
console.log("countsByFieldId after refreshFacetCounts: ",countsByFieldId)
|
|
390
313
|
|
|
391
314
|
for(const field of allfields) {
|
|
392
315
|
const query = (_$w(`#${FiltersIds[field.title]}input`).value || '').toLowerCase().trim();
|
|
@@ -418,7 +341,6 @@ async function refreshFacetCounts(_$w,clearAll=false) {
|
|
|
418
341
|
selectedItems.push({ _id: `${fieldId}:${id}`, label, fieldId, valueId: id });
|
|
419
342
|
}
|
|
420
343
|
}
|
|
421
|
-
console.log("selectedItems inside updateSelectedValuesRepeater: ",selectedItems)
|
|
422
344
|
_$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.SELECTED_VALUES_REPEATER).data = selectedItems;
|
|
423
345
|
}
|
|
424
346
|
|