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