Skip to content

Commit

Permalink
refactor: merge AgendaLayoutViewModel with AgendaPagerViewModel and a…
Browse files Browse the repository at this point in the history
…ccess it only from the top-level AgendaLayout (#340)
  • Loading branch information
cbeyls authored Mar 1, 2025
1 parent fe13c55 commit 48b7e34
Show file tree
Hide file tree
Showing 14 changed files with 148 additions and 265 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ class GetAgendaUseCase(
Result.success(
Agenda(
sessions = sessions,
rooms = rooms.associateBy { it.id },
speakers = speakers.associateBy { it.id }
rooms = rooms,
speakers = speakers
)
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ package fr.androidmakers.domain.model

class Agenda(
val sessions: List<Session>,
val rooms: Map<String, Room>,
val speakers: Map<String, Speaker>
val rooms: List<Room>,
val speakers: List<Speaker>
)
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.androidmakers.di

import com.androidmakers.ui.about.AboutViewModel
import com.androidmakers.ui.agenda.AgendaLayoutViewModel
import com.androidmakers.ui.agenda.AgendaPagerViewModel
import com.androidmakers.ui.agenda.AgendaViewModel
import com.androidmakers.ui.agenda.SessionDetailViewModel
import com.androidmakers.ui.speakers.SpeakerDetailsViewModel
import com.androidmakers.ui.speakers.SpeakerListViewModel
Expand All @@ -15,8 +14,7 @@ val viewModelModule = module {
factory { SponsorsViewModel(get(), get()) }
factory { VenueViewModel(get(), get(), get()) }
factory { (speakerId: String) -> SpeakerDetailsViewModel(speakerId, get(), get()) }
factory { AgendaLayoutViewModel(get()) }
factory { AgendaPagerViewModel(get(), get(), get(), get()) }
factory { AgendaViewModel(get(), get(), get(), get()) }
factory { (sessionId: String) -> SessionDetailViewModel(sessionId, get(), get(), get(), get(), get(), get(), get(), get()) }
factory { AboutViewModel(get(), get(), get(), get(), get()) }
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ import org.jetbrains.compose.ui.tooling.preview.Preview
@Composable
fun AgendaColumn(
sessionsPerStartTime: Map<String, List<UISession>>,
onSessionClicked: (UISession) -> Unit,
onSessionBookmarked: (UISession, Boolean) -> Unit,
onApplyForAppClinicClicked: () -> Unit,
onSessionClick: (UISession) -> Unit,
onSessionBookmark: (UISession, Boolean) -> Unit,
onApplyForAppClinicClick: () -> Unit,
) {
val listState = rememberLazyListState()

Expand Down Expand Up @@ -93,9 +93,9 @@ fun AgendaColumn(
SessionRow(
modifier = Modifier.animateItem(),
uiSession = uiSession,
onSessionClicked = onSessionClicked,
onSessionBookmarked = onSessionBookmarked,
onApplyForAppClinic = onApplyForAppClinicClicked,
onSessionClick = onSessionClick,
onSessionBookmark = onSessionBookmark,
onApplyForAppClinicClick = onApplyForAppClinicClick,
sessionBeforeIsServiceSession = sessionBeforeIsServiceSession.value,
sessionAfterIsServiceSession = sessionAfterIsServiceSession.value
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,13 @@ import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.androidmakers.ui.common.ButtonRefreshableLceLayout
import com.androidmakers.ui.common.EmojiUtils
import com.androidmakers.ui.common.LceLayout
import com.androidmakers.ui.common.SessionFilter
import com.androidmakers.ui.getPlatformContext
import com.androidmakers.ui.model.AgendaState
import com.androidmakers.ui.model.Lce
import com.androidmakers.ui.model.UISession
import dev.icerock.moko.resources.compose.stringResource
import fr.androidmakers.domain.model.Room
import fr.androidmakers.domain.utils.eventTimeZone
Expand All @@ -44,9 +48,12 @@ import org.koin.compose.viewmodel.koinViewModel
fun AgendaLayout(
agendaFilterDrawerState: DrawerState,
onSessionClick: (sessionId: String) -> Unit,
viewModel: AgendaViewModel = koinViewModel()
) {
val agendaLayoutViewModel = koinViewModel<AgendaLayoutViewModel>()
val agendaLayoutState by agendaLayoutViewModel.state.collectAsState()
val rooms by viewModel.rooms.collectAsState(emptyList())
val sessionFilters by viewModel.sessionFilters.collectAsState()
val uiStateLce by viewModel.values.collectAsState()
val isRefreshing by viewModel.isRefreshing.collectAsState()

ModalNavigationDrawer(
drawerState = agendaFilterDrawerState,
Expand All @@ -58,32 +65,53 @@ fun AgendaLayout(
windowInsets = WindowInsets(0, 0, 0, 0),
) {
AgendaFilterDrawer(
rooms = agendaLayoutState.rooms,
sessionFilters = agendaLayoutState.sessionFilters,
onFiltersChanged = agendaLayoutViewModel::onFiltersChanged
rooms = rooms,
sessionFilters = sessionFilters,
onFiltersChanged = viewModel::onFiltersChanged
)
}
},
content = {
AgendaPagerOrLoading(agendaLayoutState.sessionFilters, onSessionClick)
val context = getPlatformContext()

AgendaPagerOrLoading(
uiStateLce = uiStateLce,
isRefreshing = isRefreshing,
onRefresh = viewModel::refresh,
sessionFilters = sessionFilters,
onSessionClick = { onSessionClick(it.id) },
onApplyForAppClinicClick = { viewModel.applyForAppClinic(context) },
onSessionBookmark = viewModel::setSessionBookmark,
)
}
)
}

@Composable
private fun AgendaPagerOrLoading(
sessionFilters: List<SessionFilter>,
onSessionClick: (sessionId: String) -> Unit,
uiStateLce: Lce<AgendaState>,
isRefreshing: Boolean,
onRefresh: () -> Unit,
sessionFilters: List<SessionFilter>,
onSessionClick: (UISession) -> Unit,
onApplyForAppClinicClick: () -> Unit,
onSessionBookmark: (UISession, Boolean) -> Unit
) {
val viewModel = koinViewModel<AgendaPagerViewModel>()
ButtonRefreshableLceLayout(viewModel) { daySchedules ->
LceLayout(
lce = uiStateLce,
isRefreshing = isRefreshing,
onRetry = onRefresh
) { uiState ->
val days = uiState.days
AgendaPager(
initialPageIndex = daySchedules.todayPageIndex(),
days = daySchedules.map { it.title },
days = days,
isRefreshing = isRefreshing,
onRefresh = onRefresh,
initialPageIndex = days.todayPageIndex(),
filterList = sessionFilters,
onSessionClicked = {
onSessionClick(it.id)
}
onSessionClick = onSessionClick,
onApplyForAppClinicClick = onApplyForAppClinicClick,
onSessionBookmark = onSessionBookmark
)
}
}
Expand Down

This file was deleted.

Loading

0 comments on commit 48b7e34

Please sign in to comment.