· 3 months ago · Jun 29, 2025, 11:35 PM
1package com.example.storyapp.ui.login
2
3import androidx.lifecycle.LiveData
4import androidx.lifecycle.MediatorLiveData
5import androidx.lifecycle.ViewModel
6import com.example.storyapp.data.response.auth.LoginResult
7import com.example.storyapp.di.Repository
8import com.example.storyapp.utils.ResultState
9
10class LoginViewModel(private val repository: Repository) : ViewModel() {
11
12 fun performLogin2(email: String, password: String): LiveData<ResultState<LoginResult>> =
13 repository.login(email, password)
14
15 // 1. Terapkan enkapsulasi. ViewModel memiliki state-nya sendiri.
16 private val _loginResult = MediatorLiveData<ResultState<LoginResult>>()
17 val loginResult: LiveData<ResultState<LoginResult>> = _loginResult
18
19 // 2. Buat fungsi yang dipanggil UI untuk *memulai* proses login.
20 // Fungsi ini tidak mengembalikan apa-apa (Unit).
21 fun performLogin(email: String, password: String) {
22 // Panggil fungsi repository yang mengembalikan LiveData
23 val resultLiveData = repository.login(email, password)
24
25 // 3. Tempelkan (source) LiveData dari repository ke LiveData internal ViewModel.
26 _loginResult.addSource(resultLiveData) { result ->
27 // 4. Update nilai LiveData internal dengan hasil dari repository.
28 _loginResult.value = result
29 // Hapus source setelah mendapatkan hasil agar tidak ada duplikasi observer
30 _loginResult.removeSource(resultLiveData)
31 }
32 }
33}