Leptos updated to 0.6.5

This commit is contained in:
2024-02-05 15:50:22 +01:00
parent e69db7f40b
commit 88ac17008c
6 changed files with 235 additions and 222 deletions
+3 -8
View File
@@ -7,6 +7,7 @@ use crate::components::data_form::ForValidation;
cfg_if! { if #[cfg(feature = "ssr")] {
use sqlx::{query_as, PgPool, query};
use crate::error::AppError;
use crate::backend::get_pool;
use log::info;
pub async fn check_company(pool: &PgPool) -> Result<(), AppError> {
@@ -26,14 +27,11 @@ cfg_if! { if #[cfg(feature = "ssr")] {
#[server(GetCompany, "/api", "Url", "get_company")]
pub async fn get_company() -> Result<ApiResponse<Company>, ServerFnError> {
use crate::backend::AppData;
use actix_web::web::Data;
use leptos_actix::extract;
use crate::perm_check;
perm_check!(is_logged_in);
let pool = extract(|data: Data<AppData>| async move { data.db_pool().clone() }).await?;
let pool = get_pool().await?;
let cmp = sqlx::query_as::<_, Company>("SELECT * FROM company")
.fetch_one(&pool)
@@ -44,14 +42,11 @@ pub async fn get_company() -> Result<ApiResponse<Company>, ServerFnError> {
#[server(UpdateCompany, "/api", "Url", "update_company")]
pub async fn update_company(company: Company) -> Result<ApiResponse<()>, ServerFnError> {
use crate::backend::AppData;
use actix_web::web::Data;
use leptos_actix::extract;
use crate::perm_check;
perm_check!(is_admin);
let pool = extract(|data: Data<AppData>| async move { data.db_pool().clone() }).await?;
let pool = get_pool().await?;
sqlx::query(
"UPDATE company SET name = $1, street = $2, house_number = $3, zip_code = $4, city = $5 \
+2 -1
View File
@@ -72,7 +72,8 @@ cfg_if!{
}
pub async fn get_pool() -> Result<PgPool, ServerFnError> {
extract(|data: Data<AppData>| async move { data.db_pool().clone() }).await
let data = extract::<Data<AppData>>().await?;
Ok(data.db_pool().clone())
}
}
}
+14 -13
View File
@@ -42,9 +42,14 @@ cfg_if! { if #[cfg(feature = "ssr")] {
}
pub async fn logged_in_user() -> Option<User> {
extract(|session: Session| async move {
session.get::<User>("user").unwrap_or(None)
}).await.unwrap_or(None)
let session = extract::<Session>().await;
if session.is_err() {
return None
}
session.unwrap().get::<User>("user").unwrap_or(None)
/*let mut usr = User::default();
usr.full_name = Some("PokAdm".to_string());
usr.admin = true;
@@ -77,10 +82,8 @@ pub async fn login(username: String, password: String) -> Result<ApiResponse<()>
let user = user_from_login(&pool, &username).await.unwrap_or(User::default());
if !user.login.is_empty() && pwhash::bcrypt::verify(password, &user.password) {
extract(|session: Session| async move {
let _ = session.insert("user", user);
})
.await?;
let session = extract::<Session>().await?;
let _ = session.insert("user", user);
info!("User {} logged in", username);
@@ -97,9 +100,8 @@ pub async fn login(username: String, password: String) -> Result<ApiResponse<()>
#[server]
pub async fn logout() -> Result<(), ServerFnError> {
extract(|session: Session| async move {
session.clear();
}).await?;
let session = extract::<Session>().await?;
session.clear();
redirect("/login");
Ok(())
@@ -160,9 +162,8 @@ pub async fn update_profile(user: UserProfile) -> Result<ApiResponse<()>, Server
if logged_in_user().await.unwrap_or_default().login == user.login() {
let usr = user_from_login(&pool, user.login()).await?;
extract(|session: Session| async move {
let _ = session.insert("user", usr);
}).await?;
let session = extract::<Session>().await?;
let _ = session.insert("user", usr);
}
Ok(ApiResponse::Data(()))
+20 -2
View File
@@ -1,7 +1,12 @@
use crate::backend::data::ApiResponse;
use crate::components::modal_box::{DialogOpener, ModalBody, ModalDialog, ModalFooter};
use leptos::*;
use leptos::server_fn::client::browser::BrowserClient;
use leptos::server_fn::codec::{Json, PostUrl};
use leptos::server_fn::error::NoCustomError;
use leptos::server_fn::ServerFn;
use leptos_router::*;
use serde::de::DeserializeOwned;
use validator::Validate;
use crate::components::server_err::ServerErr;
use crate::components::validation_err::ValidationErr;
@@ -13,7 +18,13 @@ pub trait ForValidation {
}
#[component]
pub fn data_form<T: 'static + server_fn::ServerFn<()> + Clone + ForValidation>(
pub fn data_form<T: 'static + Clone +
ServerFn<Client = BrowserClient,
InputEncoding = PostUrl,
OutputEncoding = Json,
Error = NoCustomError,
Output = ApiResponse<()>> +
DeserializeOwned + ForValidation>(
opener: DialogOpener,
action: Action<T, Result<ApiResponse<()>, ServerFnError>>,
title: &'static str,
@@ -54,7 +65,14 @@ pub fn data_form<T: 'static + server_fn::ServerFn<()> + Clone + ForValidation>(
}
#[component]
pub fn question_dialog<T: 'static + server_fn::ServerFn<()> + Clone>(
pub fn question_dialog<T: 'static
+ ServerFn<Client = BrowserClient,
InputEncoding = PostUrl,
OutputEncoding = Json,
Error = NoCustomError,
Output = ApiResponse<()>>
+ DeserializeOwned
+ Clone>(
opener: DialogOpener,
action: Action<T, Result<ApiResponse<()>, ServerFnError>>,
title: &'static str,