From 8e61f34b3fb3ee3d7919ae49874564c4ece2a458 Mon Sep 17 00:00:00 2001 From: Simon Bruder Date: Fri, 19 Jul 2024 00:03:37 +0200 Subject: [PATCH] Allow displaying datalist hint as link --- src/frontend/templates/datalist.rs | 5 ++++- static/app.js | 10 +++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/frontend/templates/datalist.rs b/src/frontend/templates/datalist.rs index 5fef75c..39bb131 100644 --- a/src/frontend/templates/datalist.rs +++ b/src/frontend/templates/datalist.rs @@ -11,6 +11,7 @@ use crate::manage; pub struct Datalist { name: String, options: Vec, + link_prefix: Option, } impl Datalist { @@ -22,7 +23,7 @@ impl Datalist { impl Render for Datalist { fn render(&self) -> Markup { html! { - datalist #{ (self.name) "-datalist" } { + datalist #{ (self.name) "-datalist" } data-link-prefix=[&self.link_prefix] { @for option in &self.options { (option) } @@ -49,6 +50,7 @@ pub async fn items(pool: &PgPool) -> Result { Ok(Datalist { name: "items".to_string(), + link_prefix: Some("/item/".to_string()), options: items .iter() .map(|i| DatalistOption { @@ -62,6 +64,7 @@ pub async fn items(pool: &PgPool) -> Result { pub async fn item_classes(pool: &PgPool) -> Result { Ok(Datalist { name: "item-classes".to_string(), + link_prefix: Some("/item-class/".to_string()), options: manage::item_class::get_all(pool) .await? .into_iter() diff --git a/static/app.js b/static/app.js index 492ac1a..9e42f24 100644 --- a/static/app.js +++ b/static/app.js @@ -19,7 +19,15 @@ if (selected === null) hint.innerText = "" else { - hint.innerHTML = selected.innerHTML + const linkPrefix = input.list.dataset.linkPrefix; + if (linkPrefix === undefined) { + hint.innerHTML = selected.innerHTML + } else { + let link = document.createElement("a") + link.href = `${linkPrefix}${input.value}` + link.innerHTML = selected.innerHTML + hint.appendChild(link) + } } } Array.from(document.getElementsByClassName("datalist-hint")).forEach(hint => {