feat(ux): import compact + preview format Trimiteri + navigatie + scoatere auto_send (5.11)
8 stories TDD (echipa Sonnet, lead orchestreaza). US-001 scoate hold-ul auto_send din mapare (has_no_auto_send->False, simbol pastrat; cod rezolvat->queued). US-002 scoate bifa auto_send din UI. US-003 preview pas 3 in format .tabel-trimiteri (STARI_PREVIEW + nota_umana_preview, fara repr Python; view-model prez). US-004 filtre layout/stil ca referinta + buton Custom. US-005 navigatie Trimiteri/Mapari sub contoare pe toate paginile. US-006 import <details> nativ colapsabil. US-007 post-commit reveal (OOB _coada/_status + HX-Trigger). US-008 auto-refresh dupa actiuni (nudge eliminat). VERIFY context curat PASS (8/8). /code-review high: 3 buguri reparate (tab nav la self-refresh, pill Custom valori stale, nota_umana_preview precedenta needs_mapping). 934 passed, 1 skipped. Backend trimitere + schema NEATINSE. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,8 @@
|
||||
Filtre + tabel (_submissions.html); detaliul se deschide in modalul global (#modal-detaliu).
|
||||
#}
|
||||
<section id="trimiteri-section" aria-labelledby="trimiteri-heading"
|
||||
style="margin-top:22px; padding-top:18px; border-top:2px solid var(--line);">
|
||||
style="margin-top:22px; padding-top:18px; border-top:2px solid var(--line);"
|
||||
{% if oob %}hx-swap-oob="outerHTML"{% endif %}>
|
||||
<div class="card">
|
||||
<div style="display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:0 0 12px;">
|
||||
<h2 id="trimiteri-heading" style="font-size:15px; margin:0;">
|
||||
@@ -19,45 +20,66 @@
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<!-- Bara de filtre: vehicul/data + pill-uri de stare pe acelasi rand. Pill-urile scriu
|
||||
campul hidden status si re-trimit form-ul (filtreazaStare) -> filtrul persista la reincarcari. -->
|
||||
<!-- Bara de filtre: [quick-pills data STANGA] [cautare vehicul MIJLOC] [pills stare DREAPTA].
|
||||
Pill-urile de stare scriu campul hidden status si re-trimit form-ul (filtreazaStare).
|
||||
Quick-pills de data apeleaza setDataRange -> seteaza data_de/data_pana + re-submit. -->
|
||||
<form id="filtre-trimiteri"
|
||||
hx-get="/_fragments/submissions"
|
||||
hx-target="#submissions-wrap"
|
||||
hx-swap="innerHTML"
|
||||
hx-trigger="submit, change, keyup delay:400ms from:input[name='vehicul']"
|
||||
style="display:flex; gap:10px 14px; flex-wrap:wrap; align-items:flex-end; margin-bottom:12px;">
|
||||
style="display:flex; gap:8px 12px; flex-wrap:wrap; align-items:center; margin-bottom:12px;">
|
||||
<input type="hidden" id="f-status" name="status" value="{{ status_filtru | default('', true) }}">
|
||||
{# Pagina curenta — actualizata prin OOB swap din _submissions.html; inclusa la reincarcari. #}
|
||||
<input type="hidden" id="f-page" name="page" value="1">
|
||||
<div>
|
||||
<label for="f-vehicul" class="muted" style="display:block; font-size:12px;">Vehicul (nr/VIN)</label>
|
||||
<input id="f-vehicul" type="text" name="vehicul" placeholder="ex. B123 sau VIN" style="max-width:180px;">
|
||||
|
||||
{# === STANGA: Quick-pills de data (preset interval) + buton Custom ===
|
||||
Azi / 7 zile / 30 zile → seteaza interval preset si submitr automat.
|
||||
Custom → dezvaluie #custom-date-fields pentru introducere manuala (fara submit automat). #}
|
||||
<div style="flex:0 0 auto; display:flex; gap:8px; align-items:center; flex-wrap:wrap;">
|
||||
<div class="pills-categorii" id="quick-date-pills">
|
||||
<button type="button" class="pill-cat pill-data" data-range="azi"
|
||||
aria-pressed="false"
|
||||
onclick="setDataRange(this,'azi')">Azi</button>
|
||||
<button type="button" class="pill-cat pill-data" data-range="7zile"
|
||||
aria-pressed="false"
|
||||
onclick="setDataRange(this,'7zile')">7 zile</button>
|
||||
<button type="button" class="pill-cat pill-data" data-range="30zile"
|
||||
aria-pressed="false"
|
||||
onclick="setDataRange(this,'30zile')">30 zile</button>
|
||||
<button type="button" class="pill-cat pill-data" data-range="custom"
|
||||
aria-pressed="false"
|
||||
onclick="setDataRange(this,'custom')">Custom</button>
|
||||
</div>
|
||||
{# Campuri de data pentru modul Custom: ascunse pana la click pe „Custom".
|
||||
type="date" (nu hidden) permite interactiunea utilizatorului.
|
||||
Campul change pe form re-incarca automat lista via hx-trigger="change". #}
|
||||
<div id="custom-date-fields"
|
||||
style="display:none; gap:4px; align-items:center; flex-wrap:wrap; font-size:13px;">
|
||||
<label for="f-data-de" class="muted" style="font-size:12px; white-space:nowrap;">De:</label>
|
||||
<input type="date" id="f-data-de" name="data_de" value=""
|
||||
style="font-size:13px; max-width:140px;">
|
||||
<label for="f-data-pana" class="muted" style="font-size:12px; white-space:nowrap;">Pana:</label>
|
||||
<input type="date" id="f-data-pana" name="data_pana" value=""
|
||||
style="font-size:13px; max-width:140px;">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label for="f-data-de" class="muted" style="display:block; font-size:12px;">Data de la</label>
|
||||
<input id="f-data-de" type="date" name="data_de">
|
||||
|
||||
{# === MIJLOC: cautare vehicul (nr/VIN) + buton Filtreaza === #}
|
||||
<div style="display:flex; align-items:center; gap:8px; flex:1 1 auto; min-width:160px; flex-wrap:wrap;">
|
||||
<input id="f-vehicul" type="text" name="vehicul" placeholder="Vehicul (nr/VIN)"
|
||||
style="flex:1 1 auto; min-width:120px;">
|
||||
<button type="submit" style="flex:0 0 auto;">Filtreaza</button>
|
||||
</div>
|
||||
<div>
|
||||
<label for="f-data-pana" class="muted" style="display:block; font-size:12px;">pana la</label>
|
||||
<input id="f-data-pana" type="date" name="data_pana">
|
||||
</div>
|
||||
<button type="submit">Filtreaza</button>
|
||||
{# Pill-uri de stare pe acelasi rand cu filtrele; re-randate prin OOB la reincarcarea tabelului. #}
|
||||
<span id="pills-categorii" class="pills-categorii" style="margin-left:auto;">
|
||||
|
||||
{# === DREAPTA: pill-uri de stare cu contoare; re-randate via OOB la reincarcarea tabelului === #}
|
||||
<span id="pills-categorii" class="pills-categorii" style="margin-left:auto; flex:0 0 auto;">
|
||||
{% include '_pills.html' %}
|
||||
</span>
|
||||
</form>
|
||||
|
||||
<!-- Nudge "Date noi": tabelul nu se reimprospateaza singur; bannerul apare doar cand
|
||||
pollerul usor detecteaza schimbari, iar utilizatorul reincarca cand vrea. -->
|
||||
<div id="nudge-trimiteri" hidden role="status" aria-live="polite">
|
||||
<span>Sunt trimiteri actualizate.</span>
|
||||
<button type="button" onclick="reincarcaTrimiteri()">Reincarca</button>
|
||||
</div>
|
||||
|
||||
<!-- Tabelul se reincarca DOAR la: incarcarea paginii, actiunile tale (trimiteriChanged)
|
||||
sau apasarea pe Reincarca (reincarcaTrimiteri). Fara poll periodic care sa-l reseteze. -->
|
||||
<!-- Tabelul se reincarca la: incarcarea paginii, actiunile tale (trimiteriChanged)
|
||||
si auto-refresh periodic din poller (date noi externe). -->
|
||||
<div id="submissions-wrap"
|
||||
hx-get="/_fragments/submissions"
|
||||
hx-trigger="load, trimiteriChanged from:body, reincarcaTrimiteri"
|
||||
|
||||
Reference in New Issue
Block a user