From 29b23d04be15f2ac1af365ebfb84ff51ba44514d Mon Sep 17 00:00:00 2001 From: Fernando Sanz <49989790+fesave@users.noreply.github.com> Date: Sat, 15 Jul 2023 12:07:09 +0200 Subject: [PATCH] Connect flow --- .idea/misc.xml | 3 +- .../aacboard/di/ViewModelModule.kt | 7 +++-- .../ui/fragments/EditBoardCellFragment.kt | 27 ++++++++++------ .../viewmodel/EditBoardCellViewModel.kt | 31 +++++++++---------- 4 files changed, 40 insertions(+), 28 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 3660e44..1f549e9 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,7 @@ + - + diff --git a/app/src/main/java/com/architectcoders/aacboard/di/ViewModelModule.kt b/app/src/main/java/com/architectcoders/aacboard/di/ViewModelModule.kt index a9138e4..18d26e0 100644 --- a/app/src/main/java/com/architectcoders/aacboard/di/ViewModelModule.kt +++ b/app/src/main/java/com/architectcoders/aacboard/di/ViewModelModule.kt @@ -1,6 +1,7 @@ package com.architectcoders.aacboard.di import androidx.lifecycle.SavedStateHandle +import com.architectcoders.aacboard.ui.fragments.EditBoardCellFragmentArgs import com.architectcoders.aacboard.ui.fragments.viewmodel.EditBoardCellViewModel import com.architectcoders.aacboard.ui.fragments.viewmodel.EditDashBoardViewModel import com.architectcoders.aacboard.ui.fragments.viewmodel.ListDashboardsViewModel @@ -14,9 +15,11 @@ val viewModelModule = module { viewModel { ListDashboardsViewModel(get(), get(), get()) } viewModel { MainDashboardViewModel(get()) } viewModel { SearchPictogramsViewModel(get(), get()) } - viewModel { (handle: SavedStateHandle) -> + viewModel { params-> EditBoardCellViewModel( - handle, + dashBoardId = params.component1(), + row = params.component2(), + column = params.component3(), get(), get(), ) diff --git a/app/src/main/java/com/architectcoders/aacboard/ui/fragments/EditBoardCellFragment.kt b/app/src/main/java/com/architectcoders/aacboard/ui/fragments/EditBoardCellFragment.kt index e71dcfd..0087b3f 100644 --- a/app/src/main/java/com/architectcoders/aacboard/ui/fragments/EditBoardCellFragment.kt +++ b/app/src/main/java/com/architectcoders/aacboard/ui/fragments/EditBoardCellFragment.kt @@ -5,6 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import androidx.navigation.fragment.navArgs import com.architectcoders.aacboard.R import com.architectcoders.aacboard.databinding.FragmentEditBoardCellBinding import com.architectcoders.aacboard.ui.fragments.stateholder.EditBoardCellState @@ -14,12 +15,17 @@ import com.architectcoders.aacboard.ui.model.PictogramUI import com.architectcoders.aacboard.ui.utils.diff import com.architectcoders.aacboard.ui.utils.loadUrl import org.koin.androidx.viewmodel.ext.android.viewModel +import org.koin.core.parameter.parametersOf class EditBoardCellFragment : Fragment(R.layout.fragment_edit_board_cell) { private var _binding: FragmentEditBoardCellBinding? = null private val binding get() = _binding!! - private val viewModel: EditBoardCellViewModel by viewModel() + private val args by navArgs() + + private val viewModel: EditBoardCellViewModel by viewModel() { + parametersOf(args.dashboardId, args.row, args.column) + } private lateinit var editBoardCellState: EditBoardCellState @@ -50,29 +56,32 @@ class EditBoardCellFragment : Fragment(R.layout.fragment_edit_board_cell) { editBoardCellState.onCancel() } } + + onColumnChanged() + onRowChanged() } private fun collectState() { viewModel.state.let { uiStateFlow -> - diff(uiStateFlow, { it.column }, ::onColumnChanged) - diff(uiStateFlow, { it.row }, ::onRowChanged) diff(uiStateFlow, { it.pictogram }, ::onPictogramChanged) diff(uiStateFlow, { it.exit }, ::onExitChanged) } } - private fun onColumnChanged(column: Int) { - binding.columnLabel.text = getString(R.string.column_label, column) + private fun onColumnChanged() { + binding.columnLabel.text = getString(R.string.column_label, viewModel.getColumn()) } - private fun onRowChanged(row: Int) { - binding.rowLabel.text = getString(R.string.row_label, row) + private fun onRowChanged() { + binding.rowLabel.text = getString(R.string.row_label, viewModel.getRow()) } private fun onPictogramChanged(pictogram: PictogramUI?) { pictogram?.let { - binding.pictogram.loadUrl(it.url) - binding.keyword.setText(it.keyword) + if(!it.url.isNullOrEmpty()){ + binding.pictogram.loadUrl(it.url) + binding.keyword.setText(it.keyword) + } } } diff --git a/app/src/main/java/com/architectcoders/aacboard/ui/fragments/viewmodel/EditBoardCellViewModel.kt b/app/src/main/java/com/architectcoders/aacboard/ui/fragments/viewmodel/EditBoardCellViewModel.kt index 2b495d6..7f376b9 100644 --- a/app/src/main/java/com/architectcoders/aacboard/ui/fragments/viewmodel/EditBoardCellViewModel.kt +++ b/app/src/main/java/com/architectcoders/aacboard/ui/fragments/viewmodel/EditBoardCellViewModel.kt @@ -1,13 +1,11 @@ package com.architectcoders.aacboard.ui.fragments.viewmodel -import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.architectcoders.aacboard.domain.data.cell.Cell import com.architectcoders.aacboard.domain.data.cell.CellPictogram import com.architectcoders.aacboard.domain.use_case.cell.get.GetCellUseCase import com.architectcoders.aacboard.domain.use_case.cell.save.SaveCellUseCase -import com.architectcoders.aacboard.ui.fragments.EditBoardCellFragmentArgs import com.architectcoders.aacboard.ui.model.PictogramUI import com.architectcoders.aacboard.ui.model.toUIPictogram import kotlinx.coroutines.flow.MutableStateFlow @@ -17,7 +15,9 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch class EditBoardCellViewModel( - savedStateHandle: SavedStateHandle, + private val dashBoardId: Int, + private val row: Int, + private val column: Int, private val saveCellUseCase: SaveCellUseCase, private val getCellUseCase: GetCellUseCase, ) : ViewModel() { @@ -26,30 +26,29 @@ class EditBoardCellViewModel( EditBoardCellUiState(), ) val state: StateFlow get() = _state.asStateFlow() - private val dashboardId: Int init { - EditBoardCellFragmentArgs.fromSavedStateHandle(savedStateHandle).apply { - this@EditBoardCellViewModel.dashboardId = dashboardId - viewModelScope.launch { - val cell: Cell = getCellUseCase(dashboardId, row, column) ?: Cell(row, column, null) - updateUiState( - _state.value.copy( - row = row, - column = column, - pictogram = cell.cellPictogram?.toUIPictogram() - ) + viewModelScope.launch { + val cell: Cell? = getCellUseCase(dashBoardId, row, column) + updateUiState( + _state.value.copy( + row = row, + column = column, + pictogram = cell?.cellPictogram?.toUIPictogram() ) - } + ) } } + fun getColumn() = column + fun getRow() = row + fun onSaveClicked(keyword: String) { _state.value.apply { pictogram?.let { viewModelScope.launch { saveCellUseCase( - dashboardId, + dashBoardId, Cell(row, column, CellPictogram(keyword, it.url)) ) updateUiState(_state.value.copy(exit = true))