Skip to content

Commit ab7d297

Browse files
committed
feat/#89: 공지사항 상세 화면 및 마크다운 라이브러리 추가
jitpack 저장소를 추가하고, 공지사항 상세 화면을 구현했습니다. 마크다운 렌더링을 위해 compose-markdown 라이브러리를 추가했습니다.
1 parent 643ed76 commit ab7d297

File tree

15 files changed

+375
-14
lines changed

15 files changed

+375
-14
lines changed

app/src/main/java/com/yapp/app/official/navigation/YappNavHost.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ fun YappNavHost(
5050
},
5151
navigateBack = { navigator.popBackStack() }
5252
)
53-
noticeNavGraph()
53+
noticeNavGraph(
54+
navigateToNoticeDetail = { noticeId ->
55+
navigator.navigateToNoticeDetail(noticeId)
56+
}
57+
)
5458
}
5559
}

app/src/main/java/com/yapp/app/official/ui/Navigator.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ import androidx.navigation.NavHostController
77
import androidx.navigation.NavOptions
88
import androidx.navigation.compose.currentBackStackEntryAsState
99
import androidx.navigation.compose.rememberNavController
10+
import com.yapp.feature.home.navigation.HomeRoute
1011
import com.yapp.feature.home.navigation.navigateToHome
1112
import com.yapp.feature.home.navigation.navigateToSetting
1213
import com.yapp.feature.login.navigation.LoginRoute
1314
import com.yapp.feature.login.navigation.navigateToLogin
1415
import com.yapp.feature.notice.navigation.navigateToNotice
16+
import com.yapp.feature.notice.navigation.navigateToNoticeDetail
1517
import com.yapp.feature.signup.navigation.navigateToSignUp
1618

1719

