ui: WBS dropdown, decimal-room filters, segmented toggle, 'Final absenden'

* Einstellungen → Profil: WBS-Typ jetzt <select> mit WBS 100/140/160/180/220
* Einstellungen → Filter: Zimmer min/max als number-Feld mit step=0.5
  (2.5-Zimmer-Wohnungen sauber eingebbar)
* Wohnungen-Top-Leiste: Segmented-Toggle (ein zusammenhängender Kippschalter)
  für die beiden Schalter, keine einzelnen Radio-Pills mehr
* Trockenmodus umbenannt in 'Final absenden' (positive Polarität: An=echt
  senden). Bestätigungsdialog beim Einschalten.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Moritz 2026-04-21 11:50:50 +02:00
parent 120d14e918
commit d9468f6814
4 changed files with 73 additions and 42 deletions

View file

@ -19,51 +19,68 @@
</a>
</section>
<!-- Reihe 2: Schalter Automatisch bewerben + Trockenmodus (Radio-Gruppen) -->
<!-- Reihe 2: Schalter Automatisch bewerben + Final absenden -->
<section class="grid grid-cols-1 md:grid-cols-2 gap-3">
<!-- Automatisch bewerben -->
<form class="card p-4"
hx-post="/actions/auto-apply"
hx-trigger="change"
hx-target="#wohnungen-body"
hx-swap="outerHTML">
<form class="card p-4 flex items-center justify-between gap-3">
<input type="hidden" name="csrf" value="{{ csrf }}">
<div class="text-[11px] uppercase tracking-wide text-slate-500 mb-2">Automatisch bewerben</div>
<div class="flex gap-4">
<label class="radio-opt">
<div class="flex flex-col gap-0.5">
<div class="text-[11px] uppercase tracking-wide text-slate-500">Automatisch bewerben</div>
<div class="text-xs text-slate-500">bei Match ohne Nachfrage bewerben</div>
</div>
<div class="toggle warn">
<label>
<input type="radio" name="value" value="off"
hx-post="/actions/auto-apply"
hx-trigger="change"
hx-include="closest form"
hx-target="#wohnungen-body"
hx-swap="outerHTML"
{% if not auto_apply_enabled %}checked{% endif %}>
<span>Aus</span>
Aus
</label>
<label class="radio-opt"
{% if not auto_apply_enabled %}data-hx-confirm="Automatisches Bewerben einschalten? Bei jedem passenden Flat wird automatisch beworben."{% endif %}>
<label>
<input type="radio" name="value" value="on"
hx-post="/actions/auto-apply"
hx-trigger="change"
hx-include="closest form"
hx-target="#wohnungen-body"
hx-swap="outerHTML"
hx-confirm="Automatisches Bewerben einschalten? Bei jedem passenden Flat wird automatisch beworben."
{% if auto_apply_enabled %}checked{% endif %}>
<span>An</span>
An
</label>
</div>
</form>
<!-- Trockenmodus -->
<form class="card p-4"
hx-post="/actions/submit-forms"
hx-trigger="change"
hx-target="#wohnungen-body"
hx-swap="outerHTML">
<!-- Final absenden (inverse of submit_forms: on=real, off=trocken) -->
<form class="card p-4 flex items-center justify-between gap-3">
<input type="hidden" name="csrf" value="{{ csrf }}">
<div class="text-[11px] uppercase tracking-wide text-slate-500 mb-2">Trockenmodus</div>
<div class="flex gap-4">
<label class="radio-opt">
<input type="radio" name="value" value="on"
{% if not submit_forms %}checked{% endif %}>
<span>An <span class="text-xs text-slate-500">(Formular ausfüllen, nicht absenden)</span></span>
</label>
<label class="radio-opt">
<div class="flex flex-col gap-0.5">
<div class="text-[11px] uppercase tracking-wide text-slate-500">Final absenden</div>
<div class="text-xs text-slate-500">aus = Formular ausfüllen, nicht abschicken</div>
</div>
<div class="toggle warn">
<label>
<input type="radio" name="value" value="off"
hx-confirm="Trockenmodus ausschalten? Formulare werden dann WIRKLICH abgesendet!"
hx-post="/actions/submit-forms"
hx-trigger="change"
hx-include="closest form"
hx-target="#wohnungen-body"
hx-swap="outerHTML"
{% if not submit_forms %}checked{% endif %}>
Aus
</label>
<label>
<input type="radio" name="value" value="on"
hx-post="/actions/submit-forms"
hx-trigger="change"
hx-include="closest form"
hx-target="#wohnungen-body"
hx-swap="outerHTML"
hx-confirm="Final absenden einschalten? Formulare werden dann WIRKLICH abgeschickt!"
{% if submit_forms %}checked{% endif %}>
<span>Aus <span class="text-xs text-[#b8404e]">(echt senden)</span></span>
An
</label>
</div>
</form>