feat(app): ResourceListScreen + Navigation (BottomBar-Tab) #122

Closed
opened 2026-05-18 19:54:17 +00:00 by jreinemann-euris · 0 comments
jreinemann-euris commented 2026-05-18 19:54:17 +00:00 (Migrated from github.com)

Feature: App – ResourceListScreen + Navigation (neuer BottomBar-Tab)

Part of: #117
Depends on: #121

Ziel

Nutzer sehen in einem neuen "Ressourcen"-Tab der BottomBar eine filterbare und sortierbare Liste aller Ressourcen.

Scope

  • TopLevelDestination.RESOURCES in TopLevelDestination.kt (Icon: Icons.Default.LibraryBooks o.ä., Label: "Ressourcen")
  • Screen.ResourceList in Screen.kt
  • ResourceListScreen.kt (Composable):
    • TopAppBar mit Titel "Ressourcen" + Refresh-Button (Icon: Refresh)
    • Freitext-Suchfeld (analog zu ItemListScreen)
    • Filter-Bereich: Tag-Multi-Select-Chips (alle vorhandenen Tags aus der Liste)
    • Sortierungs-Dropdown: Titel (A–Z), Datum (neu→alt), Größe (groß→klein)
    • LazyColumn mit Ressourcen-Karten: Titel, Format-Badge (epub/pdf/zip/7z), Tags-Chips, Dateigröße formatiert, Download-Button
    • EmptyState wenn Liste leer
    • Pull-to-Refresh (oder Refresh-Button in TopBar)
  • ResourceListViewModel.kt (@HiltViewModel):
    • uiState: StateFlow<ResourceListUiState>
    • Filter/Sort-State in ViewModel
    • refresh() ruft repository.refreshFromServer() auf
  • NavGraph-Eintrag in BollwerkNavGraph.kt

Technische Hinweise

  • Filter-Pattern: analog zu ItemListScreen / ItemListViewModel
  • Refresh beim ersten Composable-Aufruf (LaunchedEffect beim ersten Start)
  • Format-Badge: einfaches Text-Chip mit Hintergrundfarbe je nach Format (epub=blau, pdf=rot, zip=grau, 7z=orange)

Akzeptanzkriterien

  • Neuer Tab "Ressourcen" erscheint in der BottomBar
  • Freitext-Suche filtert nach Titel (case-insensitive)
  • Tag-Filter: Multi-Select, "alle deaktiviert" = kein Filter
  • Sortierung nach Titel, Datum, Größe funktioniert
  • Refresh-Button löst refreshFromServer() aus und zeigt Ladeindikator
  • EmptyState-Composable bei leerer Liste
  • Beim App-Start wird der Katalog im Hintergrund refresht
## Feature: App – ResourceListScreen + Navigation (neuer BottomBar-Tab) Part of: #117 Depends on: #121 ### Ziel Nutzer sehen in einem neuen "Ressourcen"-Tab der BottomBar eine filterbare und sortierbare Liste aller Ressourcen. ### Scope - `TopLevelDestination.RESOURCES` in `TopLevelDestination.kt` (Icon: `Icons.Default.LibraryBooks` o.ä., Label: "Ressourcen") - `Screen.ResourceList` in `Screen.kt` - `ResourceListScreen.kt` (Composable): - TopAppBar mit Titel "Ressourcen" + Refresh-Button (Icon: Refresh) - Freitext-Suchfeld (analog zu ItemListScreen) - Filter-Bereich: Tag-Multi-Select-Chips (alle vorhandenen Tags aus der Liste) - Sortierungs-Dropdown: Titel (A–Z), Datum (neu→alt), Größe (groß→klein) - `LazyColumn` mit Ressourcen-Karten: Titel, Format-Badge (epub/pdf/zip/7z), Tags-Chips, Dateigröße formatiert, Download-Button - EmptyState wenn Liste leer - Pull-to-Refresh (oder Refresh-Button in TopBar) - `ResourceListViewModel.kt` (`@HiltViewModel`): - `uiState: StateFlow<ResourceListUiState>` - Filter/Sort-State in ViewModel - `refresh()` ruft `repository.refreshFromServer()` auf - NavGraph-Eintrag in `BollwerkNavGraph.kt` ### Technische Hinweise - Filter-Pattern: analog zu `ItemListScreen` / `ItemListViewModel` - Refresh beim ersten Composable-Aufruf (LaunchedEffect beim ersten Start) - Format-Badge: einfaches Text-Chip mit Hintergrundfarbe je nach Format (epub=blau, pdf=rot, zip=grau, 7z=orange) ### Akzeptanzkriterien - [ ] Neuer Tab "Ressourcen" erscheint in der BottomBar - [ ] Freitext-Suche filtert nach Titel (case-insensitive) - [ ] Tag-Filter: Multi-Select, "alle deaktiviert" = kein Filter - [ ] Sortierung nach Titel, Datum, Größe funktioniert - [ ] Refresh-Button löst `refreshFromServer()` aus und zeigt Ladeindikator - [ ] EmptyState-Composable bei leerer Liste - [ ] Beim App-Start wird der Katalog im Hintergrund refresht
Sign in to join this conversation.
No description provided.