Skip to content

Instantly share code, notes, and snippets.

@Ebrahim-Ramadan
Created September 21, 2024 16:26
Show Gist options
  • Save Ebrahim-Ramadan/7b784d32eaa68489a0ad8cde312cf29e to your computer and use it in GitHub Desktop.
Save Ebrahim-Ramadan/7b784d32eaa68489a0ad8cde312cf29e to your computer and use it in GitHub Desktop.
control a React component with the URL
export default function Home() {
let searchParams = useSearchParams();
let [search, setSearch] = useState(searchParams.get('search') ?? '');
let { data, isPlaceholderData } = useQuery({
queryKey: ['people', search],
queryFn: async () => {
let res = await fetch(`/api/people?search=${search}`);
let data = await res.json();
return data as Response;
},
placeholderData: (previousData) => previousData,
});
let router = useRouter();
let pathname = usePathname();
useEffect(() => {
if (search) {
router.push(`${pathname}?search=${search}`);
}
}, [pathname, router, search]);
return (
<>
<Heading>Your team</Heading>
<InputGroup>
{isPlaceholderData ? <Spinner /> : <MagnifyingGlassIcon />}
<Input
value={search}
onChange={(e) => setSearch(e.target.value)}
placeholder="Find someone..."
/>
</InputGroup>
{!data ? (
<Spinner />
) : (
<Table>
<TableHead>
<TableRow>
<TableHeader>Name</TableHeader>
<TableHeader>Email</TableHeader>
<TableHeader>Role</TableHeader>
</TableRow>
</TableHead>
<TableBody>
{data.people.map((person) => (
<TableRow key={person.id}>
<TableCell>{person.name}</TableCell>
<TableCell>{person.email}</TableCell>
<TableCell>{person.role}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
)}
</>
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment