@@ -9,70 +9,17 @@ import androidx.compose.material3.HorizontalDivider
99import androidx.compose.material3.MaterialTheme
1010import androidx.compose.material3.Text
1111import androidx.compose.runtime.Composable
12- import androidx.compose.runtime.LaunchedEffect
13- import androidx.compose.runtime.collectAsState
14- import androidx.compose.runtime.key
15- import androidx.compose.runtime.mutableStateOf
16- import androidx.compose.runtime.saveable.rememberSaveable
1712import androidx.compose.ui.Modifier
1813import androidx.compose.ui.res.stringResource
1914import androidx.compose.ui.tooling.preview.Preview
2015import androidx.compose.ui.unit.dp
21- import androidx.lifecycle.viewmodel.compose.viewModel
22- import java.util.Locale
23- import kotlinx.collections.immutable.persistentListOf
24- import kotlinx.collections.immutable.toImmutableList
16+ import com.slack.circuit.codegen.annotations.CircuitInject
17+ import dagger.hilt.components.SingletonComponent
2518import org.cru.godtools.R
26- import org.cru.godtools.ui.dashboard.filters.FilterMenu
2719import org.cru.godtools.ui.tools.LessonToolCard
28- import org.cru.godtools.ui.tools.ToolCard
29- import org.cru.godtools.ui.tools.toolViewModels
30-
31- internal sealed interface DashboardLessonsEvent {
32- class OpenLesson (val lesson : String? , val lang : Locale ? ) : DashboardLessonsEvent
33- }
34-
35- @Composable
36- internal fun LessonsLayout (viewModel : LessonsViewModel = viewModel(), onEvent : (DashboardLessonsEvent ) -> Unit = {}) {
37- val languageFilter = FilterMenu .UiState (
38- menuExpanded = rememberSaveable { mutableStateOf(false ) },
39- query = rememberSaveable { mutableStateOf(" " ) },
40- items = viewModel.filteredLanguages.collectAsState(persistentListOf()).value,
41- selectedItem = viewModel.selectedLanguage.collectAsState().value,
42- eventSink = {
43- when (it) {
44- is FilterMenu .Event .SelectItem -> it.item?.let { viewModel.updateSelectedLanguage(it) }
45- }
46- }
47- )
48- LaunchedEffect (languageFilter.query.value) { viewModel.query.value = languageFilter.query.value }
49-
50- val state = LessonsScreen .UiState (
51- languageFilter = languageFilter,
52- lessons = viewModel.lessons.collectAsState().value
53- .map { lesson ->
54- key(lesson) {
55- lateinit var state: ToolCard .State
56- state = toolViewModels[lesson].toState(language = languageFilter.selectedItem) {
57- when (it) {
58- ToolCard .Event .Click -> {
59- viewModel.recordOpenLessonInAnalytics(lesson)
60- onEvent(DashboardLessonsEvent .OpenLesson (lesson, state.translation?.languageCode))
61- }
62-
63- else -> TODO ()
64- }
65- }
66- state
67- }
68- }
69- .toImmutableList()
70- )
71-
72- LessonsLayout (state)
73- }
7420
7521@Composable
22+ @CircuitInject(LessonsScreen ::class , SingletonComponent ::class )
7623internal fun LessonsLayout (state : LessonsScreen .UiState , modifier : Modifier = Modifier ) {
7724 LazyColumn (contentPadding = PaddingValues (16 .dp), modifier = modifier) {
7825 item(" header" , " header" ) {
0 commit comments