feat: Implement stations screen with grouped airports

This commit introduces a new "Stations" screen that displays airports grouped by country.

Key changes:
- Added a new Gradle module: `ui:stations`.
- Created `StationsScreen.kt` to display a list of airports grouped by country using `LazyColumn`. Airports within each country are displayed as `AirportInfoItem` and countries as `CountryItem`.
- Implemented `StationsScreenViewModel.kt` to fetch and manage the state of airports grouped by country. It uses `ObserveAirportsGroupedByCountry` use case.
- Defined `ObserveAirportsGroupedByCountry.kt` use case in `domain:stations` module to provide a flow of airports grouped by country.
- Implemented `ObserveAirportsGroupedByCountryImpl.kt` in the repository layer, which fetches data using `AirportService`, stores it in `AirportsDatasource`, and maps it to the domain model.
- Added Hilt module `ObserveAirportsGroupedByCountryModule.kt` to provide the use case implementation.
- Added `stationsScreen()` and `navigateToStations()` to `FlightsNavGraph.kt` and `TopLevelDestination.kt` for navigation.
- Updated `settings.gradle.kts` and `app/build.gradle.kts` to include the new `ui:stations` and `domain:stations` modules.
- Updated `CacheObservers.kt` to make `mapToDomain` a suspend function.
- Added string resources for the stations screen title.
This commit is contained in:
2025-06-15 23:15:25 +02:00
parent 13348bc52f
commit 3e9768919d
18 changed files with 368 additions and 5 deletions

View File

@ -12,6 +12,8 @@ import androidx.navigation.navOptions
import dev.adriankuta.flights.ui.home.navigation.HomeRoute
import dev.adriankuta.flights.ui.home.navigation.homeScreen
import dev.adriankuta.flights.ui.home.navigation.navigateToHome
import dev.adriankuta.flights.ui.home.navigation.navigateToStations
import dev.adriankuta.flights.ui.home.navigation.stationsScreen
@Composable
fun FlightsNavGraph(
@ -24,6 +26,7 @@ fun FlightsNavGraph(
modifier = modifier,
) {
homeScreen()
stationsScreen()
}
}
@ -45,7 +48,7 @@ fun NavController.navigateToTopLevelDestination(topLevelDestination: TopLevelDes
when (topLevelDestination) {
TopLevelDestination.HOME -> navigateToHome(topLevelNavOptions)
TopLevelDestination.STATIONS -> navigateToHome(topLevelNavOptions)
TopLevelDestination.STATIONS -> navigateToStations(topLevelNavOptions)
}
}
}