Commit Graph
14 Commits
Author SHA1 Message Date
herel b676c768fe fix: add back navigation from EventDetailScreen to Schedule 2026-07-08 18:02:14 +02:00
herel 28de93263b feat: wire up app root, navigation, and platform entry points
- Add App.kt root composable with state-based routing
  (Login -> Schedule -> EventDetail) driven by AuthViewModel.state
- Update MainActivity (Android), MainViewController (iOS), and
  Main.kt (Desktop) to host App() with their platform OAuthClient
- Add iOS Xcode source files (MyIceApp.swift, ContentView.swift)
  and Info.plist with myice:// URL scheme
- Delete Placeholder.kt
- Add kotlinx-coroutines-swing to desktopMain to provide
  Dispatchers.Main for viewModelScope (app crashed on desktop
  without it)
2026-07-08 18:00:57 +02:00
herel 88aa9de4ad fix: use French labels for refresh/logout buttons in ScheduleScreen 2026-07-08 17:56:01 +02:00
herel 38d420524a feat: add LoginScreen, ScheduleScreen, and EventDetailScreen
Add 3 Compose Multiplatform screens consuming Task 6 ViewModels and
Task 8 components:
- LoginScreen: MyIce title, login button, loading/error states
- ScheduleScreen: AppBar + filter card (4 dropdowns) + event list
  with loading/error/empty/refreshing states
- EventDetailScreen: AppBar + recap card + players/staff sections
  with amber empty-state card

Use TextButton for Refresh/Logout actions (material-icons-core not
available in this Compose Multiplatform setup). Guard setAccount call
against nullable onSelect callback.
2026-07-08 17:54:19 +02:00
herel 277517bf7e fix: make parseHexColor crash-safe, clean up imports in EventCard 2026-07-08 17:53:04 +02:00
herel af85605dd4 feat: add Material 3 theme and UI components (EventCard, FilterDropdown, LoadingIndicator) 2026-07-08 17:52:04 +02:00
herel 00e7a7456f fix: address OAuth review findings (redirect_uri, binding, timeout, CRLF, DRY) 2026-07-08 17:46:40 +02:00
herel 294aebd0b4 feat: add AuthViewModel, ScheduleViewModel, and EventDetailViewModel with StateFlow 2026-07-08 17:25:41 +02:00
herel bb13a12d00 feat: add event filtering logic, TypeFilter enum, AuthSettings, and OAuthClient interface 2026-07-08 17:16:01 +02:00
herel b61b6408f3 fix: bump kotlinx-datetime to 0.7.1, scope ExperimentalTime opt-in to saveEvents 2026-07-08 17:14:56 +02:00
herel 11c0a92421 feat: add ScheduleCache with multiplatform-settings for offline caching 2026-07-08 17:10:45 +02:00
herel b1661aaa4f feat: add Ktor networking layer with ApiService and auth token holder
Add ApiConfig, AuthTokenHolder singleton, expect/actual HttpClient
engine factories (CIO for Android/Desktop, Darwin for iOS), and
ApiService with four GET endpoints. Bearer token from AuthTokenHolder
is injected as Authorization header on each request.

Adjusted for Ktor 3.5.1: HttpClientEngineFactory lives in
io.ktor.client.engine; the timeout plugin is HttpTimeout (package
io.ktor.client.plugins), not HttpTimeoutPlugin. Tests wrap suspend
calls in runTest and assert request URLs without a trailing '?'.
2026-07-08 17:07:20 +02:00
herel a24297f821 feat: add serializable data models with FlexibleStringSerializer for number coercion 2026-07-08 17:02:31 +02:00
herel 15ae8cd046 feat: scaffold KMP project with Compose Multiplatform (Android, iOS, Desktop) 2026-07-08 16:53:13 +02:00