From c1569d994864aad3e3573c94e183ead8ce1c507a Mon Sep 17 00:00:00 2001 From: jihyunniiii Date: Tue, 17 Sep 2024 16:16:25 +0900 Subject: [PATCH 1/8] =?UTF-8?q?[feat]=20#259=20=EC=BD=94=EC=8A=A4=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=20+=20=EC=9D=BC=EC=A0=95=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EB=B7=B0=20=EC=95=B0=ED=94=8C=EB=A6=AC=ED=8A=9C?= =?UTF-8?q?=EB=93=9C=20=EC=9E=91=EC=97=85=EC=9D=84=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?Constraints=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dateroad/presentation/util/Constraints.kt | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt b/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt index 666c9bd3..5d91a35f 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt @@ -59,3 +59,45 @@ object Pattern { private const val NICKNAME_PATTERN = "^[ㄱ-ㅎ가-힣a-zA-Z0-9]*$" val NICKNAME_REGEX = Regex(NICKNAME_PATTERN) } + +object EnrollAmplitude { + const val VIEW_ADD_SCHEDULE = "view_add_schedule" + const val CLICK_SCHEDULE1_BACK = "click_schedule1_back" + const val VIEW_ADD_SCHEDULE2 = "view_add_schedule2" + const val CLICK_SCHEDULE2_BACK = "click_schedule2_back" + const val CLICK_BRING_COURSE = "click_bring_course" + const val VIEW_ADD_BRING_COURSE = "view_add_bringcourse" + const val VIEW_ADD_BRING_COURSE2 = "view_add_bringcourse2" + const val VIEW_COURSE1 = "view_course1" + const val CLICK_COURSE1_BACK = "click_course1_back" + const val CLICK_COURSE2_BACK = "click_course2_back" + const val CLICK_COURSE3_BACK = "click_course3_back" + const val VIEW_PATH = "view_path" + const val DATE_TITLE = "date_title" + const val DATE_DATE = "date_date" + const val DATE_TIME = "date_time" + const val DATE_TAG_NUM = "date_tag_num" + const val DATE_AREA = "date_area" + const val DATE_DETAIL_LOCATION = "date_detail_location" + const val DATE_DETAIL_TIME = "date_detail_time" + const val DATE_COURSE_NUM = "date_course_num" + const val COURSE_IMAGE = "course_image" + const val COURSE_TITLE = "course_title" + const val COURSE_DATE = "course_date" + const val COURSE_START_TIME = "course_start_time" + const val COURSE_TAGS = "course_tags" + const val COURSE_LOCATION = "course_location" + const val DATE_LOCATION = "date_location" + const val DATE_SPEND_TIME = "date_spend_time" + const val LOCATION_NUM = "location_num" + const val COURSE_CONTENT = "course_content" + const val COURSE_COST = "course_cost" +} + +object ViewPath { + const val HOME = "홈" + const val TIMELINE = "데이트 일정" + const val MY_COURSE_READ = "내가 열람한 코스" + const val COURSE_DETAIL = "코스 상세" + const val LOOK = "코스 둘러보기" +} \ No newline at end of file From a233522f96175cdd6bd29ff2495f65c27df3deac Mon Sep 17 00:00:00 2001 From: jihyunniiii Date: Tue, 17 Sep 2024 18:24:27 +0900 Subject: [PATCH 2/8] =?UTF-8?q?[feat]=20#259=20=EC=BD=94=EC=8A=A4=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=20+=20=EC=9D=BC=EC=A0=95=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EB=B7=B0=20=EC=A7=84=EC=9E=85=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20=EC=95=B0=ED=94=8C=EB=A6=AC=ED=8A=9C=EB=93=9C=20=ED=8A=B8?= =?UTF-8?q?=EB=9E=98=ED=82=B9=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=8B=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/coursedetail/CourseDetailContract.kt | 2 +- .../ui/coursedetail/CourseDetailScreen.kt | 9 +++-- .../navigation/CourseDetailNavigation.kt | 2 +- .../presentation/ui/enroll/EnrollScreen.kt | 40 ++++++++++++++++--- .../ui/enroll/navigation/EnrollNavigation.kt | 24 +++++++---- .../presentation/ui/home/HomeContract.kt | 2 +- .../presentation/ui/home/HomeScreen.kt | 9 +++-- .../ui/home/navigation/HomeNavigation.kt | 2 +- .../presentation/ui/look/LookScreen.kt | 5 ++- .../ui/look/navigation/LookNavigation.kt | 2 +- .../ui/mycourse/MyCourseScreen.kt | 5 ++- .../mycourse/navigation/MyCourseNavigation.kt | 2 +- .../ui/navigator/MainNavigator.kt | 4 +- .../presentation/ui/read/ReadScreen.kt | 5 ++- .../ui/read/navigation/ReadNavigation.kt | 2 +- .../ui/timeline/TimelineScreen.kt | 5 ++- .../timeline/navigation/TimelineNavigation.kt | 2 +- .../dateroad/presentation/util/Constraints.kt | 2 +- 18 files changed, 83 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/CourseDetailContract.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/CourseDetailContract.kt index 34f1576d..b7dc018d 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/CourseDetailContract.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/CourseDetailContract.kt @@ -27,7 +27,7 @@ class CourseDetailContract { ) : UiState sealed interface CourseDetailSideEffect : UiSideEffect { - data class NavigateToEnroll(val enrollType: EnrollType, val id: Int?) : CourseDetailSideEffect + data class NavigateToEnroll(val enrollType: EnrollType, val viewPath: String, val id: Int?) : CourseDetailSideEffect data object PopBackStack : CourseDetailSideEffect } diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/CourseDetailScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/CourseDetailScreen.kt index e7fc9b7e..351966d4 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/CourseDetailScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/CourseDetailScreen.kt @@ -45,6 +45,7 @@ import org.sopt.dateroad.presentation.ui.coursedetail.component.CourseDetailBasi import org.sopt.dateroad.presentation.ui.coursedetail.component.CourseDetailBottomBar import org.sopt.dateroad.presentation.ui.coursedetail.component.CourseDetailUnopenedDetail import org.sopt.dateroad.presentation.ui.coursedetail.component.courseDetailOpenedDetail +import org.sopt.dateroad.presentation.util.ViewPath.COURSE_DETAIL import org.sopt.dateroad.presentation.util.WebViewUrl.REPORT_URL import org.sopt.dateroad.presentation.util.view.LoadState import org.sopt.dateroad.ui.theme.DATEROADTheme @@ -54,7 +55,7 @@ import org.sopt.dateroad.ui.theme.DateRoadTheme fun CourseDetailRoute( viewModel: CourseDetailViewModel = hiltViewModel(), popBackStack: () -> Unit, - navigateToEnroll: (EnrollType, Int?) -> Unit, + navigateToEnroll: (EnrollType, String, Int?) -> Unit, courseId: Int ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -64,7 +65,7 @@ fun CourseDetailRoute( viewModel.sideEffect.flowWithLifecycle(lifecycle = lifecycleOwner.lifecycle) .collect { courseDetailSideEffect -> when (courseDetailSideEffect) { - is CourseDetailContract.CourseDetailSideEffect.NavigateToEnroll -> navigateToEnroll(courseDetailSideEffect.enrollType, courseDetailSideEffect.id) + is CourseDetailContract.CourseDetailSideEffect.NavigateToEnroll -> navigateToEnroll(courseDetailSideEffect.enrollType, courseDetailSideEffect.viewPath, courseDetailSideEffect.id) is CourseDetailContract.CourseDetailSideEffect.PopBackStack -> popBackStack() } } @@ -85,7 +86,7 @@ fun CourseDetailRoute( onDialogPointLack = { viewModel.setEvent(CourseDetailContract.CourseDetailEvent.OnDialogPointLack) }, onDialogPointLackConfirm = { viewModel.setEvent(CourseDetailContract.CourseDetailEvent.DismissDialogPointLack) - viewModel.setSideEffect(CourseDetailContract.CourseDetailSideEffect.NavigateToEnroll(EnrollType.COURSE, null)) + viewModel.setSideEffect(CourseDetailContract.CourseDetailSideEffect.NavigateToEnroll(enrollType = EnrollType.COURSE, viewPath = COURSE_DETAIL, id = null)) }, dismissDialogPointLack = { viewModel.setEvent(CourseDetailContract.CourseDetailEvent.DismissDialogPointLack) }, onDialogLookedForFree = { viewModel.setEvent(CourseDetailContract.CourseDetailEvent.OnDialogLookedForFree) }, @@ -109,7 +110,7 @@ fun CourseDetailRoute( dismissDeleteCourseBottomSheet = { viewModel.setEvent(CourseDetailContract.CourseDetailEvent.DismissDeleteCourseBottomSheet) }, onReportCourseBottomSheet = { viewModel.setEvent(CourseDetailContract.CourseDetailEvent.OnReportCourseBottomSheet) }, dismissReportCourseBottomSheet = { viewModel.setEvent(CourseDetailContract.CourseDetailEvent.DismissReportCourseBottomSheet) }, - enrollSchedule = { viewModel.setSideEffect(CourseDetailContract.CourseDetailSideEffect.NavigateToEnroll(EnrollType.TIMELINE, courseId)) }, + enrollSchedule = { viewModel.setSideEffect(CourseDetailContract.CourseDetailSideEffect.NavigateToEnroll(enrollType = EnrollType.TIMELINE, viewPath = COURSE_DETAIL, id = courseId)) }, onTopBarIconClicked = { viewModel.setSideEffect(CourseDetailContract.CourseDetailSideEffect.PopBackStack) }, openCourseDetail = { viewModel.postUsePoint(courseId = courseId) }, onReportButtonClicked = { diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/navigation/CourseDetailNavigation.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/navigation/CourseDetailNavigation.kt index 3cb1802d..a01666ff 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/navigation/CourseDetailNavigation.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/coursedetail/navigation/CourseDetailNavigation.kt @@ -14,7 +14,7 @@ fun NavController.navigationCourseDetail(courseId: Int) { fun NavGraphBuilder.courseDetailGraph( popBackStack: () -> Unit, - navigateToEnroll: (EnrollType, Int?) -> Unit + navigateToEnroll: (EnrollType, String, Int?) -> Unit ) { composable( route = CourseDetailRoute.ROUTE_WITH_ARGUMENT, diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt index 87e13aa6..14594928 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt @@ -53,9 +53,16 @@ import org.sopt.dateroad.presentation.ui.component.view.DateRoadErrorView import org.sopt.dateroad.presentation.ui.component.view.DateRoadLoadingView import org.sopt.dateroad.presentation.ui.enroll.component.EnrollPhotos import org.sopt.dateroad.presentation.util.DatePicker +import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_ADD_BRING_COURSE +import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_ADD_BRING_COURSE2 +import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_ADD_SCHEDULE +import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_ADD_SCHEDULE2 +import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_COURSE1 +import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_PATH import org.sopt.dateroad.presentation.util.EnrollScreen.MAX_ITEMS import org.sopt.dateroad.presentation.util.EnrollScreen.TITLE_MIN_LENGTH import org.sopt.dateroad.presentation.util.TimePicker +import org.sopt.dateroad.presentation.util.amplitude.AmplitudeUtils import org.sopt.dateroad.presentation.util.view.LoadState import org.sopt.dateroad.ui.theme.DATEROADTheme import org.sopt.dateroad.ui.theme.DateRoadTheme @@ -67,7 +74,8 @@ fun EnrollRoute( popBackStack: () -> Unit, navigateToMyCourse: (MyCourseType) -> Unit, enrollType: EnrollType, - id: Int? + viewPath: String, + timelineId: Int? ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() val lifecycleOwner = LocalLifecycleOwner.current @@ -86,17 +94,15 @@ fun EnrollRoute( LaunchedEffect(Unit) { viewModel.setEvent(EnrollContract.EnrollEvent.FetchEnrollCourseType(enrollType = enrollType)) - } - LaunchedEffect(uiState.enrollType) { - if (id != null) { + if (timelineId != null) { when (enrollType) { EnrollType.COURSE -> { - viewModel.fetchTimelineDetail(timelineId = id) + viewModel.fetchTimelineDetail(timelineId = timelineId) } EnrollType.TIMELINE -> { - viewModel.fetchCourseDetail(courseId = id) + viewModel.fetchCourseDetail(courseId = timelineId) } } } @@ -136,6 +142,28 @@ fun EnrollRoute( ) } + LaunchedEffect(uiState.page) { + when (enrollType) { + EnrollType.COURSE -> { + when (uiState.page) { + EnrollScreenType.FIRST -> AmplitudeUtils.trackEventWithProperty(eventName = VIEW_COURSE1, propertyName = VIEW_PATH, propertyValue = viewPath) + EnrollScreenType.SECOND -> Unit + EnrollScreenType.THIRD -> Unit + } + } + + EnrollType.TIMELINE -> { + (timelineId != null).let { isBringCourse -> + when (uiState.page) { + EnrollScreenType.FIRST -> AmplitudeUtils.trackEventWithProperty(eventName = if (isBringCourse) VIEW_ADD_BRING_COURSE else VIEW_ADD_SCHEDULE, propertyName = VIEW_PATH, propertyValue = viewPath) + EnrollScreenType.SECOND -> AmplitudeUtils.trackEvent(eventName = if (isBringCourse) VIEW_ADD_BRING_COURSE2 else VIEW_ADD_SCHEDULE2) + EnrollScreenType.THIRD -> Unit + } + } + } + } + } + EnrollScreen( padding = padding, enrollUiState = uiState, diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/navigation/EnrollNavigation.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/navigation/EnrollNavigation.kt index e2fde418..e7138d30 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/navigation/EnrollNavigation.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/navigation/EnrollNavigation.kt @@ -11,9 +11,9 @@ import org.sopt.dateroad.presentation.type.MyCourseType import org.sopt.dateroad.presentation.ui.enroll.EnrollRoute import org.sopt.dateroad.presentation.ui.mycourse.navigation.MyCourseRoute -fun NavController.navigationEnroll(enrollType: EnrollType, courseId: Int? = null) { +fun NavController.navigationEnroll(enrollType: EnrollType, viewPath: String, courseId: Int? = null) { navigate( - route = EnrollRoute.route(enrollType = enrollType, courseId = courseId) + route = EnrollRoute.route(enrollType = enrollType, viewPath = viewPath, courseId = courseId) ) { popUpTo(MyCourseRoute.route(MyCourseType.READ)) { inclusive = true } launchSingleTop = true @@ -31,7 +31,10 @@ fun NavGraphBuilder.enrollNavGraph( navArgument(EnrollRoute.ENROLL_TYPE) { type = NavType.StringType }, - navArgument(EnrollRoute.COURSE_ID) { + navArgument(EnrollRoute.VIEW_PATH) { + type = NavType.StringType + }, + navArgument(EnrollRoute.TIMELINE_ID) { type = NavType.StringType nullable = true } @@ -40,15 +43,20 @@ fun NavGraphBuilder.enrollNavGraph( val enrollType = backStackEntry.arguments?.getString(EnrollRoute.ENROLL_TYPE)?.let { EnrollType.valueOf(it) } ?: EnrollType.COURSE - val courseId = backStackEntry.arguments?.getString(EnrollRoute.COURSE_ID)?.toIntOrNull() - EnrollRoute(padding = padding, popBackStack = popBackStack, navigateToMyCourse = navigationToMyCourse, enrollType = enrollType, id = courseId) + + val viewPath = backStackEntry.arguments?.getString(EnrollRoute.VIEW_PATH).orEmpty() + + val timelineId = backStackEntry.arguments?.getString(EnrollRoute.TIMELINE_ID)?.toIntOrNull() + + EnrollRoute(padding = padding, popBackStack = popBackStack, navigateToMyCourse = navigationToMyCourse, enrollType = enrollType, viewPath = viewPath, timelineId = timelineId) } } object EnrollRoute { const val ROUTE = "enroll" const val ENROLL_TYPE = "enrollType" - const val COURSE_ID = "courseId" - const val ROUTE_WITH_ARGUMENT = "$ROUTE/{$ENROLL_TYPE}/{$COURSE_ID}" - fun route(enrollType: EnrollType, courseId: Int?) = "$ROUTE/${enrollType.name}/$courseId" + const val VIEW_PATH = "viewPath" + const val TIMELINE_ID = "timelineId" + const val ROUTE_WITH_ARGUMENT = "$ROUTE/{$ENROLL_TYPE}/{$VIEW_PATH}/{$TIMELINE_ID}" + fun route(enrollType: EnrollType, viewPath: String, courseId: Int?) = "$ROUTE/${enrollType.name}/$viewPath/$courseId" } diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/home/HomeContract.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/home/HomeContract.kt index 7447c5cc..a60308d0 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/home/HomeContract.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/home/HomeContract.kt @@ -27,7 +27,7 @@ class HomeContract { data object NavigateToPointHistory : HomeSideEffect data object NavigateToLook : HomeSideEffect data class NavigateToTimelineDetail(val timelineType: TimelineType, val timelineId: Int) : HomeSideEffect - data class NavigateToEnroll(val enrollType: EnrollType, val id: Int?) : HomeSideEffect + data class NavigateToEnroll(val enrollType: EnrollType, val viewPath: String, val id: Int?) : HomeSideEffect data class NavigateToAdvertisementDetail(val advertisementId: Int) : HomeSideEffect data class NavigateToCourseDetail(val courseId: Int) : HomeSideEffect } diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/home/HomeScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/home/HomeScreen.kt index 3c13dac2..d14c9604 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/home/HomeScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/home/HomeScreen.kt @@ -55,6 +55,7 @@ import org.sopt.dateroad.presentation.ui.home.component.DateRoadHomeTopBar import org.sopt.dateroad.presentation.ui.home.component.HomeAdvertisement import org.sopt.dateroad.presentation.ui.home.component.HomeHotCourseCard import org.sopt.dateroad.presentation.ui.home.component.HomeTimeLineCard +import org.sopt.dateroad.presentation.util.ViewPath.HOME import org.sopt.dateroad.presentation.util.view.LoadState import org.sopt.dateroad.ui.theme.DateRoadTheme @@ -66,7 +67,7 @@ fun HomeRoute( navigateToPointHistory: () -> Unit, navigateToLook: (MainNavigationBarItemType) -> Unit, navigateToTimelineDetail: (TimelineType, Int) -> Unit, - navigateToEnroll: (EnrollType, Int?) -> Unit, + navigateToEnroll: (EnrollType, String, Int?) -> Unit, navigateToAdvertisementDetail: (Int) -> Unit, navigateToCourseDetail: (Int) -> Unit ) { @@ -100,7 +101,7 @@ fun HomeRoute( is HomeContract.HomeSideEffect.NavigateToPointHistory -> navigateToPointHistory() is HomeContract.HomeSideEffect.NavigateToLook -> navigateToLook(MainNavigationBarItemType.LOOK) is HomeContract.HomeSideEffect.NavigateToTimelineDetail -> navigateToTimelineDetail(homeSideEffect.timelineType, homeSideEffect.timelineId) - is HomeContract.HomeSideEffect.NavigateToEnroll -> navigateToEnroll(homeSideEffect.enrollType, homeSideEffect.id) + is HomeContract.HomeSideEffect.NavigateToEnroll -> navigateToEnroll(homeSideEffect.enrollType, homeSideEffect.viewPath, homeSideEffect.id) is HomeContract.HomeSideEffect.NavigateToAdvertisementDetail -> navigateToAdvertisementDetail(homeSideEffect.advertisementId) is HomeContract.HomeSideEffect.NavigateToCourseDetail -> navigateToCourseDetail(homeSideEffect.courseId) } @@ -117,11 +118,11 @@ fun HomeRoute( padding = padding, uiState = uiState, pagerState = pagerState, - navigateToEnroll = { viewModel.setSideEffect(HomeContract.HomeSideEffect.NavigateToEnroll(EnrollType.TIMELINE, null)) }, + navigateToEnroll = { viewModel.setSideEffect(HomeContract.HomeSideEffect.NavigateToEnroll(enrollType = EnrollType.TIMELINE, viewPath = HOME, id = null)) }, navigateToPointHistory = { viewModel.setSideEffect(HomeContract.HomeSideEffect.NavigateToPointHistory) }, navigateToLook = { viewModel.setSideEffect(HomeContract.HomeSideEffect.NavigateToLook) }, navigateToTimelineDetail = { timelineType, timelineId -> viewModel.setSideEffect(HomeContract.HomeSideEffect.NavigateToTimelineDetail(timelineType = timelineType, timelineId = timelineId)) }, - onFabClick = { viewModel.setSideEffect(HomeContract.HomeSideEffect.NavigateToEnroll(EnrollType.COURSE, null)) }, + onFabClick = { viewModel.setSideEffect(HomeContract.HomeSideEffect.NavigateToEnroll(enrollType = EnrollType.COURSE, viewPath = HOME, id = null)) }, navigateToAdvertisementDetail = { advertisementId: Int -> viewModel.setSideEffect(HomeContract.HomeSideEffect.NavigateToAdvertisementDetail(advertisementId = advertisementId)) }, navigateToCourseDetail = { courseId: Int -> viewModel.setSideEffect(HomeContract.HomeSideEffect.NavigateToCourseDetail(courseId = courseId)) } ) diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/home/navigation/HomeNavigation.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/home/navigation/HomeNavigation.kt index 23985c16..0f4d121f 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/home/navigation/HomeNavigation.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/home/navigation/HomeNavigation.kt @@ -23,7 +23,7 @@ fun NavGraphBuilder.homeNavGraph( navigateToPointHistory: () -> Unit, navigateToLook: (MainNavigationBarItemType) -> Unit, navigateToTimelineDetail: (TimelineType, Int) -> Unit, - navigateToEnroll: (EnrollType, Int?) -> Unit, + navigateToEnroll: (EnrollType, String, Int?) -> Unit, navigateToAdvertisement: (Int) -> Unit, navigateToCourseDetail: (Int) -> Unit ) { diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/look/LookScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/look/LookScreen.kt index ef749504..abf4ea27 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/look/LookScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/look/LookScreen.kt @@ -48,6 +48,7 @@ import org.sopt.dateroad.presentation.ui.component.view.DateRoadErrorView import org.sopt.dateroad.presentation.ui.component.view.DateRoadLoadingView import org.sopt.dateroad.presentation.ui.look.component.LookCourseCard import org.sopt.dateroad.presentation.util.Default +import org.sopt.dateroad.presentation.util.ViewPath.LOOK import org.sopt.dateroad.presentation.util.modifier.noRippleClickable import org.sopt.dateroad.presentation.util.view.LoadState import org.sopt.dateroad.ui.theme.DATEROADTheme @@ -57,7 +58,7 @@ import org.sopt.dateroad.ui.theme.DateRoadTheme fun LookRoute( padding: PaddingValues, viewModel: LookViewModel = hiltViewModel(), - navigateToEnroll: (EnrollType, Int?) -> Unit, + navigateToEnroll: (EnrollType, String, Int?) -> Unit, navigateToCourseDetail: (Int) -> Unit ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -81,7 +82,7 @@ fun LookRoute( .collect { lookSideEffect -> when (lookSideEffect) { is LookContract.LookSideEffect.NavigateToCourseDetail -> navigateToCourseDetail(lookSideEffect.courseId) - is LookContract.LookSideEffect.NavigateToEnroll -> navigateToEnroll(EnrollType.COURSE, null) + is LookContract.LookSideEffect.NavigateToEnroll -> navigateToEnroll(EnrollType.COURSE, LOOK, null) } } } diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/look/navigation/LookNavigation.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/look/navigation/LookNavigation.kt index abd968a2..4e6dabf2 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/look/navigation/LookNavigation.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/look/navigation/LookNavigation.kt @@ -18,7 +18,7 @@ fun NavController.navigationLook(navOptions: NavOptions) { fun NavGraphBuilder.lookNavGraph( padding: PaddingValues, - navigateToEnroll: (EnrollType, Int?) -> Unit, + navigateToEnroll: (EnrollType, String, Int?) -> Unit, navigateToCourseDetail: (Int) -> Unit ) { composable(route = MainNavigationBarRoute.Look::class.simpleName.orEmpty()) { diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/mycourse/MyCourseScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/mycourse/MyCourseScreen.kt index a4e86376..19a10cdf 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/mycourse/MyCourseScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/mycourse/MyCourseScreen.kt @@ -29,6 +29,7 @@ import org.sopt.dateroad.presentation.ui.component.view.DateRoadEmptyView import org.sopt.dateroad.presentation.ui.component.view.DateRoadErrorView import org.sopt.dateroad.presentation.ui.component.view.DateRoadIdleView import org.sopt.dateroad.presentation.ui.component.view.DateRoadLoadingView +import org.sopt.dateroad.presentation.util.ViewPath.MY_COURSE_READ import org.sopt.dateroad.presentation.util.view.LoadState import org.sopt.dateroad.ui.theme.DATEROADTheme import org.sopt.dateroad.ui.theme.DateRoadTheme @@ -38,7 +39,7 @@ fun MyCourseRoute( padding: PaddingValues, viewModel: MyCourseViewModel = hiltViewModel(), popBackStack: () -> Unit, - navigateToEnroll: (EnrollType, Int?) -> Unit, + navigateToEnroll: (EnrollType, String, Int?) -> Unit, navigateToCourseDetail: (Int) -> Unit, myCourseType: MyCourseType ) { @@ -60,7 +61,7 @@ fun MyCourseRoute( viewModel.sideEffect.flowWithLifecycle(lifecycle = lifecycleOwner.lifecycle) .collect { myCourseSideEffect -> when (myCourseSideEffect) { - is MyCourseContract.MyCourseSideEffect.NavigateToEnroll -> navigateToEnroll(EnrollType.TIMELINE, myCourseSideEffect.courseId) + is MyCourseContract.MyCourseSideEffect.NavigateToEnroll -> navigateToEnroll(EnrollType.TIMELINE, MY_COURSE_READ, myCourseSideEffect.courseId) is MyCourseContract.MyCourseSideEffect.NavigateToCourseDetail -> navigateToCourseDetail(myCourseSideEffect.courseId) is MyCourseContract.MyCourseSideEffect.PopBackStack -> popBackStack() } diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/mycourse/navigation/MyCourseNavigation.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/mycourse/navigation/MyCourseNavigation.kt index 97c3b89f..3be4c91f 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/mycourse/navigation/MyCourseNavigation.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/mycourse/navigation/MyCourseNavigation.kt @@ -18,7 +18,7 @@ fun NavController.navigateMyCourses(myCourseType: MyCourseType) { fun NavGraphBuilder.myCoursesNavGraph( padding: PaddingValues, popBackStack: () -> Unit, - navigateToEnroll: (EnrollType, Int?) -> Unit, + navigateToEnroll: (EnrollType, String, Int?) -> Unit, navigateToCourseDetail: (Int) -> Unit ) { composable( diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/navigator/MainNavigator.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/navigator/MainNavigator.kt index c3a76c7f..c84f5a16 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/navigator/MainNavigator.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/navigator/MainNavigator.kt @@ -74,8 +74,8 @@ class MainNavigator( navHostController.navigationCourseDetail(courseId = courseId) } - fun navigateToEnroll(enrollType: EnrollType, courseId: Int?) { - navHostController.navigationEnroll(enrollType = enrollType, courseId = courseId) + fun navigateToEnroll(enrollType: EnrollType, viewPath: String, courseId: Int?) { + navHostController.navigationEnroll(enrollType = enrollType, viewPath = viewPath, courseId = courseId) } fun navigateToMyPage(navOptions: NavOptions? = null) { diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/read/ReadScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/read/ReadScreen.kt index f9d25f66..97ee380e 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/read/ReadScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/read/ReadScreen.kt @@ -36,6 +36,7 @@ import org.sopt.dateroad.presentation.ui.component.view.DateRoadEmptyView import org.sopt.dateroad.presentation.ui.component.view.DateRoadErrorView import org.sopt.dateroad.presentation.ui.component.view.DateRoadIdleView import org.sopt.dateroad.presentation.ui.component.view.DateRoadLoadingView +import org.sopt.dateroad.presentation.util.ViewPath.MY_COURSE_READ import org.sopt.dateroad.presentation.util.modifier.noRippleClickable import org.sopt.dateroad.presentation.util.view.LoadState import org.sopt.dateroad.ui.theme.DATEROADTheme @@ -45,7 +46,7 @@ import org.sopt.dateroad.ui.theme.DateRoadTheme fun ReadRoute( padding: PaddingValues, viewModel: ReadViewModel = hiltViewModel(), - navigateToEnroll: (EnrollType, Int?) -> Unit, + navigateToEnroll: (EnrollType, String, Int?) -> Unit, navigateToCourseDetail: (Int) -> Unit ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -59,7 +60,7 @@ fun ReadRoute( LaunchedEffect(viewModel.sideEffect, lifecycleOwner) { viewModel.sideEffect.flowWithLifecycle(lifecycle = lifecycleOwner.lifecycle).collect { readSideEffect -> when (readSideEffect) { - is ReadContract.ReadSideEffect.NavigateToEnroll -> navigateToEnroll(EnrollType.TIMELINE, null) + is ReadContract.ReadSideEffect.NavigateToEnroll -> navigateToEnroll(EnrollType.TIMELINE, MY_COURSE_READ, null) is ReadContract.ReadSideEffect.NavigateToCourseDetail -> navigateToCourseDetail(readSideEffect.courseId) } } diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/read/navigation/ReadNavigation.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/read/navigation/ReadNavigation.kt index b14810af..d25c3fde 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/read/navigation/ReadNavigation.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/read/navigation/ReadNavigation.kt @@ -18,7 +18,7 @@ fun NavController.navigationRead(navOptions: NavOptions) { fun NavGraphBuilder.readNavGraph( padding: PaddingValues, - navigateToEnroll: (EnrollType, Int?) -> Unit, + navigateToEnroll: (EnrollType, String, Int?) -> Unit, navigateToCourseDetail: (Int) -> Unit ) { composable(route = MainNavigationBarRoute.Read::class.simpleName.orEmpty()) { diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/TimelineScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/TimelineScreen.kt index c47d8b39..dc61df84 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/TimelineScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/TimelineScreen.kt @@ -40,6 +40,7 @@ import org.sopt.dateroad.presentation.ui.component.view.DateRoadErrorView import org.sopt.dateroad.presentation.ui.component.view.DateRoadIdleView import org.sopt.dateroad.presentation.ui.component.view.DateRoadLoadingView import org.sopt.dateroad.presentation.ui.timeline.component.TimelineCard +import org.sopt.dateroad.presentation.util.ViewPath.TIMELINE import org.sopt.dateroad.presentation.util.view.LoadState import org.sopt.dateroad.ui.theme.DATEROADTheme import org.sopt.dateroad.ui.theme.DateRoadTheme @@ -50,7 +51,7 @@ fun TimelineRoute( padding: PaddingValues, viewModel: TimelineViewModel = hiltViewModel(), navigateToPast: () -> Unit, - navigateToEnroll: (EnrollType, Int?) -> Unit, + navigateToEnroll: (EnrollType, String, Int?) -> Unit, navigateToTimelineDetail: (TimelineType, Int) -> Unit ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -65,7 +66,7 @@ fun TimelineRoute( viewModel.sideEffect.collect { sideEffect -> when (sideEffect) { is TimelineContract.TimelineSideEffect.NavigateToPast -> navigateToPast() - is TimelineContract.TimelineSideEffect.NavigateToEnroll -> navigateToEnroll(EnrollType.TIMELINE, null) + is TimelineContract.TimelineSideEffect.NavigateToEnroll -> navigateToEnroll(EnrollType.TIMELINE, TIMELINE, null) is TimelineContract.TimelineSideEffect.NavigateToTimelineDetail -> navigateToTimelineDetail(sideEffect.timelineType, sideEffect.timelineId) } } diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/navigation/TimelineNavigation.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/navigation/TimelineNavigation.kt index 13c0a775..dce87407 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/navigation/TimelineNavigation.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/navigation/TimelineNavigation.kt @@ -20,7 +20,7 @@ fun NavController.navigationTimeline(navOptions: NavOptions) { fun NavGraphBuilder.timelineNavGraph( padding: PaddingValues, navigateToPast: () -> Unit, - navigateToEnroll: (EnrollType, Int?) -> Unit, + navigateToEnroll: (EnrollType, String, Int?) -> Unit, navigateToTimelineDetail: (TimelineType, Int) -> Unit ) { composable(route = MainNavigationBarRoute.Timeline::class.simpleName.orEmpty()) { diff --git a/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt b/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt index 5d91a35f..ba8f8933 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt @@ -100,4 +100,4 @@ object ViewPath { const val MY_COURSE_READ = "내가 열람한 코스" const val COURSE_DETAIL = "코스 상세" const val LOOK = "코스 둘러보기" -} \ No newline at end of file +} From 5a232ce06a50efe8f643c4f0bf4c0693d20d7a29 Mon Sep 17 00:00:00 2001 From: jihyunniiii Date: Tue, 17 Sep 2024 18:46:35 +0900 Subject: [PATCH 3/8] =?UTF-8?q?[feat]=20#259=20=EC=9D=BC=EC=A0=95=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=20=EB=B7=B0=20=EB=92=A4=EB=A1=9C=EA=B0=80?= =?UTF-8?q?=EA=B8=B0=20=EA=B4=80=EB=A0=A8=20=EC=95=B0=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=ED=8A=9C=EB=93=9C=20=ED=8A=B8=EB=9E=98=ED=82=B9=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=8B=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ui/enroll/EnrollScreen.kt | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt index 14594928..e383ab86 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt @@ -29,8 +29,6 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.flowWithLifecycle -import java.time.LocalDate -import java.time.format.DateTimeFormatter import org.sopt.dateroad.R import org.sopt.dateroad.domain.model.Place import org.sopt.dateroad.domain.type.RegionType @@ -53,6 +51,16 @@ import org.sopt.dateroad.presentation.ui.component.view.DateRoadErrorView import org.sopt.dateroad.presentation.ui.component.view.DateRoadLoadingView import org.sopt.dateroad.presentation.ui.enroll.component.EnrollPhotos import org.sopt.dateroad.presentation.util.DatePicker +import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_SCHEDULE1_BACK +import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_SCHEDULE2_BACK +import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_AREA +import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_COURSE_NUM +import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_DATE +import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_DETAIL_LOCATION +import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_DETAIL_TIME +import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_TAG_NUM +import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_TIME +import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_TITLE import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_ADD_BRING_COURSE import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_ADD_BRING_COURSE2 import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_ADD_SCHEDULE @@ -66,6 +74,8 @@ import org.sopt.dateroad.presentation.util.amplitude.AmplitudeUtils import org.sopt.dateroad.presentation.util.view.LoadState import org.sopt.dateroad.ui.theme.DATEROADTheme import org.sopt.dateroad.ui.theme.DateRoadTheme +import java.time.LocalDate +import java.time.format.DateTimeFormatter @Composable fun EnrollRoute( @@ -167,7 +177,35 @@ fun EnrollRoute( EnrollScreen( padding = padding, enrollUiState = uiState, - onTopBarBackButtonClick = { viewModel.setEvent(EnrollContract.EnrollEvent.OnTopBarBackButtonClick) }, + onTopBarBackButtonClick = { + viewModel.setEvent(EnrollContract.EnrollEvent.OnTopBarBackButtonClick) + + when (enrollType) { + EnrollType.COURSE -> { + when (uiState.page) { + EnrollScreenType.FIRST -> {} + EnrollScreenType.SECOND -> {} + EnrollScreenType.THIRD -> {} + } + } + + EnrollType.TIMELINE -> { + when (uiState.page) { + EnrollScreenType.FIRST -> AmplitudeUtils.trackEventWithProperties( + eventName = CLICK_SCHEDULE1_BACK, + properties = with(uiState.enroll) { mapOf(DATE_TITLE to title.isNotEmpty(), DATE_DATE to date.isNotEmpty(), DATE_TIME to startAt.isNotEmpty(), DATE_TAG_NUM to tags.size, DATE_AREA to (city != null)) } + ) + + EnrollScreenType.SECOND -> AmplitudeUtils.trackEventWithProperties( + eventName = CLICK_SCHEDULE2_BACK, + properties = with(uiState.place) { mapOf(DATE_DETAIL_LOCATION to title.isNotEmpty(), DATE_DETAIL_TIME to duration.isNotEmpty(), DATE_COURSE_NUM to uiState.enroll.places.size) } + ) + + EnrollScreenType.THIRD -> Unit + } + } + } + }, onTopBarLoadButtonClick = { viewModel.setSideEffect(EnrollContract.EnrollSideEffect.NavigateToMyCourseRead) }, onEnrollButtonClick = { viewModel.setEvent(EnrollContract.EnrollEvent.OnEnrollButtonClick) }, onDateTextFieldClick = { viewModel.setEvent(EnrollContract.EnrollEvent.OnDateTextFieldClick) }, From 40f7876a6c443fe6af2c2e63b3c4568fda23cb64 Mon Sep 17 00:00:00 2001 From: jihyunniiii Date: Tue, 17 Sep 2024 18:58:13 +0900 Subject: [PATCH 4/8] =?UTF-8?q?[feat]=20#259=20=EC=BD=94=EC=8A=A4=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=20=EB=B7=B0=20=EB=92=A4=EB=A1=9C=EA=B0=80?= =?UTF-8?q?=EA=B8=B0=20=EA=B4=80=EB=A0=A8=20=EC=95=B0=ED=94=8C=EB=A6=AC?= =?UTF-8?q?=ED=8A=9C=EB=93=9C=20=ED=8A=B8=EB=9E=98=ED=82=B9=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=8B=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ui/enroll/EnrollScreen.kt | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt index e383ab86..ad28782e 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt @@ -51,16 +51,29 @@ import org.sopt.dateroad.presentation.ui.component.view.DateRoadErrorView import org.sopt.dateroad.presentation.ui.component.view.DateRoadLoadingView import org.sopt.dateroad.presentation.ui.enroll.component.EnrollPhotos import org.sopt.dateroad.presentation.util.DatePicker +import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_COURSE1_BACK +import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_COURSE2_BACK +import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_COURSE3_BACK import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_SCHEDULE1_BACK import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_SCHEDULE2_BACK +import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_CONTENT +import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_COST +import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_DATE +import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_IMAGE +import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_START_TIME +import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_TAGS +import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_TITLE import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_AREA import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_COURSE_NUM import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_DATE import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_DETAIL_LOCATION import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_DETAIL_TIME +import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_LOCATION +import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_SPEND_TIME import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_TAG_NUM import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_TIME import org.sopt.dateroad.presentation.util.EnrollAmplitude.DATE_TITLE +import org.sopt.dateroad.presentation.util.EnrollAmplitude.LOCATION_NUM import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_ADD_BRING_COURSE import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_ADD_BRING_COURSE2 import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_ADD_SCHEDULE @@ -183,9 +196,20 @@ fun EnrollRoute( when (enrollType) { EnrollType.COURSE -> { when (uiState.page) { - EnrollScreenType.FIRST -> {} - EnrollScreenType.SECOND -> {} - EnrollScreenType.THIRD -> {} + EnrollScreenType.FIRST -> AmplitudeUtils.trackEventWithProperties( + eventName = CLICK_COURSE1_BACK, + properties = with(uiState.enroll) { mapOf(COURSE_IMAGE to images.isNotEmpty(), COURSE_TITLE to title.isNotEmpty(), COURSE_DATE to date.isNotEmpty(), COURSE_START_TIME to startAt.isNotEmpty(), COURSE_TAGS to tags.isNotEmpty(), DATE_AREA to (city != null)) } + ) + + EnrollScreenType.SECOND -> AmplitudeUtils.trackEventWithProperties( + eventName = CLICK_COURSE2_BACK, + properties = with(uiState.place) { mapOf(DATE_LOCATION to title.isNotEmpty(), DATE_SPEND_TIME to duration.isNotEmpty(), LOCATION_NUM to uiState.enroll.places.size) } + ) + + EnrollScreenType.THIRD -> AmplitudeUtils.trackEventWithProperties( + eventName = CLICK_COURSE3_BACK, + properties = with(uiState.enroll) { mapOf(COURSE_CONTENT to description.length, COURSE_COST to cost.isNotEmpty()) } + ) } } From 5f7dce48340013b38dd60ce1a709365083639a15 Mon Sep 17 00:00:00 2001 From: jihyunniiii Date: Tue, 17 Sep 2024 18:58:38 +0900 Subject: [PATCH 5/8] [feat] #259 ktlintFormat --- .../org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt index ad28782e..e7da4472 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt @@ -29,6 +29,8 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.flowWithLifecycle +import java.time.LocalDate +import java.time.format.DateTimeFormatter import org.sopt.dateroad.R import org.sopt.dateroad.domain.model.Place import org.sopt.dateroad.domain.type.RegionType @@ -87,8 +89,6 @@ import org.sopt.dateroad.presentation.util.amplitude.AmplitudeUtils import org.sopt.dateroad.presentation.util.view.LoadState import org.sopt.dateroad.ui.theme.DATEROADTheme import org.sopt.dateroad.ui.theme.DateRoadTheme -import java.time.LocalDate -import java.time.format.DateTimeFormatter @Composable fun EnrollRoute( From b5bc66bfce4fb3957709e52779c7417e31390e4b Mon Sep 17 00:00:00 2001 From: jihyunniiii Date: Tue, 17 Sep 2024 23:22:06 +0900 Subject: [PATCH 6/8] =?UTF-8?q?[chore]=20#259=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=EB=90=98=EB=8A=94=20property=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt | 8 +++++--- .../org/sopt/dateroad/presentation/util/Constraints.kt | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt index e7da4472..6f9735e0 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt @@ -58,10 +58,12 @@ import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_COURSE2_BACK import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_COURSE3_BACK import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_SCHEDULE1_BACK import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_SCHEDULE2_BACK -import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_CONTENT +import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_CONTENT_BOOL +import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_CONTENT_NUM import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_COST import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_DATE import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_IMAGE +import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_LOCATION import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_START_TIME import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_TAGS import org.sopt.dateroad.presentation.util.EnrollAmplitude.COURSE_TITLE @@ -198,7 +200,7 @@ fun EnrollRoute( when (uiState.page) { EnrollScreenType.FIRST -> AmplitudeUtils.trackEventWithProperties( eventName = CLICK_COURSE1_BACK, - properties = with(uiState.enroll) { mapOf(COURSE_IMAGE to images.isNotEmpty(), COURSE_TITLE to title.isNotEmpty(), COURSE_DATE to date.isNotEmpty(), COURSE_START_TIME to startAt.isNotEmpty(), COURSE_TAGS to tags.isNotEmpty(), DATE_AREA to (city != null)) } + properties = with(uiState.enroll) { mapOf(COURSE_IMAGE to images.isNotEmpty(), COURSE_TITLE to title.isNotEmpty(), COURSE_DATE to date.isNotEmpty(), COURSE_START_TIME to startAt.isNotEmpty(), COURSE_TAGS to tags.isNotEmpty(), COURSE_LOCATION to (city != null)) } ) EnrollScreenType.SECOND -> AmplitudeUtils.trackEventWithProperties( @@ -208,7 +210,7 @@ fun EnrollRoute( EnrollScreenType.THIRD -> AmplitudeUtils.trackEventWithProperties( eventName = CLICK_COURSE3_BACK, - properties = with(uiState.enroll) { mapOf(COURSE_CONTENT to description.length, COURSE_COST to cost.isNotEmpty()) } + properties = with(uiState.enroll) { mapOf(COURSE_CONTENT_BOOL to description.isNotEmpty(), COURSE_CONTENT_NUM to description.length, COURSE_COST to cost.isNotEmpty()) } ) } } diff --git a/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt b/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt index ba8f8933..6f6bedbc 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/util/Constraints.kt @@ -90,7 +90,8 @@ object EnrollAmplitude { const val DATE_LOCATION = "date_location" const val DATE_SPEND_TIME = "date_spend_time" const val LOCATION_NUM = "location_num" - const val COURSE_CONTENT = "course_content" + const val COURSE_CONTENT_BOOL = "course_content_bool" + const val COURSE_CONTENT_NUM = "course_content_num" const val COURSE_COST = "course_cost" } From b08d50f434b3f0b0d77f17c64dff209d519367a4 Mon Sep 17 00:00:00 2001 From: jihyunniiii Date: Tue, 17 Sep 2024 23:32:29 +0900 Subject: [PATCH 7/8] [chore] #259 conflict solve --- .../dateroad/presentation/ui/enroll/EnrollScreen.kt | 10 ++++++++++ .../presentation/ui/timeline/TimelineScreen.kt | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt index 6f9735e0..d4ef3dcb 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt @@ -87,6 +87,7 @@ import org.sopt.dateroad.presentation.util.EnrollAmplitude.VIEW_PATH import org.sopt.dateroad.presentation.util.EnrollScreen.MAX_ITEMS import org.sopt.dateroad.presentation.util.EnrollScreen.TITLE_MIN_LENGTH import org.sopt.dateroad.presentation.util.TimePicker +import org.sopt.dateroad.presentation.util.TimelineAmplitude.CLICK_ADD_SCHEDULE import org.sopt.dateroad.presentation.util.amplitude.AmplitudeUtils import org.sopt.dateroad.presentation.util.view.LoadState import org.sopt.dateroad.ui.theme.DATEROADTheme @@ -189,6 +190,15 @@ fun EnrollRoute( } } + LaunchedEffect(uiState.loadState) { + if (uiState.loadState == LoadState.Success) { + when (uiState.enrollType) { + EnrollType.TIMELINE -> AmplitudeUtils.trackEvent(CLICK_ADD_SCHEDULE) + else -> Unit + } + } + } + EnrollScreen( padding = padding, enrollUiState = uiState, diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/TimelineScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/TimelineScreen.kt index 237ac49b..7f893c44 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/TimelineScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/timeline/TimelineScreen.kt @@ -40,7 +40,11 @@ import org.sopt.dateroad.presentation.ui.component.view.DateRoadErrorView import org.sopt.dateroad.presentation.ui.component.view.DateRoadIdleView import org.sopt.dateroad.presentation.ui.component.view.DateRoadLoadingView import org.sopt.dateroad.presentation.ui.timeline.component.TimelineCard +import org.sopt.dateroad.presentation.util.TimelineAmplitude.COUNT_DATE_SCHEDULE +import org.sopt.dateroad.presentation.util.TimelineAmplitude.DATE_SCHEDULE_NUM +import org.sopt.dateroad.presentation.util.TimelineAmplitude.VIEW_DATE_SCHEDULE import org.sopt.dateroad.presentation.util.ViewPath.TIMELINE +import org.sopt.dateroad.presentation.util.amplitude.AmplitudeUtils import org.sopt.dateroad.presentation.util.view.LoadState import org.sopt.dateroad.ui.theme.DATEROADTheme import org.sopt.dateroad.ui.theme.DateRoadTheme @@ -67,7 +71,7 @@ fun TimelineRoute( viewModel.sideEffect.collect { sideEffect -> when (sideEffect) { is TimelineContract.TimelineSideEffect.NavigateToPast -> navigateToPast() - is TimelineContract.TimelineSideEffect.NavigateToEnroll -> navigateToEnroll(EnrollType.TIMELINE, null) + is TimelineContract.TimelineSideEffect.NavigateToEnroll -> navigateToEnroll(EnrollType.TIMELINE, TIMELINE, null) is TimelineContract.TimelineSideEffect.NavigateToTimelineDetail -> navigateToTimelineDetail(sideEffect.timelineType, sideEffect.timelineId) } } From 81b63e0c7753851cfd050b1321dddf62262312aa Mon Sep 17 00:00:00 2001 From: jihyunniiii Date: Tue, 17 Sep 2024 23:33:46 +0900 Subject: [PATCH 8/8] [chore] #259 click_bring_course --- .../sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt index d4ef3dcb..9aa05bb6 100644 --- a/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt +++ b/app/src/main/java/org/sopt/dateroad/presentation/ui/enroll/EnrollScreen.kt @@ -53,6 +53,7 @@ import org.sopt.dateroad.presentation.ui.component.view.DateRoadErrorView import org.sopt.dateroad.presentation.ui.component.view.DateRoadLoadingView import org.sopt.dateroad.presentation.ui.enroll.component.EnrollPhotos import org.sopt.dateroad.presentation.util.DatePicker +import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_BRING_COURSE import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_COURSE1_BACK import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_COURSE2_BACK import org.sopt.dateroad.presentation.util.EnrollAmplitude.CLICK_COURSE3_BACK @@ -242,7 +243,10 @@ fun EnrollRoute( } } }, - onTopBarLoadButtonClick = { viewModel.setSideEffect(EnrollContract.EnrollSideEffect.NavigateToMyCourseRead) }, + onTopBarLoadButtonClick = { + viewModel.setSideEffect(EnrollContract.EnrollSideEffect.NavigateToMyCourseRead) + AmplitudeUtils.trackEvent(eventName = CLICK_BRING_COURSE) + }, onEnrollButtonClick = { viewModel.setEvent(EnrollContract.EnrollEvent.OnEnrollButtonClick) }, onDateTextFieldClick = { viewModel.setEvent(EnrollContract.EnrollEvent.OnDateTextFieldClick) }, onTimeTextFieldClick = { viewModel.setEvent(EnrollContract.EnrollEvent.OnTimeTextFieldClick) },