diff --git a/src/components/messageStream/hooks/usePostStream.ts b/src/components/messageStream/hooks/usePostStream.ts index e855af6..3bfcf6a 100644 --- a/src/components/messageStream/hooks/usePostStream.ts +++ b/src/components/messageStream/hooks/usePostStream.ts @@ -15,6 +15,7 @@ export type PostStreamParams = { type?: string; language?: string; q?: string; + sort?: string; lang: Lang; }; @@ -87,6 +88,7 @@ function buildRealUrl(params: PostStreamParams, cursor?: string): string { if (q) sp.set("q", q); if (params.scope.kind === "category") sp.set("category", params.scope.slug); if (params.type && params.type !== "all") sp.set("type", params.type); + if (params.sort) sp.set("sort", params.sort); if (params.language) sp.set("language", sourceLanguageQuery(params.language)); if (cursor) sp.set("cursor", cursor); return `${q ? "/api/posts/search" : "/api/posts"}?${sp.toString()}`; @@ -163,6 +165,7 @@ export function usePostStream(params: PostStreamParams): PostStreamResult { params.type, params.language, params.q, + params.sort, params.lang, ]); diff --git a/src/layouts/PublicLayout.tsx b/src/layouts/PublicLayout.tsx index 0c7ce6c..088dd89 100644 --- a/src/layouts/PublicLayout.tsx +++ b/src/layouts/PublicLayout.tsx @@ -12,6 +12,7 @@ type PublicNavWhich = | "browseLatest" | "browseRecommended" | "browsePopular" + | "favorites" | "about"; function navIsActive( @@ -32,11 +33,15 @@ function navIsActive( (pathname === "/" && hash === "#categories") ); case "browseLatest": - return pathname === "/" && hash === "#latest"; + return pathname === "/browse" && sp.get("sort") === "latest"; case "browseRecommended": - return pathname === "/" && hash === "#official"; + return pathname === "/official-recommendations"; case "browsePopular": - return pathname === "/" && hash === "#popular"; + return pathname === "/browse" && sp.get("sort") === "popular"; + case "favorites": + return ( + pathname === "/favorites" || (pathname === "/" && hash === "#favorites") + ); case "about": return pathname === "/about"; default: @@ -397,26 +402,33 @@ export function PublicLayout() { {t("categories")} {t("official")} {t("latest")} {t("popular")} + + {t("favorites")} + setOpen(false)} @@ -498,7 +510,7 @@ export function PublicLayout() { {t("official")} setOpen(false)} @@ -506,13 +518,21 @@ export function PublicLayout() { {t("latest")} setOpen(false)} > {t("popular")} + setOpen(false)} + > + {t("favorites")} + diff --git a/src/pages/Browse/index.tsx b/src/pages/Browse/index.tsx index 65b2168..11136e3 100644 --- a/src/pages/Browse/index.tsx +++ b/src/pages/Browse/index.tsx @@ -7,10 +7,20 @@ export function Browse() { const { t } = useI18n(); const [sp] = useSearchParams(); const q = sp.get("q") || ""; + const sort = sp.get("sort") || ""; + const title = q + ? `${t("search")}: ${q}` + : sort === "latest" + ? t("latest") + : sort === "popular" + ? t("popular") + : sort === "recommended" + ? t("official") + : t("all"); return (
- +