Search(): React.JSX.Element
Renders /search?q= and /search/:searchTab?q=, for anyone. The results come
from GET /api/search, signed in when the viewer is, so they find their own
private dumps and playlists too. The dumps load a page at a time as the
"dumps" tab scrolls. A new q aborts the search under way. The socket keeps
the dumps and playlists found live, as edited or deleted, but adds none; a
reconnection runs the search again, for every page of dumps loaded.
On the "dumps" and "playlists" tabs, a menu narrows the results to a
category of their kind, kept in the URL's ?category=, which another tab
drops.