Skip to content

Commit

Permalink
#91 HomeFragment에서 회수폐기 아이템 클릭 시 NewsScreen으로 이동하는 로직 구현 중
Browse files Browse the repository at this point in the history
  • Loading branch information
pknujsp committed May 31, 2023
1 parent 4a17b86 commit b1e113b
Show file tree
Hide file tree
Showing 9 changed files with 83 additions and 29 deletions.
1 change: 1 addition & 0 deletions core/model/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ plugins {
id("mediproject.android.library")
id(libs.plugins.kotlin.serialization.get().pluginId)
id(libs.plugins.nav.safeargs.kotlin.get().pluginId)
alias(libs.plugins.kotlin.parcelize)
}

android {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.android.mediproject.core.model.local.navargs

data class RecallDisposalArgs(
val product: String,
) : BaseNavArgs(RecallDisposalArgs::class.java.name)
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.android.mediproject.core.model.remote.adminaction


import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import java.time.LocalDate
import java.time.format.DateTimeFormatter


@Parcelize
/**
* 행정처분 목록 별 데이터 클래스
*
Expand Down Expand Up @@ -36,7 +38,7 @@ data class AdminActionListItemDto(
val lastSettleDate: LocalDate, // 20230526
val publicEndDate: LocalDate, // 20230910
var onClick: (() -> Unit)? = null
)
) : Parcelable

fun AdminActionListResponse.Body.Item.toDto(): AdminActionListItemDto {
return AdminActionListItemDto(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,32 @@ package com.android.mediproject.feature.news
import android.os.Bundle
import android.view.View
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.navArgs
import com.android.mediproject.core.model.local.navargs.RecallDisposalArgs
import com.android.mediproject.core.ui.base.BaseFragment
import com.android.mediproject.feature.news.databinding.FragmentNewsBinding
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class NewsFragment : BaseFragment<FragmentNewsBinding, NewsViewModel>(FragmentNewsBinding::inflate) {
class NewsFragment :
BaseFragment<FragmentNewsBinding, NewsViewModel>(FragmentNewsBinding::inflate) {

override val fragmentViewModel: NewsViewModel by viewModels()

private val recallDisposalArgs: RecallDisposalArgs by lazy {
try {
navArgs<RecallDisposalArgs>().value
} catch (e: Exception) {
RecallDisposalArgs("")
}
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.apply {
lifecycleOwner = viewLifecycleOwner
composeView.setContent {
NewsNavHost()
NewsNavHost(arguments = recallDisposalArgs)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import com.android.mediproject.core.model.local.navargs.RecallDisposalArgs
import com.android.mediproject.feature.news.adminaction.AdminActionScreen
import com.android.mediproject.feature.news.adminaction.DetailAdminActionScreen
import com.android.mediproject.feature.news.recallsuspension.DetailRecallDisposalScreen
Expand All @@ -51,20 +52,24 @@ enum class ChipType : Parcelable {
*/
@Composable
fun NewsNavHost(
navController: NavHostController = rememberNavController(), startDestination: String = "news"
navController: NavHostController = rememberNavController(), arguments: RecallDisposalArgs
) {
val viewModelStoreOwner = checkNotNull(LocalViewModelStoreOwner.current) {
""
}

NavHost(navController = navController, startDestination = startDestination) {
val start = if (arguments.product.isNotEmpty()) "detailRecallSuspension"
else "news"

NavHost(navController = navController, startDestination = start) {
composable("news") {
CompositionLocalProvider(LocalViewModelStoreOwner provides viewModelStoreOwner) {
NewsScreen(navController)
}
}
composable(
"detailRecallSuspension/{product}", arguments = listOf(navArgument("product") { type = NavType.StringType })
"detailRecallSuspension/{product}",
arguments = listOf(navArgument("product") { type = NavType.StringType })
) {
DetailRecallDisposalScreen()
}
Expand Down Expand Up @@ -107,7 +112,8 @@ fun NewsScreen(navController: NavController) {
@Composable
fun ChipGroup(selectedChip: ChipType, onChipSelected: (ChipType) -> Unit) {
Row(
verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(top = 16.dp, bottom = 8.dp, start = 24.dp, end = 24.dp)
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.padding(top = 16.dp, bottom = 8.dp, start = 24.dp, end = 24.dp)
) {
CustomFilterChip(
title = stringResource(id = R.string.recallSuspension),
Expand All @@ -132,7 +138,9 @@ fun ChipGroup(selectedChip: ChipType, onChipSelected: (ChipType) -> Unit) {
*/
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CustomFilterChip(type: ChipType, title: String, isSelected: Boolean, onClick: (ChipType) -> Unit) {
fun CustomFilterChip(
type: ChipType, title: String, isSelected: Boolean, onClick: (ChipType) -> Unit
) {
FilterChip(
selected = isSelected,
onClick = { onClick.invoke(type) },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,36 @@ fun Item(item: AdminActionListItemDto) {
Column(
modifier = Modifier.fillMaxWidth()
) {
Text(text = item.entpName, style = MaterialTheme.typography.titleLarge, modifier = Modifier.padding(bottom = 8.dp))
Text(text = item.itemName, style = MaterialTheme.typography.titleLarge, modifier = Modifier.padding(bottom = 8.dp))
Text(
text = item.entpName,
style = MaterialTheme.typography.titleLarge,
modifier = Modifier.padding(bottom = 8.dp)
)
Text(
text = item.itemName,
style = MaterialTheme.typography.titleLarge,
modifier = Modifier.padding(bottom = 8.dp)
)
Text(
text = item.lastSettleDate.format(DateTimeFormatter.ISO_LOCAL_DATE),
style = MaterialTheme.typography.bodyMedium,
modifier = Modifier.padding(bottom = 8.dp)
)
Text(text = item.disposition, style = MaterialTheme.typography.bodyMedium, modifier = Modifier.padding(bottom = 12.dp))
Text(text = item.violation, style = MaterialTheme.typography.bodyMedium, modifier = Modifier.padding(bottom = 12.dp))
Text(text = item.applyLaw, style = MaterialTheme.typography.bodyMedium, modifier = Modifier.padding(bottom = 12.dp))

Text(
text = item.disposition,
style = MaterialTheme.typography.bodyMedium,
modifier = Modifier.padding(bottom = 12.dp)
)
Text(
text = item.violation,
style = MaterialTheme.typography.bodyMedium,
modifier = Modifier.padding(bottom = 12.dp)
)
Text(
text = item.applyLaw,
style = MaterialTheme.typography.bodyMedium,
modifier = Modifier.padding(bottom = 12.dp)
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ class PenaltyListAdapter :
class PenaltyViewHolder(private val view: SimpleListItemView<RecallSuspensionListItemDto>) :
RecyclerView.ViewHolder(view) {

private var item: RecallSuspensionListItemDto? = null

init {
view.setTitleColor(view.context.resources.getColor(R.color.newsChipColor, null))
view.setContentTextColor(view.context.resources.getColor(R.color.newsChipColor, null))
Expand All @@ -38,7 +36,7 @@ class PenaltyListAdapter :
}

fun bind(data: RecallSuspensionListItemDto) {
item = data
view.data = data
view.setTitle(data.product)
view.setContent(data.rtrvlResn)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ import android.view.View
import androidx.core.net.toUri
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.android.mediproject.core.common.util.navigateByDeepLink
import com.android.mediproject.core.common.viewmodel.UiState
import com.android.mediproject.core.model.local.navargs.RecallDisposalArgs
import com.android.mediproject.core.ui.base.BaseFragment
import com.android.mediproject.core.ui.base.view.stateAsCollect
import com.android.mediproject.feature.penalties.databinding.FragmentRecentPenaltyListBinding
Expand Down Expand Up @@ -52,6 +54,15 @@ class RecentPenaltyListFragment :
is UiState.Loading -> {}

is UiState.Success -> {

uiState.data.forEach { itemDto ->
itemDto.onClick = {
findNavController().navigateByDeepLink(
"medilens://main/news_nav", RecallDisposalArgs(it.product)
)
}
}

penaltyListAdapter.submitList(uiState.data)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,25 @@ import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class RecentPenaltyListViewModel @Inject constructor(getRecallSuspensionInfoUseCase: GetRecallSuspensionInfoUseCase) : BaseViewModel() {
class RecentPenaltyListViewModel @Inject constructor(getRecallSuspensionInfoUseCase: GetRecallSuspensionInfoUseCase) :
BaseViewModel() {

private val _recallDisposalList = MutableStateFlow<UiState<List<RecallSuspensionListItemDto>>>(UiState.Initial)
private val _recallDisposalList =
MutableStateFlow<UiState<List<RecallSuspensionListItemDto>>>(UiState.Initial)
val recallDisposalList get() = _recallDisposalList.asStateFlow()

/**
* 회수 폐기 공고 목록을 로드
*/
init {
viewModelScope.launch {
getRecallSuspensionInfoUseCase.getRecentRecallDisposalList(numOfRows = 5).fold(onSuccess = {
_recallDisposalList.value = UiState.Success(it)
}, onFailure = {
_recallDisposalList.value = UiState.Error(it.message ?: "failed")
})
getRecallSuspensionInfoUseCase.getRecentRecallDisposalList(numOfRows = 5)
.fold(onSuccess = {
_recallDisposalList.value = UiState.Success(it)
}, onFailure = {
_recallDisposalList.value = UiState.Error(it.message ?: "failed")
})
}
}

private fun openDetail(item: RecallSuspensionListItemDto) {

}

}

0 comments on commit b1e113b

Please sign in to comment.