diff options
author | alemi <me@alemi.dev> | 2024-05-03 06:14:36 +0200 |
---|---|---|
committer | alemi <me@alemi.dev> | 2024-05-03 06:14:46 +0200 |
commit | 188dd7ee818d0a456f348d9010ff616a701497d6 (patch) | |
tree | 5f7b02ed998a182347988a0ae173813a851db91d | |
parent | 85a2bedc1a4881262285d36a5568b26079d309b1 (diff) |
feat(web): bad search bar and page
-rw-r--r-- | web/src/app.rs | 1 | ||||
-rw-r--r-- | web/src/control.rs | 21 | ||||
-rw-r--r-- | web/src/page.rs | 54 |
3 files changed, 72 insertions, 4 deletions
diff --git a/web/src/app.rs b/web/src/app.rs index 9e7845e..8ae651c 100644 --- a/web/src/app.rs +++ b/web/src/app.rs @@ -112,6 +112,7 @@ pub fn App() -> impl IntoView { <Route path="/web/objects/:id" view=move || view! { <ObjectPage tl=context_tl /> } /> <Route path="/web/debug" view=DebugPage /> + <Route path="/web/search" view=SearchPage /> <Route path="/" view=move || view! { <Redirect path="/web" /> } /> </Routes> diff --git a/web/src/control.rs b/web/src/control.rs index 84ac46c..73c3c92 100644 --- a/web/src/control.rs +++ b/web/src/control.rs @@ -6,11 +6,24 @@ use crate::prelude::*; #[component] pub fn Navigator() -> impl IntoView { let auth = use_context::<Auth>().expect("missing auth context"); + let (query, set_query) = create_signal("".to_string()); view! { - <a href="/web/home"><input class="w-100" type="submit" class:hidden=move || !auth.present() value="home timeline" /></a> - <a href="/web/server"><input class="w-100" type="submit" value="server timeline" /></a> - <a href="/web/about"><input class="w-100" type="submit" value="about" /></a> - <a href="/web/debug"><input class="w-100" type="submit" value="debug" class:hidden=move|| !auth.present() /></a> + <table class="align"> + <tr> + <td class="w-100"> + <input type="text" class="w-100" on:input=move |ev| { + set_query.set(event_target_value(&ev)) + } /> + </td> + <td> + <a href={move|| format!("/web/search?q={}", query.get())}><input type="submit" value="go" /></a> + </td> + </tr> + <tr><td colspan="2"><a href="/web/home"><input class="w-100" type="submit" class:hidden=move || !auth.present() value="home timeline" /></a></td></tr> + <tr><td colspan="2"><a href="/web/server"><input class="w-100" type="submit" value="server timeline" /></a></td></tr> + <tr><td colspan="2"><a href="/web/about"><input class="w-100" type="submit" value="about" /></a></td></tr> + <tr><td colspan="2"><a href="/web/debug"><input class="w-100" type="submit" value="debug" class:hidden=move|| !auth.present() /></a></td></tr> + </table> } } diff --git a/web/src/page.rs b/web/src/page.rs index 03ba6af..e8e6fd6 100644 --- a/web/src/page.rs +++ b/web/src/page.rs @@ -331,3 +331,57 @@ pub fn DebugPage() -> impl IntoView { </div> } } + +#[component] +pub fn SearchPage() -> impl IntoView { + let auth = use_context::<Auth>().expect("missing auth context"); + + let user = create_local_resource( + move || use_query_map().get().get("q").cloned().unwrap_or_default(), + move |q| { + let user_fetch = Uri::api(FetchKind::User, &q, true); + async move { Some(Arc::new(Http::fetch::<serde_json::Value>(&user_fetch, auth).await.ok()?)) } + } + ); + + let object = create_local_resource( + move || use_query_map().get().get("q").cloned().unwrap_or_default(), + move |q| { + let object_fetch = Uri::api(FetchKind::Object, &q, true); + async move { Some(Arc::new(Http::fetch::<serde_json::Value>(&object_fetch, auth).await.ok()?)) } + } + ); + + view! { + <Breadcrumb>search</Breadcrumb> + <blockquote class="mt-1 mb-1"> + <details open> + <summary class="mb-2"> + <code class="cw center color ml-s w-100">users</code> + </summary> + {move || match user.get() { + None => None, + Some(None) => None, + Some(Some(u)) => Some(view! { + <ActorBanner object=u /> + }), + }} + </details> + </blockquote> + + <blockquote class="mt-1 mb-1"> + <details open> + <summary class="mb-2"> + <code class="cw center color ml-s w-100">objects</code> + </summary> + {move || match object.get() { + None => None, + Some(None) => None, + Some(Some(o)) => Some(view! { + <Object object=o /> + }), + }} + </details> + </blockquote> + } +} |