Skip to content

Commit 5f7963e

Browse files
authored
Merge pull request #43 from TheCodeRaccoons/Fix-Issue-41
Fix issue 41
2 parents e4a5f01 + 8dd1150 commit 5f7963e

1 file changed

Lines changed: 22 additions & 11 deletions

File tree

Dist/WebflowOnly/CMSFilter.js

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -222,52 +222,63 @@ class CMSFilter {
222222
}
223223

224224
SortItems() {
225-
if(!this.sortOptions) return;
225+
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

233+
// Handle null or undefined values
234+
if (aValue === undefined || aValue === null) aValue = '';
235+
if (bValue === undefined || bValue === null) bValue = '';
236+
237+
// Handle numeric values
232238
if (!isNaN(aValue) && !isNaN(bValue)) {
233239
aValue = parseFloat(aValue);
234240
bValue = parseFloat(bValue);
235241
}
236-
else if (Date.parse(aValue) && Date.parse(bValue)) {
242+
// Handle date values
243+
else if (!isNaN(Date.parse(aValue)) && !isNaN(Date.parse(bValue))) {
237244
aValue = new Date(aValue);
238245
bValue = new Date(bValue);
239246
}
247+
// Handle text values
248+
else {
249+
aValue = aValue.toString().toLowerCase();
250+
bValue = bValue.toString().toLowerCase();
251+
}
240252

241253
if (order === 'asc') {
242-
return aValue > bValue ? 1 : -1;
254+
return aValue > bValue ? 1 : aValue < bValue ? -1 : 0;
243255
} else {
244-
return aValue < bValue ? 1 : -1;
256+
return aValue < bValue ? 1 : aValue > bValue ? -1 : 0;
245257
}
246258
});
247-
}
259+
}
248260

249261
ApplyFilters() {
250262
const filters = this.GetFilters();
251-
this.currentPage = 1; //Reset pagination to first page
263+
this.currentPage = 1; // Reset pagination to first page
252264
this.filteredItems = this.allItems.filter(item => {
253265
return Object.keys(filters).every(category => {
254266
const values = [...filters[category]];
255-
if(values.length === 0) return values.length === 0;
267+
if (values.length === 0) return true;
256268

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

260272
if (category === '*') {
261-
return values.length === 0 ||
262-
values.some(value => matchingText.includes(value.toLowerCase())) ||
273+
return values.some(value => matchingText.includes(value.toLowerCase())) ||
263274
Object.values(item.dataset).some(dataValue =>
264275
values.some(value => dataValue.toLowerCase().includes(value.toLowerCase()))
265276
);
266277
} else {
267-
return values.length === 0 || values.some(value => {
278+
return values.some(value => {
268279
if (typeof value === 'object') {
269280
const itemValue = parseFloat(item.dataset[category]);
270-
if(value.from !== null && value.to !== null) {
281+
if (value.from !== null && value.to !== null) {
271282
return itemValue >= value.from && itemValue <= value.to;
272283
} else if (value.from !== null && value.to == null) {
273284
return itemValue >= value.from;

0 commit comments

Comments
 (0)