fix: route favorites cards through /resource so they survive language switch
All checks were successful
Deploy Staging (terry-wallet-login) / deploy (push) Successful in 1m18s
All checks were successful
Deploy Staging (terry-wallet-login) / deploy (push) Successful in 1m18s
Favorites are stored regardless of language but the card click was navigating to /browse?post=<id>&single=1 in the current UI language. When the user switched languages (e.g. zh→en) and tapped a zh-only favorite, the /browse stream couldn't find the post in its English view and showed "Couldn't find this post in the current view". Make Favorites navigate via /resource/<id> instead. PostRedirect already tries the current UI language first, then falls back to the post's source language and shows a toast. Renamed PopularRankRow's seldom-used `singlePostLink` to `linkToResource` to make the intent obvious; Favorites passes the new prop.
This commit is contained in:
@@ -90,7 +90,7 @@ export function PopularRankRow({
|
||||
browseSort = "popular",
|
||||
showRank = true,
|
||||
showDownload = true,
|
||||
singlePostLink = false,
|
||||
linkToResource = false,
|
||||
onFavoriteChange,
|
||||
}: {
|
||||
post: Post;
|
||||
@@ -99,7 +99,13 @@ export function PopularRankRow({
|
||||
browseSort?: string;
|
||||
showRank?: boolean;
|
||||
showDownload?: boolean;
|
||||
singlePostLink?: boolean;
|
||||
/**
|
||||
* When true, the card and download button route to `/resource/:id` so the
|
||||
* `PostRedirect` page can fall back to the post's source language if the
|
||||
* current UI language has no translation. Otherwise navigate inside the
|
||||
* `/browse` stream which assumes the post exists in the current language.
|
||||
*/
|
||||
linkToResource?: boolean;
|
||||
onFavoriteChange?: (postId: string, favorited: boolean) => void;
|
||||
}) {
|
||||
const { t, lang } = useI18n();
|
||||
@@ -143,10 +149,13 @@ export function PopularRankRow({
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
if (linkToResource) {
|
||||
navigate(lp(`/resource/${encodeURIComponent(post.id)}`));
|
||||
return;
|
||||
}
|
||||
const params = new URLSearchParams();
|
||||
if (browseSort) params.set("sort", browseSort);
|
||||
params.set("post", post.id);
|
||||
if (singlePostLink) params.set("single", "1");
|
||||
navigate(lp(`/browse?${params.toString()}`));
|
||||
}}
|
||||
aria-label={r.title}
|
||||
|
||||
Reference in New Issue
Block a user