Merge branch 'select-dataset-issue' into 'staging'
Select dataset issue See merge request PhilippHofer/rot!35
This commit is contained in:
commit
a2c91b784a
@ -19,18 +19,47 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function selectBoatChange() {
|
function selectBoatChange() {
|
||||||
const boatSelect = document.querySelector('#boat_id');
|
const boatSelect = <HTMLSelectElement>document.querySelector('#boat_id');
|
||||||
if(boatSelect) {
|
const boatChoice = new Choices(boatSelect, {
|
||||||
boatSelect.addEventListener('change', function() {
|
loadingText: 'Wird geladen...',
|
||||||
const selectedElement = boatSelect as HTMLSelectElement;
|
noResultsText: 'Keine Ergebnisse gefunden',
|
||||||
const opt = selectedElement.options[selectedElement.selectedIndex];
|
noChoicesText: 'Keine Ergebnisse gefunden',
|
||||||
const selectedValue = (<HTMLOptionElement>opt).dataset.amount_seats;
|
itemSelectText: 'Zum Auswählen klicken',
|
||||||
const rowers = Number(selectedValue) - 1;
|
callbackOnCreateTemplates: function () {
|
||||||
choiceObjects['newrower'].config.maxItemCount = rowers;
|
return {
|
||||||
choiceObjects['newrower'].removeActiveItems(rowers);
|
option: ({ label, value, customProperties, active, disabled, }: any) => {
|
||||||
(rowers === 0 ? choiceObjects['newrower'].disable() : choiceObjects['newrower'].enable())
|
const opt: HTMLOptionElement = Choices.defaults.templates.option.call(
|
||||||
});
|
this,
|
||||||
}
|
{ label, value, customProperties, active, disabled }
|
||||||
|
);
|
||||||
|
|
||||||
|
// We get the original <option> from choicejs
|
||||||
|
const originalOption: HTMLOptionElement = this._presetOptions.filter(
|
||||||
|
(option: HTMLOptionElement) => option.value === value
|
||||||
|
)[0];
|
||||||
|
|
||||||
|
const rowers = Number(originalOption.dataset.amount_seats) - 1;
|
||||||
|
choiceObjects['newrower'].config.maxItemCount = rowers;
|
||||||
|
choiceObjects['newrower'].removeActiveItems(rowers);
|
||||||
|
(rowers === 0 ? choiceObjects['newrower'].disable() : choiceObjects['newrower'].enable());
|
||||||
|
|
||||||
|
return opt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} as any);
|
||||||
|
|
||||||
|
choiceObjects[boatSelect.id] = boatChoice;
|
||||||
|
|
||||||
|
const shipmasterSelect = <HTMLSelectElement>document.querySelector('#shipmaster');
|
||||||
|
const shipmasterChoice = new Choices(shipmasterSelect, {
|
||||||
|
loadingText: 'Wird geladen...',
|
||||||
|
noResultsText: 'Keine Ergebnisse gefunden',
|
||||||
|
noChoicesText: 'Keine Ergebnisse gefunden',
|
||||||
|
itemSelectText: 'Zum Auswählen klicken',
|
||||||
|
});
|
||||||
|
|
||||||
|
choiceObjects[shipmasterSelect.id] = shipmasterChoice;
|
||||||
}
|
}
|
||||||
|
|
||||||
function initBoatActions() {
|
function initBoatActions() {
|
||||||
@ -42,10 +71,11 @@ function initBoatActions() {
|
|||||||
const rowers = Number(select.dataset.seats) - 1;
|
const rowers = Number(select.dataset.seats) - 1;
|
||||||
choiceObjects['newrower'].config.maxItemCount = rowers;
|
choiceObjects['newrower'].config.maxItemCount = rowers;
|
||||||
choiceObjects['newrower'].removeActiveItems(rowers);
|
choiceObjects['newrower'].removeActiveItems(rowers);
|
||||||
let boatSelect = <HTMLSelectElement>document.querySelector('#boat_id');
|
|
||||||
if(boatSelect && select.dataset.id) {
|
if (select.dataset.id) {
|
||||||
boatSelect.value = select.dataset.id;
|
choiceObjects['boat_id'].setChoiceByValue(select.dataset.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
(rowers === 0 ? choiceObjects['newrower'].disable() : choiceObjects['newrower'].enable());
|
(rowers === 0 ? choiceObjects['newrower'].disable() : choiceObjects['newrower'].enable());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -64,8 +64,6 @@ async fn index(
|
|||||||
|
|
||||||
let on_water = Logbook::on_water(db).await;
|
let on_water = Logbook::on_water(db).await;
|
||||||
|
|
||||||
println!("{on_water:?}");
|
|
||||||
|
|
||||||
let mut context = Context::new();
|
let mut context = Context::new();
|
||||||
if let Some(msg) = flash {
|
if let Some(msg) = flash {
|
||||||
context.insert("flash", &msg.into_inner());
|
context.insert("flash", &msg.into_inner());
|
||||||
@ -111,8 +109,20 @@ async fn kiosk(
|
|||||||
kiosk: KioskCookie,
|
kiosk: KioskCookie,
|
||||||
) -> Template {
|
) -> Template {
|
||||||
let boats = Boat::all_at_location(db, kiosk.0).await;
|
let boats = Boat::all_at_location(db, kiosk.0).await;
|
||||||
let coxes = User::cox(db).await;
|
let coxes: Vec<UserWithWaterStatus> = futures::future::join_all(
|
||||||
let users = User::all(db).await;
|
User::cox(db)
|
||||||
|
.await
|
||||||
|
.into_iter()
|
||||||
|
.map(|user| UserWithWaterStatus::from_user(user, db)),
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
let users: Vec<UserWithWaterStatus> = futures::future::join_all(
|
||||||
|
User::all(db)
|
||||||
|
.await
|
||||||
|
.into_iter()
|
||||||
|
.map(|user| UserWithWaterStatus::from_user(user, db)),
|
||||||
|
)
|
||||||
|
.await;
|
||||||
let logtypes = LogType::all(db).await;
|
let logtypes = LogType::all(db).await;
|
||||||
let distances = Logbook::distances(db).await;
|
let distances = Logbook::distances(db).await;
|
||||||
|
|
||||||
|
@ -35,12 +35,20 @@
|
|||||||
<select name="shipmaster" id="shipmaster" class="input rounded-md h-10">
|
<select name="shipmaster" id="shipmaster" class="input rounded-md h-10">
|
||||||
<optgroup label="Steuerleute">
|
<optgroup label="Steuerleute">
|
||||||
{% for cox in coxes %}
|
{% for cox in coxes %}
|
||||||
<option value="{{ cox.id }}" {% if cox.on_water %} disabled="disabled" {% else %} {% if cox.id == shipmaster %} selected {% endif %} {% endif %}>{{ cox.name }} {% if cox.on_water %} (am Wasser) {% endif %}</option>
|
<option value="{{ cox.id }}" {% if cox.on_water %} disabled="disabled" {% else %} {% if cox.id == shipmaster %} selected {% endif %} {% endif %}>{{ cox.name }}
|
||||||
|
{% if cox.on_water %}
|
||||||
|
(am Wasser)
|
||||||
|
{% endif %}
|
||||||
|
</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</optgroup>
|
</optgroup>
|
||||||
<optgroup label="Mitglieder">
|
<optgroup label="Mitglieder">
|
||||||
{% for user in users | filter(attribute="is_cox", value=false) %}
|
{% for user in users | filter(attribute="is_cox", value=false) %}
|
||||||
<option value="{{ user.id }}" {% if user.id == shipmaster %} selected {% endif %} {% if user.on_water %} disabled="disabled" {% endif %}>{{ user.name }} {% if user.on_water %} (am Wasser) {% endif %}</option>
|
<option value="{{ user.id }}" {% if user.id == shipmaster %} selected {% endif %} {% if user.on_water %} disabled="disabled" {% endif %}>{{ user.name }}
|
||||||
|
{% if user.on_water %}
|
||||||
|
(am Wasser)
|
||||||
|
{% endif %}
|
||||||
|
</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</optgroup>
|
</optgroup>
|
||||||
</select>
|
</select>
|
||||||
@ -58,16 +66,16 @@
|
|||||||
{{ macros::input(label='Abfahrtszeit', name='departure', type='datetime-local', required=true) }}
|
{{ macros::input(label='Abfahrtszeit', name='departure', type='datetime-local', required=true) }}
|
||||||
{{ macros::input(label='Ankunftszeit', name='arrival', type='datetime-local') }}
|
{{ macros::input(label='Ankunftszeit', name='arrival', type='datetime-local') }}
|
||||||
|
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<label for="destination" class="small text-gray-600">Ziel</label>
|
<label for="destination" class="small text-gray-600">Ziel</label>
|
||||||
|
|
||||||
<input class="input rounded-md set-distance-js" type="search" list="destinations" placeholder="Destination" id="destination" name="destination" value="" data-relation="distance_in_km"/>
|
<input class="input rounded-md set-distance-js" type="search" list="destinations" placeholder="Destination" id="destination" name="destination" value="" data-relation="distance_in_km"/>
|
||||||
<datalist id="destinations">
|
<datalist id="destinations">
|
||||||
{% for distance in distances %}
|
{% for distance in distances %}
|
||||||
<option value="{{ distance.0 }}" distance={{ distance.1 }} />
|
<option value="{{ distance.0 }}" distance={{ distance.1 }}/>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</datalist>
|
</datalist>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
{{ macros::input(label="Distanz", name="distance_in_km", id="distance_in_km" , type="number", min=0, value='', class="rounded-md") }}
|
{{ macros::input(label="Distanz", name="distance_in_km", id="distance_in_km" , type="number", min=0, value='', class="rounded-md") }}
|
||||||
@ -95,21 +103,26 @@
|
|||||||
{% endmacro boat_select %}
|
{% endmacro boat_select %}
|
||||||
|
|
||||||
{% macro rower_select(id, selected, amount_seats='', class='', init='false') %}
|
{% macro rower_select(id, selected, amount_seats='', class='', init='false') %}
|
||||||
{% if not amount_seats or amount_seats > 1 %}
|
{% if not amount_seats or amount_seats > 1 %}
|
||||||
<div class="{{ class }}">
|
<div class="{{ class }}">
|
||||||
<select style="width: 100%;" multiple name="rowers[]" id="{{id}}" class="w-full" data-seats="{{amount_seats}}" data-init={{init}}>
|
<select style="width: 100%;" multiple name="rowers[]" id="{{id}}" class="w-full" data-seats="{{amount_seats}}" data-init={{init}}>
|
||||||
{% for user in users %}
|
{% for user in users %}
|
||||||
{% set_global sel = false %}
|
{% set_global sel = false %}
|
||||||
{% for rower in selected %}
|
{% for rower in selected %}
|
||||||
{% if rower.id == user.id %}
|
{% if rower.id == user.id %}
|
||||||
{% set_global sel = true %}
|
{% set_global sel = true %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<option value="{{ user.id }}" {% if sel %} selected {% endif %} {% if user.on_water %} disabled="disabled" {% endif %}>{{user.name}} {% if user.on_water %} (am Wasser) {% endif %}</option>
|
<option value="{{ user.id }}" {% if sel %} selected {% endif %} {% if user.on_water %} disabled="disabled" {% endif %}>
|
||||||
{% endfor %}
|
{{user.name}}
|
||||||
</select>
|
{% if user.on_water %}
|
||||||
</div>
|
(am Wasser)
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
{% endmacro rower_select %}
|
{% endmacro rower_select %}
|
||||||
|
|
||||||
{% macro show(log, state, allowed_to_close=false, only_ones) %}
|
{% macro show(log, state, allowed_to_close=false, only_ones) %}
|
||||||
@ -215,13 +228,13 @@
|
|||||||
|
|
||||||
{% macro home(log, only_ones) %}
|
{% macro home(log, only_ones) %}
|
||||||
<form class="grid grid-cols-1 gap-3" action="/log/{{log.id}}" method="post">
|
<form class="grid grid-cols-1 gap-3" action="/log/{{log.id}}" method="post">
|
||||||
{% for user in users %}
|
{% for user in users %}
|
||||||
{% if user.id == log.shipmaster %}
|
{% if user.id == log.shipmaster %}
|
||||||
<p>
|
<p>
|
||||||
<strong>{{ user.name }}</strong>
|
<strong>{{ user.name }}</strong>
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if not only_ones %}
|
{% if not only_ones %}
|
||||||
{{ log::rower_select(id="rowers"~log.id, selected=log.rowers, amount_seats=log.boat.amount_seats) }}
|
{{ log::rower_select(id="rowers"~log.id, selected=log.rowers, amount_seats=log.boat.amount_seats) }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@ -229,7 +242,7 @@
|
|||||||
<label for="destination" class="small text-gray-600">Ziel</label>
|
<label for="destination" class="small text-gray-600">Ziel</label>
|
||||||
|
|
||||||
<input class="input rounded-md set-distance-js change-id-js" type="search" list="destinations" placeholder="Destination" required="required" id="destination{{ log.id }}" name="destination" value="{{log.destination}}" data-relation="distance_in_km{{log.id}}"/>
|
<input class="input rounded-md set-distance-js change-id-js" type="search" list="destinations" placeholder="Destination" required="required" id="destination{{ log.id }}" name="destination" value="{{log.destination}}" data-relation="distance_in_km{{log.id}}"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
{{ macros::input(label="Distanz", name="distance_in_km", id="distance_in_km" ~ log.id , type="number", min=0, value=log.distance_in_km, required=true, class="rounded-md change-id-js") }}
|
{{ macros::input(label="Distanz", name="distance_in_km", id="distance_in_km" ~ log.id , type="number", min=0, value=log.distance_in_km, required=true, class="rounded-md change-id-js") }}
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
</a>
|
</a>
|
||||||
{% if loggedin_user.is_admin%}
|
{% if loggedin_user.is_admin%}
|
||||||
<a href="/boatdamage" class="inline-flex justify-center rounded-md bg-primary-600 mx-1 px-3 py-2 text-sm font-semibold text-white hover:bg-primary-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-600 cursor-pointer">
|
<a href="/boatdamage" class="inline-flex justify-center rounded-md bg-primary-600 mx-1 px-3 py-2 text-sm font-semibold text-white hover:bg-primary-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-600 cursor-pointer">
|
||||||
Bootsschaden
|
Bootsschaden
|
||||||
<span class="sr-only">Bootsschaden</span>
|
<span class="sr-only">Bootsschaden</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if loggedin_user.is_admin %}
|
{% if loggedin_user.is_admin %}
|
||||||
<a href="/stat" class="inline-flex justify-center rounded-md bg-primary-600 mx-1 px-3 py-2 text-sm font-semibold text-white hover:bg-primary-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-600 cursor-pointer">
|
<a href="/stat" class="inline-flex justify-center rounded-md bg-primary-600 mx-1 px-3 py-2 text-sm font-semibold text-white hover:bg-primary-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-600 cursor-pointer">
|
||||||
@ -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] -}}
|
||||||
@ -116,7 +116,7 @@
|
|||||||
{% if rower.is_real_guest %}
|
{% if rower.is_real_guest %}
|
||||||
<small class="text-gray-600">(Gast)</small>
|
<small class="text-gray-600">(Gast)</small>
|
||||||
{% if allow_removing %}
|
{% if allow_removing %}
|
||||||
<a href="/remove/{{ trip_details_id }}/{{ rower.name }}" class="btn btn-attention btn-fw">Abmelden</a>
|
<a href="/remove/{{ trip_details_id }}/{{ rower.name }}" class="btn btn-attention btn-fw">Abmelden</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<span class="hidden">(angemeldet seit
|
<span class="hidden">(angemeldet seit
|
||||||
|
Loading…
Reference in New Issue
Block a user