diff --git a/feature/penalties/src/main/java/com/android/mediproject/feature/penalties/recentpenaltylist/RecentPenaltyListFragment.kt b/feature/penalties/src/main/java/com/android/mediproject/feature/penalties/recentpenaltylist/RecentPenaltyListFragment.kt index 93c1f3a87..8475d267a 100644 --- a/feature/penalties/src/main/java/com/android/mediproject/feature/penalties/recentpenaltylist/RecentPenaltyListFragment.kt +++ b/feature/penalties/src/main/java/com/android/mediproject/feature/penalties/recentpenaltylist/RecentPenaltyListFragment.kt @@ -17,12 +17,6 @@ import dagger.hilt.android.AndroidEntryPoint import repeatOnStarted import javax.inject.Inject - -/** - * 행정 처분 목록 프래그먼트 - * - * Material3 Chip으로 의약품 명 보여주고, ViewModel로 관리 - */ @AndroidEntryPoint class RecentPenaltyListFragment : BaseFragment(FragmentRecentPenaltyListBinding::inflate) { @@ -37,6 +31,13 @@ class RecentPenaltyListFragment : @Inject lateinit var medicineInfoMapper: MedicineInfoMapper + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initHeader() + setBinding() + } + + private fun setRecyclerView() { penaltyListAdapter = PenaltyListAdapter() binding.penaltyList.apply { @@ -65,10 +66,17 @@ class RecentPenaltyListFragment : private fun setBinding() { binding.apply { - viewLifecycleOwner.repeatOnStarted { - fragmentViewModel.apply { - recallDisposalList.stateAsCollect(headerView, noHistoryTextView).collect { uiState -> - handleUiState(uiState) + fragmentViewModel.apply { + viewLifecycleOwner.apply { + repeatOnStarted { + recallDisposalList.stateAsCollect(headerView, noHistoryTextView).collect { uiState -> + handleUiState(uiState) + } + } + repeatOnStarted { + eventFlow.collect { event -> + handleEvent(event) + } } } noHistoryTextView.text = medicineInfoMapper.getNoHistorySpan(requireContext()) @@ -77,25 +85,15 @@ class RecentPenaltyListFragment : setRecyclerView() } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - initHeader() - setBinding() + private fun handleEvent(event: RecentPenaltyListViewModel.PenaltyListEvent) { + when (event) { + is RecentPenaltyListViewModel.PenaltyListEvent.NavigateToNews -> navigateToNews() + } } - - /** - * 헤더 초기화 - * - * 확장 버튼 리스너, 더 보기 버튼 리스너 - */ - private fun initHeader() { - binding.headerView.setOnExpandClickListener {} - - binding.headerView.setOnMoreClickListener { - findNavController().navigateByDeepLink( - "medilens://main/news_nav", RecallDisposalArgs(""), - ) - } + private fun navigateToNews() { + findNavController().navigateByDeepLink( + "medilens://main/news_nav", RecallDisposalArgs(""), + ) } } diff --git a/feature/penalties/src/main/java/com/android/mediproject/feature/penalties/recentpenaltylist/RecentPenaltyListViewModel.kt b/feature/penalties/src/main/java/com/android/mediproject/feature/penalties/recentpenaltylist/RecentPenaltyListViewModel.kt index b80ed4542..f9d90d11a 100644 --- a/feature/penalties/src/main/java/com/android/mediproject/feature/penalties/recentpenaltylist/RecentPenaltyListViewModel.kt +++ b/feature/penalties/src/main/java/com/android/mediproject/feature/penalties/recentpenaltylist/RecentPenaltyListViewModel.kt @@ -1,5 +1,6 @@ package com.android.mediproject.feature.penalties.recentpenaltylist +import MutableEventFlow import android.content.Context import android.text.Spannable import android.text.SpannableStringBuilder @@ -8,6 +9,7 @@ import android.text.style.ForegroundColorSpan import android.text.style.UnderlineSpan import androidx.core.content.ContextCompat import androidx.lifecycle.viewModelScope +import asEventFlow import com.android.mediproject.core.common.network.Dispatcher import com.android.mediproject.core.common.network.MediDispatchers import com.android.mediproject.core.common.viewmodel.UiState @@ -26,6 +28,17 @@ import javax.inject.Inject class RecentPenaltyListViewModel @Inject constructor( private val getRecallSuspensionInfoUseCase: GetRecallSuspensionInfoUseCase) : BaseViewModel() { + private val _eventFlow = MutableEventFlow() + val eventFlow get() = _eventFlow.asEventFlow() + + fun event(event: PenaltyListEvent) = viewModelScope.launch { _eventFlow.emit(event) } + + fun navigateToNews() = event(PenaltyListEvent.NavigateToNews) + + sealed class PenaltyListEvent { + object NavigateToNews : PenaltyListEvent() + } + private val _recallDisposalList = MutableStateFlow>>(UiState.Initial) val recallDisposalList get() = _recallDisposalList.asStateFlow() diff --git a/feature/penalties/src/main/res/layout/fragment_recent_penalty_list.xml b/feature/penalties/src/main/res/layout/fragment_recent_penalty_list.xml index d101c66fc..509938808 100644 --- a/feature/penalties/src/main/res/layout/fragment_recent_penalty_list.xml +++ b/feature/penalties/src/main/res/layout/fragment_recent_penalty_list.xml @@ -22,6 +22,7 @@ app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:more_title="@string/read_more" + onMoreClick="@{()->viewModel.navigateToNews()}" app:visibility_target_view="@id/penaltyList" />