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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sr-npm",
3
- "version": "1.7.689",
3
+ "version": "1.7.691",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -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
- 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
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
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = alljobs;
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
- console.log("currentJobs length: ",currentJobs.length)
369
- _$w(CAREERS_MULTI_BOXES_PAGE_CONSTS.JOBS_REPEATER).data = currentJobs;
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