Skip to content

Commit

Permalink
Merge branch 'AND_develop' into and/feat-#244-create_group
Browse files Browse the repository at this point in the history
# Conflicts:
#	android/feature/navigator/src/main/java/com/sixkids/feature/navigator/MainNavigator.kt
  • Loading branch information
TRASALBY committed May 11, 2024
2 parents fc9b5df + 88113a1 commit f31eb6e
Show file tree
Hide file tree
Showing 29 changed files with 1,485 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,13 @@ fun AppBarDetailInfo(
}
}
}
Spacer(modifier = modifier.height(4.dp))
Text(
text = title,
style = AppBarTypography.titleSmall,
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = modifier.height(8.dp))
Spacer(modifier = modifier.height(12.dp))
Text(
text = bottomDescription,
style = AppBarTypography.bodyMedium,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package com.sixkids.designsystem.component.item

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import com.sixkids.designsystem.R
import com.sixkids.designsystem.theme.Cream
import com.sixkids.designsystem.theme.UlbanTypography
import com.sixkids.ui.util.formatToMonthDayTime
import java.time.LocalDateTime

@Composable
fun UlbanRelayItem(
modifier: Modifier = Modifier,
padding: PaddingValues = PaddingValues(
horizontal = 16.dp,
vertical = 16.dp
),
startDate: LocalDateTime,
endDate: LocalDateTime,
userCount: Int,
color: Color = Cream,
lastMemberName: String,
onClick: () -> Unit = {}
) {
Card(
modifier = modifier
.fillMaxWidth()
.clickable {
onClick()
},
colors = CardDefaults.cardColors(
containerColor = color
),
elevation = CardDefaults.cardElevation(
defaultElevation = 8.dp
),
shape = CardDefaults.outlinedShape,
) {
Column(
modifier = modifier.padding(
padding
)
) {
Text(
text = stringResource(R.string.relay),
style = UlbanTypography.titleSmall
)
Spacer(modifier = modifier.padding(8.dp))

Text(
text = "${startDate.formatToMonthDayTime()} ~ ${endDate.formatToMonthDayTime()}",
style = UlbanTypography.bodySmall
)
Spacer(modifier = modifier.padding(8.dp))

Row (modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically){
AsyncImage(
model = R.drawable.bomb,
placeholder = painterResource(id =R.drawable.bomb),
modifier = Modifier.size(42.dp),
contentDescription = "bomb")

Spacer(modifier = modifier.padding(4.dp))

Column(modifier = Modifier.weight(1f)) {
Text(
text = stringResource(R.string.relay_item_count, userCount),
style = UlbanTypography.bodySmall
)
Spacer(modifier = modifier.padding(2.dp))
Text(
text = stringResource(R.string.relay_item_last_member, lastMemberName),
style = UlbanTypography.bodyMedium
)
}
}

}
}

}

@Composable
@Preview(showBackground = true)
fun UlbanChallengeItemPreview() {
UlbanRelayItem(
startDate = LocalDateTime.now(),
endDate = LocalDateTime.now(),
userCount = 0,
lastMemberName = "홍유준"
)
}
3 changes: 3 additions & 0 deletions android/core/designsystem/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,7 @@
<string name="class_postfix">" 반"</string>
<string name="confirm">확인</string>
<string name="cancel">취소</string>
<string name="relay">이어 달리기</string>
<string name="relay_item_last_member">%s 학생이 폭탄을 터트렸어요</string>
<string name="relay_item_count">%d번</string>
</resources>
11 changes: 11 additions & 0 deletions android/core/model/src/main/java/com/sixkids/model/Relay.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.sixkids.model

import java.time.LocalDateTime

data class Relay(
val id: Long = 0,
val startTime: LocalDateTime = LocalDateTime.now(),
val endTime: LocalDateTime = LocalDateTime.now(),
val lastTurn: Int = 0,
val lastMemberName: String = "",
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.sixkids.model

data class RelayDetail(
val id: Long = 0,
)
14 changes: 14 additions & 0 deletions android/core/model/src/main/java/com/sixkids/model/RunningRelay.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.sixkids.model

import java.time.LocalDateTime

data class RunningRelay(
val id: Long = 0,
val totalMemberCount: Int = 0, // 전체 턴 횟수 (선생님만 볼 수 있음)
val doneMemberCount: Int = 0, // 현재 진행된 턴 횟수 (선생님만 볼 수 있음)
val startTime: LocalDateTime = LocalDateTime.now(),
val endTime: LocalDateTime = LocalDateTime.now(),
val curMemberNickname: String = "",
val myTurnStatus : Boolean = false,
val lastTurnMemberName: String = ""
)
5 changes: 5 additions & 0 deletions android/core/ui/src/main/java/com/sixkids/ui/util/Date.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,8 @@ fun LocalTime.formatToHourMinute(): String {
val formatter = DateTimeFormatter.ofPattern("HH:mm")
return this.format(formatter)
}

fun LocalDateTime.formatToMonthDayKorean(): String {
val formatter = DateTimeFormatter.ofPattern("M월 d일")
return this.format(formatter)
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,18 @@ import com.sixkids.student.main.navigation.navigateStudentProfile
import com.sixkids.student.navigation.navigateStudentChallengeHistory
import com.sixkids.student.navigation.navigateStudentGroupCreate
import com.sixkids.student.navigation.navigateStudentGroupJoin
import com.sixkids.student.relay.navigation.navigateStudentRelayCreate
import com.sixkids.student.relay.navigation.navigateStudentRelayDetail
import com.sixkids.student.relay.navigation.navigateStudentRelayHistory
import com.sixkids.student.relay.navigation.navigateStudentRelayJoin
import com.sixkids.teacher.board.navigation.BoardRoute
import com.sixkids.teacher.board.navigation.navigateAnnounce
import com.sixkids.teacher.board.navigation.navigateAnnounceDetail
import com.sixkids.teacher.board.navigation.navigateAnnounceWrite
import com.sixkids.teacher.board.navigation.navigateBoard
import com.sixkids.teacher.board.navigation.navigateChatting
import com.sixkids.teacher.board.navigation.navigatePost
import com.sixkids.teacher.board.navigation.navigatePostWrite
import com.sixkids.teacher.board.navigation.navigatePostDetail
import com.sixkids.teacher.board.navigation.navigatePostWrite
import com.sixkids.teacher.challenge.navigation.navigateChallengeCreatedResult
Expand Down Expand Up @@ -83,7 +91,7 @@ class MainNavigator(
// 학생 바텀 네비게이션 탭
MainNavigationTab.STUDENT_HOME -> navController.navigateStudentHome(studentNavOptions)
MainNavigationTab.STUDENT_BOARD -> {}
MainNavigationTab.STUDENT_RELAY -> {}
MainNavigationTab.STUDENT_RELAY -> navController.navigateStudentRelayHistory(studentNavOptions)
MainNavigationTab.STUDENT_CHALLENGE -> navController.navigateStudentChallengeHistory(studentNavOptions)
}
}
Expand All @@ -108,6 +116,22 @@ class MainNavigator(
navController.navigatePostWrite()
}

fun navigatePostDetail(postId: Long) {
navController.navigatePostDetail(postId)
}

fun navigateAnnounce() {
navController.navigateAnnounce()
}

fun navigateAnnounceWrite() {
navController.navigateAnnounceWrite()
}

fun navigateAnnounceDetail(announceId: Long) {
navController.navigateAnnounceDetail(announceId)
}

/**
* Student Main Navigation
*/
Expand All @@ -123,21 +147,13 @@ class MainNavigator(
navController.navigateJoinOrganization()
}

fun navigatePostDetail(postId: Long) {
navController.navigatePostDetail(postId)
}


/**
* Home Navigation
*/
fun navigateHome() {
bottomTabItems = teacherTab() // 바텀 네비게이션 탭 초기화
navController.navigate(HomeRoute.defaultRoute) {
popUpTo(navController.graph.id) {
inclusive = true
}
}
navController.navigate(HomeRoute.defaultRoute)
}

fun navigateRank() {
Expand Down Expand Up @@ -205,6 +221,32 @@ class MainNavigator(
navController.navigateSignUpPhoto(isTeacher)
}

/**
* Student Relay Navigation
*/
fun navigateStudentRelayHistory() {
navController.navigate(HomeRoute.defaultRoute) {
popUpTo(navController.graph.id) {
inclusive = true
}
}
}

fun navigateStudentRelayDetail(relayId: Long, groupId: Long?) {
navController.navigateStudentRelayDetail(relayId, groupId)
}

fun navigateStudentRelayCreate() {
navController.navigateStudentRelayCreate()
}

fun navigateStudentRelayJoin() {
navController.navigateStudentRelayJoin()
}

/**
* Challenge Navigation
*/
fun navigateChallengeHistory() {
navController.navigateChallengeHistory()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.annotation.RequiresApi
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.EnterTransition
import androidx.compose.animation.ExitTransition
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.slideIn
Expand Down Expand Up @@ -41,6 +42,7 @@ import com.sixkids.student.board.navigation.studentHomeNavGraph
import com.sixkids.student.main.navigation.studentOrganizationListNavGraph
import com.sixkids.student.navigation.studentChallengeNavGraph
import com.sixkids.student.navigation.studentGroupNavGraph
import com.sixkids.student.relay.navigation.studentRelayNavGraph
import com.sixkids.teacher.board.navigation.boardNavGraph
import com.sixkids.teacher.challenge.navigation.challengeNavGraph
import com.sixkids.teacher.home.navigation.homeNavGraph
Expand Down Expand Up @@ -84,8 +86,8 @@ fun MainScreen(
NavHost(
navController = navigator.navController,
startDestination = navigator.startDestination,
enterTransition = { EnterTransition.None },
exitTransition = { ExitTransition.None },
enterTransition = { fadeIn(animationSpec = tween(0)) },
exitTransition = { fadeOut(animationSpec = tween(0)) },
)
{
homeNavGraph(
Expand All @@ -102,6 +104,9 @@ fun MainScreen(
onShowSnackBar = viewModel::onShowSnackbar,
navigateToChatting = navigator::navigateChatting,
navigateToPostWrite = navigator::navigatePostWrite,
navigateToAnnounceDetail = navigator::navigateAnnounceDetail,
navigateToAnnounceWrite = navigator::navigateAnnounceWrite,
navigateToAnnounceList = navigator::navigateAnnounce,
)

challengeNavGraph(
Expand Down Expand Up @@ -164,6 +169,14 @@ fun MainScreen(
onBackClick = navigator::popBackStack,
)

studentRelayNavGraph(
navigateRelayDetail = navigator::navigateStudentRelayDetail,
navigateCreateRelay = navigator::navigateStudentRelayCreate,
navigateJoinRelay = navigator::navigateStudentRelayJoin,
handleException = viewModel::handleException,
onBackClick = navigator::popBackStack,
)

}
with(uiState) {
UlbanSnackbar(
Expand Down
1 change: 1 addition & 0 deletions android/feature/student/relay/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ android {
}

dependencies {
implementation(libs.bundles.paging)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.sixkids.student.relay.history

import com.sixkids.model.RunningRelay
import com.sixkids.ui.base.SideEffect
import com.sixkids.ui.base.UiState

data class RelayHistoryState(
val isLoading: Boolean = false,
val runningRelay: RunningRelay? = null,
val totalRelayCount: Int = 0,
) : UiState

sealed interface RelayHistoryEffect : SideEffect {
data class NavigateToRelayDetail(val relayId: Long, val groupId: Long? = null) : RelayHistoryEffect
data object NavigateToCreateRelay : RelayHistoryEffect
data object NavigateToJoinRelay : RelayHistoryEffect
data class HandleException(val throwable: Throwable, val retry: () -> Unit) : RelayHistoryEffect
}
Loading

0 comments on commit f31eb6e

Please sign in to comment.