From c784b80773e4ff0131b1a964f0f094625e516d5b Mon Sep 17 00:00:00 2001 From: Leo dev Date: Fri, 17 Oct 2025 15:21:04 +0200 Subject: [PATCH] Search for user --- src/app/api/profile/route.ts | 43 ++++++++++++++++----------------- src/components/Sidebar.tsx | 47 ++++++++++++++++++++++++++++++------ 2 files changed, 61 insertions(+), 29 deletions(-) diff --git a/src/app/api/profile/route.ts b/src/app/api/profile/route.ts index 46238aa..dcf9960 100644 --- a/src/app/api/profile/route.ts +++ b/src/app/api/profile/route.ts @@ -71,34 +71,33 @@ export async function POST(req: NextRequest) { */ export async function GET(req: NextRequest) { const url = new URL(req.url); - const query_id = url.searchParams.get("id"); + const id = url.searchParams.get("id"); + const username = url.searchParams.get("username"); const token = req.cookies.get("token")?.value; - if (!query_id && !token) + if (!token && !id && !username) return NextResponse.json( - { message: "Query arg should be token or id" }, + { message: "Query arg should be token or id or username" }, { status: StatusCodes.BAD_REQUEST } ); - let user_id = query_id; - if (!user_id && token) { - const { - data: { user }, - } = await supabase.auth.getUser(token); - user_id = user?.id ?? null; - } - - if (!user_id) - return NextResponse.json( - { message: "Invalid token" }, - { status: StatusCodes.BAD_REQUEST } - ); - - const { data: profile, error } = await supabase - .from("profiles") - .select("id, username, display_name, avatar_url, node_address") - .eq("id", user_id) - .maybeSingle(); + const { data: profile, error } = id + ? await supabase + .from("profiles") + .select("id, username, display_name, avatar_url, node_address") + .eq("id", id) + .maybeSingle() + : username + ? await supabase + .from("profiles") + .select("id, username, display_name, avatar_url, node_address") + .eq("username", username) + .maybeSingle() + : await supabase + .from("profiles") + .select("id, username, display_name, avatar_url, node_address") + .eq("id", (await supabase.auth.getUser(token)).data.user?.id) + .maybeSingle(); if (error) return NextResponse.json( diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index d7a27b5..f5a0a7b 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -37,6 +37,7 @@ import { get, Response } from "@/lib/request"; import { cn } from "@/lib/utils"; import App from "@/types/app"; import { ProfileSettings } from "@/types/settings"; +import axios from "axios"; export default function AppSidebar({ children, @@ -53,6 +54,7 @@ export default function AppSidebar({ }>) { const [servers, setServers] = useState<[string, string][]>([]); const [newServer, setNewServer] = useState({ name: "", ip: "" }); + const [query, setQuery] = useState(""); const router = useRouter(); const dms = Array.from( @@ -63,6 +65,15 @@ export default function AppSidebar({ ) ); + const filteredDms = dms.filter((id) => { + const user = getUser(id, app.profiles, app.setProfiles); + const name = user?.display_name || ""; + return ( + name.toLowerCase().includes(query.toLowerCase()) || + id.toLowerCase().includes(query.toLowerCase()) + ); + }); + useEffect(() => { const s = Cookies.get("servers")?.split(","); if (s) setServers(s.map((x) => x.trim().split("@") as [string, string])); @@ -213,12 +224,16 @@ export default function AppSidebar({

{server.name}

) : ( -
- - +
+
+ setQuery(e.target.value)} + /> + +
)} @@ -231,7 +246,7 @@ export default function AppSidebar({ ) : ( <> - {dms.map((id) => ( + {filteredDms.map((id) => ( ))} + {filteredDms.length === 0 && query.trim() !== "" ? ( +
+ +
+ ) : null} )}