Skip to content

Commit

Permalink
Connect flow
Browse files Browse the repository at this point in the history
  • Loading branch information
fesave committed Jul 15, 2023
1 parent 82d855c commit 29b23d0
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 28 deletions.
3 changes: 2 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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(),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<EditBoardCellFragmentArgs>()

private val viewModel: EditBoardCellViewModel by viewModel() {
parametersOf(args.dashboardId, args.row, args.column)
}

private lateinit var editBoardCellState: EditBoardCellState

Expand Down Expand Up @@ -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)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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() {
Expand All @@ -26,30 +26,29 @@ class EditBoardCellViewModel(
EditBoardCellUiState(),
)
val state: StateFlow<EditBoardCellUiState> 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))
Expand Down

0 comments on commit 29b23d0

Please sign in to comment.