Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

๐Ÿ”€ :: (#189) request detail navigation bug #191

Merged
merged 9 commits into from
Dec 6, 2023
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,7 @@ fun GKRAdminNavHost(
requestScreen(
navigateToMain = { navController.navigateToMain() },
navigateToSignIn = { navController.navigateToSignIn() },
navigateToRequestDetail = { data ->
val json = Uri.encode(Gson().toJson(data))
navController.navigateToRequestDetail(json)
}
navigateToRequestDetail = { navController.navigateToRequestDetail(it.toString()) }
)

requestDetailScreen(navigateToSignIn = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ package com.mpersand.data.dto.order.response

import com.google.gson.annotations.SerializedName
import com.mpersand.domain.model.order.response.OrderDetailListResponseModel
import java.time.LocalDateTime

data class OrderDetailListResponse(
@SerializedName("id") val id: Int,
@SerializedName("applicationId") val applicationId: Long,
@SerializedName("equipmentId") val equipmentId: Long,
@SerializedName("name") val name: String,
@SerializedName("imageUrl") val imageUrl: String,
@SerializedName("description") val description: String,
Expand All @@ -21,7 +21,8 @@ data class OrderDetailListResponse(
)

fun OrderDetailListResponse.asOrderDetailListResponseModel() = OrderDetailListResponseModel(
id = id,
applicationId = applicationId,
equipmentId = equipmentId,
name = name,
imageUrl = imageUrl,
description = description,
Expand Down
4 changes: 2 additions & 2 deletions data/src/main/java/com/mpersand/data/network/api/OrderApi.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.mpersand.data.network.api

import com.mpersand.data.dto.order.response.OrderApplicationListResponse
import com.mpersand.data.dto.order.response.OrderDetailListResponse
import com.mpersand.data.dto.order.response.OrderEquipmentListResponse
import com.mpersand.data.dto.order.response.RentalInfoResponse
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.PATCH
Expand All @@ -24,7 +24,7 @@ interface OrderApi {
suspend fun getWaitList(): OrderApplicationListResponse

@GET("order/detail/{id}")
suspend fun getRentRequestDetail(@Path("id") id: String): RentalInfoResponse
suspend fun getRentRequestDetail(@Path("id") id: String): OrderDetailListResponse

@POST("order/rental/{id}")
suspend fun postRental(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.mpersand.data.remote.datasource.order

import com.mpersand.data.dto.order.response.OrderApplicationListResponse
import com.mpersand.data.dto.order.response.OrderDetailListResponse
import com.mpersand.data.dto.order.response.OrderEquipmentListResponse
import com.mpersand.data.dto.order.response.RentalInfoResponse

interface OrderDataSource {
suspend fun getSelfStateList(): OrderEquipmentListResponse
Expand All @@ -13,7 +13,7 @@ interface OrderDataSource {

suspend fun getWaitList(): OrderApplicationListResponse

suspend fun getRentalRequestDetail(id: String): RentalInfoResponse
suspend fun getRentalRequestDetail(id: String): OrderDetailListResponse

suspend fun postRental(id: Int, response: String)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.mpersand.data.repository

import com.mpersand.data.dto.order.response.asOrderApplicationListResponseModel
import com.mpersand.data.dto.order.response.asOrderDetailListResponseModel
import com.mpersand.data.dto.order.response.asOrderEquipmentListResponseModel
import com.mpersand.data.dto.order.response.asRentalInfoResponseModel
import com.mpersand.data.remote.datasource.order.OrderDataSource
import com.mpersand.domain.model.order.response.OrderApplicationListResponseModel
import com.mpersand.domain.model.order.response.OrderEquipmentListResponseModel
Expand All @@ -25,7 +25,7 @@ class OrderRepositoryImpl @Inject constructor(
orderDataSource.getWaitList().asOrderApplicationListResponseModel()

override suspend fun getRentalRequestDetail(id: String) =
orderDataSource.getRentalRequestDetail(id).asRentalInfoResponseModel()
orderDataSource.getRentalRequestDetail(id).asOrderDetailListResponseModel()

override suspend fun postRental(id: Int, response: String) =
orderDataSource.postRental(id, response)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import java.time.LocalDateTime

@Parcelize
data class OrderDetailListResponseModel(
val id: Int,
val applicationId: Long,
val equipmentId: Long,
val name: String,
val imageUrl: String,
val description: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.mpersand.domain.repository

import com.mpersand.domain.model.order.response.OrderApplicationListResponseModel
import com.mpersand.domain.model.order.response.OrderDetailListResponseModel
import com.mpersand.domain.model.order.response.OrderEquipmentListResponseModel
import com.mpersand.domain.model.order.response.RentalInfoResponseModel

interface OrderRepository {
suspend fun getSelfStateList(): OrderEquipmentListResponseModel
Expand All @@ -13,7 +13,7 @@ interface OrderRepository {

suspend fun getWaitList(): OrderApplicationListResponseModel

suspend fun getRentalRequestDetail(id: String): RentalInfoResponseModel
suspend fun getRentalRequestDetail(id: String): OrderDetailListResponseModel

suspend fun postRental(id: Int, response: String)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ fun MainScreen(
.filter { it.orderType == "RENTAL" }
.map {
EquipmentResponseModel(
productNumber = it.id.toString(),
productNumber = it.applicationId.toString(),
name = it.name,
image = it.imageUrl,
description = it.description,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,74 +15,92 @@ import androidx.compose.material.Button
import androidx.compose.material.ButtonDefaults
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel
import coil.compose.rememberAsyncImagePainter
import com.mpersand.domain.model.order.response.OrderDetailListResponseModel
import com.mpersand.presentation.R
import com.mpersand.presentation.viewmodel.order.OrderViewModel
import com.mpersand.presentation.viewmodel.util.UiState

@Composable
fun RequestDetailScreen(
data: OrderDetailListResponseModel?,
applicationId: String?,
requestViewModel: OrderViewModel = hiltViewModel(),
navigateToSignIn: () -> Unit
) {
Column(
modifier = Modifier
.fillMaxSize()
.systemBarsPadding()
.navigationBarsPadding()
) {
Image(
modifier = Modifier.fillMaxWidth(),
painter = painterResource(id = R.drawable.temp_equipment_image),
contentDescription = "request detail equipment image",
contentScale = ContentScale.FillWidth
)
val rentalRequestState = requestViewModel.getRentalRequestState.observeAsState()
val acceptState by requestViewModel.acceptRequestUiState.observeAsState()
val context = LocalContext.current

StudentInfo(data = data)
LaunchedEffect(Unit) {
if (applicationId != null) requestViewModel.getRentalRequestInfo(applicationId)
}

ReasonView(data = data)
when (val data = rentalRequestState.value) {
UiState.Loading -> {}
is UiState.Success -> {
Column(
modifier = Modifier
.fillMaxSize()
.systemBarsPadding()
.navigationBarsPadding()
) {
Image(
modifier = Modifier.fillMaxWidth(),
painter = rememberAsyncImagePainter(model = data.data?.imageUrl),
contentDescription = "request detail equipment image",
contentScale = ContentScale.FillWidth
)

Spacer(modifier = Modifier.weight(1f))
StudentInfo(data = data.data)

val result by requestViewModel.postRentalUiState.observeAsState()
val context = LocalContext.current
ReasonView(data = data.data)

AcceptOrNotView(
acceptButtonClick = { requestViewModel.acceptRequest(data!!.id) },
rejectButtonClick = { requestViewModel.rejectRequest(data!!.id) }
)
Spacer(modifier = Modifier.weight(1f))

AcceptOrNotView(
acceptButtonClick = {
requestViewModel.acceptRequest(data.data!!.applicationId.toInt())

when (result) {
UiState.Loading -> {}
is UiState.Success -> Toast.makeText(context, "์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.", Toast.LENGTH_SHORT).show()
UiState.BadRequest -> Toast.makeText(context, "ํ† ํฐ ๊ฐ’์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", Toast.LENGTH_SHORT).show()
UiState.Unauthorized -> navigateToSignIn()
UiState.NotFound -> Toast.makeText(context, "UUID๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", Toast.LENGTH_SHORT).show()
else -> Toast.makeText(context, "์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", Toast.LENGTH_SHORT).show()
when (acceptState) {
UiState.Loading -> {}
is UiState.Success -> Toast.makeText(context, "์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.", Toast.LENGTH_SHORT).show()
UiState.BadRequest -> Toast.makeText(context, "ํ† ํฐ ๊ฐ’์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", Toast.LENGTH_SHORT).show()
UiState.Unauthorized -> navigateToSignIn()
UiState.NotFound -> Toast.makeText(context, "UUID๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", Toast.LENGTH_SHORT).show()
else -> Toast.makeText(context, "์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", Toast.LENGTH_SHORT).show()
}
},
rejectButtonClick = { requestViewModel.rejectRequest(data.data!!.applicationId.toInt()) }
)
}
}
UiState.Unauthorized -> {}
UiState.Forbidden -> {}
UiState.NotFound -> {}
UiState.Server -> {}
else -> {}
}
}

@Composable
fun StudentInfo(data: OrderDetailListResponseModel?) {
Text(
modifier = Modifier.padding(start = 13.dp),
text = data?.id.toString(),
text = data?.equipmentId.toString(),
style = TextStyle(
fontFamily = FontFamily(Font(R.font.inter_black)),
fontSize = 20.sp
Expand Down Expand Up @@ -168,4 +186,4 @@ fun AcceptOrNotView(
)
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ fun RequestScreen(
requestViewModel: OrderViewModel = hiltViewModel(),
navigateToSignIn: () -> Unit,
navigateToMain: () -> Unit,
navigateToRequestDetail: (OrderDetailListResponseModel) -> Unit
navigateToRequestDetail: (Long) -> Unit
) {
Column(
modifier = Modifier
Expand All @@ -51,7 +51,7 @@ fun RequestScreen(
@Composable
fun RequestList(
waitState: UiState<OrderApplicationListResponseModel>?,
navigateToRequestDetail: (OrderDetailListResponseModel) -> Unit,
navigateToRequestDetail: (Long) -> Unit,
navigateToSignIn: () -> Unit
) {
when (waitState) {
Expand All @@ -72,7 +72,7 @@ fun RequestList(
@Composable
fun RequestItemList(
list: OrderApplicationListResponseModel,
navigateToRequestDetail: (OrderDetailListResponseModel) -> Unit
navigateToRequestDetail: (Long) -> Unit
) {
LazyColumn(
modifier = Modifier.fillMaxSize(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import java.time.format.DateTimeFormatter
@Composable
fun RequestItem(
data: OrderDetailListResponseModel,
onCardClick: (OrderDetailListResponseModel) -> Unit
onCardClick: (Long) -> Unit
) {
var localDate = ""
if (data.rentalStartDate != null) localDate = LocalDateTime.parse(data.rentalStartDate).format(DateTimeFormatter.ofPattern("yyyy.MM.dd"))
Expand All @@ -43,7 +43,7 @@ fun RequestItem(
color = Color(0xFFD3D3D3),
shape = RoundedCornerShape(8.dp)
)
.gkrClickable { onCardClick(data) }
.gkrClickable { onCardClick(data.applicationId) }
) {
Column(
modifier = Modifier
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.mpersand.presentation.view.request.navigation

import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavType
import androidx.navigation.compose.composable
import androidx.navigation.navArgument
import com.mpersand.domain.model.order.response.OrderDetailListResponseModel
Expand All @@ -10,22 +11,19 @@ import com.mpersand.presentation.view.request.data.RequestInfoNavType

const val requestDetailRoute = "request_detail_route"

fun NavController.navigateToRequestDetail(json: String) {
this.navigate("$requestDetailRoute/$json")
fun NavController.navigateToRequestDetail(applicationId: String) {
this.navigate("$requestDetailRoute/$applicationId")
}

fun NavGraphBuilder.requestDetailScreen(navigateToSignIn: () -> Unit) {
composable(
route = "$requestDetailRoute/{data}",
route = "$requestDetailRoute/{applicationId}",
arguments = listOf(
navArgument("data") {
type = RequestInfoNavType()
}
navArgument("applicationId") { type = NavType.StringType }
)
) {
val data = it.arguments?.getParcelable<OrderDetailListResponseModel>("data")
) { backStackEntry ->
RequestDetailScreen(
data = data,
applicationId = backStackEntry.arguments?.getString("applicationId"),
navigateToSignIn = navigateToSignIn
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ fun NavController.navigateToRequest() {
fun NavGraphBuilder.requestScreen(
navigateToMain: () -> Unit,
navigateToSignIn: () -> Unit,
navigateToRequestDetail: (OrderDetailListResponseModel) -> Unit
navigateToRequestDetail: (Long) -> Unit
) {
composable(requestRoute) {
RequestScreen(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.mpersand.domain.model.order.response.OrderApplicationListResponseModel
import com.mpersand.domain.model.order.response.OrderDetailListResponseModel
import com.mpersand.domain.model.order.response.OrderEquipmentListResponseModel
import com.mpersand.domain.model.order.response.RentalInfoResponseModel
import com.mpersand.domain.usecase.auth.RemoveLocalDataUseCase
import com.mpersand.domain.usecase.order.AcceptRequestUseCase
import com.mpersand.domain.usecase.order.GetNoReturnListUseCase
Expand Down Expand Up @@ -53,8 +53,8 @@ class OrderViewModel @Inject constructor(
private val _getWaitListUiState = MutableLiveData<UiState<OrderApplicationListResponseModel>>()
val getWaitListUiState: LiveData<UiState<OrderApplicationListResponseModel>> = _getWaitListUiState

private val _getRentalRequestState = MutableLiveData<UiState<RentalInfoResponseModel>>()
val getRentalRequestState: LiveData<UiState<RentalInfoResponseModel>> = _getRentalRequestState
private val _getRentalRequestState = MutableLiveData<UiState<OrderDetailListResponseModel>>()
val getRentalRequestState: LiveData<UiState<OrderDetailListResponseModel>> = _getRentalRequestState

private val _postRentalUiState = MutableLiveData<UiState<Nothing>>()
val postRentalUiState: LiveData<UiState<Nothing>> = _postRentalUiState
Expand Down
Loading