Skip to content

Commit f95a215

Browse files
address PR feedback
1 parent b5f1fdc commit f95a215

3 files changed

Lines changed: 69 additions & 7 deletions

File tree

Dist/WebflowOnly/CMSFilter.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,11 @@ class CMSFilter {
6363
);
6464
this.emptyMaxCount = 0;
6565
if (this.emptyElement) {
66-
const emptyMaxValue = parseInt(
67-
this.emptyElement.getAttribute("wt-cmsfilter-empty-max"),
68-
10,
66+
const emptyMaxAttr = this.emptyElement.getAttribute(
67+
"wt-cmsfilter-empty-max",
6968
);
70-
if (Number.isInteger(emptyMaxValue) && emptyMaxValue >= 0) {
71-
this.emptyMaxCount = emptyMaxValue;
69+
if (emptyMaxAttr !== null && /^[1-9]\d*$/.test(emptyMaxAttr)) {
70+
this.emptyMaxCount = Number(emptyMaxAttr);
7271
}
7372
}
7473
this.resetIx2 =
@@ -446,7 +445,7 @@ class CMSFilter {
446445
}
447446
}
448447
} else {
449-
console.error("Failed to fetch HTML from the URL:", link.href);
448+
console.error("Failed to fetch HTML from the URL:", link);
450449
}
451450
} catch (error) {
452451
console.error("Error fetching HTML:", error);

__tests__/CMSFilter.test.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,4 +277,67 @@ describe("CMSFilter", () => {
277277
expect(instance.filteredItems.length).toBe(1);
278278
expect(instance.emptyElement.style.display).toBe("none");
279279
});
280+
281+
test("invalid wt-cmsfilter-empty-max defaults to 0", () => {
282+
buildBasicDOM({ emptyMax: "3px" });
283+
InitializeCMSFilter();
284+
const instance = window.webtricks[0].CMSFilter;
285+
286+
expect(instance.emptyMaxCount).toBe(0);
287+
288+
const form = document.querySelector('[wt-cmsfilter-element="filter-form"]');
289+
const betaLabel = Array.from(form.querySelectorAll("label")).find((l) =>
290+
l.textContent.includes("Beta"),
291+
);
292+
betaLabel.querySelector("input").checked = true;
293+
betaLabel
294+
.querySelector("input")
295+
.dispatchEvent(new Event("change", { bubbles: true }));
296+
instance.ApplyFilters();
297+
298+
expect(instance.filteredItems.length).toBe(1);
299+
expect(instance.emptyElement.style.display).toBe("none");
300+
});
301+
302+
test("negative wt-cmsfilter-empty-max defaults to 0", () => {
303+
buildBasicDOM({ emptyMax: "-1" });
304+
InitializeCMSFilter();
305+
const instance = window.webtricks[0].CMSFilter;
306+
307+
expect(instance.emptyMaxCount).toBe(0);
308+
309+
const form = document.querySelector('[wt-cmsfilter-element="filter-form"]');
310+
const betaLabel = Array.from(form.querySelectorAll("label")).find((l) =>
311+
l.textContent.includes("Beta"),
312+
);
313+
betaLabel.querySelector("input").checked = true;
314+
betaLabel
315+
.querySelector("input")
316+
.dispatchEvent(new Event("change", { bubbles: true }));
317+
instance.ApplyFilters();
318+
319+
expect(instance.filteredItems.length).toBe(1);
320+
expect(instance.emptyElement.style.display).toBe("none");
321+
});
322+
323+
test("non-numeric wt-cmsfilter-empty-max defaults to 0", () => {
324+
buildBasicDOM({ emptyMax: "abc" });
325+
InitializeCMSFilter();
326+
const instance = window.webtricks[0].CMSFilter;
327+
328+
expect(instance.emptyMaxCount).toBe(0);
329+
330+
const form = document.querySelector('[wt-cmsfilter-element="filter-form"]');
331+
const betaLabel = Array.from(form.querySelectorAll("label")).find((l) =>
332+
l.textContent.includes("Beta"),
333+
);
334+
betaLabel.querySelector("input").checked = true;
335+
betaLabel
336+
.querySelector("input")
337+
.dispatchEvent(new Event("change", { bubbles: true }));
338+
instance.ApplyFilters();
339+
340+
expect(instance.filteredItems.length).toBe(1);
341+
expect(instance.emptyElement.style.display).toBe("none");
342+
});
280343
});

docs/WebflowOnly/CMSFilter.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Add the script to your Webflow project and include the required attributes on yo
5454
#### Additional Elements
5555
- `wt-cmsfilter-element="results-count"` - Shows the number of filtered results
5656
- `wt-cmsfilter-element="empty"` - Element shown when no results are found
57-
- `wt-cmsfilter-empty-max="n"` - Optional on the empty element; shows empty block when filtered results are ≤ n (default: 0, so only when zero results; e.g. `wt-cmsfilter-empty-max="3"` shows at 3 or fewer)
57+
- `wt-cmsfilter-empty-max="n"` - Optional on the empty element; accepts positive whole integers only (`1+`) and shows empty block when filtered results are ≤ n. Missing, `0`, or invalid values default to `0` (show only when there are zero results; e.g. `wt-cmsfilter-empty-max="3"` shows at 3 or fewer). Valid: `1`, `2`, `3`. Invalid: `0`, `3.5`, `3px`, `-1`, `abc`.
5858
- `wt-cmsfilter-element="clear-all"` - Button to clear all active filters
5959
- `wt-cmsfilter-element="sort-options"` - Select element for sorting options
6060
- `wt-cmsfilter-element="tag-template"` - Template for active filter tags

0 commit comments

Comments
 (0)