Skip to content

Commit 5abbd4e

Browse files
committed
[BOOK-161] feat: 임시 상세 정보 화면 구현
1 parent 26ca88a commit 5abbd4e

File tree

4 files changed

+93
-0
lines changed

4 files changed

+93
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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+
}

feature/screens/src/main/kotlin/com/ninecraft/booket/feature/screens/Screens.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff 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()")

0 commit comments

Comments
 (0)