Skip to content

Commit 90cdc8b

Browse files
committed
[BOOK-420] refactor: 에러 전용 이벤트/다이얼로그 스펙을 범용 이벤트 구조로 확장
1 parent a41d39c commit 90cdc8b

File tree

5 files changed

+41
-42
lines changed

5 files changed

+41
-42
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.ninecraft.booket.core.common.constants
2+
3+
data class DialogSpec(
4+
val message: String,
5+
val confirmLabel: String,
6+
val onConfirm: () -> Unit,
7+
val title: String? = null,
8+
val dismissLabel: String? = null,
9+
val onDismissRequest: () -> Unit = {},
10+
)

core/common/src/main/kotlin/com/ninecraft/booket/core/common/constants/ErrorDialogSpec.kt

Lines changed: 0 additions & 10 deletions
This file was deleted.

core/common/src/main/kotlin/com/ninecraft/booket/core/common/event/ErrorEventHelper.kt

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.ninecraft.booket.core.common.event
2+
3+
import com.ninecraft.booket.core.common.constants.DialogSpec
4+
import kotlinx.coroutines.channels.Channel
5+
import kotlinx.coroutines.flow.receiveAsFlow
6+
import java.util.UUID
7+
8+
object EventHelper {
9+
private val _eventFlow = Channel<ReedEvent>(Channel.BUFFERED)
10+
val eventFlow = _eventFlow.receiveAsFlow()
11+
12+
fun sendEvent(event: ReedEvent) {
13+
_eventFlow.trySend(event)
14+
}
15+
}
16+
17+
sealed interface ReedEvent {
18+
data class ShowDialog(
19+
val spec: DialogSpec,
20+
val key: String = UUID.randomUUID().toString(),
21+
) : ReedEvent
22+
}

feature/main/src/main/kotlin/com/ninecraft/booket/feature/main/MainActivity.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@ import androidx.compose.runtime.mutableStateOf
1111
import androidx.compose.runtime.remember
1212
import androidx.compose.ui.Modifier
1313
import androidx.compose.ui.graphics.Color
14-
import androidx.compose.ui.res.stringResource
1514
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
16-
import com.ninecraft.booket.core.common.constants.ErrorDialogSpec
17-
import com.ninecraft.booket.core.common.event.ErrorEvent
18-
import com.ninecraft.booket.core.common.event.ErrorEventHelper
15+
import com.ninecraft.booket.core.common.constants.DialogSpec
16+
import com.ninecraft.booket.core.common.event.EventHelper
17+
import com.ninecraft.booket.core.common.event.ReedEvent
1918
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
2019
import com.ninecraft.booket.core.ui.component.ReedDialog
2120
import com.ninecraft.booket.feature.screens.SplashScreen
@@ -55,13 +54,13 @@ class MainActivity : ComponentActivity() {
5554
val backStack = rememberSaveableBackStack(root = SplashScreen)
5655
val navigator = rememberCircuitNavigator(backStack)
5756

58-
val dialogSpec = remember { mutableStateOf<ErrorDialogSpec?>(null) }
57+
val dialogSpec = remember { mutableStateOf<DialogSpec?>(null) }
5958

6059
// 전역 에러 수신
6160
LaunchedEffect(Unit) {
62-
ErrorEventHelper.errorEvent.collect { event ->
61+
EventHelper.eventFlow.collect { event ->
6362
when (event) {
64-
is ErrorEvent.ShowDialog -> {
63+
is ReedEvent.ShowDialog -> {
6564
dialogSpec.value = event.spec
6665
}
6766
}
@@ -72,10 +71,10 @@ class MainActivity : ComponentActivity() {
7271
ReedDialog(
7372
title = spec.title,
7473
description = spec.message,
75-
confirmButtonText = stringResource(spec.buttonLabelResId),
76-
74+
confirmButtonText = spec.confirmLabel,
75+
dismissButtonText = spec.dismissLabel,
7776
onConfirmRequest = {
78-
spec.action()
77+
spec.onConfirm()
7978
dialogSpec.value = null
8079
},
8180
onDismissRequest = {

0 commit comments

Comments
 (0)