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 (