fix multi-select; only show private boats owner + kiosk
This commit is contained in:
parent
a2c91b784a
commit
fea45d5257
@ -39,9 +39,9 @@ function selectBoatChange() {
|
|||||||
)[0];
|
)[0];
|
||||||
|
|
||||||
const rowers = Number(originalOption.dataset.amount_seats) - 1;
|
const rowers = Number(originalOption.dataset.amount_seats) - 1;
|
||||||
choiceObjects['newrower'].config.maxItemCount = rowers;
|
|
||||||
choiceObjects['newrower'].removeActiveItems(rowers);
|
setMaxAmountRowers(rowers);
|
||||||
(rowers === 0 ? choiceObjects['newrower'].disable() : choiceObjects['newrower'].enable());
|
|
||||||
|
|
||||||
return opt;
|
return opt;
|
||||||
}
|
}
|
||||||
@ -62,6 +62,27 @@ function selectBoatChange() {
|
|||||||
choiceObjects[shipmasterSelect.id] = shipmasterChoice;
|
choiceObjects[shipmasterSelect.id] = shipmasterChoice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setMaxAmountRowers(rowers){
|
||||||
|
let curSelection = choiceObjects['newrower'].getValue(true);
|
||||||
|
let amount_to_delete = curSelection.length - rowers;
|
||||||
|
if (amount_to_delete > 0){
|
||||||
|
let to_delete = curSelection.slice(-amount_to_delete);
|
||||||
|
for (let del of to_delete) {
|
||||||
|
choiceObjects['newrower'].removeActiveItemsByValue(del);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
choiceObjects['newrower'].config.maxItemCount = rowers;
|
||||||
|
const only_steering = <HTMLSelectElement>document.querySelector('#shipmaster_only_steering');
|
||||||
|
if (rowers === 0) {
|
||||||
|
choiceObjects['newrower'].disable()
|
||||||
|
only_steering.disabled = true;
|
||||||
|
}else{
|
||||||
|
choiceObjects['newrower'].enable()
|
||||||
|
only_steering.disabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function initBoatActions() {
|
function initBoatActions() {
|
||||||
const boatSelects = document.querySelectorAll('.boats-js[data-onclick="true"]');
|
const boatSelects = document.querySelectorAll('.boats-js[data-onclick="true"]');
|
||||||
if(boatSelects) {
|
if(boatSelects) {
|
||||||
@ -69,14 +90,20 @@ function initBoatActions() {
|
|||||||
select.addEventListener('click', function() {
|
select.addEventListener('click', function() {
|
||||||
if(select.dataset.seats) {
|
if(select.dataset.seats) {
|
||||||
const rowers = Number(select.dataset.seats) - 1;
|
const rowers = Number(select.dataset.seats) - 1;
|
||||||
choiceObjects['newrower'].config.maxItemCount = rowers;
|
|
||||||
choiceObjects['newrower'].removeActiveItems(rowers);
|
setMaxAmountRowers(rowers);
|
||||||
|
|
||||||
if (select.dataset.id) {
|
if (select.dataset.id) {
|
||||||
choiceObjects['boat_id'].setChoiceByValue(select.dataset.id);
|
choiceObjects['boat_id'].setChoiceByValue(select.dataset.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
(rowers === 0 ? choiceObjects['newrower'].disable() : choiceObjects['newrower'].enable());
|
window.scrollTo(0, 0);
|
||||||
|
|
||||||
|
const inputElement = document.getElementById("departure") as HTMLInputElement;
|
||||||
|
const now = new Date();
|
||||||
|
const formattedDateTime = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}T${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}`;
|
||||||
|
|
||||||
|
inputElement.value = formattedDateTime;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -100,7 +127,7 @@ function initNewChoice(select: HTMLInputElement) {
|
|||||||
noChoicesText: 'Keine Ergebnisse gefunden',
|
noChoicesText: 'Keine Ergebnisse gefunden',
|
||||||
itemSelectText: 'Zum Auswählen klicken',
|
itemSelectText: 'Zum Auswählen klicken',
|
||||||
placeholderValue: 'Ruderer auswählen',
|
placeholderValue: 'Ruderer auswählen',
|
||||||
maxItemCount: Number(select.dataset.seats) - 1,
|
maxItemCount: -1, //TODO
|
||||||
maxItemText: (maxItemCount) => {
|
maxItemText: (maxItemCount) => {
|
||||||
return `Nur ${maxItemCount} Ruderer können hinzugefügt werden`;
|
return `Nur ${maxItemCount} Ruderer können hinzugefügt werden`;
|
||||||
},
|
},
|
||||||
|
@ -2,6 +2,8 @@ use rocket::serde::{Deserialize, Serialize};
|
|||||||
use rocket::FromForm;
|
use rocket::FromForm;
|
||||||
use sqlx::{FromRow, SqlitePool};
|
use sqlx::{FromRow, SqlitePool};
|
||||||
|
|
||||||
|
use super::user::User;
|
||||||
|
|
||||||
#[derive(FromRow, Debug, Serialize, Deserialize)]
|
#[derive(FromRow, Debug, Serialize, Deserialize)]
|
||||||
pub struct Boat {
|
pub struct Boat {
|
||||||
pub id: i64,
|
pub id: i64,
|
||||||
@ -130,6 +132,27 @@ ORDER BY amount_seats DESC
|
|||||||
Self::boats_to_details(db, boats).await
|
Self::boats_to_details(db, boats).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn for_user(db: &SqlitePool, user: &User) -> Vec<BoatWithDetails> {
|
||||||
|
if user.is_admin {
|
||||||
|
return Self::all(db).await;
|
||||||
|
}
|
||||||
|
let boats = sqlx::query_as!(
|
||||||
|
Boat,
|
||||||
|
"
|
||||||
|
SELECT id, name, amount_seats, location_id, owner, year_built, boatbuilder, default_shipmaster_only_steering, skull, external
|
||||||
|
FROM boat
|
||||||
|
WHERE owner is null or owner = ?
|
||||||
|
ORDER BY amount_seats DESC
|
||||||
|
",
|
||||||
|
user.id
|
||||||
|
)
|
||||||
|
.fetch_all(db)
|
||||||
|
.await
|
||||||
|
.unwrap(); //TODO: fixme
|
||||||
|
|
||||||
|
Self::boats_to_details(db, boats).await
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn all_at_location(db: &SqlitePool, location: String) -> Vec<BoatWithDetails> {
|
pub async fn all_at_location(db: &SqlitePool, location: String) -> Vec<BoatWithDetails> {
|
||||||
let boats = sqlx::query_as!(
|
let boats = sqlx::query_as!(
|
||||||
Boat,
|
Boat,
|
||||||
|
@ -43,7 +43,7 @@ async fn index(
|
|||||||
flash: Option<FlashMessage<'_>>,
|
flash: Option<FlashMessage<'_>>,
|
||||||
adminuser: AdminUser,
|
adminuser: AdminUser,
|
||||||
) -> Template {
|
) -> Template {
|
||||||
let boats = Boat::all(db).await;
|
let boats = Boat::for_user(db, &adminuser.user).await;
|
||||||
|
|
||||||
let coxes: Vec<UserWithWaterStatus> = futures::future::join_all(
|
let coxes: Vec<UserWithWaterStatus> = futures::future::join_all(
|
||||||
User::cox(db)
|
User::cox(db)
|
||||||
|
@ -83,7 +83,7 @@
|
|||||||
<option selected value>{{ default }}</option>
|
<option selected value>{{ default }}</option>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% for d in data %}
|
{% for d in data %}
|
||||||
<option value="{{ d.id }}" {% if d.id == selected_id %} selected {% endif %} {% if extras != '' %} {% for extra in extras %} {% if extra != 'on_water' %} data- {{extra}}={{d[extra]}} {% else %} {% if d[extra] %} disabled {% endif %} {% endif %} {% endfor %} {% endif %}>
|
<option value="{{ d.id }}" {% if d.id == selected_id %} selected {% endif %} {% if extras != '' %} {% for extra in extras %} {% if extra != 'on_water' %} data-{{extra}}={{d[extra]}} {% else %} {% if d[extra] %} disabled {% endif %} {% endif %} {% endfor %} {% endif %}>
|
||||||
{% for displa in display -%}
|
{% for displa in display -%}
|
||||||
{%- if d[displa] -%}
|
{%- if d[displa] -%}
|
||||||
{{- d[displa] -}}
|
{{- d[displa] -}}
|
||||||
|
Loading…
Reference in New Issue
Block a user