Skip to content

Commit 8dd1150

Browse files
committed
Update: Fixing issue with sorting when using CMS Filter AND RenderStatic together
1 parent f265b81 commit 8dd1150

1 file changed

Lines changed: 18 additions & 13 deletions

File tree

Dist/WebflowOnly/CMSFilter.js

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -225,23 +225,29 @@ class CMSFilter {
225225
if (!this.sortOptions) return;
226226

227227
let [key, order] = this.sortOptions.value.split('-');
228+
this.filteredItems = this.filteredItems.filter(item => !item.hasAttribute('wt-renderstatic-element'));
228229
this.filteredItems.sort((a, b) => {
229230
let aValue = a.dataset[key];
230231
let bValue = b.dataset[key];
231232

232-
if (aValue === undefined || bValue === undefined) {
233-
return 0; // If either value is undefined, consider them equal
234-
}
233+
// Handle null or undefined values
234+
if (aValue === undefined || aValue === null) aValue = '';
235+
if (bValue === undefined || bValue === null) bValue = '';
235236

237+
// Handle numeric values
236238
if (!isNaN(aValue) && !isNaN(bValue)) {
237239
aValue = parseFloat(aValue);
238240
bValue = parseFloat(bValue);
239-
} else if (Date.parse(aValue) && Date.parse(bValue)) {
241+
}
242+
// Handle date values
243+
else if (!isNaN(Date.parse(aValue)) && !isNaN(Date.parse(bValue))) {
240244
aValue = new Date(aValue);
241245
bValue = new Date(bValue);
242-
} else {
243-
aValue = aValue ? aValue.toString().toLowerCase() : '';
244-
bValue = bValue ? bValue.toString().toLowerCase() : '';
246+
}
247+
// Handle text values
248+
else {
249+
aValue = aValue.toString().toLowerCase();
250+
bValue = bValue.toString().toLowerCase();
245251
}
246252

247253
if (order === 'asc') {
@@ -254,26 +260,25 @@ class CMSFilter {
254260

255261
ApplyFilters() {
256262
const filters = this.GetFilters();
257-
this.currentPage = 1; //Reset pagination to first page
263+
this.currentPage = 1; // Reset pagination to first page
258264
this.filteredItems = this.allItems.filter(item => {
259265
return Object.keys(filters).every(category => {
260266
const values = [...filters[category]];
261-
if(values.length === 0) return values.length === 0;
267+
if (values.length === 0) return true;
262268

263269
let matchingText = item.querySelector(`[wt-cmsfilter-category="${category}"]`)?.innerText.toLowerCase() || '';
264270
matchingText = matchingText.replace(/(?: |\s)+/gi, ' ');
265271

266272
if (category === '*') {
267-
return values.length === 0 ||
268-
values.some(value => matchingText.includes(value.toLowerCase())) ||
273+
return values.some(value => matchingText.includes(value.toLowerCase())) ||
269274
Object.values(item.dataset).some(dataValue =>
270275
values.some(value => dataValue.toLowerCase().includes(value.toLowerCase()))
271276
);
272277
} else {
273-
return values.length === 0 || values.some(value => {
278+
return values.some(value => {
274279
if (typeof value === 'object') {
275280
const itemValue = parseFloat(item.dataset[category]);
276-
if(value.from !== null && value.to !== null) {
281+
if (value.from !== null && value.to !== null) {
277282
return itemValue >= value.from && itemValue <= value.to;
278283
} else if (value.from !== null && value.to == null) {
279284
return itemValue >= value.from;

0 commit comments

Comments
 (0)