user-auth store frontend v3
This commit is contained in:
@@ -45,6 +45,11 @@ pub struct BookUIProp {
|
||||
bookitem: BookUI,
|
||||
}
|
||||
|
||||
#[derive(Prop, Debug, Clone, PartialEq, Hash, Eq)]
|
||||
pub struct StringProp {
|
||||
value: String,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Serialize, Debug, Clone)]
|
||||
struct PaginatedBookUIList {
|
||||
num_pages: u32,
|
||||
@@ -146,11 +151,11 @@ async fn fetch_books(search: String) -> Result<Vec<BookUI>, reqwasm::Error> {
|
||||
Ok(body)
|
||||
}
|
||||
|
||||
async fn search_books(search: String, page: u32) -> Result<PaginatedBookUIList, reqwasm::Error> {
|
||||
async fn search_books(search: String, page: u32, userid:i32) -> Result<PaginatedBookUIList, reqwasm::Error> {
|
||||
let backend_url : &'static str = dotenv!("BACKEND_URL");
|
||||
//"http://localhost:8081";
|
||||
//env::var("BACKEND_URL").expect("BACKEND_URL is not set in .env file");
|
||||
let url = format!("{}/api/list_search?search={}&page={}",backend_url, search, page);
|
||||
let url = format!("{}/api/list_search?search={}&page={}&userid={}",backend_url, search, page, userid);
|
||||
let resp = Request::get(&url).send().await?;
|
||||
println!("Fetching books\n");
|
||||
let body = resp.json::<PaginatedBookUIList>().await?;
|
||||
@@ -191,10 +196,10 @@ async fn delete_book(id: i32) -> Result<reqwasm::http::Response, reqwasm::Error>
|
||||
Ok(resp)
|
||||
}
|
||||
|
||||
async fn list_books(page: u32) -> Result<PaginatedBookUIList, reqwasm::Error> {
|
||||
async fn list_books(page: u32, userid: i32, sort: String) -> Result<PaginatedBookUIList, reqwasm::Error> {
|
||||
let backend_url : &'static str = dotenv!("BACKEND_URL");
|
||||
//env::var("BACKEND_URL").expect("BACKEND_URL is not set in .env file");
|
||||
let url = format!("{}/api/list?page={}", backend_url, page);
|
||||
let url = format!("{}/api/list?page={}&userid={}&sort={}", backend_url, page, userid, sort);
|
||||
let resp = Request::get(&url).send().await?;
|
||||
println!("Fetching books\n");
|
||||
info!("BACKEND{}",backend_url);
|
||||
@@ -309,6 +314,7 @@ pub fn Header<G: Html>(cx: Scope) -> View<G> {
|
||||
};
|
||||
|
||||
let dropdown_userselect = |_| {
|
||||
let app_state = app_state.clone();
|
||||
spawn_local(async move {
|
||||
app_state.userlist.set(list_users()
|
||||
.await.expect("Couldn't list user"));
|
||||
@@ -316,8 +322,10 @@ pub fn Header<G: Html>(cx: Scope) -> View<G> {
|
||||
app_state.dropdownselect.set(true);
|
||||
};
|
||||
|
||||
// let users = create_memo(cx, || app_state.userlist.get().keys().cloned().map(|x| StringProp{value: x}).collect::<Vec<StringProp>>());
|
||||
let users = create_memo(cx, || app_state.userlist.get().keys().cloned().collect::<Vec<String>>());
|
||||
|
||||
|
||||
view! { cx,
|
||||
header(class="header") {
|
||||
div(class="header-button"){
|
||||
@@ -361,9 +369,9 @@ pub fn Header<G: Html>(cx: Scope) -> View<G> {
|
||||
Keyed(
|
||||
iterable=users,
|
||||
view=move |cx, x| view! { cx,
|
||||
DropDownUser(user=x)
|
||||
DropDownUser(value=x)
|
||||
},
|
||||
key =|x| x )
|
||||
key =|x| x.clone() )
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -406,16 +414,18 @@ pub fn Header<G: Html>(cx: Scope) -> View<G> {
|
||||
}
|
||||
|
||||
#[component(inline_props)]
|
||||
pub fn DropDownUser<G: Html>(cx: Scope, user: String) -> View<G> {
|
||||
pub fn DropDownUser<G: Html>(cx: Scope, value: StringProp) -> View<G> {
|
||||
let app_state = use_context::<AppState>(cx);
|
||||
let buttontext = value.clone().value.clone();
|
||||
let valueclosure = value.clone();
|
||||
|
||||
let handle_select_user = move |_| {
|
||||
app_state.userid.set( *(*app_state.userlist.get()).get(&(user).clone()).unwrap_or(&0));
|
||||
app_state.userid.set( *(*app_state.userlist.get()).get(&(valueclosure.value).clone()).unwrap_or(&0));
|
||||
app_state.dropdownselect.set(false);
|
||||
};
|
||||
|
||||
view! { cx,
|
||||
button(class="delete", on:click=handle_select_user){ format!("{}",user) }
|
||||
button(class="delete", on:click=handle_select_user){ (buttontext) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -447,7 +457,7 @@ async fn ListDB<G: Html>(cx: Scope<'_>) -> View<G> {
|
||||
info!("DB triggered");
|
||||
spawn_local(async move {
|
||||
|
||||
let res = list_books(*app_state.pagenum.get())
|
||||
let res = list_books(*app_state.pagenum.get(), *app_state.userid.get(), "desc".to_string())
|
||||
.await.unwrap();
|
||||
app_state.books.set(
|
||||
res.books
|
||||
@@ -460,7 +470,7 @@ async fn ListDB<G: Html>(cx: Scope<'_>) -> View<G> {
|
||||
info!("IntSearch triggered");
|
||||
|
||||
spawn_local(async move {
|
||||
let res = search_books(app_state.search.get().to_string(), *app_state.pagenum.get())
|
||||
let res = search_books(app_state.search.get().to_string(), *app_state.pagenum.get(), *app_state.userid.get())
|
||||
.await.unwrap();
|
||||
app_state.books.set(
|
||||
res.books
|
||||
|
||||
Reference in New Issue
Block a user