From 482f954ff3bcca26b5664b6f187527152dc7de8e Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Wed, 18 Sep 2024 21:06:43 +0900 Subject: [PATCH] =?UTF-8?q?[FEATURE]#155=20:=20SideEffectState=20=EB=B0=8F?= =?UTF-8?q?=20SideEffect=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bff/wespot/util/SideEffectUtil.kt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 core/ui/src/main/kotlin/com/bff/wespot/util/SideEffectUtil.kt diff --git a/core/ui/src/main/kotlin/com/bff/wespot/util/SideEffectUtil.kt b/core/ui/src/main/kotlin/com/bff/wespot/util/SideEffectUtil.kt new file mode 100644 index 00000000..a16ae5d3 --- /dev/null +++ b/core/ui/src/main/kotlin/com/bff/wespot/util/SideEffectUtil.kt @@ -0,0 +1,30 @@ +package com.bff.wespot.util + +import android.annotation.SuppressLint +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.platform.LocalLifecycleOwner +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.repeatOnLifecycle +import com.bff.wespot.base.BaseViewModel +import com.bff.wespot.model.SideEffect + +@SuppressLint("ComposableNaming") +@Composable +fun BaseViewModel.collectBaseSideEffect( + lifecycleState: Lifecycle.State = androidx.lifecycle.Lifecycle.State.STARTED, + sideEffect: (suspend (sideEffect: SideEffect) -> Unit), +) { + val sideEffectFlow = this.sideEffect + val lifecycleOwner = LocalLifecycleOwner.current + + val callback by rememberUpdatedState(newValue = sideEffect) + + LaunchedEffect(sideEffectFlow, lifecycleOwner) { + lifecycleOwner.lifecycle.repeatOnLifecycle(lifecycleState) { + sideEffectFlow.collect { callback(it) } + } + } +}