diff --git a/src/components/Filters/ContentFilters.jsx b/src/components/Filters/ContentFilters.jsx index 4ad260e..8a6364a 100644 --- a/src/components/Filters/ContentFilters.jsx +++ b/src/components/Filters/ContentFilters.jsx @@ -28,6 +28,21 @@ export default function ContentFilters({ activeFilter, onFilterChange }) { ); } +// Known content types - anything not in this list is treated as text +const KNOWN_CONTENT_TYPES = new Set([ + "photo", "picture", "image", + "video", + "camera", "live", "stream", + "post", "text", "blog", + "news", + "event", + "weather", "traffic" +]); + +function isUnknownType(ct) { + return ct && !KNOWN_CONTENT_TYPES.has(ct); +} + // Export filter matching function for reuse export function matchesContentFilter(post, filter) { if (!filter || filter === "all") return true; @@ -38,14 +53,16 @@ export function matchesContentFilter(post, filter) { switch (filter) { case "links": - return cat === "news" || ct === "news"; + // News links + unknown types with news category (e.g., systems, news-scrapper) + return cat === "news" || ct === "news" || (isUnknownType(ct) && cat === "news"); case "video": // Recorded videos only return ct === "video"; case "image": return hasImage && !hasVideo && ct !== "camera" && ct !== "video"; case "text": - return ct === "post" || ct === "text" || ct === "blog" || cat === "friends"; + // Text posts + news + unknown types default to text (systems, news-scrapper, etc.) + return ct === "post" || ct === "text" || ct === "blog" || ct === "news" || cat === "friends" || cat === "news" || isUnknownType(ct); case "live": // Only live content: cameras (quebec511), live streams - NOT recorded videos return ct === "live" || ct === "stream" || ct === "camera";