import { Link, useLocation } from "react-router-dom"; import Nav from "../sections/Nav"; import { useAuth } from "../useAuth"; import { ProfilePicture, useAuthenticatedRequest } from "../util"; import { BoxSeam } from "react-bootstrap-icons"; import { LoadingSpinner } from "./Loading"; export default function Search() { const location = useLocation(); const query = location.pathname === "/search" ? new URLSearchParams(location.search).get("q") || "" : ""; return (
); } interface UsersSearchResponse { users: UserSearchResponseUser[]; } interface UserSearchResponseUser { user_uuid: string; display_name: string; picture_url: string; } function UsersResults({ query }: { query: string }) { const auth = useAuth(); if (!auth) { return <>; } const { response: results, error } = useAuthenticatedRequest( { auth, endpoint: "users/search?q=" + encodeURIComponent(query), }, [query] ); if (error) { return
{error}
; } if (!results) { return (
{[0, 1, 2].map((i) => ( ))}
); } if (results?.users.length === 0) { return <>; } return (
{results.users.map((user, i) => ( ))}
); } interface CrateSearchResponse { crates: CrateSearchResponseCrate[]; } interface CrateSearchResponseCrate { organisation: string; name: string; description: string; homepage?: string; repository?: string; version: string; } function CrateResults({ query, className, }: { query: string; className?: string; }) { const auth = useAuth(); if (!auth) { return <>; } const { response: results, error } = useAuthenticatedRequest( { auth, endpoint: "crates/search?q=" + encodeURIComponent(query), }, [query] ); if (error) { return
{error}
; } if (!results) { return (
); } if (results?.crates.length === 0) { return <>; } return (
{results?.crates.map((crate, i) => ( ))}

{crate.organisation} /{crate.name}

{crate.version}

{crate.description}

{crate.homepage || crate.repository ? (
{crate.homepage ? ( Homepage ) : ( <> )} {crate.repository ? ( Repository ) : ( <> )}
) : ( <> )}
); }