Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.goalpanzi.mission_mate.core.navigation.model

import com.goalpanzi.mission_mate.core.navigation.model.image.MissionMateImages
import kotlinx.serialization.Serializable

sealed interface RouteModel {
Expand Down Expand Up @@ -46,10 +47,7 @@ sealed interface RouteModel {

@Serializable
data class UserStory(
val userCharacter : String,
val nickname : String,
val verifiedAt : String,
val imageUrl : String
val images : MissionMateImages,
) : MissionRouteModel

@Serializable
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.goalpanzi.mission_mate.core.navigation.model.image

import android.os.Build
import android.os.Bundle
import android.os.Parcelable
import androidx.navigation.NavType
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

@Serializable
@Parcelize
class MissionMateImages(
private val images: List<MissionMateImage>
) : Parcelable, List<MissionMateImage> by images

@Serializable
@Parcelize
class MissionMateImage(
val userCharacter : String,
val nickname : String,
val verifiedAt : String,
val imageUrl : String
) : Parcelable {

fun formattedVerifiedAt() : String {
val dateTime = LocalDateTime.parse(verifiedAt)
val formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd")
return dateTime.format(formatter)
}
}

val MissionMateImagesModelType = object : NavType<MissionMateImages>(
isNullableAllowed = false
){
override fun get(bundle: Bundle, key: String): MissionMateImages? {
return if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
bundle.getParcelable(key, MissionMateImages::class.java)
} else {
@Suppress("DEPRECATION")
bundle.getParcelable(key)
}
}

override fun parseValue(value: String): MissionMateImages {
return Json.decodeFromString<MissionMateImages>(value)
}

override fun serializeAsValue(value: MissionMateImages): String {
return Json.encodeToString(value)
}

override fun put(bundle: Bundle, key: String, value: MissionMateImages) {
bundle.putParcelable(key, value)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import androidx.navigation.NavOptions
import androidx.navigation.compose.composable
import androidx.navigation.toRoute
import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel
import com.goalpanzi.mission_mate.core.ui.util.slideInFromEnd
import com.goalpanzi.mission_mate.core.navigation.model.image.MissionMateImage
import com.goalpanzi.mission_mate.core.navigation.model.image.MissionMateImages
import com.goalpanzi.mission_mate.core.navigation.model.image.MissionMateImagesModelType
import com.goalpanzi.mission_mate.core.ui.util.slideInFromBottom
import com.goalpanzi.mission_mate.core.ui.util.slideInFromEnd
import com.goalpanzi.mission_mate.core.ui.util.slideOutToBottom
import com.goalpanzi.mission_mate.core.ui.util.slideOutToEnd
import com.goalpanzi.mission_mate.feature.board.model.CharacterUiModel
import com.goalpanzi.mission_mate.feature.board.model.UserStory
import com.goalpanzi.mission_mate.feature.board.screen.BoardFinishRoute
import com.goalpanzi.mission_mate.feature.board.screen.BoardMissionDetailRoute
Expand All @@ -20,6 +22,7 @@ import com.goalpanzi.mission_mate.feature.board.screen.UserStoryScreen
import com.goalpanzi.mission_mate.feature.board.screen.VerificationPreviewRoute
import java.net.URLEncoder
import java.nio.charset.StandardCharsets
import kotlin.reflect.typeOf

fun NavController.navigateToBoard(
missionId: Long,
Expand All @@ -36,7 +39,7 @@ fun NavGraphBuilder.boardNavGraph(
onNavigateOnboarding: () -> Unit,
onNavigateDetail : (Long) -> Unit,
onNavigateFinish : (Long) -> Unit,
onNavigateStory: (UserStory) -> Unit,
onNavigateStory: (List<UserStory>) -> Unit,
onNavigateToPreview: (Long, Uri) -> Unit
) {
composable<MissionRouteModel.Board> { navBackStackEntry ->
Expand Down Expand Up @@ -92,16 +95,21 @@ fun NavGraphBuilder.boardFinishNavGraph(
}

fun NavController.navigateToUserStory(
userStory: UserStory
) = with(userStory) {
val encodedUrl = URLEncoder.encode(imageUrl, StandardCharsets.UTF_8.toString())
userStories: List<UserStory>
) = with(userStories) {
this@navigateToUserStory
.navigate(
MissionRouteModel.UserStory(
userCharacter = characterUiModelType.name.uppercase(),
nickname = nickname,
verifiedAt = verifiedAt,
imageUrl = encodedUrl
images = MissionMateImages(
userStories.map {
MissionMateImage(
imageUrl = URLEncoder.encode(it.imageUrl, StandardCharsets.UTF_8.toString()),
userCharacter = it.characterUiModelType.name.uppercase(),
nickname = it.nickname,
verifiedAt = it.verifiedAt
)
}
)
)
)
}
Expand All @@ -115,15 +123,12 @@ fun NavGraphBuilder.userStoryNavGraph(
},
exitTransition = {
slideOutToBottom()
}
},
typeMap = mapOf(typeOf<MissionMateImages>() to MissionMateImagesModelType)
) { backStackEntry ->
backStackEntry.toRoute<MissionRouteModel.UserStory>().run {
val characterUiModel = userCharacter.let { CharacterUiModel.valueOf(it) }
UserStoryScreen(
characterUiModel = characterUiModel,
nickname = nickname,
verifiedAt = verifiedAt,
imageUrl = imageUrl,
images = images,
onClickClose = onClickClose
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ fun BoardTopView(
onClickFlag: () -> Unit,
onClickAddUser: () -> Unit,
onClickTooltip : () -> Unit,
onClickStory: (UserStory) -> Unit,
onClickStory: (UserStory, List<UserStory>) -> Unit,
modifier: Modifier = Modifier
) {
Box(
Expand Down Expand Up @@ -77,7 +77,9 @@ fun BoardTopView(
modifier = Modifier.padding(top = 56.dp),
userList = userList,
missionState = missionState,
onClickStory = onClickStory,
onClickStory = {
onClickStory(it, userList)
},
)
if(!viewedTooltip){
if (isAddingUserEnabled) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ fun BoardRoute(
onNavigateOnboarding: () -> Unit,
onNavigateDetail: (Long) -> Unit,
onNavigateFinish : (Long) -> Unit,
onClickStory: (UserStory) -> Unit,
onClickStory: (List<UserStory>) -> Unit,
onPreviewImage: (Long, Uri) -> Unit,
modifier: Modifier = Modifier,
viewModel: BoardViewModel = hiltViewModel()
Expand Down Expand Up @@ -120,7 +120,7 @@ fun BoardRoute(
}
launch {
viewModel.myMissionVerification.collect {
onClickStory(it)
onClickStory(listOf(it))
}
}
launch {
Expand Down Expand Up @@ -221,8 +221,8 @@ fun BoardRoute(
onClickTooltip = {
viewModel.setViewedTooltip()
},
onClickStory = { story ->
onClickStory(story)
onClickStory = { story,stories ->
onClickStory(stories)
if(story.isVerified && !story.isViewed) {
viewModel.viewVerification(story.missionVerificationId)
}
Expand Down Expand Up @@ -251,7 +251,7 @@ fun BoardScreen(
onClickFlag: () -> Unit,
onClickAddUser: () -> Unit,
onClickTooltip: () -> Unit,
onClickStory : (UserStory) -> Unit,
onClickStory : (UserStory, List<UserStory>) -> Unit,
onClickMyVerificationBoardBlock : (Int) -> Unit,
modifier: Modifier = Modifier
) {
Expand Down
Loading