Working on session
This commit is contained in:
parent
97c8383313
commit
dcb2276ed3
@ -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));
|
||||
|
@ -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(
|
||||
|
@ -1,18 +1,35 @@
|
||||
<oswilno-parking-space-rents>
|
||||
{% 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) %}
|
||||
<oswilno-parking-space-rent id="parking-space-rent-{{ parking_space_rent.id }}">
|
||||
<oswilno-parking-space id="parking-space-{{ parking_space.id }}">
|
||||
<oswilno-account id="account-{{ account.id }}">
|
||||
<div>{{ account.login }}</div>
|
||||
</oswilno-account>
|
||||
</oswilno-parking-space>
|
||||
<oswilno-price id="parking-space-rent-{{ parking_space_rent.id }}-price" multiplier="100" currency="PLN" price="{{ parking_space_rent.price }}">
|
||||
{{ parking_space_rent.price }}
|
||||
</oswilno-price>
|
||||
</oswilno-parking-space-rent>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor -%}
|
||||
</oswilno-parking-space-rents>
|
||||
<section class="container mx-auto px-4">
|
||||
<section class="flex space-x-4">
|
||||
<h1 class="text-white font-semibold text-5xl">
|
||||
{{"Parking spaces"}}
|
||||
</h1>
|
||||
<div class="">
|
||||
|
||||
</div>
|
||||
<div>
|
||||
</div>
|
||||
<div>
|
||||
<button class="text-emerald-500 background-transparent font-bold uppercase px-6 py-2 text-sm outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150 border-2 rounded-full">
|
||||
<i class="fas fa-plus"></i>
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
<oswilno-parking-space-rents>
|
||||
{% 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) %}
|
||||
<oswilno-parking-space-rent id="parking-space-rent-{{ parking_space_rent.id }}">
|
||||
<oswilno-parking-space id="parking-space-{{ parking_space.id }}">
|
||||
<oswilno-account id="account-{{ account.id }}">
|
||||
<div>{{ account.login }}</div>
|
||||
</oswilno-account>
|
||||
</oswilno-parking-space>
|
||||
<oswilno-price id="parking-space-rent-{{ parking_space_rent.id }}-price" multiplier="100" currency="PLN" price="{{ parking_space_rent.price }}">
|
||||
{{ parking_space_rent.price }}
|
||||
</oswilno-price>
|
||||
</oswilno-parking-space-rent>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor -%}
|
||||
</oswilno-parking-space-rents>
|
||||
</section>
|
||||
|
@ -1,5 +0,0 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block body %}
|
||||
{% include "./all-partial.html" %}
|
||||
{% endblock %}
|
@ -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
|
||||
{
|
||||
|
BIN
crates/oswilno-view/assets/banner.jpg
Normal file
BIN
crates/oswilno-view/assets/banner.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 307 KiB |
@ -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<String>,
|
||||
pub autocomplete: Vec<(String, String)>,
|
||||
}
|
||||
|
||||
@ -29,7 +29,7 @@ pub struct SessionOpts {
|
||||
#[derive(Debug)]
|
||||
pub struct MainOpts {
|
||||
pub show: bool,
|
||||
pub search: Option<SearchOptions>,
|
||||
pub search: Option<SearchOpts>,
|
||||
pub session: Option<SessionOpts>,
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,10 @@
|
||||
<title>OS Wilno</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<script defer src="https://unpkg.com/@alpinejs/collapse@3.x.x/dist/cdn.min.js"></script>
|
||||
<script src="https://unpkg.com/alpinejs" defer></script>
|
||||
<script src="/assets/build.js" type="module"></script>
|
||||
<link href="https://use.fontawesome.com/releases/v5.0.6/css/all.css" rel="stylesheet" />
|
||||
<link href="/assets/style.css" rel="stylesheet">
|
||||
{% block head %}
|
||||
{% endblock %}
|
||||
|
@ -1,4 +1,6 @@
|
||||
<main>
|
||||
<main class="relative">
|
||||
<div class="absolute top-0 w-full h-full bg-center bg-cover" style="background-image:url('/banner.jpg')">
|
||||
</div>
|
||||
{% include "navbar.html" %}
|
||||
{{ body|safe }}
|
||||
</main>
|
||||
|
11
docker-compose.yml
Normal file
11
docker-compose.yml
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user