@@ -32,7 +34,7 @@ class NavigatorState(
3234
@Composable get() = navController
3335
.currentBackStackEntryAsState().value?.destination
3436

35-
val startDestination = LoginRoute
37+
val startDestination = HomeRoute
3638

3739
fun navigateLoginScreen(navOptions: NavOptions? = null) {
3840
navController.navigateToLogin(navOptions)
@@ -54,6 +56,10 @@ class NavigatorState(
5456
navController.navigateToNotice()
5557
}
5658

59+
fun navigateToNoticeDetail(noticeId: String) {
60+
navController.navigateToNoticeDetail(noticeId)
61+
}
62+
5763
fun popBackStack() {
5864
navController.popBackStack()
5965
}

core/designsystem/src/main/java/com/yapp/core/designsystem/component/chip/Chip.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@ internal fun YappChipBasic(
3030
textStyle: TextStyle,
3131
contentPaddings: PaddingValues,
3232
colorType: ChipColorType,
33+
colorsFill: ChipFillColors = ChipDefaults.colorsFill,
34+
colorsWeak: ChipWeakColors = ChipDefaults.colorsWeak,
3335
isFill: Boolean,
3436
) {
3537
val colors = when (isFill) {
36-
true -> ChipDefaults.colorsFill
37-
false ->ChipDefaults.colorsWeak
38+
true -> colorsFill
39+
false ->colorsWeak
3840
}
3941

4042
Box(
@@ -82,6 +84,8 @@ fun YappChipSmall(
8284
textStyle: TextStyle = ChipDefaults.textStyleSmall,
8385
contentPaddings: PaddingValues = ChipDefaults.contentPaddingsSmall,
8486
colorType: ChipColorType,
87+
colorsFill: ChipFillColors = ChipDefaults.colorsFill,
88+
colorsWeak: ChipWeakColors = ChipDefaults.colorsWeak,
8589
isFill: Boolean,
8690
) {
8791
YappChipBasic(
@@ -91,6 +95,8 @@ fun YappChipSmall(
9195
textStyle = textStyle,
9296
contentPaddings = contentPaddings,
9397
colorType = colorType,
98+
colorsFill = colorsFill,
99+
colorsWeak = colorsWeak,
94100
isFill = isFill
95101
)
96102
}

core/ui/src/main/java/com/yapp/core/ui/component/NoticeItem.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import androidx.compose.ui.tooling.preview.Preview
1818
import androidx.compose.ui.unit.dp
1919
import com.yapp.core.designsystem.component.chip.ChipColorType
2020
import com.yapp.core.designsystem.component.chip.YappChipSmall
21+
import com.yapp.core.designsystem.extension.yappClickable
2122
import com.yapp.core.designsystem.theme.YappTheme
2223

2324
// 샘플 데이터 .. .. ..
@@ -38,9 +39,12 @@ data class TagInfo(
3839
fun NoticeItem(
3940
modifier: Modifier = Modifier,
4041
noticeInfo: NoticeInfo,
42+
onClick: () -> Unit,
4143
) {
4244
Column(
43-
modifier = modifier.padding(vertical = 9.dp)
45+
modifier = modifier
46+
.padding(vertical = 9.dp)
47+
.yappClickable(onClick = onClick)
4448
) {
4549
Row(
4650
horizontalArrangement = Arrangement.spacedBy(8.dp),
@@ -118,7 +122,10 @@ fun NoticeItemPreview() {
118122
YappTheme {
119123
LazyColumn {
120124
items(noticeInfo) { item ->
121-
NoticeItem(noticeInfo = item)
125+
NoticeItem(
126+
noticeInfo = item,
127+
onClick = {}
128+
)
122129
}
123130
}
124131
}

feature/home/src/main/java/com/yapp/feature/home/component/NoticeSection.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ fun NoticeSection(
4040
color = YappTheme.colorScheme.lineNormalAlternative
4141
)
4242
},
43-
noticeInfo = noticeInfo[it]
43+
noticeInfo = noticeInfo[it],
44+
onClick = {
45+
// TODO
46+
}
4447
)
4548
}
4649
Spacer(Modifier.height(8.dp))

feature/notice/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ dependencies {
1212
implementation(libs.androidx.core.ktx)
1313
implementation(libs.androidx.appcompat)
1414
implementation(libs.material)
15+
implementation(libs.compose.markdown)
1516
}

feature/notice/src/main/java/com/yapp/feature/notice/navigation/NoticeNavigation.kt

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,39 @@ import androidx.navigation.NavController
44
import androidx.navigation.NavGraphBuilder
55
import androidx.navigation.NavOptions
66
import androidx.navigation.compose.composable
7+
import com.yapp.feature.NoticeDetail.NoticeDetaildetail.NoticeDetailRoute
8+
import com.yapp.feature.notice.notice.NoticeRoute
79
import com.yapp.feature.notice.notice.NoticeScreen
810
import kotlinx.serialization.Serializable
911

10-
@Serializable data object NoticeRoute
12+
@Serializable
13+
data object NoticeRoute
1114

12-
fun NavController.navigateToNotice(navOptions: NavOptions? = null) { navigate(NoticeRoute, navOptions) }
15+
@Serializable
16+
data class NoticeDetailRoute(
17+
val noticeId: String
18+
)
19+
20+
fun NavController.navigateToNotice(navOptions: NavOptions? = null) {
21+
navigate(NoticeRoute, navOptions)
22+
}
23+
24+
fun NavController.navigateToNoticeDetail(noticeId: String, navOptions: NavOptions? = null) {
25+
navigate(NoticeDetailRoute(noticeId = noticeId), navOptions)
26+
}
1327

1428
fun NavGraphBuilder.noticeNavGraph(
15-
){
29+
navigateToNoticeDetail: (String) -> Unit,
30+
) {
1631
composable<NoticeRoute> {
17-
NoticeScreen()
32+
NoticeRoute(
33+
navigateToNoticeDetail = { noticeId ->
34+
navigateToNoticeDetail(noticeId)
35+
}
36+
)
37+
}
38+
39+
composable<NoticeDetailRoute> {
40+
NoticeDetailRoute()
1841
}
1942
}

feature/notice/src/main/java/com/yapp/feature/notice/notice/NoticeState.kt renamed to feature/notice/src/main/java/com/yapp/feature/notice/notice/NoticeContract.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ data class NoticeState(
66

77
sealed interface NoticeIntent {
88
data object ClickBackButton : NoticeIntent
9+
data class ClickNoticeItem(val noticeId: String) : NoticeIntent
910
}
1011

1112
sealed interface NoticeSideEffect {
13+
data class NavigateToNoticeDetail(val noticeId: String) : NoticeSideEffect
1214
}

feature/notice/src/main/java/com/yapp/feature/notice/notice/NoticeRoute.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,14 @@ import com.yapp.feature.notice.notice.component.NoticeCategoryButton
3434

3535
@Composable
3636
fun NoticeRoute(
37-
viewModel: NoticeViewModel = hiltViewModel()
37+
viewModel: NoticeViewModel = hiltViewModel(),
38+
navigateToNoticeDetail: (String) -> Unit,
3839
) {
3940
val uiState by viewModel.store.uiState.collectAsStateWithLifecycle()
4041
viewModel.store.sideEffects.collectWithLifecycle { sideEffect ->
41-
42+
when (sideEffect) {
43+
is NoticeSideEffect.NavigateToNoticeDetail -> navigateToNoticeDetail(sideEffect.noticeId)
44+
}
4245
}
4346

4447
NoticeScreen(
@@ -112,7 +115,8 @@ fun NoticeScreen(
112115
writer = "20기 홍길동",
113116
title = "심장 건강을 책임지는 스마트 워치,심박수 감시와 예방 기능 탑재",
114117
bodyText = "한반도의 경제 협력이 새로운 국면을 맞이하며 남북 간 첫 연합 기업이 설립되었습니다. 이 기업은 에너지, 통신, 제조 등 다양한 분야에서 남북 간 협력 모델을 제시하며 경제적 도약을 목표로 하고 있습니다. 특히, 이번 연합 기업은 지속 가능한 발전을 위한 친환경 기술과 공동 연구 개발을 핵심 과제로 삼고 있으며, 이를 통해 글로벌 시장에서도 경쟁력을 확보하고자 합니다. 전문가들은 이러한 경제 협력이 한반도뿐만 아니라 동아시아 전체의 경제적 안정과 성장에도 기여할 것으로 예상하고 있습니다."
115-
)
118+
),
119+
onClick = { onIntent(NoticeIntent.ClickNoticeItem("$it")) }
116120
)
117121
}
118122
}

feature/notice/src/main/java/com/yapp/feature/notice/notice/NoticeViewModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class NoticeViewModel @Inject constructor() : ViewModel() {
2222
) {
2323
when (intent) {
2424
NoticeIntent.ClickBackButton -> TODO()
25+
is NoticeIntent.ClickNoticeItem -> postSideEffect(NoticeSideEffect.NavigateToNoticeDetail(intent.noticeId))
2526
}
2627
}
2728
}

0 commit comments

Comments
 (0)