diff --git a/assets/style.css b/assets/style.css index 34fa72f..fd3b297 100644 --- a/assets/style.css +++ b/assets/style.css @@ -700,6 +700,40 @@ select { --tw-backdrop-sepia: ; } +.container { + width: 100%; +} + +@media (min-width: 640px) { + .container { + max-width: 640px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 768px; + } +} + +@media (min-width: 1024px) { + .container { + max-width: 1024px; + } +} + +@media (min-width: 1280px) { + .container { + max-width: 1280px; + } +} + +@media (min-width: 1536px) { + .container { + max-width: 1536px; + } +} + .sr-only { position: absolute; width: 1px; @@ -747,6 +781,10 @@ select { margin-bottom: 1rem; } +.mb-1 { + margin-bottom: 0.25rem; +} + .mb-2 { margin-bottom: 0.5rem; } @@ -759,6 +797,10 @@ select { margin-bottom: 1.5rem; } +.mr-1 { + margin-right: 0.25rem; +} + .mr-3 { margin-right: 0.75rem; } @@ -871,6 +913,12 @@ select { justify-content: space-between; } +.space-x-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1rem * var(--tw-space-x-reverse)); + margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); +} + .divide-y > :not([hidden]) ~ :not([hidden]) { --tw-divide-y-reverse: 0; border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); @@ -912,6 +960,10 @@ select { border-width: 1px; } +.border-2 { + border-width: 2px; +} + .border-gray-100 { --tw-border-opacity: 1; border-color: rgb(243 244 246 / var(--tw-border-opacity)); @@ -979,6 +1031,11 @@ select { padding-right: 1rem; } +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} + .py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; @@ -1006,6 +1063,11 @@ select { line-height: 2rem; } +.text-5xl { + font-size: 3rem; + line-height: 1; +} + .text-base { font-size: 1rem; line-height: 1.5rem; @@ -1016,6 +1078,10 @@ select { line-height: 1.25rem; } +.font-bold { + font-weight: 700; +} + .font-medium { font-weight: 500; } @@ -1024,6 +1090,15 @@ select { font-weight: 600; } +.uppercase { + text-transform: uppercase; +} + +.text-emerald-500 { + --tw-text-opacity: 1; + color: rgb(16 185 129 / var(--tw-text-opacity)); +} + .text-gray-500 { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity)); @@ -1071,6 +1146,11 @@ select { box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } +.outline-none { + outline: 2px solid transparent; + outline-offset: 2px; +} + .transition { transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; @@ -1079,10 +1159,24 @@ select { transition-duration: 150ms; } +.transition-all { + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.duration-150 { + transition-duration: 150ms; +} + .duration-200 { transition-duration: 200ms; } +.ease-linear { + transition-timing-function: linear; +} + .hover\:bg-gray-100:hover { --tw-bg-opacity: 1; background-color: rgb(243 244 246 / var(--tw-bg-opacity)); diff --git a/crates/oswilno-parking-space/src/lib.rs b/crates/oswilno-parking-space/src/lib.rs index ac8176d..53e7ad8 100644 --- a/crates/oswilno-parking-space/src/lib.rs +++ b/crates/oswilno-parking-space/src/lib.rs @@ -6,7 +6,7 @@ use oswilno_contract::accounts; use oswilno_contract::parking_space_rents; use oswilno_contract::parking_spaces; use oswilno_session::{Authenticated, MaybeAuthenticated}; -use oswilno_view::{is_partial, Layout, Main, MainOpts, SessionOpts}; +use oswilno_view::{is_partial, Layout, Main, MainOpts, SessionOpts, SearchOpts}; use sea_orm::prelude::*; use sea_orm::ActiveValue::{NotSet, Set}; use std::collections::HashMap; @@ -45,41 +45,36 @@ async fn all_parking_spaces( session: MaybeAuthenticated, ) -> HttpResponse { let db = db.into_inner(); - let parking_spaces = load_parking_spaces(db).await; - + let main = Main { + body: parking_spaces, + opts: MainOpts { + session: session.into_option().map(|s| SessionOpts { + login: s.subject.to_owned(), + profile_image_url: None, + }), + search: Some(SearchOpts { + target_url: None, + autocomplete: Vec::with_capacity(0), + }), + ..Default::default() + }, + }; HttpResponse::Ok().body( if is_partial(&req) { - Main { - body: parking_spaces, - opts: MainOpts { - session: session.into_option().map(|s| SessionOpts { - login: s.subject.to_owned(), - profile_image_url: None, - }), - ..Default::default() - }, - } - .render() + main.render() } else { - Layout { - main: Main { - body: parking_spaces, - opts: MainOpts { - session: session.into_option().map(|s| SessionOpts { - login: s.subject.to_owned(), - profile_image_url: None, - }), - ..Default::default() - }, - }, - } - .render() + Layout { main }.render() } .unwrap(), ) } +#[post("/search")] +async fn search_parking_spaces() -> HttpResponse { + HttpResponse::Ok().body("") +} + #[autometrics] #[get("/all-partial")] async fn all_parial_parking_spaces( diff --git a/crates/oswilno-parking-space/templates/parking-spaces/all-partial.html b/crates/oswilno-parking-space/templates/parking-spaces/all-partial.html index c675c61..88435fa 100644 --- a/crates/oswilno-parking-space/templates/parking-spaces/all-partial.html +++ b/crates/oswilno-parking-space/templates/parking-spaces/all-partial.html @@ -1,18 +1,35 @@ - -{% for parking_space_rent in parking_space_rents -%} -{% if let Some(parking_space) = parking_space_by_id.get(parking_space_rent.parking_space_id) %} -{% if let Some(account) = account_by_id.get(parking_space.account_id) %} - - - -
{{ account.login }}
-
-
- - {{ parking_space_rent.price }} - -
-{% endif %} -{% endif %} -{% endfor -%} -
+
+
+

+ {{"Parking spaces"}} +

+
+   +
+
+
+
+ +
+
+ + {% for parking_space_rent in parking_space_rents -%} + {% if let Some(parking_space) = parking_space_by_id.get(parking_space_rent.parking_space_id) %} + {% if let Some(account) = account_by_id.get(parking_space.account_id) %} + + + +
{{ account.login }}
+
+
+ + {{ parking_space_rent.price }} + +
+ {% endif %} + {% endif %} + {% endfor -%} +
+
diff --git a/crates/oswilno-parking-space/templates/parking-spaces/all.html b/crates/oswilno-parking-space/templates/parking-spaces/all.html deleted file mode 100644 index c6c1983..0000000 --- a/crates/oswilno-parking-space/templates/parking-spaces/all.html +++ /dev/null @@ -1,5 +0,0 @@ -{% extends "base.html" %} - -{% block body %} -{% include "./all-partial.html" %} -{% endblock %} diff --git a/crates/oswilno-session/src/lib.rs b/crates/oswilno-session/src/lib.rs index c8e334e..30dd015 100644 --- a/crates/oswilno-session/src/lib.rs +++ b/crates/oswilno-session/src/lib.rs @@ -241,6 +241,9 @@ async fn login_inner( use sea_orm::*; let account = match oswilno_contract::accounts::Entity::find() .filter(oswilno_contract::accounts::Column::Login.eq(payload.login.as_str())) + .filter(oswilno_contract::accounts::Column::Banned.eq(false)) + // TODO: Add email confirmation + //.filter(oswilno_contract::accounts::Column::Confirmed.eq(true)) .one(&*db) .await { diff --git a/crates/oswilno-view/assets/banner.jpg b/crates/oswilno-view/assets/banner.jpg new file mode 100644 index 0000000..4370fd2 Binary files /dev/null and b/crates/oswilno-view/assets/banner.jpg differ diff --git a/crates/oswilno-view/src/lib.rs b/crates/oswilno-view/src/lib.rs index d70fd0a..c0ff74b 100644 --- a/crates/oswilno-view/src/lib.rs +++ b/crates/oswilno-view/src/lib.rs @@ -15,8 +15,8 @@ pub fn is_partial(req: &HttpRequest) -> bool { } #[derive(Debug, Default)] -pub struct SearchOptions { - pub target_url: String, +pub struct SearchOpts { + pub target_url: Option, pub autocomplete: Vec<(String, String)>, } @@ -29,7 +29,7 @@ pub struct SessionOpts { #[derive(Debug)] pub struct MainOpts { pub show: bool, - pub search: Option, + pub search: Option, pub session: Option, } diff --git a/crates/oswilno-view/templates/base.html b/crates/oswilno-view/templates/base.html index a90101f..760e3b3 100644 --- a/crates/oswilno-view/templates/base.html +++ b/crates/oswilno-view/templates/base.html @@ -4,7 +4,10 @@ OS Wilno + + + {% block head %} {% endblock %} diff --git a/crates/oswilno-view/templates/main.html b/crates/oswilno-view/templates/main.html index 6d3fd12..0068052 100644 --- a/crates/oswilno-view/templates/main.html +++ b/crates/oswilno-view/templates/main.html @@ -1,4 +1,6 @@ -
+
+
+
{% include "navbar.html" %} {{ body|safe }}
diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0b91799 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,11 @@ +version: '3.0' + +services: + redash: + image: redash/redash:latest + ports: + - 6080:80 + - 6088:8080 + environment: + REDASH_SECRET_KEY: d6b9cb1efaf65aa77de4ae16c26720c962697394625d2df4f76ebd2e4ad8e38d + REDASH_COOKIE_SECRET: a0fac04203b7b2735c3dd94332bf672504f372f83b346db1fa7d2cf0a15bf7cd