StudyDistractor/sdp

View on GitHub
app/src/main/java/com/github/studydistractor/sdp/distractionStat/DistractionStatViewModel.kt

Summary

Maintainability
C
7 hrs
Test Coverage
A
91%
package com.github.studydistractor.sdp.distractionStat

import androidx.lifecycle.ViewModel
import com.github.studydistractor.sdp.ui.state.DistractionStatUiState
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update

class DistractionStatViewModel(distractionStatModel: DistractionStatModel) : ViewModel() {
    private val _distractionStatModel: DistractionStatModel = distractionStatModel
    private val _uiState = MutableStateFlow(DistractionStatUiState())
    val uiState: StateFlow<DistractionStatUiState> = _uiState.asStateFlow()

    fun updateDid(did : String){
        _uiState.update {
            it.copy(did = did)
        }
    }

    fun updateFeedback(feedback : String){
        _uiState.update {
            it.copy(feedback = feedback)
        }
    }

    fun updateTag(tag : String){
        _uiState.update {
            it.copy(tag = tag)
        }
    }
    fun like(){
        _distractionStatModel.postLike(_uiState.value.did).continueWith({refreshModel()})
    }

    fun dislike(){
        _distractionStatModel.postDislike(_uiState.value.did).continueWith({refreshModel()})
    }

    fun postFeedback(){
        _distractionStatModel.postNewFeedback(_uiState.value.did, _uiState.value.feedback)
            .continueWith { refreshModel() }
    }

    fun postTag(){
        _distractionStatModel.addTag(_uiState.value.did, _uiState.value.tag)
            .continueWith { refreshModel() }
    }
    fun refreshModel(){
        _distractionStatModel.fetchDistractionFeedback(_uiState.value.did).continueWith{
                t-> _uiState.update { it.copy(feedbacks = t.result) }
        }
        _distractionStatModel.fetchDistractionTags(_uiState.value.did).continueWith { t ->
            _uiState.update { it.copy(tags = t.result) }
        }
        _distractionStatModel.fetchLikeCount(_uiState.value.did).continueWith{ t ->
            _uiState.update {
                it.copy(likes = t.result)
            }
        }
        _distractionStatModel.fetchDislikeCount(_uiState.value.did).continueWith{
            t ->
            _uiState.update { it.copy(dislikes = t.result) }
        }
    }
}