From 92e640f4aa7dc3d087099123e46ac52bad5ab23f Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Tue, 7 Jul 2026 11:42:43 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=ED=9E=88=EC=8A=A4=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EB=B9=88=20=ED=99=94=EB=A9=B4=EC=9D=98=20=EB=B0=9C?= =?UTF-8?q?=ED=91=9C=20=EC=B6=94=EA=B0=80=20=EB=B2=84=ED=8A=BC=EC=97=90=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `HistoryEmptyContent` 내 발표 추가 버튼에 `PrezelIcons.Plus` 아이콘 적용 --- .../feature/history/impl/component/HistoryEmptyContent.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/component/HistoryEmptyContent.kt b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/component/HistoryEmptyContent.kt index 38be4caa..19ecf21d 100644 --- a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/component/HistoryEmptyContent.kt +++ b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/component/HistoryEmptyContent.kt @@ -10,6 +10,7 @@ import androidx.compose.ui.unit.dp import com.team.prezel.core.designsystem.component.actions.button.PrezelButton import com.team.prezel.core.designsystem.component.actions.button.config.ButtonSize import com.team.prezel.core.designsystem.component.actions.button.config.ButtonType +import com.team.prezel.core.designsystem.icon.PrezelIcons import com.team.prezel.core.designsystem.preview.BasicPreview import com.team.prezel.core.designsystem.theme.PrezelTheme import com.team.prezel.core.ui.component.StatusView @@ -42,6 +43,7 @@ internal fun HistoryEmptyContent( { PrezelButton( text = stringResource(R.string.feature_history_impl_add_presentation), + iconResId = PrezelIcons.Plus, type = ButtonType.OUTLINED, size = ButtonSize.SMALL, isRounded = true, From 8b5c83dec169f08d85c37640622c096f233481bc Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Tue, 7 Jul 2026 11:54:49 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=EB=B6=84=EC=84=9D=20=EB=A6=AC?= =?UTF-8?q?=ED=8F=AC=ED=8A=B8=20=ED=99=94=EB=A9=B4=EC=9D=98=20=EB=92=A4?= =?UTF-8?q?=EB=A1=9C=EA=B0=80=EA=B8=B0=20=EB=B0=8F=20=ED=8E=B8=EC=A7=91=20?= =?UTF-8?q?=EC=95=A1=EC=85=98=20=EC=A0=9C=EC=96=B4=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `AnalysisReportScreen`에 `showBackButton` 및 `showEditActions` 파라미터 추가 - `ReportNavKey`에 `showBackButton` 필드를 추가하여 진입 경로별 UI 제어 지원 - 히스토리 화면에서 리포트 진입 시 뒤로가기 버튼을 표시하도록 설정 - `showEditActions` 상태에 따라 재녹음 및 대본 작성 버튼의 노출 여부 제어 - `GrowthGraphSection` 및 `ScriptAnalysisSection` 컴포넌트에 버튼 가시성 로직 반영 - `ReportEntryBuilder`에서 내비게이션 키 값에 따른 화면 UI 상태 연동 추가 --- .../impl/navigation/HistoryEntryBuilder.kt | 8 ++++- .../prezel/feature/report/api/ReportNavKey.kt | 1 + .../impl/navigation/ReportEntryBuilder.kt | 2 ++ .../impl/report/AnalysisReportScreen.kt | 29 ++++++++++++---- .../report/component/ReportBodyContent.kt | 3 ++ .../component/body/GrowthGraphSection.kt | 33 ++++++++++++------- .../component/body/ScriptAnalysisSection.kt | 33 ++++++++++++------- 7 files changed, 78 insertions(+), 31 deletions(-) diff --git a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt index 6b285d3c..11a40dad 100644 --- a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt +++ b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/navigation/HistoryEntryBuilder.kt @@ -19,7 +19,13 @@ internal fun EntryProviderScope.featureHistoryEntryBuilder() { HistoryScreen( navigateToReport = { presentationId, isPast -> - navigator.navigate(ReportNavKey(presentationId = presentationId, isPast = isPast)) + navigator.navigate( + ReportNavKey( + presentationId = presentationId, + isPast = isPast, + showBackButton = true, + ), + ) }, navigateToAnalysis = { navigator.navigate(AnalysisNavKey.Schedule()) diff --git a/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt b/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt index 5cb4de82..494c8044 100644 --- a/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt +++ b/Prezel/feature/report/api/src/main/java/com/team/prezel/feature/report/api/ReportNavKey.kt @@ -7,4 +7,5 @@ import kotlinx.serialization.Serializable data class ReportNavKey( val presentationId: Long, val isPast: Boolean = false, + val showBackButton: Boolean = false, ) : NavKey diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt index d7b1f5f4..e49fd947 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt @@ -33,6 +33,8 @@ private fun EntryProviderScope.reportEntry() { AnalysisReportScreen( onBack = { navigator.goBack() }, + showBackButton = key.showBackButton, + showEditActions = !key.showBackButton, navigateToAnalysisScript = { presentationId, isPast -> navigator.navigateToAnalysisScript( presentationId = presentationId, diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt index 9e60faa5..180ec9ff 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt @@ -39,6 +39,8 @@ internal fun AnalysisReportScreen( navigateToSpeechAccuracy: (analysisResultId: Long) -> Unit, navigateToScriptMatch: (analysisResultId: Long) -> Unit, modifier: Modifier = Modifier, + showBackButton: Boolean = false, + showEditActions: Boolean = true, viewModel: AnalysisReportViewModel = hiltViewModel(), ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -74,6 +76,8 @@ internal fun AnalysisReportScreen( AnalysisReportScreen( uiState = uiState, + showBackButton = showBackButton, + showEditActions = showEditActions, onBackClick = onBack, onDeleteClick = { viewModel.onIntent(AnalysisReportUiIntent.ClickDelete) }, onImprovementCardIndexChange = { index -> viewModel.onIntent(AnalysisReportUiIntent.ClickGrowthGraphItem(index)) }, @@ -92,6 +96,8 @@ internal fun AnalysisReportScreen( @Composable internal fun AnalysisReportScreen( uiState: AnalysisReportUiState, + showBackButton: Boolean = false, + showEditActions: Boolean = true, onBackClick: () -> Unit, onDeleteClick: () -> Unit, onImprovementCardIndexChange: (index: Int) -> Unit, @@ -109,6 +115,8 @@ internal fun AnalysisReportScreen( is AnalysisReportUiState.Content -> { AnalysisReportScreenContent( uiState = uiState, + showBackButton = showBackButton, + showEditActions = showEditActions, onBackClick = onBackClick, onDeleteClick = onDeleteClick, modifier = modifier, @@ -131,6 +139,8 @@ internal fun AnalysisReportScreen( @Composable private fun AnalysisReportScreenContent( uiState: AnalysisReportUiState.Content, + showBackButton: Boolean, + showEditActions: Boolean, onBackClick: () -> Unit, onDeleteClick: () -> Unit, onImprovementCardIndexChange: (index: Int) -> Unit, @@ -154,14 +164,18 @@ private fun AnalysisReportScreenContent( ReportScreenLayout( appBarTitle = uiState.presentationInfo.title, - leadingIcon = { - IconButton(onClick = onBackClick) { - Icon( - painter = painterResource(PrezelIcons.ArrowLeft), - contentDescription = stringResource(R.string.feature_report_impl_back), - tint = PrezelTheme.colors.iconRegular, - ) + leadingIcon = if (showBackButton) { + { + IconButton(onClick = onBackClick) { + Icon( + painter = painterResource(PrezelIcons.ArrowLeft), + contentDescription = stringResource(R.string.feature_report_impl_back), + tint = PrezelTheme.colors.iconRegular, + ) + } } + } else { + {} }, headerContent = { titleModifier -> ReportHeaderContent( @@ -172,6 +186,7 @@ private fun AnalysisReportScreenContent( bodyContent = { ReportBodyContent( uiState = uiState, + showEditActions = showEditActions, onDeleteClick = onDeleteClick, onImprovementCardIndexChange = onImprovementCardIndexChange, onReWriteScriptClick = onReWriteScriptClick, diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportBodyContent.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportBodyContent.kt index ff5a9bd7..d894823d 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportBodyContent.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportBodyContent.kt @@ -35,6 +35,7 @@ import kotlinx.collections.immutable.persistentListOf @Composable internal fun ReportBodyContent( uiState: AnalysisReportUiState.Content, + showEditActions: Boolean = true, onDeleteClick: () -> Unit, onImprovementCardIndexChange: (Int) -> Unit, onReWriteScriptClick: () -> Unit, @@ -62,12 +63,14 @@ internal fun ReportBodyContent( ) GrowthGraphSection( growthGraphData = uiState.growthGraphData, + showReRecordingButton = showEditActions, onCardIndexChange = onImprovementCardIndexChange, onReRecordingClick = onReRecordingClick, ) ScriptAnalysisSection( isWrittenScript = uiState.isScriptWritten, scriptAnalysisGraphData = uiState.scriptAnalysisGraphData, + showReWriteScriptButton = showEditActions, onReWriteScriptClick = onReWriteScriptClick, onScriptAnalysisClick = onScriptAnalysisClick, ) diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/body/GrowthGraphSection.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/body/GrowthGraphSection.kt index 6bd43026..aa5b4633 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/body/GrowthGraphSection.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/body/GrowthGraphSection.kt @@ -46,11 +46,17 @@ import kotlinx.collections.immutable.persistentListOf @Composable internal fun GrowthGraphSection( growthGraphData: GrowthGraphData, + showReRecordingButton: Boolean = true, onCardIndexChange: (Int) -> Unit, onReRecordingClick: () -> Unit, ) { ReportSection( - title = { GrowthGraphSectionTitle(onReRecordingClick = onReRecordingClick) }, + title = { + GrowthGraphSectionTitle( + showReRecordingButton = showReRecordingButton, + onReRecordingClick = onReRecordingClick, + ) + }, ) { GrowthGraphContent( growthGraphData = growthGraphData, @@ -62,7 +68,10 @@ internal fun GrowthGraphSection( } @Composable -private fun GrowthGraphSectionTitle(onReRecordingClick: () -> Unit) { +private fun GrowthGraphSectionTitle( + showReRecordingButton: Boolean, + onReRecordingClick: () -> Unit, +) { Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, @@ -86,15 +95,17 @@ private fun GrowthGraphSectionTitle(onReRecordingClick: () -> Unit) { ) } } - PrezelButton( - text = stringResource(R.string.feature_report_impl_re_recording), - iconResId = PrezelIcons.Mic, - type = ButtonType.OUTLINED, - size = ButtonSize.XSMALL, - hierarchy = ButtonHierarchy.SECONDARY, - isRounded = true, - onClick = onReRecordingClick, - ) + if (showReRecordingButton) { + PrezelButton( + text = stringResource(R.string.feature_report_impl_re_recording), + iconResId = PrezelIcons.Mic, + type = ButtonType.OUTLINED, + size = ButtonSize.XSMALL, + hierarchy = ButtonHierarchy.SECONDARY, + isRounded = true, + onClick = onReRecordingClick, + ) + } } } diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/body/ScriptAnalysisSection.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/body/ScriptAnalysisSection.kt index 7493f471..d66a5ba2 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/body/ScriptAnalysisSection.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/body/ScriptAnalysisSection.kt @@ -35,13 +35,14 @@ import kotlinx.collections.immutable.toPersistentMap internal fun ScriptAnalysisSection( isWrittenScript: Boolean, scriptAnalysisGraphData: ScriptAnalysisGraphData, + showReWriteScriptButton: Boolean = true, onReWriteScriptClick: () -> Unit, onScriptAnalysisClick: () -> Unit, ) { ReportSection( title = { ScriptAnalysisSectionTitle( - showReWriteButton = isWrittenScript, + showReWriteButton = isWrittenScript && showReWriteScriptButton, onReWriteScriptClick = onReWriteScriptClick, ) }, @@ -54,24 +55,32 @@ internal fun ScriptAnalysisSection( return@ReportSection } - EmptyStateContent(onReWriteScriptClick = onReWriteScriptClick) + EmptyStateContent( + showWriteScriptButton = showReWriteScriptButton, + onReWriteScriptClick = onReWriteScriptClick, + ) } } @Composable -private fun EmptyStateContent(onReWriteScriptClick: () -> Unit) { +private fun EmptyStateContent( + showWriteScriptButton: Boolean, + onReWriteScriptClick: () -> Unit, +) { EmptyStateCard(text = stringResource(R.string.feature_report_impl_script_analysis_empty_state_message)) - Spacer(modifier = Modifier.height(PrezelTheme.spacing.V16)) + if (showWriteScriptButton) { + Spacer(modifier = Modifier.height(PrezelTheme.spacing.V16)) - PrezelTextButton( - text = stringResource(R.string.feature_report_impl_write_script), - size = ButtonSize.REGULAR, - type = ButtonType.FILLED, - hierarchy = ButtonHierarchy.SECONDARY, - onClick = onReWriteScriptClick, - modifier = Modifier.fillMaxWidth(), - ) + PrezelTextButton( + text = stringResource(R.string.feature_report_impl_write_script), + size = ButtonSize.REGULAR, + type = ButtonType.FILLED, + hierarchy = ButtonHierarchy.SECONDARY, + onClick = onReWriteScriptClick, + modifier = Modifier.fillMaxWidth(), + ) + } } @Composable From 51e6e5ccfe08a2b9f37c7313afa0175e9e67efed Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Tue, 7 Jul 2026 11:57:45 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=ED=9E=88=EC=8A=A4=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=9C=ED=91=9C=20=EC=B9=B4=EB=93=9C=20=EC=B9=A9?= =?UTF-8?q?=20=EC=98=81=EC=97=AD=20=EA=B0=80=EB=A1=9C=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A1=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `HistoryPresentationCardChips`의 `Row` 레이아웃에 `horizontalScroll` 및 `fillMaxWidth` 적용 - 불필요한 `ExperimentalLayoutApi` 어노테이션 및 임포트 제거 --- .../history/impl/component/HistoryPresentationCard.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/component/HistoryPresentationCard.kt b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/component/HistoryPresentationCard.kt index 64e33e44..c6802347 100644 --- a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/component/HistoryPresentationCard.kt +++ b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/component/HistoryPresentationCard.kt @@ -3,13 +3,14 @@ package com.team.prezel.feature.history.impl.component import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.compose.foundation.background +import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -104,13 +105,14 @@ private fun HistoryPresentationCardTitle( } @Composable -@OptIn(ExperimentalLayoutApi::class) private fun HistoryPresentationCardChips( item: HistoryUiModel, modifier: Modifier = Modifier, ) { Row( - modifier = modifier, + modifier = modifier + .fillMaxWidth() + .horizontalScroll(rememberScrollState()), horizontalArrangement = Arrangement.spacedBy(PrezelTheme.spacing.V8), verticalAlignment = Alignment.CenterVertically, ) { From 7fc9c217d34d2bd47180cf2ccd7e5a8ca256e2e8 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Tue, 7 Jul 2026 11:58:30 +0900 Subject: [PATCH 4/5] =?UTF-8?q?refactor:=20AnalysisReportScreen=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EC=A0=80=EB=B8=94=20=ED=8C=8C=EB=9D=BC?= =?UTF-8?q?=EB=AF=B8=ED=84=B0=20=EC=88=9C=EC=84=9C=20=EC=A1=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `showBackButton` 및 `showEditActions` 파라미터 위치를 `modifier` 뒤로 이동 - 매개변수 선언 순서 변경을 통한 코드 가독성 및 일관성 개선 --- .../prezel/feature/report/impl/report/AnalysisReportScreen.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt index 180ec9ff..b08fcf8d 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt @@ -96,8 +96,6 @@ internal fun AnalysisReportScreen( @Composable internal fun AnalysisReportScreen( uiState: AnalysisReportUiState, - showBackButton: Boolean = false, - showEditActions: Boolean = true, onBackClick: () -> Unit, onDeleteClick: () -> Unit, onImprovementCardIndexChange: (index: Int) -> Unit, @@ -110,6 +108,8 @@ internal fun AnalysisReportScreen( onSpeechAccuracyClick: () -> Unit, onScriptMatchClick: () -> Unit, modifier: Modifier = Modifier, + showBackButton: Boolean = false, + showEditActions: Boolean = true, ) { when (uiState) { is AnalysisReportUiState.Content -> { From 385426c15061880bec9796f4a34e4ea3fe88dd47 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Tue, 7 Jul 2026 12:58:18 +0900 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20=EB=A6=AC=ED=8F=AC=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B2=84=ED=8A=BC=20=EB=85=B8=EC=B6=9C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0=20=EB=B0=8F=20=ED=9E=88?= =?UTF-8?q?=EC=8A=A4=ED=86=A0=EB=A6=AC=20=ED=81=B4=EB=A6=AD=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EB=A6=AC=ED=8C=A9=ED=84=B0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `AnalysisReportScreen` 및 `ReportBodyContent`에서 불필요한 `showEditActions` 파라미터 제거 - 리포트 내 재녹음 및 대본 재작성 버튼 노출 여부를 `uiState.isPast`를 직접 참조하여 결정하도록 수정 - `HistoryUiIntent.ClickItem`에 `pageType` 필드를 추가하여 클릭된 아이템의 상태 전달 방식 개선 - `HistoryViewModel`에서 리포트 이동 시 과거 내역 여부를 `pageType` 기반으로 판별하도록 로직 단순화 - `HistoryScreen`의 아이템 클릭 콜백에 `HistoryPageType` 파라미터 추가 및 연동 --- .../feature/history/impl/HistoryScreen.kt | 17 +++++++++++----- .../feature/history/impl/HistoryViewModel.kt | 20 ++++++++++++++----- .../history/impl/contract/HistoryUiIntent.kt | 2 ++ .../impl/navigation/ReportEntryBuilder.kt | 1 - .../impl/report/AnalysisReportScreen.kt | 6 ------ .../report/component/ReportBodyContent.kt | 5 ++--- 6 files changed, 31 insertions(+), 20 deletions(-) diff --git a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/HistoryScreen.kt b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/HistoryScreen.kt index 50b36f3e..beb12b2d 100644 --- a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/HistoryScreen.kt +++ b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/HistoryScreen.kt @@ -79,7 +79,14 @@ internal fun HistoryScreen( uiState = uiState, modifier = modifier, pagerState = pagerState, - onClickHistoryItem = { viewModel.onIntent(HistoryUiIntent.ClickItem(presentationId = it.presentationId)) }, + onClickHistoryItem = { item, pageType -> + viewModel.onIntent( + HistoryUiIntent.ClickItem( + presentationId = item.presentationId, + pageType = pageType, + ), + ) + }, onClickAddPresentation = navigateToAnalysis, ) } @@ -89,7 +96,7 @@ internal fun HistoryScreen( internal fun HistoryScreen( uiState: HistoryUiState, pagerState: PagerState, - onClickHistoryItem: (HistoryUiModel) -> Unit, + onClickHistoryItem: (HistoryUiModel, HistoryPageType) -> Unit, onClickAddPresentation: () -> Unit, modifier: Modifier = Modifier, ) { @@ -116,7 +123,7 @@ internal fun HistoryScreen( private fun HistoryContent( uiState: HistoryUiState, pagerState: PagerState, - onClickHistoryItem: (HistoryUiModel) -> Unit, + onClickHistoryItem: (HistoryUiModel, HistoryPageType) -> Unit, onClickAddPresentation: () -> Unit, ) { val tabs = persistentListOf( @@ -158,7 +165,7 @@ private fun HistoryContent( } else { HistoryItemList( items = items.toImmutableList(), - onClickItem = onClickHistoryItem, + onClickItem = { item -> onClickHistoryItem(item, pageType) }, modifier = Modifier.fillMaxSize(), ) } @@ -216,7 +223,7 @@ private fun HistoryScreenPreview() { HistoryScreen( uiState = previewState, pagerState = pagerState, - onClickHistoryItem = { }, + onClickHistoryItem = { _, _ -> }, onClickAddPresentation = {}, ) } diff --git a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/HistoryViewModel.kt b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/HistoryViewModel.kt index 55ec5245..cf212636 100644 --- a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/HistoryViewModel.kt +++ b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/HistoryViewModel.kt @@ -26,7 +26,10 @@ internal class HistoryViewModel @Inject constructor( override fun onIntent(intent: HistoryUiIntent) { when (intent) { HistoryUiIntent.FetchData -> fetchData() - is HistoryUiIntent.ClickItem -> handleClickItem(presentationId = intent.presentationId) + is HistoryUiIntent.ClickItem -> handleClickItem( + presentationId = intent.presentationId, + pageType = intent.pageType, + ) } } @@ -61,12 +64,19 @@ internal class HistoryViewModel @Inject constructor( } } - private fun handleClickItem(presentationId: Long) { - val pastItems = (currentState as? HistoryUiState.Content)?.currentPageItem(type = HistoryPageType.COMPLETED).orEmpty() - val isPast = pastItems.any { history -> history.presentationId == presentationId } + private fun handleClickItem( + presentationId: Long, + pageType: HistoryPageType, + ) { + val isPast = pageType == HistoryPageType.COMPLETED viewModelScope.launch { - sendEffect(HistoryUiEffect.NavigateToReport(presentationId = presentationId, isPast = isPast)) + sendEffect( + HistoryUiEffect.NavigateToReport( + presentationId = presentationId, + isPast = isPast, + ), + ) } } } diff --git a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/contract/HistoryUiIntent.kt b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/contract/HistoryUiIntent.kt index 4f81513a..f233d5ae 100644 --- a/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/contract/HistoryUiIntent.kt +++ b/Prezel/feature/history/impl/src/main/java/com/team/prezel/feature/history/impl/contract/HistoryUiIntent.kt @@ -1,11 +1,13 @@ package com.team.prezel.feature.history.impl.contract import com.team.prezel.core.ui.base.UiIntent +import com.team.prezel.feature.history.impl.model.HistoryPageType internal sealed interface HistoryUiIntent : UiIntent { data object FetchData : HistoryUiIntent data class ClickItem( val presentationId: Long, + val pageType: HistoryPageType, ) : HistoryUiIntent } diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt index e49fd947..955537e0 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/navigation/ReportEntryBuilder.kt @@ -34,7 +34,6 @@ private fun EntryProviderScope.reportEntry() { AnalysisReportScreen( onBack = { navigator.goBack() }, showBackButton = key.showBackButton, - showEditActions = !key.showBackButton, navigateToAnalysisScript = { presentationId, isPast -> navigator.navigateToAnalysisScript( presentationId = presentationId, diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt index b08fcf8d..3a22a110 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/AnalysisReportScreen.kt @@ -40,7 +40,6 @@ internal fun AnalysisReportScreen( navigateToScriptMatch: (analysisResultId: Long) -> Unit, modifier: Modifier = Modifier, showBackButton: Boolean = false, - showEditActions: Boolean = true, viewModel: AnalysisReportViewModel = hiltViewModel(), ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -77,7 +76,6 @@ internal fun AnalysisReportScreen( AnalysisReportScreen( uiState = uiState, showBackButton = showBackButton, - showEditActions = showEditActions, onBackClick = onBack, onDeleteClick = { viewModel.onIntent(AnalysisReportUiIntent.ClickDelete) }, onImprovementCardIndexChange = { index -> viewModel.onIntent(AnalysisReportUiIntent.ClickGrowthGraphItem(index)) }, @@ -109,14 +107,12 @@ internal fun AnalysisReportScreen( onScriptMatchClick: () -> Unit, modifier: Modifier = Modifier, showBackButton: Boolean = false, - showEditActions: Boolean = true, ) { when (uiState) { is AnalysisReportUiState.Content -> { AnalysisReportScreenContent( uiState = uiState, showBackButton = showBackButton, - showEditActions = showEditActions, onBackClick = onBackClick, onDeleteClick = onDeleteClick, modifier = modifier, @@ -140,7 +136,6 @@ internal fun AnalysisReportScreen( private fun AnalysisReportScreenContent( uiState: AnalysisReportUiState.Content, showBackButton: Boolean, - showEditActions: Boolean, onBackClick: () -> Unit, onDeleteClick: () -> Unit, onImprovementCardIndexChange: (index: Int) -> Unit, @@ -186,7 +181,6 @@ private fun AnalysisReportScreenContent( bodyContent = { ReportBodyContent( uiState = uiState, - showEditActions = showEditActions, onDeleteClick = onDeleteClick, onImprovementCardIndexChange = onImprovementCardIndexChange, onReWriteScriptClick = onReWriteScriptClick, diff --git a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportBodyContent.kt b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportBodyContent.kt index d894823d..78882d40 100644 --- a/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportBodyContent.kt +++ b/Prezel/feature/report/impl/src/main/java/com/team/prezel/feature/report/impl/report/component/ReportBodyContent.kt @@ -35,7 +35,6 @@ import kotlinx.collections.immutable.persistentListOf @Composable internal fun ReportBodyContent( uiState: AnalysisReportUiState.Content, - showEditActions: Boolean = true, onDeleteClick: () -> Unit, onImprovementCardIndexChange: (Int) -> Unit, onReWriteScriptClick: () -> Unit, @@ -63,14 +62,14 @@ internal fun ReportBodyContent( ) GrowthGraphSection( growthGraphData = uiState.growthGraphData, - showReRecordingButton = showEditActions, + showReRecordingButton = !uiState.isPast, onCardIndexChange = onImprovementCardIndexChange, onReRecordingClick = onReRecordingClick, ) ScriptAnalysisSection( isWrittenScript = uiState.isScriptWritten, scriptAnalysisGraphData = uiState.scriptAnalysisGraphData, - showReWriteScriptButton = showEditActions, + showReWriteScriptButton = !uiState.isPast, onReWriteScriptClick = onReWriteScriptClick, onScriptAnalysisClick = onScriptAnalysisClick, )