File tree Expand file tree Collapse file tree 4 files changed +93
-0
lines changed
detail/src/main/kotlin/com/ninecraft/booket/feature/detail
screens/src/main/kotlin/com/ninecraft/booket/feature/screens Expand file tree Collapse file tree 4 files changed +93
-0
lines changed Original file line number Diff line number Diff line change 1+ package com.ninecraft.booket.feature.detail
2+
3+ import androidx.compose.runtime.Composable
4+ import com.ninecraft.booket.feature.screens.BookDetailScreen
5+ import com.slack.circuit.codegen.annotations.CircuitInject
6+ import com.slack.circuit.runtime.Navigator
7+ import com.slack.circuit.runtime.presenter.Presenter
8+ import dagger.assisted.Assisted
9+ import dagger.assisted.AssistedFactory
10+ import dagger.assisted.AssistedInject
11+ import dagger.hilt.android.components.ActivityRetainedComponent
12+
13+ class BookDetailPresenter @AssistedInject constructor(
14+ @Assisted val navigator : Navigator ,
15+ ) : Presenter<BookDetailUiState> {
16+
17+ @Composable
18+ override fun present (): BookDetailUiState {
19+ fun handleEvent (event : BookDetailUiEvent ) {
20+ when (event) {
21+ BookDetailUiEvent .OnBackClicked -> {
22+ navigator.pop()
23+ }
24+ }
25+ }
26+
27+ return BookDetailUiState (
28+ eventSink = ::handleEvent,
29+ )
30+ }
31+
32+ @CircuitInject(BookDetailScreen ::class , ActivityRetainedComponent ::class )
33+ @AssistedFactory
34+ fun interface Factory {
35+ fun create (navigator : Navigator ): BookDetailPresenter
36+ }
37+ }
38+
39+
Original file line number Diff line number Diff line change 1+ package com.ninecraft.booket.feature.detail
2+
3+ import androidx.compose.runtime.Composable
4+ import androidx.compose.ui.Modifier
5+ import com.ninecraft.booket.core.designsystem.ComponentPreview
6+ import com.ninecraft.booket.core.designsystem.component.appbar.ReedBackTopAppBar
7+ import com.ninecraft.booket.core.designsystem.theme.ReedTheme
8+ import com.ninecraft.booket.core.ui.component.ReedFullScreen
9+ import com.ninecraft.booket.feature.screens.BookDetailScreen
10+ import com.slack.circuit.codegen.annotations.CircuitInject
11+ import dagger.hilt.android.components.ActivityRetainedComponent
12+
13+ @CircuitInject(BookDetailScreen ::class , ActivityRetainedComponent ::class )
14+ @Composable
15+ fun BookDetail (
16+ state : BookDetailUiState ,
17+ modifier : Modifier = Modifier ,
18+ ) {
19+ ReedFullScreen (modifier = modifier) {
20+ ReedBackTopAppBar (
21+ title = " 도서 상세 정보" ,
22+ onBackClick = {
23+ state.eventSink(BookDetailUiEvent .OnBackClicked )
24+ },
25+ )
26+ }
27+ }
28+
29+ @ComponentPreview
30+ @Composable
31+ private fun BookDetailPreview () {
32+ ReedTheme {
33+ BookDetail (
34+ state = BookDetailUiState (
35+ eventSink = {},
36+ ),
37+ )
38+ }
39+ }
Original file line number Diff line number Diff line change 1+ package com.ninecraft.booket.feature.detail
2+
3+ import com.slack.circuit.runtime.CircuitUiEvent
4+ import com.slack.circuit.runtime.CircuitUiState
5+
6+ data class BookDetailUiState (
7+ val eventSink : (BookDetailUiEvent ) -> Unit ,
8+ ) : CircuitUiState
9+
10+ sealed interface BookDetailUiEvent : CircuitUiEvent {
11+ data object OnBackClicked : BookDetailUiEvent
12+ }
Original file line number Diff line number Diff line change @@ -36,3 +36,6 @@ data class WebViewScreen(
3636 val url : String ,
3737 val title : String ,
3838) : ReedScreen(name = " WebView()" )
39+
40+ @Parcelize
41+ data object BookDetailScreen : ReedScreen (name = " BookDetail()" )
You can’t perform that action at this time.
0 commit comments