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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sr-npm",
3
- "version": "1.7.688",
3
+ "version": "1.7.690",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -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
- if(alljobs.length===0) {
17
- alljobs=await getAllRecords(COLLECTIONS.JOBS);
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
- // _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.SELECTED_VALUES_REPEATER).onItemReady(($item, itemData) => {
47
- // $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.SELECTED_VALUES_REPEATER_ITEM_LABEL).text = itemData.label || '';
48
-
49
- // // Deselect this value from both the selected map and the multibox
50
- // $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.DESELECT_BUTTON_ID).onClick(async () => {
51
-
52
- // const fieldId = itemData.fieldId;
53
- // const valueId = itemData.valueId;
54
- // dontUpdateThisCheckBox=fieldId;
55
- // if (!fieldId || !valueId) return;
56
-
57
- // const existing = selectedByField.get(fieldId) || [];
58
- // const updated = existing.filter(v => v !== valueId);
59
- // if (updated.length) {
60
- // selectedByField.set(fieldId, updated);
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
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = alljobs;
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
- // const prevSelected = $item(CAREERS_MULTI_BOXES_PAGE_CONSTS.FILTER_REPEATER_ITEM_CHECKBOX).value || [];
363
- const prevSelected = _$w(`#${FiltersIds[fieldTitle]}CheckBox`).value || [];
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
- console.log("currentJobs length: ",currentJobs.length)
405
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = currentJobs;
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
- async function refreshFacetCounts(_$w) {
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
- // // After counts are ready, update all items currently rendered
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, query); // no search query
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