diff --git a/app/src/main/java/com/neki/android/app/main/MainContract.kt b/app/src/main/java/com/neki/android/app/main/MainContract.kt index ad5e6e482..264f1e17d 100644 --- a/app/src/main/java/com/neki/android/app/main/MainContract.kt +++ b/app/src/main/java/com/neki/android/app/main/MainContract.kt @@ -30,4 +30,5 @@ sealed interface MainSideEffect { data class NavigateToUploadAlbumWithGallery(val uriStrings: List) : MainSideEffect data class NavigateToUploadAlbumWithQRScan(val imageUrl: String) : MainSideEffect data class ShowToast(val message: String) : MainSideEffect + data object RefreshArchive : MainSideEffect } diff --git a/app/src/main/java/com/neki/android/app/main/MainScreen.kt b/app/src/main/java/com/neki/android/app/main/MainScreen.kt index b25133882..4b401960b 100644 --- a/app/src/main/java/com/neki/android/app/main/MainScreen.kt +++ b/app/src/main/java/com/neki/android/app/main/MainScreen.kt @@ -33,6 +33,7 @@ import com.neki.android.core.ui.component.LoadingDialog import com.neki.android.core.ui.compose.collectWithLifecycle import com.neki.android.core.ui.toast.NekiToast import com.neki.android.feature.archive.api.ArchiveNavKey +import com.neki.android.feature.archive.api.ArchiveResult import com.neki.android.feature.map.api.MapNavKey import com.neki.android.feature.mypage.api.MyPageNavKey import com.neki.android.feature.photo_upload.api.PhotoUploadNavKey @@ -85,6 +86,7 @@ fun MainRoute( is MainSideEffect.NavigateToUploadAlbumWithGallery -> navigateToUploadAlbumWithGallery(sideEffect.uriStrings) is MainSideEffect.NavigateToUploadAlbumWithQRScan -> navigateToUploadAlbumWithQRScan(sideEffect.imageUrl) is MainSideEffect.ShowToast -> nekiToast.showToast(sideEffect.message) + MainSideEffect.RefreshArchive -> resultBus.sendResult(result = ArchiveResult.PhotoUploaded) } } diff --git a/app/src/main/java/com/neki/android/app/main/MainViewModel.kt b/app/src/main/java/com/neki/android/app/main/MainViewModel.kt index 356fa747c..547cd76ef 100644 --- a/app/src/main/java/com/neki/android/app/main/MainViewModel.kt +++ b/app/src/main/java/com/neki/android/app/main/MainViewModel.kt @@ -104,6 +104,7 @@ class MainViewModel @Inject constructor( .onSuccess { reduce { copy(isLoading = false, scannedImageUrl = null) } postSideEffect(MainSideEffect.ShowToast("이미지를 추가했어요")) + postSideEffect(MainSideEffect.RefreshArchive) } .onFailure { e -> Timber.e(e) @@ -125,6 +126,7 @@ class MainViewModel @Inject constructor( .onSuccess { reduce { copy(isLoading = false, selectedUris = persistentListOf()) } postSideEffect(MainSideEffect.ShowToast("이미지를 추가했어요")) + postSideEffect(MainSideEffect.RefreshArchive) } .onFailure { e -> Timber.e(e) diff --git a/core/navigation/src/main/java/com/neki/android/core/navigation/result/ResultEventBus.kt b/core/navigation/src/main/java/com/neki/android/core/navigation/result/ResultEventBus.kt index fd49cb2e9..34425958f 100644 --- a/core/navigation/src/main/java/com/neki/android/core/navigation/result/ResultEventBus.kt +++ b/core/navigation/src/main/java/com/neki/android/core/navigation/result/ResultEventBus.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.ProvidedValue import androidx.compose.runtime.compositionLocalOf +import androidx.compose.runtime.mutableStateMapOf import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel.Factory.BUFFERED @@ -34,7 +35,7 @@ object LocalResultEventBus { */ // https://github.com/android/nav3-recipes/blob/main/app/src/main/java/com/example/nav3recipes/results/event/README.md class ResultEventBus { - val channelMap: MutableMap> = mutableMapOf() + val channelMap = mutableStateMapOf>() inline fun getResultFlow(resultKey: String = T::class.toString()) = channelMap[resultKey]?.receiveAsFlow() diff --git a/feature/archive/api/src/main/kotlin/com/neki/android/feature/archive/api/ArchiveResult.kt b/feature/archive/api/src/main/kotlin/com/neki/android/feature/archive/api/ArchiveResult.kt index dd4bea93d..0ae9a4e73 100644 --- a/feature/archive/api/src/main/kotlin/com/neki/android/feature/archive/api/ArchiveResult.kt +++ b/feature/archive/api/src/main/kotlin/com/neki/android/feature/archive/api/ArchiveResult.kt @@ -6,4 +6,6 @@ sealed interface ArchiveResult { } data class FavoriteChanged(val photoId: Long, val isFavorite: Boolean) : ArchiveResult + + data object PhotoUploaded : ArchiveResult } diff --git a/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainContract.kt b/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainContract.kt index f8beda3ce..596b9743f 100644 --- a/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainContract.kt +++ b/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainContract.kt @@ -1,10 +1,8 @@ package com.neki.android.feature.archive.impl.main -import android.net.Uri import androidx.compose.foundation.text.input.TextFieldState import com.neki.android.core.model.AlbumPreview import com.neki.android.core.model.Photo -import com.neki.android.core.model.UploadType import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf @@ -14,30 +12,19 @@ data class ArchiveMainState( val favoriteAlbum: AlbumPreview = AlbumPreview(title = "즐겨찾는사진"), val albums: ImmutableList = persistentListOf(), val recentPhotos: ImmutableList = persistentListOf(), - val scannedImageUrl: String? = null, - val selectedUris: ImmutableList = persistentListOf(), - val isShowSelectWithAlbumDialog: Boolean = false, val isShowAddAlbumBottomSheet: Boolean = false, val albumNameTextState: TextFieldState = TextFieldState(), -) { - val uploadType: UploadType - get() = if (scannedImageUrl != null) UploadType.QR_CODE else UploadType.GALLERY -} +) sealed interface ArchiveMainIntent { data object EnterArchiveMainScreen : ArchiveMainIntent - data object RefreshArchiveMainScreen : ArchiveMainIntent + data object RefreshArchiveMainPhotos : ArchiveMainIntent data object ClickScreen : ArchiveMainIntent data object ClickGoToTopButton : ArchiveMainIntent // TopBar Intent data object DismissToolTipPopup : ArchiveMainIntent data object ClickQRScanIcon : ArchiveMainIntent - - data class SelectGalleryImage(val uris: List) : ArchiveMainIntent - data object DismissSelectWithAlbumDialog : ArchiveMainIntent - data object ClickUploadWithAlbumRow : ArchiveMainIntent - data object ClickUploadWithoutAlbumRow : ArchiveMainIntent data object ClickNotificationIcon : ArchiveMainIntent // Album Intent @@ -54,16 +41,10 @@ sealed interface ArchiveMainIntent { // Add Album BottomSheet Intent data object DismissAddAlbumBottomSheet : ArchiveMainIntent data object ClickAddAlbumButton : ArchiveMainIntent - - // Result - data class QRCodeScanned(val imageUrl: String) : ArchiveMainIntent - data object ReceiveOpenGalleryResult : ArchiveMainIntent } sealed interface ArchiveMainSideEffect { data object NavigateToQRScan : ArchiveMainSideEffect - data class NavigateToUploadAlbumWithGallery(val uriStrings: List) : ArchiveMainSideEffect - data class NavigateToUploadAlbumWithQRScan(val imageUrl: String) : ArchiveMainSideEffect data object NavigateToAllAlbum : ArchiveMainSideEffect data class NavigateToFavoriteAlbum(val albumId: Long) : ArchiveMainSideEffect data class NavigateToAlbumDetail(val albumId: Long, val title: String) : ArchiveMainSideEffect @@ -71,6 +52,5 @@ sealed interface ArchiveMainSideEffect { data class NavigateToPhotoDetail(val photos: List, val index: Int) : ArchiveMainSideEffect data object ScrollToTop : ArchiveMainSideEffect - data object OpenGallery : ArchiveMainSideEffect data class ShowToastMessage(val message: String) : ArchiveMainSideEffect } diff --git a/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainScreen.kt b/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainScreen.kt index 23285111f..73add43f2 100644 --- a/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainScreen.kt +++ b/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainScreen.kt @@ -1,8 +1,5 @@ package com.neki.android.feature.archive.impl.main -import androidx.activity.compose.rememberLauncherForActivityResult -import androidx.activity.result.PickVisualMediaRequest -import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -40,23 +37,18 @@ import com.neki.android.core.ui.toast.NekiToast import com.neki.android.feature.archive.impl.component.AddAlbumBottomSheet import com.neki.android.feature.archive.impl.const.ArchiveConst.ARCHIVE_GRID_ITEM_SPACING import com.neki.android.feature.archive.impl.const.ArchiveConst.PHOTO_GRAY_LAYOUT_BOTTOM_PADDING -import com.neki.android.feature.archive.impl.main.component.AlbumUploadOption import com.neki.android.feature.archive.impl.main.component.ArchiveMainAlbumList import com.neki.android.feature.archive.impl.main.component.ArchiveMainPhotoItem import com.neki.android.feature.archive.impl.main.component.ArchiveMainTitleRow import com.neki.android.feature.archive.impl.main.component.ArchiveMainTopBar import com.neki.android.feature.archive.impl.component.EmptyPhotoContent import com.neki.android.feature.archive.impl.main.component.GotoTopButton -import com.neki.android.feature.archive.impl.main.component.SelectWithAlbumDialog import kotlinx.collections.immutable.persistentListOf -import timber.log.Timber @Composable internal fun ArchiveMainRoute( viewModel: ArchiveMainViewModel = hiltViewModel(), navigateToQRScan: () -> Unit, - navigateToUploadAlbumWithGallery: (List) -> Unit, - navigateToUploadAlbumWithQRScan: (String) -> Unit, navigateToAllAlbum: () -> Unit, navigateToFavoriteAlbum: (Long) -> Unit, navigateToAlbumDetail: (Long, String) -> Unit, @@ -67,19 +59,10 @@ internal fun ArchiveMainRoute( val context = LocalContext.current val lazyState = rememberLazyStaggeredGridState() val nekiToast = remember { NekiToast(context) } - val photoPicker = rememberLauncherForActivityResult(ActivityResultContracts.PickMultipleVisualMedia(10)) { uris -> - if (uris.isNotEmpty()) { - viewModel.store.onIntent(ArchiveMainIntent.SelectGalleryImage(uris)) - } else { - Timber.d("No media selected") - } - } viewModel.store.sideEffects.collectWithLifecycle { sideEffect -> when (sideEffect) { ArchiveMainSideEffect.NavigateToQRScan -> navigateToQRScan() - is ArchiveMainSideEffect.NavigateToUploadAlbumWithGallery -> navigateToUploadAlbumWithGallery(sideEffect.uriStrings) - is ArchiveMainSideEffect.NavigateToUploadAlbumWithQRScan -> navigateToUploadAlbumWithQRScan(sideEffect.imageUrl) ArchiveMainSideEffect.NavigateToAllAlbum -> navigateToAllAlbum() is ArchiveMainSideEffect.NavigateToFavoriteAlbum -> navigateToFavoriteAlbum(sideEffect.albumId) is ArchiveMainSideEffect.NavigateToAlbumDetail -> navigateToAlbumDetail(sideEffect.albumId, sideEffect.title) @@ -88,7 +71,6 @@ internal fun ArchiveMainRoute( ArchiveNavKey.PhotoDetail(photos = sideEffect.photos, initialIndex = sideEffect.index), ) ArchiveMainSideEffect.ScrollToTop -> lazyState.animateScrollToItem(0) - ArchiveMainSideEffect.OpenGallery -> photoPicker.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)) is ArchiveMainSideEffect.ShowToastMessage -> nekiToast.showToast(text = sideEffect.message) } } @@ -115,7 +97,6 @@ internal fun ArchiveMainScreen( ArchiveMainTopBar( showTooltip = uiState.isFirstEntered, onClickQRCodeIcon = { onIntent(ArchiveMainIntent.ClickQRScanIcon) }, -// onClickNotificationIcon = { onIntent(ArchiveMainIntent.ClickNotificationIcon) }, onDismissToolTipPopup = { onIntent(ArchiveMainIntent.DismissToolTipPopup) }, ) ArchiveMainContent( @@ -166,18 +147,6 @@ internal fun ArchiveMainScreen( errorMessage = errorMessage, ) } - - if (uiState.isShowSelectWithAlbumDialog) { - SelectWithAlbumDialog( - onDismissRequest = { onIntent(ArchiveMainIntent.DismissSelectWithAlbumDialog) }, - onSelect = { option -> - when (option) { - AlbumUploadOption.WITHOUT_ALBUM -> onIntent(ArchiveMainIntent.ClickUploadWithoutAlbumRow) - AlbumUploadOption.WITH_ALBUM -> onIntent(ArchiveMainIntent.ClickUploadWithAlbumRow) - } - }, - ) - } } @Composable diff --git a/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainViewModel.kt b/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainViewModel.kt index def489ea6..5c823aa54 100644 --- a/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainViewModel.kt +++ b/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/main/ArchiveMainViewModel.kt @@ -1,20 +1,15 @@ package com.neki.android.feature.archive.impl.main -import android.net.Uri import androidx.compose.foundation.text.input.TextFieldState import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.neki.android.core.dataapi.repository.FolderRepository import com.neki.android.core.dataapi.repository.PhotoRepository import com.neki.android.core.dataapi.repository.UserRepository -import com.neki.android.core.domain.usecase.UploadMultiplePhotoUseCase -import com.neki.android.core.domain.usecase.UploadSinglePhotoUseCase import com.neki.android.core.model.Photo -import com.neki.android.core.model.UploadType import com.neki.android.core.ui.MviIntentStore import com.neki.android.core.ui.mviIntentStore import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.Job import kotlinx.coroutines.async @@ -28,8 +23,6 @@ private const val DEFAULT_PHOTOS_SIZE = 20 @HiltViewModel class ArchiveMainViewModel @Inject constructor( - private val uploadSinglePhotoUseCase: UploadSinglePhotoUseCase, - private val uploadMultiplePhotoUseCase: UploadMultiplePhotoUseCase, private val photoRepository: PhotoRepository, private val folderRepository: FolderRepository, private val userRepository: UserRepository, @@ -52,7 +45,7 @@ class ArchiveMainViewModel @Inject constructor( if (intent != ArchiveMainIntent.EnterArchiveMainScreen) reduce { copy(isFirstEntered = false) } when (intent) { ArchiveMainIntent.EnterArchiveMainScreen -> fetchInitialData(reduce) - ArchiveMainIntent.RefreshArchiveMainScreen -> fetchInitialData(reduce) + ArchiveMainIntent.RefreshArchiveMainPhotos -> viewModelScope.launch { fetchPhotos(reduce) } ArchiveMainIntent.ClickScreen -> reduce { copy(isFirstEntered = false) } ArchiveMainIntent.ClickGoToTopButton -> postSideEffect(ArchiveMainSideEffect.ScrollToTop) @@ -63,30 +56,6 @@ class ArchiveMainViewModel @Inject constructor( } ArchiveMainIntent.ClickQRScanIcon -> postSideEffect(ArchiveMainSideEffect.NavigateToQRScan) - - is ArchiveMainIntent.SelectGalleryImage -> reduce { - copy( - isShowSelectWithAlbumDialog = true, - selectedUris = intent.uris.toImmutableList(), - ) - } - - ArchiveMainIntent.DismissSelectWithAlbumDialog -> reduce { copy(isShowSelectWithAlbumDialog = false) } - ArchiveMainIntent.ClickUploadWithAlbumRow -> { - reduce { - copy( - isShowSelectWithAlbumDialog = false, - scannedImageUrl = null, - selectedUris = persistentListOf(), - ) - } - if (state.scannedImageUrl == null) - postSideEffect(ArchiveMainSideEffect.NavigateToUploadAlbumWithGallery(state.selectedUris.map { it.toString() })) - else postSideEffect(ArchiveMainSideEffect.NavigateToUploadAlbumWithQRScan(state.scannedImageUrl)) - } - - ArchiveMainIntent.ClickUploadWithoutAlbumRow -> uploadWithoutAlbum(state, reduce, postSideEffect) - ArchiveMainIntent.ClickNotificationIcon -> {} // Album Intent @@ -103,16 +72,6 @@ class ArchiveMainViewModel @Inject constructor( // Add Album BottomSheet Intent ArchiveMainIntent.DismissAddAlbumBottomSheet -> reduce { copy(isShowAddAlbumBottomSheet = false) } ArchiveMainIntent.ClickAddAlbumButton -> handleAddAlbum(state.albumNameTextState.text.trim().toString(), reduce, postSideEffect) - - // Result - is ArchiveMainIntent.QRCodeScanned -> reduce { - copy( - scannedImageUrl = intent.imageUrl, - isShowSelectWithAlbumDialog = true, - ) - } - - ArchiveMainIntent.ReceiveOpenGalleryResult -> postSideEffect(ArchiveMainSideEffect.OpenGallery) } } @@ -151,7 +110,7 @@ class ArchiveMainViewModel @Inject constructor( } private suspend fun fetchPhotos(reduce: (ArchiveMainState.() -> ArchiveMainState) -> Unit, size: Int = DEFAULT_PHOTOS_SIZE) { - photoRepository.getPhotos() + photoRepository.getPhotos(size = size) .onSuccess { data -> reduce { copy(recentPhotos = data.toImmutableList()) } } @@ -170,77 +129,6 @@ class ArchiveMainViewModel @Inject constructor( } } - private fun uploadWithoutAlbum( - state: ArchiveMainState, - reduce: (ArchiveMainState.() -> ArchiveMainState) -> Unit, - postSideEffect: (ArchiveMainSideEffect) -> Unit, - ) { - reduce { copy(isShowSelectWithAlbumDialog = false) } - val onSuccessSideEffect = { - reduce { copy(isLoading = false) } - postSideEffect(ArchiveMainSideEffect.ShowToastMessage("이미지를 추가했어요")) - } - if (state.uploadType == UploadType.QR_CODE) { - uploadSingleImage( - imageUrl = state.scannedImageUrl ?: return, - reduce = reduce, - postSideEffect = postSideEffect, - onSuccess = onSuccessSideEffect, - ) - } else { - uploadMultipleImages( - imageUris = state.selectedUris, - reduce = reduce, - postSideEffect = postSideEffect, - onSuccess = onSuccessSideEffect, - ) - } - } - - private fun uploadSingleImage( - imageUrl: String, - reduce: (ArchiveMainState.() -> ArchiveMainState) -> Unit, - postSideEffect: (ArchiveMainSideEffect) -> Unit, - onSuccess: () -> Unit, - ) { - viewModelScope.launch { - reduce { copy(isLoading = true) } - - uploadSinglePhotoUseCase( - imageUrl = imageUrl, - ).onSuccess { - fetchPhotos(reduce, 1) // 가장 최신 데이터 가져오기 - onSuccess() - }.onFailure { e -> - Timber.e(e) - postSideEffect(ArchiveMainSideEffect.ShowToastMessage("이미지 업로드에 실패했어요")) - reduce { copy(isLoading = false) } - } - } - } - - private fun uploadMultipleImages( - imageUris: List, - reduce: (ArchiveMainState.() -> ArchiveMainState) -> Unit, - postSideEffect: (ArchiveMainSideEffect) -> Unit, - onSuccess: () -> Unit, - ) { - viewModelScope.launch { - reduce { copy(isLoading = true) } - - uploadMultiplePhotoUseCase( - imageUris = imageUris, - ).onSuccess { - fetchPhotos(reduce) - onSuccess() - }.onFailure { e -> - Timber.e(e) - postSideEffect(ArchiveMainSideEffect.ShowToastMessage("이미지 업로드에 실패했어요")) - reduce { copy(isLoading = false) } - } - } - } - private fun handleFavoriteToggle( photo: Photo, reduce: (ArchiveMainState.() -> ArchiveMainState) -> Unit, diff --git a/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/navigation/ArchiveEntryProvider.kt b/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/navigation/ArchiveEntryProvider.kt index d7c3a7342..f0fb0f4db 100644 --- a/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/navigation/ArchiveEntryProvider.kt +++ b/feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/navigation/ArchiveEntryProvider.kt @@ -25,9 +25,7 @@ import com.neki.android.feature.archive.impl.photo.AllPhotoRoute import com.neki.android.feature.archive.impl.photo.AllPhotoViewModel import com.neki.android.feature.archive.impl.photo_detail.PhotoDetailRoute import com.neki.android.feature.archive.impl.photo_detail.PhotoDetailViewModel -import com.neki.android.feature.photo_upload.api.QRScanResult import com.neki.android.feature.photo_upload.api.navigateToQRScan -import com.neki.android.feature.photo_upload.api.navigateToUploadAlbum import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -49,26 +47,16 @@ private fun EntryProviderScope.archiveEntry(navigator: MainNavigator) { entry { val resultBus = LocalResultEventBus.current val viewModel = hiltViewModel() - ResultEffect(resultBus) { result -> + ResultEffect(resultBus) { result -> when (result) { - is QRScanResult.QRCodeScanned -> { - viewModel.store.onIntent(ArchiveMainIntent.QRCodeScanned(result.imageUrl)) - } - - QRScanResult.OpenGallery -> { - viewModel.store.onIntent(ArchiveMainIntent.ReceiveOpenGalleryResult) - } + is ArchiveResult.FavoriteChanged, is ArchiveResult.PhotoDeleted, ArchiveResult.PhotoUploaded -> + viewModel.store.onIntent(ArchiveMainIntent.RefreshArchiveMainPhotos) } } - ResultEffect(resultBus) { - viewModel.store.onIntent(ArchiveMainIntent.RefreshArchiveMainScreen) - } ArchiveMainRoute( viewModel = viewModel, navigateToQRScan = navigator::navigateToQRScan, - navigateToUploadAlbumWithGallery = navigator::navigateToUploadAlbum, - navigateToUploadAlbumWithQRScan = navigator::navigateToUploadAlbum, navigateToAllAlbum = navigator::navigateToAllAlbum, navigateToFavoriteAlbum = { id -> navigator.navigateToAlbumDetail(id = id, isFavorite = true) @@ -94,6 +82,8 @@ private fun EntryProviderScope.archiveEntry(navigator: MainNavigator) { is ArchiveResult.PhotoDeleted -> { viewModel.store.onIntent(AllPhotoIntent.PhotoDeleted(result.photoId)) } + + else -> {} } } @@ -131,6 +121,8 @@ private fun EntryProviderScope.archiveEntry(navigator: MainNavigator) { is ArchiveResult.PhotoDeleted -> { viewModel.store.onIntent(AlbumDetailIntent.PhotoDeleted(result.photoId)) } + + else -> {} } }