Ahmed Riyadh
01/07/2024, 2:17 PMColton Idle
01/07/2024, 4:14 PMAhmed Riyadh
01/07/2024, 4:16 PMColton Idle
01/07/2024, 4:17 PMAhmed Riyadh
01/07/2024, 4:18 PMRaed Ghazal
01/07/2024, 4:55 PMNo need to beidk why I read this “you need to be” at first and I was shocked xD
McEna
01/07/2024, 5:16 PMAhmed Riyadh
01/07/2024, 5:16 PMMcEna
01/07/2024, 5:18 PMMcEna
01/07/2024, 5:18 PMMcEna
01/07/2024, 5:18 PMclass MLSearchViewModel : CustomScopedViewModel() {
var searchState by mutableStateOf(ViewModelValue<MLSearch>(MLSearch(), false, ""))
private var currentTerms = ""
fun loadSearch(terms : String){
currentTerms = terms
EventTracer.instance.trace("search_${terms}_vm", "mainview", getTimeMillis())
getScopeProvider().getScope().launch {
MLSearchRepository.get().getSearchResults(terms).collect{
setState(it)
}
}
}
private fun setState(repoData : RepositoryResult<MLSearch>) {
if(repoData.isSuccessful()){
repoData.getValue()?.let { paginatedData->
searchState = ViewModelValue(paginatedData, true, "")
}
} else {
var newState = ViewModelValue<MLSearch>(MLSearch(), false, repoData.getMessage())
searchState = newState
}
EventTracer.instance.trace("search_${currentTerms}_vm", "mainview", getTimeMillis())
}
}
McEna
01/07/2024, 5:19 PMMcEna
01/07/2024, 5:19 PMabstract class CustomScopedViewModel : ScopedViewModel {
private var scopeProvider : ScopeProvider = ScopeProvider.createForUI()
override fun getScopeProvider(): ScopeProvider {
return scopeProvider
}
override fun setScopeProvider(provider: ScopeProvider) {
scopeProvider.cancel()
scopeProvider = provider
}
}
interface ScopedViewModel {
fun getScopeProvider() : ScopeProvider
fun setScopeProvider(provider : ScopeProvider)
}
McEna
01/07/2024, 5:19 PMclass AndroidMLSearchViewModel : AndroidCustomScopedViewModel() {
val viewModel = MLSearchViewModel()
init {
viewModel.setScopeProvider(this.getScopeProvider())
}
fun loadSearch(terms : String) {
viewModel.loadSearch(terms)
}
}
McEna
01/07/2024, 5:20 PMMcEna
01/07/2024, 5:20 PMcompanion object{
@Composable
fun Render(viewModel: MLSearchViewModel? = null){
val model = viewModel ?: remember { MLSearchViewModel() }
val searchResult = model.searchState
MainView.Render(searchResult) {
model.loadSearch(it)
}
}
}
McEna
01/07/2024, 5:21 PMMcEna
01/07/2024, 5:21 PMcompanion object {
@Composable
fun Render(viewModel: AndroidMLSearchViewModel? = null){
val model = viewModel ?: viewModel()
val searchResult = model.viewModel.searchState
MainView.Render(searchResult) {
model.viewModel.loadSearch(it)
}
}
}
McEna
01/07/2024, 5:22 PM