feat: preserve back navigation on search and like button

This commit is contained in:
trafficlunar 2026-01-31 13:47:19 +00:00
parent 8f63e6c365
commit 4405aa50c3
2 changed files with 14 additions and 5 deletions

View file

@ -1,7 +1,7 @@
"use client"; "use client";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { redirect } from "next/navigation"; import { useRouter } from "next/navigation";
import { Icon, loadIcons } from "@iconify/react"; import { Icon, loadIcons } from "@iconify/react";
import { abbreviateNumber } from "@/lib/abbreviation"; import { abbreviateNumber } from "@/lib/abbreviation";
@ -16,13 +16,18 @@ interface Props {
} }
export default function LikeButton({ likes, isLiked, miiId, isLoggedIn, disabled, abbreviate, big }: Props) { export default function LikeButton({ likes, isLiked, miiId, isLoggedIn, disabled, abbreviate, big }: Props) {
const router = useRouter();
const [isLikedState, setIsLikedState] = useState(isLiked); const [isLikedState, setIsLikedState] = useState(isLiked);
const [likesState, setLikesState] = useState(likes); const [likesState, setLikesState] = useState(likes);
const [isAnimating, setIsAnimating] = useState(false); const [isAnimating, setIsAnimating] = useState(false);
const onClick = async () => { const onClick = async () => {
if (disabled) return; if (disabled) return;
if (!isLoggedIn) redirect("/login"); if (!isLoggedIn) {
router.push("/login");
return;
}
setIsLikedState(!isLikedState); setIsLikedState(!isLikedState);
setLikesState(isLikedState ? likesState - 1 : likesState + 1); setLikesState(isLikedState ? likesState - 1 : likesState + 1);

View file

@ -1,24 +1,28 @@
"use client"; "use client";
import { redirect, useSearchParams } from "next/navigation"; import { redirect, useRouter, useSearchParams } from "next/navigation";
import { useState } from "react"; import { useState } from "react";
import { Icon } from "@iconify/react"; import { Icon } from "@iconify/react";
import { querySchema } from "@/lib/schemas"; import { querySchema } from "@/lib/schemas";
export default function SearchBar() { export default function SearchBar() {
const router = useRouter();
const searchParams = useSearchParams(); const searchParams = useSearchParams();
const [query, setQuery] = useState(""); const [query, setQuery] = useState("");
const handleSearch = () => { const handleSearch = () => {
const result = querySchema.safeParse(query); const result = querySchema.safeParse(query);
if (!result.success) redirect("/"); if (!result.success) {
router.push("/");
return;
}
// Clone current search params and add query param // Clone current search params and add query param
const params = new URLSearchParams(searchParams.toString()); const params = new URLSearchParams(searchParams.toString());
params.set("q", query); params.set("q", query);
params.set("page", "1"); params.set("page", "1");
redirect(`/?${params.toString()}`); router.push(`/?${params.toString()}`);
}; };
const handleKeyDown = (event: React.KeyboardEvent) => { const handleKeyDown = (event: React.KeyboardEvent) => {