feat(oxibadge): add month-confirmation flow and fetch records/employees
Check, format and test / build (push) Successful in 10m0s

Adds the screen after onboarding: pick a month/year (ConfirmMonth), show
loading screens while the device is queried, then download that month's
records and resolve each distinct employee's name, printing both to
stdout (debug pretty-print) before landing on the placeholder "done"
screen.

- r701: RecordIterator's boxed stream is now Send, required for it to
  cross into a Tauri command's future.
- oxibadge: load_records/load_employees commands, sharing the existing
  3-retry connect_with_retries helper. load_records uses skip_while/
  take_while on the device's newest-first stream to grab only the
  target month without walking its whole history, then a single
  collect + in-place Vec::reverse() back to chronological order.
- Shared LoadingScreen/Intro components extracted so future screens
  reuse the same look without duplicating markup/CSS.

Assisted-by: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-07 12:47:36 +02:00
parent 99772b9e4a
commit 28186c7745
14 changed files with 621 additions and 41 deletions
+19
View File
@@ -19,6 +19,25 @@
"unknown": "Errore di connessione"
}
},
"confirm_month": {
"title": "Conferma del mese",
"subtitle": "Stai per confermare le timbrature di questo mese. Tocca il mese o l'anno per cambiarli.",
"change_month_aria": "Mese: {month}, cambia",
"change_year_aria": "Anno: {year}, cambia",
"close_aria": "Chiudi selezione",
"choose_month_aria": "Scegli il mese",
"choose_year_aria": "Scegli l'anno",
"month_option_aria": "{month} {year}",
"button": "Vai alle timbrature"
},
"loading_records": {
"title": "Scarico le timbrature...",
"description": "Sto leggendo dal timbratore le timbrature di <strong>{period}</strong>. Può richiedere qualche secondo."
},
"loading_employees": {
"title": "Recupero i dipendenti...",
"description": "Sto leggendo i nomi dei dipendenti registrati sul timbratore. Ci vuole solo un attimo."
},
"done": {
"message": "Non c'è niente da fare."
}