feat(filters): make the feed's channel filter reachable

`filters.channelId` was settable by exactly one thing: a "?channel=" URL from a
shared view. The panel still rendered a CHANNEL card whose only control was
"remove" — a remove button for a filter the UI could not apply.

Two ways in now. The panel gets a real Channel group (searchable picker,
first-class alongside date/tags/language, so the chip row surfaces it for free);
normalizeLayout appends it to saved layouts, so nobody loses their arrangement.
And a subscribed channel's page gets "Show in my feed", which applies the filter
and keeps the rest of your filters — the point is "this channel, the way I
normally read", which the channel page itself can't answer (it runs show=all,
scope=all over the whole catalog).

The picker owns its channel query so a few-hundred-entry list loads when the
panel is actually opened, not on every feed visit, and says "showing 50 of N"
rather than quietly stopping.
This commit is contained in:
2026-07-16 00:11:30 +02:00
parent 0ab1d0b057
commit 3caef7f6f9
9 changed files with 136 additions and 44 deletions
+2 -1
View File
@@ -23,5 +23,6 @@
"country": "Country",
"language": "Language",
"topics": "Topics",
"keywords": "Keywords"
"keywords": "Keywords",
"showInFeed": "Show in my feed"
}
+6 -2
View File
@@ -40,7 +40,8 @@
"content": "Content type",
"language": "Language",
"topic": "Topic",
"tags": "Your tags"
"tags": "Your tags",
"channel": "Channel"
},
"show": {
"unwatched": "Unwatched",
@@ -72,5 +73,8 @@
"1month": "1 month",
"6months": "6 months",
"1year": "1 year"
}
},
"channelSearch": "Search channels…",
"noChannelMatch": "No channel matches.",
"channelMore": "Showing {{shown}} of {{total}} — search to narrow."
}
+2 -1
View File
@@ -23,5 +23,6 @@
"country": "Ország",
"language": "Nyelv",
"topics": "Témák",
"keywords": "Kulcsszavak"
"keywords": "Kulcsszavak",
"showInFeed": "Mutasd a hírfolyamomban"
}
+6 -2
View File
@@ -40,7 +40,8 @@
"content": "Tartalomtípus",
"language": "Nyelv",
"topic": "Téma",
"tags": "Saját címkék"
"tags": "Saját címkék",
"channel": "Csatorna"
},
"show": {
"unwatched": "Nem nézett",
@@ -72,5 +73,8 @@
"1month": "1 hónap",
"6months": "6 hónap",
"1year": "1 év"
}
},
"channelSearch": "Csatornák keresése…",
"noChannelMatch": "Nincs találat.",
"channelMore": "{{total}} közül {{shown}} látszik — keress a szűkítéshez."
}