From 2f257cea942d144af4b6af01d94cfdce0e8820a0 Mon Sep 17 00:00:00 2001 From: Ivan Magda Date: Wed, 6 Dec 2023 19:07:47 +0700 Subject: [PATCH 1/6] Shared GamificationToolbarFeature.ViewState (#772) ^ALTAPPS-1057 --- .../delegate/GamificationToolbarDelegate.kt | 31 +++++--------- .../view/widget/ToolbarTrackProgressView.kt | 6 +-- .../home/view/ui/fragment/HomeFragment.kt | 2 +- .../study_plan/fragment/StudyPlanFragment.kt | 2 +- .../layout/layout_gamification_toolbar.xml | 24 ++--------- .../project.pbxproj | 4 -- .../Contents.json | 25 ----------- .../navigation-bar-gems-dark.pdf | Bin 2624 -> 0 bytes .../navigation-bar-gems-light.pdf | Bin 2624 -> 0 bytes .../Models/Constants/Images/Images.swift | 1 - .../Views/GamificationToolbarContent.swift | 29 +++++-------- .../Views/GemsBarButtonItem.swift | 39 ----------------- .../Views/ProgressBarButtonItem.swift | 37 ++++++++-------- .../Views/StreakBarButtonItem.swift | 28 ++++++------ .../Sources/Modules/Home/HomeViewModel.swift | 10 +---- .../Sources/Modules/Home/Views/HomeView.swift | 3 +- .../Leaderboard/LeaderboardViewModel.swift | 10 +---- .../Leaderboard/Views/LeaderboardView.swift | 3 +- .../StudyPlan/StudyPlanViewModel.swift | 10 +---- .../StudyPlan/Views/StudyPlanView.swift | 3 +- .../hyperskill/HyperskillAnalyticTarget.kt | 1 - ...olbarClickedGemsHyperskillAnalyticEvent.kt | 30 ------------- .../GamificationToolbarComponentImpl.kt | 25 +++++------ .../GamificationToolbarActionDispatcher.kt | 9 ---- .../GamificationToolbarFeature.kt | 25 +++++++++-- .../GamificationToolbarReducer.kt | 21 +-------- .../GamificationToolbarViewStateMapper.kt | 40 ++++++++++++++++++ .../app/home/presentation/HomeFeature.kt | 2 +- .../home/view/mapper/HomeViewStateMapper.kt | 3 +- .../presentation/LeaderboardScreenFeature.kt | 2 +- .../LeaderboardScreenViewStateMapper.kt | 3 +- .../presentation/StudyPlanScreenFeature.kt | 2 +- .../view/StudyPlanScreenViewStateMapper.kt | 3 +- .../commonMain/resources/MR/base/strings.xml | 1 - 34 files changed, 150 insertions(+), 284 deletions(-) delete mode 100644 iosHyperskillApp/iosHyperskillApp/Assets.xcassets/NavigationBar/navigation-bar-gems.imageset/Contents.json delete mode 100644 iosHyperskillApp/iosHyperskillApp/Assets.xcassets/NavigationBar/navigation-bar-gems.imageset/navigation-bar-gems-dark.pdf delete mode 100644 iosHyperskillApp/iosHyperskillApp/Assets.xcassets/NavigationBar/navigation-bar-gems.imageset/navigation-bar-gems-light.pdf delete mode 100644 iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/GemsBarButtonItem.swift delete mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedGemsHyperskillAnalyticEvent.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/view/mapper/GamificationToolbarViewStateMapper.kt diff --git a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/ui/delegate/GamificationToolbarDelegate.kt b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/ui/delegate/GamificationToolbarDelegate.kt index 3d5e12574f..4c95216604 100644 --- a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/ui/delegate/GamificationToolbarDelegate.kt +++ b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/ui/delegate/GamificationToolbarDelegate.kt @@ -14,7 +14,6 @@ import org.hyperskill.app.android.main.view.ui.navigation.switch import org.hyperskill.app.android.progress.navigation.ProgressScreen import org.hyperskill.app.android.view.base.ui.extension.setElevationOnCollapsed import org.hyperskill.app.gamification_toolbar.presentation.GamificationToolbarFeature -import org.hyperskill.app.streaks.domain.model.StreakState import ru.nobird.android.view.base.ui.extension.setTextIfChanged class GamificationToolbarDelegate( @@ -29,11 +28,6 @@ class GamificationToolbarDelegate( gamificationAppBar.setElevationOnCollapsed(lifecycleOwner.lifecycle) gamificationAppBar.setExpanded(true) - gamificationGemsCountTextView.setOnClickListener { - onNewMessage( - GamificationToolbarFeature.Message.ClickedGems - ) - } gamificationStreakDurationTextView.setOnClickListener { onNewMessage( GamificationToolbarFeature.Message.ClickedStreak @@ -47,15 +41,15 @@ class GamificationToolbarDelegate( } } - fun render(state: GamificationToolbarFeature.State) { - if (state is GamificationToolbarFeature.State.Content) { + fun render(state: GamificationToolbarFeature.ViewState) { + if (state is GamificationToolbarFeature.ViewState.Content) { with(viewBinding.gamificationStreakDurationTextView) { isVisible = true - text = state.currentStreak.toString() + text = state.streak.formattedValue setCompoundDrawablesWithIntrinsicBounds( /* left = */ when { - state.historicalStreak.state == StreakState.RECOVERED -> R.drawable.ic_menu_recovered_streak - state.historicalStreak.isCompleted -> R.drawable.ic_menu_enabled_streak + state.streak.isRecovered -> R.drawable.ic_menu_recovered_streak + state.streak.isCompleted -> R.drawable.ic_menu_enabled_streak else -> R.drawable.ic_menu_empty_streak }, /* top = */ 0, @@ -63,18 +57,15 @@ class GamificationToolbarDelegate( /* bottom = */ 0 ) } - with(viewBinding.gamificationGemsCountTextView) { - isVisible = true - text = state.hypercoinsBalance.toString() - } - state.trackProgress.let { trackProgress -> - viewBinding.gamificationTrackProgressLinearLayout.isVisible = trackProgress != null - if (trackProgress != null) { + state.progress.let { progress -> + viewBinding.gamificationTrackProgressLinearLayout.isVisible = progress != null + if (progress != null) { viewBinding.gamificationTrackProgressView.setProgress( - trackProgress.averageProgress, - trackProgress.isCompleted + progress.value, + progress.isCompleted ) + viewBinding.gamificationTrackProgressTextView.text = progress.formattedValue } } } diff --git a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/widget/ToolbarTrackProgressView.kt b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/widget/ToolbarTrackProgressView.kt index b7fc12aedf..1f1579915f 100644 --- a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/widget/ToolbarTrackProgressView.kt +++ b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/widget/ToolbarTrackProgressView.kt @@ -93,10 +93,8 @@ class ToolbarTrackProgressView @JvmOverloads constructor( } } - fun setProgress(progress: Int, isCompleted: Boolean) { - val normalizedProgress = - progress.coerceAtMost(100).coerceAtLeast(0) - val progressRadius = normalizedProgress / 100f * 360 + fun setProgress(progress: Float, isCompleted: Boolean) { + val progressRadius = progress * 360 if (progressRadius != this.progressSweepAngel) { this.progressSweepAngel = progressRadius this.isCompleted = isCompleted diff --git a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/home/view/ui/fragment/HomeFragment.kt b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/home/view/ui/fragment/HomeFragment.kt index 0c9371bf30..36accbbd9e 100644 --- a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/home/view/ui/fragment/HomeFragment.kt +++ b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/home/view/ui/fragment/HomeFragment.kt @@ -217,7 +217,7 @@ class HomeFragment : ) } - gamificationToolbarDelegate?.render(state.toolbarState) + gamificationToolbarDelegate?.render(state.toolbarViewState) } private fun renderSwipeRefresh(state: HomeFeature.ViewState) { diff --git a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/study_plan/fragment/StudyPlanFragment.kt b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/study_plan/fragment/StudyPlanFragment.kt index 97fe10ced6..76380f63e8 100644 --- a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/study_plan/fragment/StudyPlanFragment.kt +++ b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/study_plan/fragment/StudyPlanFragment.kt @@ -134,7 +134,7 @@ class StudyPlanFragment : override fun render(state: StudyPlanScreenFeature.ViewState) { renderSwipeRefresh(state) - gamificationToolbarDelegate?.render(state.toolbarState) + gamificationToolbarDelegate?.render(state.toolbarViewState) gamificationToolbarDelegate?.setSubtitle(state.trackTitle) problemsLimitDelegate?.render(state.problemsLimitViewState) studyPlanWidgetDelegate?.render(state.studyPlanWidgetViewState) diff --git a/androidHyperskillApp/src/main/res/layout/layout_gamification_toolbar.xml b/androidHyperskillApp/src/main/res/layout/layout_gamification_toolbar.xml index bdd1aa25fe..829a27af35 100644 --- a/androidHyperskillApp/src/main/res/layout/layout_gamification_toolbar.xml +++ b/androidHyperskillApp/src/main/res/layout/layout_gamification_toolbar.xml @@ -58,12 +58,13 @@ /> + tools:text="21%" /> @@ -86,25 +87,6 @@ tools:visibility="visible" /> - - N74=LAk zFGl!|{Ks;=XrDnKIKz#kX*XrQB9rU#&$1|IcULfdNdFZL`9&r-3>FPxnYVy8=yq}* zX0O-6Qn4a5GtyD+CADyzX$bq9VvWm#VkWmUFEfA~!yuTm26V=?rAz|1+r=mmv4ZSF zD-spOy~!+?iCENAkbNlX3`_=c0-~AVLevwWlw<%a5?l;em;?g>iE4`&t_W7-nLLp- z`GP47@eaa!au-EaCb+SdL6-D=O0Su^7!XQe%g_BemYW;Iace1{^-G{?Ny=wKDAB=zOk zD#1FSnkhc!?YP2Ij!{OVRQP&v7|A5A(Q$#HETI+HzX{U+;hcGGfrEqpxdP$FJg za*-T5kfE~Ei==0W6_Q>gp&H`Oq_k7;$kGlM$%yu$Sns7hTy=7XHY)8el9b^d@fdF3 z#D@;OZRfso_s;?5qzGMJ2H3w6-mTYl+rZ;Dd^O;heEs{ggvourCin0O!E}0GLruDil*J#l{Hn!k>zCjGs0O4a}>w|~lljg&6 zj#R;WFoUg~Y5f~z*(?4HB8evKMTsWwU=s{R$ESIlSM_37^kq{%5ekO%?)z`hN(luB z4};-t<_F*#Wf%r|`Vk;b4d!G7`6jswao<39At9q+yUCYTxgkD#@2@c&r%k;o&){@9 mKkI`snbma*-r+95lZWNM64`fexO~%g?r=#tIXSuceET13S{{`E diff --git a/iosHyperskillApp/iosHyperskillApp/Assets.xcassets/NavigationBar/navigation-bar-gems.imageset/navigation-bar-gems-light.pdf b/iosHyperskillApp/iosHyperskillApp/Assets.xcassets/NavigationBar/navigation-bar-gems.imageset/navigation-bar-gems-light.pdf deleted file mode 100644 index 0691e49d408ed8809f74410237f5d1746fdc322f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2624 zcmb7G$!^;)5WVv&<`N(|MCMKr2m&-KineI#^cM7>%8KJcmRd_K(tdr1T1Z+k5{NKt z`jIp9W+8`1cUL#3EHQ*IpiqDRK>*IqU~&E2-rl!aTlD`}_mgKp6UHeHI6v<{q^MR- zjPO1Ak43d^pFkkE#EqnBcSW`(i>u<#CNGw^7jStW|H~Wli!81gtQ*1-X8~={adPTs zFW3B1z9lqK(o*guh2mB+@cWy*!sS6RljF?E3?Roa2xe0QI^jB{Oaf2G#UK%|oE$<+ z5)_5K(af6(SkRM`Ln!L>Oa^iSf*J2Z(Bq+)qz6mlUG$ircmo~@YV#1T0G8y5Jd%oh z!4&#f8v=tVY8BMe_oEeCc*IQv& zG$pYKO_{VR+F2eFpUqn)mZee|U@EajQJW6DQ!W&idZL&?YL2(;R(sw?nN%r|=z!r` zzobpILfROM)F>@rh*$@TWGX$IH8W^fQp;!2p5_nPYzK;*?@?rl=9rf>I9P@%iG7({ zC0GYkQ$eS^EqA9Jql`wWaP?v_>Qr}SVq6q0Wf8^gkbJ@3q8?Es6m{!Sa z)$I;~&>{+ARNTIDN<3c}Y(q`tUROC2;n}3ak(|$3zscI4-MAcjmt*1itbK`0E|S*{ zq_6DwBIy}og~S($uZFNQD(x7YS=#<0nb3Z%LJra%t~$9#8DSVfg9(J#UcU4ul4Lp3qR|Ag4*S|jtSlngnVgNoBt4(%MKf?o_(xK1# zN$6=|HfmZHP5pb97Y(>~$#PJ4SyydQp+)!D7{R-2hZv{-E0q^R9R#6b$Lzci*6u5(*F=2E*IT z4Zt_bFbwi^!$X`J%*h0DO>!UNu7U1DLI%Nhmu<>oM_l&aUtu_on|fQE!0~2v(g$U+ htm_t>!(D(E_nUtOvhUt-*{ Void let onStreakTap: () -> Void let onProgressTap: () -> Void var body: some ToolbarContent { ToolbarItem(placement: .primaryAction) { - switch stateKs { + switch viewStateKs { case .idle, .loading: HStack { - SkeletonRoundedView(appearance: .init(size: appearance.toolbarLargeSkeletonSize)) - SkeletonRoundedView(appearance: .init(size: appearance.toolbarDefaultSkeletonSize)) - SkeletonRoundedView(appearance: .init(size: appearance.toolbarDefaultSkeletonSize)) + SkeletonRoundedView(appearance: .init(size: appearance.skeletonSize)) + SkeletonRoundedView(appearance: .init(size: appearance.skeletonSize)) } case .error: HStack {} case .content(let data): HStack { - if let trackProgress = data.trackProgress { + if let progress = data.progress { ProgressBarButtonItem( - progress: Float(trackProgress.averageProgress) / 100, - isCompleted: trackProgress.isCompleted, + progress: progress.value, + formattedProgress: progress.formattedValue, + isCompleted: progress.isCompleted, onTap: onProgressTap ) } StreakBarButtonItem( - currentStreak: Int(data.currentStreak), - isCompletedToday: data.historicalStreak.isCompleted, + currentStreak: data.streak.formattedValue, + isCompletedToday: data.streak.isCompleted, onTap: onStreakTap ) - - GemsBarButtonItem( - hypercoinsBalance: Int(data.hypercoinsBalance), - onTap: onGemsTap - ) } } } diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/GemsBarButtonItem.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/GemsBarButtonItem.swift deleted file mode 100644 index b2c8a4a00d..0000000000 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/GemsBarButtonItem.swift +++ /dev/null @@ -1,39 +0,0 @@ -import SwiftUI - -struct GemsBarButtonItem: View { - let hypercoinsBalance: Int - - let onTap: () -> Void - - var body: some View { - Button( - action: onTap, - label: { - HStack { - Image(Images.NavigationBar.gems) - .renderingMode(.original) - .resizable() - .aspectRatio(contentMode: .fit) - - Text("\(hypercoinsBalance)") - .foregroundColor(.primaryText) - .animation(.default, value: hypercoinsBalance) - } - } - ) - } -} - -struct GemsBarButtonItem_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - Text("Hello, World!") - .navigationTitle("Navigation") - .toolbar { - ToolbarItem(placement: .primaryAction) { - GemsBarButtonItem(hypercoinsBalance: 3, onTap: {}) - } - } - } - } -} diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/ProgressBarButtonItem.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/ProgressBarButtonItem.swift index 7128855925..14123d317f 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/ProgressBarButtonItem.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/ProgressBarButtonItem.swift @@ -14,6 +14,7 @@ struct ProgressBarButtonItem: View { private(set) var appearance = Appearance() let progress: Float + let formattedProgress: String let isCompleted: Bool let onTap: () -> Void @@ -45,7 +46,7 @@ struct ProgressBarButtonItem: View { .frame(widthHeight: appearance.circleBackgroundWidthHeight) ) - Text(Strings.Common.progress) + Text(formattedProgress) .foregroundColor(.primaryText) .font(.subheadline) } @@ -54,23 +55,23 @@ struct ProgressBarButtonItem: View { } } -struct ProgressBarButtonItem_Previews: PreviewProvider { - static var previews: some View { - Group { - ProgressBarButtonItem( - progress: 0.65, - isCompleted: false, - onTap: {} - ) +#Preview { + VStack { + ProgressBarButtonItem( + progress: 0.65, + formattedProgress: "65%", + isCompleted: false, + onTap: {} + ) - ProgressBarButtonItem( - progress: 0.95, - isCompleted: true, - onTap: {} - ) - } - .padding() - .background(Color(ColorPalette.background)) - .previewLayout(.sizeThatFits) + ProgressBarButtonItem( + progress: 0.95, + formattedProgress: "95%", + isCompleted: true, + onTap: {} + ) } + .padding() + .background(Color(ColorPalette.background)) + .previewLayout(.sizeThatFits) } diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/StreakBarButtonItem.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/StreakBarButtonItem.swift index cb96531714..01e604d5e0 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/StreakBarButtonItem.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/StreakBarButtonItem.swift @@ -1,7 +1,7 @@ import SwiftUI struct StreakBarButtonItem: View { - let currentStreak: Int + let currentStreak: String let isCompletedToday: Bool @@ -30,20 +30,18 @@ struct StreakBarButtonItem: View { } } -struct StreakBarButtonItem_Previews: PreviewProvider { - static var previews: some View { - NavigationView { - Text("Hello, World!") - .navigationTitle("Navigation") - .toolbar { - ToolbarItem(placement: .primaryAction) { - StreakBarButtonItem( - currentStreak: 3, - isCompletedToday: true, - onTap: {} - ) - } +#Preview { + NavigationView { + Text("Hello, World!") + .navigationTitle("Navigation") + .toolbar { + ToolbarItem(placement: .primaryAction) { + StreakBarButtonItem( + currentStreak: "3", + isCompletedToday: true, + onTap: {} + ) } - } + } } } diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Home/HomeViewModel.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Home/HomeViewModel.swift index fe552e5655..db8eeb0101 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Home/HomeViewModel.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Home/HomeViewModel.swift @@ -6,7 +6,7 @@ final class HomeViewModel: FeatureViewModel - onNewMessage(InternalMessage.HypercoinsBalanceChanged(hypercoinsBalance)) - } - .launchIn(actionScope) - streakFlow.observe() .distinctUntilChanged() .onEach { streak -> diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarFeature.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarFeature.kt index 9b769173c3..4fd5f5e927 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarFeature.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarFeature.kt @@ -17,7 +17,6 @@ object GamificationToolbarFeature { val trackProgress: GamificationToolbarTrackProgress?, val currentStreak: Int, val historicalStreak: HistoricalStreak, - val hypercoinsBalance: Int, internal val isRefreshing: Boolean = false ) : State } @@ -25,8 +24,29 @@ object GamificationToolbarFeature { internal val State.isRefreshing: Boolean get() = this is State.Content && isRefreshing + sealed interface ViewState { + object Idle : ViewState + object Loading : ViewState + object Error : ViewState + data class Content( + val progress: Progress?, + val streak: Streak + ) : ViewState { + data class Progress( + val value: Float, // a value between 0 and 1 + val formattedValue: String, + val isCompleted: Boolean + ) + + data class Streak( + val formattedValue: String, + val isCompleted: Boolean, + val isRecovered: Boolean + ) + } + } + sealed interface Message { - object ClickedGems : Message object ClickedStreak : Message object ClickedProgress : Message } @@ -47,7 +67,6 @@ object GamificationToolbarFeature { * Flow Messages */ object StepSolved : InternalMessage - data class HypercoinsBalanceChanged(val hypercoinsBalance: Int) : InternalMessage data class StreakChanged(val streak: Streak?) : InternalMessage data class StudyPlanChanged(val studyPlan: StudyPlan) : InternalMessage object TopicCompleted : InternalMessage diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarReducer.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarReducer.kt index 56f7186fae..edb7651908 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarReducer.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarReducer.kt @@ -1,6 +1,5 @@ package org.hyperskill.app.gamification_toolbar.presentation -import org.hyperskill.app.gamification_toolbar.domain.analytic.GamificationToolbarClickedGemsHyperskillAnalyticEvent import org.hyperskill.app.gamification_toolbar.domain.analytic.GamificationToolbarClickedProgressHyperskillAnalyticEvent import org.hyperskill.app.gamification_toolbar.domain.analytic.GamificationToolbarClickedStreakHyperskillAnalyticEvent import org.hyperskill.app.gamification_toolbar.domain.model.GamificationToolbarData @@ -55,14 +54,6 @@ class GamificationToolbarReducer( } else { null } - is InternalMessage.HypercoinsBalanceChanged -> - if (state is State.Content) { - state.copy( - hypercoinsBalance = message.hypercoinsBalance - ) to emptySet() - } else { - null - } is InternalMessage.StreakChanged -> if (state is State.Content && message.streak != null) { state.copy( @@ -110,15 +101,6 @@ class GamificationToolbarReducer( } } // Click Messages - is Message.ClickedGems -> - if (state is State.Content) { - state to setOf( - Action.ViewAction.ShowProfileTab, - InternalAction.LogAnalyticEvent(GamificationToolbarClickedGemsHyperskillAnalyticEvent(screen)) - ) - } else { - null - } is Message.ClickedStreak -> if (state is State.Content) { state to setOf( @@ -147,7 +129,6 @@ class GamificationToolbarReducer( State.Content( trackProgress = gamificationToolbarData.trackProgress, currentStreak = gamificationToolbarData.currentStreak, - historicalStreak = HistoricalStreak(gamificationToolbarData.streakState), - hypercoinsBalance = gamificationToolbarData.hypercoinsBalance + historicalStreak = HistoricalStreak(gamificationToolbarData.streakState) ) } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/view/mapper/GamificationToolbarViewStateMapper.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/view/mapper/GamificationToolbarViewStateMapper.kt new file mode 100644 index 0000000000..98a6795890 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/view/mapper/GamificationToolbarViewStateMapper.kt @@ -0,0 +1,40 @@ +package org.hyperskill.app.gamification_toolbar.view.mapper + +import org.hyperskill.app.gamification_toolbar.domain.model.GamificationToolbarTrackProgress +import org.hyperskill.app.gamification_toolbar.presentation.GamificationToolbarFeature +import org.hyperskill.app.streaks.domain.model.StreakState + +internal object GamificationToolbarViewStateMapper { + fun map(state: GamificationToolbarFeature.State): GamificationToolbarFeature.ViewState = + when (state) { + GamificationToolbarFeature.State.Idle -> GamificationToolbarFeature.ViewState.Idle + GamificationToolbarFeature.State.Error -> GamificationToolbarFeature.ViewState.Error + GamificationToolbarFeature.State.Loading -> GamificationToolbarFeature.ViewState.Loading + is GamificationToolbarFeature.State.Content -> getLoadedContent(state) + } + + private fun getLoadedContent( + state: GamificationToolbarFeature.State.Content + ): GamificationToolbarFeature.ViewState.Content = + GamificationToolbarFeature.ViewState.Content( + progress = state.trackProgress?.let { getProgress(it) }, + streak = GamificationToolbarFeature.ViewState.Content.Streak( + formattedValue = state.currentStreak.toString(), + isCompleted = state.historicalStreak.isCompleted, + isRecovered = state.historicalStreak.state == StreakState.RECOVERED + ) + ) + + private fun getProgress( + trackProgress: GamificationToolbarTrackProgress + ): GamificationToolbarFeature.ViewState.Content.Progress { + val normalizedAverageProgress = trackProgress.averageProgress + .coerceAtMost(100) + .coerceAtLeast(0) + return GamificationToolbarFeature.ViewState.Content.Progress( + value = normalizedAverageProgress / 100f, + formattedValue = "$normalizedAverageProgress%", + isCompleted = trackProgress.isCompleted + ) + } +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/home/presentation/HomeFeature.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/home/presentation/HomeFeature.kt index b40a39cadd..6a85c0b192 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/home/presentation/HomeFeature.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/home/presentation/HomeFeature.kt @@ -24,7 +24,7 @@ object HomeFeature { data class ViewState( val homeState: HomeState, - val toolbarState: GamificationToolbarFeature.State, + val toolbarViewState: GamificationToolbarFeature.ViewState, val challengeWidgetViewState: ChallengeWidgetViewState, val isRefreshing: Boolean ) diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/home/view/mapper/HomeViewStateMapper.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/home/view/mapper/HomeViewStateMapper.kt index b6aad19abe..0dbb95d271 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/home/view/mapper/HomeViewStateMapper.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/home/view/mapper/HomeViewStateMapper.kt @@ -1,6 +1,7 @@ package org.hyperskill.app.home.view.mapper import org.hyperskill.app.challenges.widget.view.mapper.ChallengeWidgetViewStateMapper +import org.hyperskill.app.gamification_toolbar.view.mapper.GamificationToolbarViewStateMapper import org.hyperskill.app.home.presentation.HomeFeature internal class HomeViewStateMapper( @@ -9,7 +10,7 @@ internal class HomeViewStateMapper( fun map(state: HomeFeature.State): HomeFeature.ViewState = HomeFeature.ViewState( homeState = state.homeState, - toolbarState = state.toolbarState, + toolbarViewState = GamificationToolbarViewStateMapper.map(state.toolbarState), challengeWidgetViewState = challengeWidgetViewStateMapper.map(state.challengeWidgetState), isRefreshing = state.isRefreshing ) diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/leaderboard/screen/presentation/LeaderboardScreenFeature.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/leaderboard/screen/presentation/LeaderboardScreenFeature.kt index 630842cdf9..e1fc1a0981 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/leaderboard/screen/presentation/LeaderboardScreenFeature.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/leaderboard/screen/presentation/LeaderboardScreenFeature.kt @@ -22,7 +22,7 @@ object LeaderboardScreenFeature { data class ViewState( val currentTab: Tab, val listViewState: ListViewState, - val toolbarState: GamificationToolbarFeature.State, + val toolbarViewState: GamificationToolbarFeature.ViewState, val isRefreshing: Boolean, val updatesInText: String? ) diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/leaderboard/screen/view/mapper/LeaderboardScreenViewStateMapper.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/leaderboard/screen/view/mapper/LeaderboardScreenViewStateMapper.kt index db46da56d8..93683d3d09 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/leaderboard/screen/view/mapper/LeaderboardScreenViewStateMapper.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/leaderboard/screen/view/mapper/LeaderboardScreenViewStateMapper.kt @@ -3,6 +3,7 @@ package org.hyperskill.app.leaderboard.screen.view.mapper import org.hyperskill.app.SharedResources import org.hyperskill.app.core.view.mapper.ResourceProvider import org.hyperskill.app.core.view.mapper.date.SharedDateFormatter +import org.hyperskill.app.gamification_toolbar.view.mapper.GamificationToolbarViewStateMapper import org.hyperskill.app.leaderboard.screen.presentation.LeaderboardScreenFeature import org.hyperskill.app.leaderboard.widget.presentation.LeaderboardWidgetFeature import org.hyperskill.app.leaderboard.widget.view.mapper.LeaderboardWidgetViewStateMapper @@ -19,7 +20,7 @@ internal class LeaderboardScreenViewStateMapper( state = state.leaderboardWidgetState, currentTab = state.currentTab ), - toolbarState = state.toolbarState, + toolbarViewState = GamificationToolbarViewStateMapper.map(state.toolbarState), isRefreshing = state.isRefreshing, updatesInText = getUpdatesInText(state) ) diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/study_plan/screen/presentation/StudyPlanScreenFeature.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/study_plan/screen/presentation/StudyPlanScreenFeature.kt index 4df730de0d..59360e265c 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/study_plan/screen/presentation/StudyPlanScreenFeature.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/study_plan/screen/presentation/StudyPlanScreenFeature.kt @@ -23,7 +23,7 @@ object StudyPlanScreenFeature { data class ViewState( val trackTitle: String?, - val toolbarState: GamificationToolbarFeature.State, + val toolbarViewState: GamificationToolbarFeature.ViewState, val problemsLimitViewState: ProblemsLimitFeature.ViewState, val studyPlanWidgetViewState: StudyPlanWidgetViewState, val isRefreshing: Boolean diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/study_plan/screen/view/StudyPlanScreenViewStateMapper.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/study_plan/screen/view/StudyPlanScreenViewStateMapper.kt index 2c8e8fbd2b..7726fa2751 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/study_plan/screen/view/StudyPlanScreenViewStateMapper.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/study_plan/screen/view/StudyPlanScreenViewStateMapper.kt @@ -2,6 +2,7 @@ package org.hyperskill.app.study_plan.screen.view import org.hyperskill.app.SharedResources import org.hyperskill.app.core.view.mapper.ResourceProvider +import org.hyperskill.app.gamification_toolbar.view.mapper.GamificationToolbarViewStateMapper import org.hyperskill.app.problems_limit.view.mapper.ProblemsLimitViewStateMapper import org.hyperskill.app.study_plan.screen.presentation.StudyPlanScreenFeature import org.hyperskill.app.study_plan.widget.view.mapper.StudyPlanWidgetViewStateMapper @@ -14,7 +15,7 @@ internal class StudyPlanScreenViewStateMapper( fun map(state: StudyPlanScreenFeature.State): StudyPlanScreenFeature.ViewState = StudyPlanScreenFeature.ViewState( trackTitle = getTrackTitle(state), - toolbarState = state.toolbarState, + toolbarViewState = GamificationToolbarViewStateMapper.map(state.toolbarState), problemsLimitViewState = problemsLimitViewStateMapper.mapState(state.problemsLimitState), studyPlanWidgetViewState = studyPlanWidgetViewStateMapper.map(state.studyPlanWidgetState), isRefreshing = state.isRefreshing diff --git a/shared/src/commonMain/resources/MR/base/strings.xml b/shared/src/commonMain/resources/MR/base/strings.xml index 3ea3d76dcc..873bb79294 100644 --- a/shared/src/commonMain/resources/MR/base/strings.xml +++ b/shared/src/commonMain/resources/MR/base/strings.xml @@ -208,7 +208,6 @@ Applied core topics by completing project stages About Theory to discover next - Progress Profile From 699592dd7fba12de454f754cdc822258eb0bb24e Mon Sep 17 00:00:00 2001 From: Ivan Magda Date: Thu, 7 Dec 2023 14:50:59 +0700 Subject: [PATCH 2/6] Android: Fix build --- .../app/android/leaderboard/fragment/LeaderboardFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/leaderboard/fragment/LeaderboardFragment.kt b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/leaderboard/fragment/LeaderboardFragment.kt index ce1aa0823f..eed0b67d6a 100644 --- a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/leaderboard/fragment/LeaderboardFragment.kt +++ b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/leaderboard/fragment/LeaderboardFragment.kt @@ -82,7 +82,7 @@ class LeaderboardFragment : Fragment(R.layout.fragment_leaderboard) { } leaderboardViewModel.state .flowWithLifecycle(viewLifecycleOwner.lifecycle, Lifecycle.State.STARTED) - .map { it.toolbarState } + .map { it.toolbarViewState } .distinctUntilChanged() .onEach { viewState -> gamificationToolbarDelegate?.render(viewState) From 56eb1370efb235d0283e13ea9e67babd136b41a4 Mon Sep 17 00:00:00 2001 From: Ivan Magda Date: Mon, 11 Dec 2023 11:04:11 +0700 Subject: [PATCH 3/6] Shared: SearchResultsDataComponent (#775) ^ALTAPPS-1057 --- .../hyperskill/app/core/injection/AppGraph.kt | 2 + .../app/core/injection/BaseAppGraph.kt | 5 ++ .../repository/SearchResultsRepositoryImpl.kt | 13 ++++ .../source/SearchResultsRemoteDataSource.kt | 8 +++ .../domain/model/SearchResult.kt | 12 ++++ .../domain/model/SearchResultTargetType.kt | 12 ++++ .../repository/SearchResultsRepository.kt | 25 +++++++ .../injection/SearchResultsDataComponent.kt | 7 ++ .../SearchResultsDataComponentImpl.kt | 15 ++++ .../SearchResultsRemoteDataSourceImpl.kt | 27 +++++++ .../remote/model/SearchResultsRequest.kt | 20 ++++++ .../remote/model/SearchResultsResponse.kt | 16 +++++ .../injection/StepCompletionComponentImpl.kt | 2 +- .../StepCompletionActionDispatcher.kt | 6 +- .../data/repository/TopicsRepositoryImpl.kt | 2 +- .../domain/interactor/TopicsInteractor.kt | 14 ---- .../topics/injection/TopicsDataComponent.kt | 2 - .../injection/TopicsDataComponentImpl.kt | 6 +- .../remote/TopicsRemoteDataSourceImpl.kt | 2 +- ...earchResultsResponseDeserializationTest.kt | 72 +++++++++++++++++++ 20 files changed, 241 insertions(+), 27 deletions(-) create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search_results/data/repository/SearchResultsRepositoryImpl.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search_results/data/source/SearchResultsRemoteDataSource.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/model/SearchResult.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/model/SearchResultTargetType.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/repository/SearchResultsRepository.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search_results/injection/SearchResultsDataComponent.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search_results/injection/SearchResultsDataComponentImpl.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/SearchResultsRemoteDataSourceImpl.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/model/SearchResultsRequest.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/model/SearchResultsResponse.kt delete mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/topics/domain/interactor/TopicsInteractor.kt create mode 100644 shared/src/commonTest/kotlin/org/hyperskill/search_results/remote/model/SearchResultsResponseDeserializationTest.kt diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/AppGraph.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/AppGraph.kt index 698c3a1352..88b3fb5650 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/AppGraph.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/AppGraph.kt @@ -49,6 +49,7 @@ import org.hyperskill.app.project_selection.list.injection.ProjectSelectionListC import org.hyperskill.app.projects.injection.ProjectsDataComponent import org.hyperskill.app.providers.injection.ProvidersDataComponent import org.hyperskill.app.reactions.injection.ReactionsDataComponent +import org.hyperskill.app.search_results.injection.SearchResultsDataComponent import org.hyperskill.app.sentry.injection.SentryComponent import org.hyperskill.app.share_streak.injection.ShareStreakDataComponent import org.hyperskill.app.stage_implement.injection.StageImplementComponent @@ -161,4 +162,5 @@ interface AppGraph { fun buildLeaderboardDataComponent(): LeaderboardDataComponent fun buildLeaderboardScreenComponent(): LeaderboardScreenComponent fun buildLeaderboardWidgetComponent(): LeaderboardWidgetComponent + fun buildSearchResultsDataComponent(): SearchResultsDataComponent } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/BaseAppGraph.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/BaseAppGraph.kt index 30b9f62684..d31da6c3cd 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/BaseAppGraph.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/BaseAppGraph.kt @@ -92,6 +92,8 @@ import org.hyperskill.app.providers.injection.ProvidersDataComponent import org.hyperskill.app.providers.injection.ProvidersDataComponentImpl import org.hyperskill.app.reactions.injection.ReactionsDataComponent import org.hyperskill.app.reactions.injection.ReactionsDataComponentImpl +import org.hyperskill.app.search_results.injection.SearchResultsDataComponent +import org.hyperskill.app.search_results.injection.SearchResultsDataComponentImpl import org.hyperskill.app.share_streak.injection.ShareStreakDataComponent import org.hyperskill.app.share_streak.injection.ShareStreakDataComponentImpl import org.hyperskill.app.stage_implement.injection.StageImplementComponent @@ -436,4 +438,7 @@ abstract class BaseAppGraph : AppGraph { override fun buildLeaderboardWidgetComponent(): LeaderboardWidgetComponent = LeaderboardWidgetComponentImpl(this) + + override fun buildSearchResultsDataComponent(): SearchResultsDataComponent = + SearchResultsDataComponentImpl(this) } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/data/repository/SearchResultsRepositoryImpl.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/data/repository/SearchResultsRepositoryImpl.kt new file mode 100644 index 0000000000..5a1e22c09a --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/data/repository/SearchResultsRepositoryImpl.kt @@ -0,0 +1,13 @@ +package org.hyperskill.app.search_results.data.repository + +import org.hyperskill.app.search_results.data.source.SearchResultsRemoteDataSource +import org.hyperskill.app.search_results.domain.repository.SearchResultsRepository +import org.hyperskill.app.search_results.remote.model.SearchResultsRequest +import org.hyperskill.app.search_results.remote.model.SearchResultsResponse + +internal class SearchResultsRepositoryImpl( + private val searchResultsRemoteDataSource: SearchResultsRemoteDataSource +) : SearchResultsRepository { + override suspend fun getSearchResults(request: SearchResultsRequest): Result = + searchResultsRemoteDataSource.getSearchResults(request) +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/data/source/SearchResultsRemoteDataSource.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/data/source/SearchResultsRemoteDataSource.kt new file mode 100644 index 0000000000..36dbbf59c8 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/data/source/SearchResultsRemoteDataSource.kt @@ -0,0 +1,8 @@ +package org.hyperskill.app.search_results.data.source + +import org.hyperskill.app.search_results.remote.model.SearchResultsRequest +import org.hyperskill.app.search_results.remote.model.SearchResultsResponse + +interface SearchResultsRemoteDataSource { + suspend fun getSearchResults(request: SearchResultsRequest): Result +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/model/SearchResult.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/model/SearchResult.kt new file mode 100644 index 0000000000..5f78b4c4a5 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/model/SearchResult.kt @@ -0,0 +1,12 @@ +package org.hyperskill.app.search_results.domain.model + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class SearchResult( + @SerialName("target_type") + val targetType: SearchResultTargetType = SearchResultTargetType.UNKNOWN, + @SerialName("target_id") + val targetId: Long +) \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/model/SearchResultTargetType.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/model/SearchResultTargetType.kt new file mode 100644 index 0000000000..9b4bc539eb --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/model/SearchResultTargetType.kt @@ -0,0 +1,12 @@ +package org.hyperskill.app.search_results.domain.model + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +enum class SearchResultTargetType { + @SerialName("topic") + TOPIC, + + UNKNOWN +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/repository/SearchResultsRepository.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/repository/SearchResultsRepository.kt new file mode 100644 index 0000000000..31e9f31f3b --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/domain/repository/SearchResultsRepository.kt @@ -0,0 +1,25 @@ +package org.hyperskill.app.search_results.domain.repository + +import org.hyperskill.app.search_results.domain.model.SearchResult +import org.hyperskill.app.search_results.domain.model.SearchResultTargetType +import org.hyperskill.app.search_results.remote.model.SearchResultsRequest +import org.hyperskill.app.search_results.remote.model.SearchResultsResponse + +interface SearchResultsRepository { + suspend fun getSearchResults(request: SearchResultsRequest): Result +} + +suspend fun SearchResultsRepository.getTopicSearchResults( + query: String, + pageSize: Int = 20, + page: Int = 1 +): Result> = + getSearchResults( + SearchResultsRequest( + query = query, + pageSize = pageSize, + page = page + ) + ).map { response: SearchResultsResponse -> + response.searchResults.filter { it.targetType == SearchResultTargetType.TOPIC } + } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/injection/SearchResultsDataComponent.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/injection/SearchResultsDataComponent.kt new file mode 100644 index 0000000000..cac70b2089 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/injection/SearchResultsDataComponent.kt @@ -0,0 +1,7 @@ +package org.hyperskill.app.search_results.injection + +import org.hyperskill.app.search_results.domain.repository.SearchResultsRepository + +interface SearchResultsDataComponent { + val searchResultsRepository: SearchResultsRepository +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/injection/SearchResultsDataComponentImpl.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/injection/SearchResultsDataComponentImpl.kt new file mode 100644 index 0000000000..266aa3425b --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/injection/SearchResultsDataComponentImpl.kt @@ -0,0 +1,15 @@ +package org.hyperskill.app.search_results.injection + +import org.hyperskill.app.core.injection.AppGraph +import org.hyperskill.app.search_results.data.repository.SearchResultsRepositoryImpl +import org.hyperskill.app.search_results.data.source.SearchResultsRemoteDataSource +import org.hyperskill.app.search_results.domain.repository.SearchResultsRepository +import org.hyperskill.app.search_results.remote.SearchResultsRemoteDataSourceImpl + +internal class SearchResultsDataComponentImpl(appGraph: AppGraph) : SearchResultsDataComponent { + private val searchResultsRemoteDataSource: SearchResultsRemoteDataSource = + SearchResultsRemoteDataSourceImpl(appGraph.networkComponent.authorizedHttpClient) + + override val searchResultsRepository: SearchResultsRepository + get() = SearchResultsRepositoryImpl(searchResultsRemoteDataSource) +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/SearchResultsRemoteDataSourceImpl.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/SearchResultsRemoteDataSourceImpl.kt new file mode 100644 index 0000000000..541e677d22 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/SearchResultsRemoteDataSourceImpl.kt @@ -0,0 +1,27 @@ +package org.hyperskill.app.search_results.remote + +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.request.get +import io.ktor.client.request.parameter +import io.ktor.http.ContentType +import io.ktor.http.contentType +import org.hyperskill.app.search_results.data.source.SearchResultsRemoteDataSource +import org.hyperskill.app.search_results.remote.model.SearchResultsRequest +import org.hyperskill.app.search_results.remote.model.SearchResultsResponse + +internal class SearchResultsRemoteDataSourceImpl( + private val httpClient: HttpClient +) : SearchResultsRemoteDataSource { + override suspend fun getSearchResults(request: SearchResultsRequest): Result = + kotlin.runCatching { + httpClient + .get("/api/search-results") { + contentType(ContentType.Application.Json) + request.parameters.forEach { (key, value) -> + parameter(key, value) + } + } + .body() + } +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/model/SearchResultsRequest.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/model/SearchResultsRequest.kt new file mode 100644 index 0000000000..a428d50ac5 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/model/SearchResultsRequest.kt @@ -0,0 +1,20 @@ +package org.hyperskill.app.search_results.remote.model + +class SearchResultsRequest( + query: String, + pageSize: Int, + page: Int +) { + companion object { + private const val PARAM_QUERY = "query" + private const val PARAM_PAGE_SIZE = "page_size" + private const val PARAM_PAGE = "page" + } + + val parameters: Map = + mapOf( + PARAM_QUERY to query, + PARAM_PAGE_SIZE to pageSize, + PARAM_PAGE to page + ) +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/model/SearchResultsResponse.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/model/SearchResultsResponse.kt new file mode 100644 index 0000000000..692c2a0937 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search_results/remote/model/SearchResultsResponse.kt @@ -0,0 +1,16 @@ +package org.hyperskill.app.search_results.remote.model + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import org.hyperskill.app.core.remote.Meta +import org.hyperskill.app.core.remote.MetaResponse +import org.hyperskill.app.search_results.domain.model.SearchResult + +@Serializable +class SearchResultsResponse( + @SerialName("meta") + override val meta: Meta, + + @SerialName("search-results") + val searchResults: List +) : MetaResponse \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/injection/StepCompletionComponentImpl.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/injection/StepCompletionComponentImpl.kt index effa484b9e..74b08c63a7 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/injection/StepCompletionComponentImpl.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/injection/StepCompletionComponentImpl.kt @@ -19,7 +19,7 @@ internal class StepCompletionComponentImpl( appGraph.submissionDataComponent.submissionRepository, appGraph.buildStepDataComponent().stepInteractor, appGraph.buildProgressesDataComponent().progressesInteractor, - appGraph.buildTopicsDataComponent().topicsInteractor, + appGraph.buildTopicsDataComponent().topicsRepository, appGraph.analyticComponent.analyticInteractor, appGraph.commonComponent.resourceProvider, appGraph.sentryComponent.sentryInteractor, diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/presentation/StepCompletionActionDispatcher.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/presentation/StepCompletionActionDispatcher.kt index cfb464023a..7458abb811 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/presentation/StepCompletionActionDispatcher.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/presentation/StepCompletionActionDispatcher.kt @@ -30,7 +30,7 @@ import org.hyperskill.app.step_completion.presentation.StepCompletionFeature.Act import org.hyperskill.app.step_completion.presentation.StepCompletionFeature.Message import org.hyperskill.app.step_quiz.domain.repository.SubmissionRepository import org.hyperskill.app.streaks.domain.model.StreakState -import org.hyperskill.app.topics.domain.interactor.TopicsInteractor +import org.hyperskill.app.topics.domain.repository.TopicsRepository import ru.nobird.app.presentation.redux.dispatcher.CoroutineActionDispatcher class StepCompletionActionDispatcher( @@ -38,7 +38,7 @@ class StepCompletionActionDispatcher( submissionRepository: SubmissionRepository, private val stepInteractor: StepInteractor, private val progressesInteractor: ProgressesInteractor, - private val topicsInteractor: TopicsInteractor, + private val topicsRepository: TopicsRepository, private val analyticInteractor: AnalyticInteractor, private val resourceProvider: ResourceProvider, private val sentryInteractor: SentryInteractor, @@ -150,7 +150,7 @@ class StepCompletionActionDispatcher( coroutineScope { val topicDeferred = async { - topicsInteractor.getTopic(action.topicId) + topicsRepository.getTopic(action.topicId) } val nextLearningActivityDeferred = async { nextLearningActivityStateRepository.getState(forceUpdate = true) diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/topics/data/repository/TopicsRepositoryImpl.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/topics/data/repository/TopicsRepositoryImpl.kt index 7181d35f8a..f3e297bcce 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/topics/data/repository/TopicsRepositoryImpl.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/topics/data/repository/TopicsRepositoryImpl.kt @@ -4,7 +4,7 @@ import org.hyperskill.app.topics.data.source.TopicsRemoteDataSource import org.hyperskill.app.topics.domain.model.Topic import org.hyperskill.app.topics.domain.repository.TopicsRepository -class TopicsRepositoryImpl( +internal class TopicsRepositoryImpl( private val topicsRemoteDataSource: TopicsRemoteDataSource ) : TopicsRepository { override suspend fun getTopics(topicsIds: List): Result> = diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/topics/domain/interactor/TopicsInteractor.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/topics/domain/interactor/TopicsInteractor.kt deleted file mode 100644 index 031af89c5b..0000000000 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/topics/domain/interactor/TopicsInteractor.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.hyperskill.app.topics.domain.interactor - -import org.hyperskill.app.topics.domain.model.Topic -import org.hyperskill.app.topics.domain.repository.TopicsRepository - -class TopicsInteractor( - private val topicsRepository: TopicsRepository -) { - suspend fun getTopics(topicsIds: List): Result> = - topicsRepository.getTopics(topicsIds) - - suspend fun getTopic(topicId: Long): Result = - topicsRepository.getTopic(topicId) -} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/topics/injection/TopicsDataComponent.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/topics/injection/TopicsDataComponent.kt index 2d17ff7245..826ecc70cf 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/topics/injection/TopicsDataComponent.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/topics/injection/TopicsDataComponent.kt @@ -1,9 +1,7 @@ package org.hyperskill.app.topics.injection -import org.hyperskill.app.topics.domain.interactor.TopicsInteractor import org.hyperskill.app.topics.domain.repository.TopicsRepository interface TopicsDataComponent { val topicsRepository: TopicsRepository - val topicsInteractor: TopicsInteractor } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/topics/injection/TopicsDataComponentImpl.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/topics/injection/TopicsDataComponentImpl.kt index 08c1c310b2..78b47e19dd 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/topics/injection/TopicsDataComponentImpl.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/topics/injection/TopicsDataComponentImpl.kt @@ -3,11 +3,10 @@ package org.hyperskill.app.topics.injection import org.hyperskill.app.core.injection.AppGraph import org.hyperskill.app.topics.data.repository.TopicsRepositoryImpl import org.hyperskill.app.topics.data.source.TopicsRemoteDataSource -import org.hyperskill.app.topics.domain.interactor.TopicsInteractor import org.hyperskill.app.topics.domain.repository.TopicsRepository import org.hyperskill.app.topics.remote.TopicsRemoteDataSourceImpl -class TopicsDataComponentImpl( +internal class TopicsDataComponentImpl( appGraph: AppGraph ) : TopicsDataComponent { private val topicsRemoteDataSource: TopicsRemoteDataSource = @@ -15,7 +14,4 @@ class TopicsDataComponentImpl( override val topicsRepository: TopicsRepository get() = TopicsRepositoryImpl(topicsRemoteDataSource) - - override val topicsInteractor: TopicsInteractor - get() = TopicsInteractor(topicsRepository) } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/topics/remote/TopicsRemoteDataSourceImpl.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/topics/remote/TopicsRemoteDataSourceImpl.kt index 9582790ba4..ef89fca675 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/topics/remote/TopicsRemoteDataSourceImpl.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/topics/remote/TopicsRemoteDataSourceImpl.kt @@ -10,7 +10,7 @@ import org.hyperskill.app.topics.data.source.TopicsRemoteDataSource import org.hyperskill.app.topics.domain.model.Topic import org.hyperskill.app.topics.remote.model.TopicsResponse -class TopicsRemoteDataSourceImpl( +internal class TopicsRemoteDataSourceImpl( private val httpClient: HttpClient ) : TopicsRemoteDataSource { override suspend fun getTopics(topicsIds: List): Result> = diff --git a/shared/src/commonTest/kotlin/org/hyperskill/search_results/remote/model/SearchResultsResponseDeserializationTest.kt b/shared/src/commonTest/kotlin/org/hyperskill/search_results/remote/model/SearchResultsResponseDeserializationTest.kt new file mode 100644 index 0000000000..33fe041057 --- /dev/null +++ b/shared/src/commonTest/kotlin/org/hyperskill/search_results/remote/model/SearchResultsResponseDeserializationTest.kt @@ -0,0 +1,72 @@ +package org.hyperskill.search_results.remote.model + +import kotlin.test.Test +import kotlin.test.assertEquals +import org.hyperskill.app.core.remote.Meta +import org.hyperskill.app.network.injection.NetworkModule +import org.hyperskill.app.search_results.domain.model.SearchResult +import org.hyperskill.app.search_results.domain.model.SearchResultTargetType +import org.hyperskill.app.search_results.remote.model.SearchResultsResponse + +class SearchResultsResponseDeserializationTest { + companion object { + private val TEST_JSON_STRING = """ +{ + "meta": { + "page": 1, + "has_next": true, + "has_previous": false + }, + "search-results": [ + { + "target_type": "topic", + "target_id": 22, + "position": 1, + "score": 79.00877 + }, + { + "target_type": "topic", + "target_id": 488, + "position": 2, + "score": 77.70255 + }, + { + "target_type": "project", + "target_id": 353, + "position": 54, + "score": 39.685966 + } + ] +} + """.trimIndent() + } + + @Test + fun `Test SearchResultsResponse deserialization`() { + val json = NetworkModule.provideJson() + val expected = SearchResultsResponse( + meta = Meta( + page = 1, + hasNext = true, + hasPrevious = false + ), + searchResults = listOf( + SearchResult( + targetType = SearchResultTargetType.TOPIC, + targetId = 22 + ), + SearchResult( + targetType = SearchResultTargetType.TOPIC, + targetId = 488 + ), + SearchResult( + targetType = SearchResultTargetType.UNKNOWN, + targetId = 353 + ) + ) + ) + val decodedObject = json.decodeFromString(SearchResultsResponse.serializer(), TEST_JSON_STRING) + assertEquals(expected.meta, decodedObject.meta) + assertEquals(expected.searchResults, decodedObject.searchResults) + } +} \ No newline at end of file From e82919692015d9811749b7657a87255185d2ad26 Mon Sep 17 00:00:00 2001 From: Ivan Magda Date: Wed, 13 Dec 2023 10:03:51 +0700 Subject: [PATCH 4/6] Shared: search feature (#780) ^ALTAPPS-1057 --- .../delegate/GamificationToolbarDelegate.kt | 3 + ...GamificationToolbarViewActionHandler.swift | 2 + .../step_quiz/AndroidStepQuizTest.kt | 3 + .../hyperskill/HyperskillAnalyticPart.kt | 4 +- .../hyperskill/HyperskillAnalyticRoute.kt | 5 + .../hyperskill/HyperskillAnalyticTarget.kt | 5 +- .../hyperskill/app/core/injection/AppGraph.kt | 2 + .../app/core/injection/BaseAppGraph.kt | 5 + ...rClickedProgressHyperskillAnalyticEvent.kt | 4 +- ...barClickedSearchHyperskillAnalyticEvent.kt | 34 +++++ ...barClickedStreakHyperskillAnalyticEvent.kt | 6 +- .../domain/model/GamificationToolbarScreen.kt | 3 - .../GamificationToolbarFeature.kt | 2 + .../GamificationToolbarReducer.kt | 12 ++ .../domain/analytic/SearchAnalyticParams.kt | 6 + ...earchClickedItemHyperskillAnalyticEvent.kt | 48 ++++++ ...ickedRetrySearchHyperskillAnalyticEvent.kt | 29 ++++ ...rchClickedSearchHyperskillAnalyticEvent.kt | 42 ++++++ .../SearchViewedHyperskillAnalyticEvent.kt | 23 +++ .../domain/interactor/SearchInteractor.kt | 30 ++++ .../app/search/injection/SearchComponent.kt | 8 + .../search/injection/SearchComponentImpl.kt | 24 +++ .../search/injection/SearchFeatureBuilder.kt | 49 ++++++ .../presentation/SearchActionDispatcher.kt | 81 ++++++++++ .../app/search/presentation/SearchFeature.kt | 74 +++++++++ .../app/search/presentation/SearchReducer.kt | 140 ++++++++++++++++++ .../view/mapper/SearchViewStateMapper.kt | 34 +++++ .../HyperskillSentryTransactionBuilder.kt | 15 +- .../app/step/domain/model/StepRoute.kt | 3 + .../app/step/presentation/StepReducer.kt | 12 +- .../presentation/StepCompletionFeature.kt | 1 + .../step_quiz/presentation/StepQuizReducer.kt | 1 + .../presentation/StepQuizResolver.kt | 1 + .../commonMain/resources/MR/base/strings.xml | 9 ++ 34 files changed, 703 insertions(+), 17 deletions(-) create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedSearchHyperskillAnalyticEvent.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchAnalyticParams.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedItemHyperskillAnalyticEvent.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedRetrySearchHyperskillAnalyticEvent.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedSearchHyperskillAnalyticEvent.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchViewedHyperskillAnalyticEvent.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/interactor/SearchInteractor.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchComponent.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchComponentImpl.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchFeatureBuilder.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchActionDispatcher.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchFeature.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchReducer.kt create mode 100644 shared/src/commonMain/kotlin/org/hyperskill/app/search/view/mapper/SearchViewStateMapper.kt diff --git a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/ui/delegate/GamificationToolbarDelegate.kt b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/ui/delegate/GamificationToolbarDelegate.kt index 4c95216604..c4dc79a9f4 100644 --- a/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/ui/delegate/GamificationToolbarDelegate.kt +++ b/androidHyperskillApp/src/main/java/org/hyperskill/app/android/gamification_toolbar/view/ui/delegate/GamificationToolbarDelegate.kt @@ -81,6 +81,9 @@ class GamificationToolbarDelegate( mainScreenRouter.switch(Tabs.PROFILE) GamificationToolbarFeature.Action.ViewAction.ShowProgressScreen -> router.navigateTo(ProgressScreen) + GamificationToolbarFeature.Action.ViewAction.ShowSearchScreen -> { + // TODO: ALTAPPS-1059 Show search screen + } } } diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/GamificationToolbarViewActionHandler.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/GamificationToolbarViewActionHandler.swift index 710bdca340..0bb56cc16e 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/GamificationToolbarViewActionHandler.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/GamificationToolbarViewActionHandler.swift @@ -12,6 +12,8 @@ enum GamificationToolbarViewActionHandler { case .showProgressScreen: let assembly = ProgressScreenAssembly() stackRouter.pushViewController(assembly.makeModule()) + case .showSearchScreen: + #warning("TODO: ALTAPPS-1058 show search screen") } } } diff --git a/shared/src/androidUnitTest/kotlin/org/hyperskill/step_quiz/AndroidStepQuizTest.kt b/shared/src/androidUnitTest/kotlin/org/hyperskill/step_quiz/AndroidStepQuizTest.kt index 8ba140613d..0be8377762 100644 --- a/shared/src/androidUnitTest/kotlin/org/hyperskill/step_quiz/AndroidStepQuizTest.kt +++ b/shared/src/androidUnitTest/kotlin/org/hyperskill/step_quiz/AndroidStepQuizTest.kt @@ -33,6 +33,7 @@ class AndroidStepQuizTest { isTheoryAvailable = when (concreteStepRouteClass) { StepRoute.Learn.Step::class -> true StepRoute.Learn.TheoryOpenedFromPractice::class -> false + StepRoute.Learn.TheoryOpenedFromSearch::class -> false StepRoute.LearnDaily::class -> false StepRoute.Repeat.Practice::class -> true StepRoute.Repeat.Theory::class -> false @@ -49,6 +50,8 @@ class AndroidStepQuizTest { StepRoute.Learn.Step::class -> StepRoute.Learn.Step(step.id) StepRoute.Learn.TheoryOpenedFromPractice::class -> StepRoute.Learn.TheoryOpenedFromPractice(step.id) + StepRoute.Learn.TheoryOpenedFromSearch::class -> + StepRoute.Learn.TheoryOpenedFromSearch(step.id) StepRoute.LearnDaily::class -> StepRoute.LearnDaily(step.id) StepRoute.Repeat.Practice::class -> StepRoute.Repeat.Practice(step.id) StepRoute.Repeat.Theory::class -> StepRoute.Repeat.Theory(step.id) diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticPart.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticPart.kt index e2d3027878..196f36e078 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticPart.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticPart.kt @@ -35,10 +35,10 @@ enum class HyperskillAnalyticPart(val partName: String) { STREAK_RECOVERY_MODAL("streak_recovery_modal"), STAGE_COMPLETED_MODAL("stage_completed_modal"), PROJECT_COMPLETED_MODAL("project_completed_modal"), - NEXT_LEARNING_ACTIVITY_WIDGET("next_learning_activity_widget"), FULL_SCREEN_CODE_EDITOR("full_screen_code_editor"), CODE_EDITOR("code_editor"), SHARE_STREAK_MODAL("share_streak_modal"), LEADERBOARD_DAY_TAB("leaderboard_day_tab"), - LEADERBOARD_WEEK_TAB("leaderboard_week_tab") + LEADERBOARD_WEEK_TAB("leaderboard_week_tab"), + SEARCH_RESULTS("search_results") } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticRoute.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticRoute.kt index 8f9017c368..348123385b 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticRoute.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticRoute.kt @@ -126,4 +126,9 @@ sealed class HyperskillAnalyticRoute { override val path: String = "/progress" } + + class Search : HyperskillAnalyticRoute() { + override val path: String = + "/search" + } } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticTarget.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticTarget.kt index f715c90a24..91c8c45942 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticTarget.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/analytic/domain/model/hyperskill/HyperskillAnalyticTarget.kt @@ -36,7 +36,6 @@ enum class HyperskillAnalyticTarget(val targetName: String) { DAILY_STUDY_REMINDS_TIME("daily_study_reminds_time"), DAILY_NOTIFICATIONS_NOTICE("daily_notifications_notice"), DAILY_NOTIFICATION("daily_notification"), - CONTINUE_TO_HYPERSKILL("continue_to_hyperskill"), CONTINUE("continue"), RELOAD("reload"), DEADLINE_RELOAD("deadline_reload"), @@ -69,6 +68,7 @@ enum class HyperskillAnalyticTarget(val targetName: String) { CLOSE("close"), STREAK("streak"), PROGRESS("progress"), + SEARCH("search"), GET_STREAK_FREEZE("get_streak_freeze"), STREAK_FREEZE_ICON("streak_freeze_icon"), STREAK_FREEZE_MODAL("streak_freeze_modal"), @@ -107,5 +107,6 @@ enum class HyperskillAnalyticTarget(val targetName: String) { COLLECT_REWARD("collect_reward"), DAY("day"), WEEK("week"), - LEADERBOARD_ITEM("leaderboard_item") + LEADERBOARD_ITEM("leaderboard_item"), + TOPIC("topic") } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/AppGraph.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/AppGraph.kt index 88b3fb5650..dc450e29cf 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/AppGraph.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/AppGraph.kt @@ -49,6 +49,7 @@ import org.hyperskill.app.project_selection.list.injection.ProjectSelectionListC import org.hyperskill.app.projects.injection.ProjectsDataComponent import org.hyperskill.app.providers.injection.ProvidersDataComponent import org.hyperskill.app.reactions.injection.ReactionsDataComponent +import org.hyperskill.app.search.injection.SearchComponent import org.hyperskill.app.search_results.injection.SearchResultsDataComponent import org.hyperskill.app.sentry.injection.SentryComponent import org.hyperskill.app.share_streak.injection.ShareStreakDataComponent @@ -163,4 +164,5 @@ interface AppGraph { fun buildLeaderboardScreenComponent(): LeaderboardScreenComponent fun buildLeaderboardWidgetComponent(): LeaderboardWidgetComponent fun buildSearchResultsDataComponent(): SearchResultsDataComponent + fun buildSearchComponent(): SearchComponent } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/BaseAppGraph.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/BaseAppGraph.kt index d31da6c3cd..47efb9b04d 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/BaseAppGraph.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/core/injection/BaseAppGraph.kt @@ -92,6 +92,8 @@ import org.hyperskill.app.providers.injection.ProvidersDataComponent import org.hyperskill.app.providers.injection.ProvidersDataComponentImpl import org.hyperskill.app.reactions.injection.ReactionsDataComponent import org.hyperskill.app.reactions.injection.ReactionsDataComponentImpl +import org.hyperskill.app.search.injection.SearchComponent +import org.hyperskill.app.search.injection.SearchComponentImpl import org.hyperskill.app.search_results.injection.SearchResultsDataComponent import org.hyperskill.app.search_results.injection.SearchResultsDataComponentImpl import org.hyperskill.app.share_streak.injection.ShareStreakDataComponent @@ -441,4 +443,7 @@ abstract class BaseAppGraph : AppGraph { override fun buildSearchResultsDataComponent(): SearchResultsDataComponent = SearchResultsDataComponentImpl(this) + + override fun buildSearchComponent(): SearchComponent = + SearchComponentImpl(this) } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedProgressHyperskillAnalyticEvent.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedProgressHyperskillAnalyticEvent.kt index 5e41200a3c..cae7420878 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedProgressHyperskillAnalyticEvent.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedProgressHyperskillAnalyticEvent.kt @@ -12,10 +12,10 @@ import org.hyperskill.app.gamification_toolbar.domain.model.GamificationToolbarS * JSON payload: * ``` * { - * "route": "/track | /home", + * "route": "/home | /study-plan | /leaderboard", * "action": "click", * "part": "head", - * "target": "streak" + * "target": "progress" * } * ``` * diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedSearchHyperskillAnalyticEvent.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedSearchHyperskillAnalyticEvent.kt new file mode 100644 index 0000000000..9c92031ca8 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedSearchHyperskillAnalyticEvent.kt @@ -0,0 +1,34 @@ +package org.hyperskill.app.gamification_toolbar.domain.analytic + +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticAction +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticEvent +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticPart +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticTarget +import org.hyperskill.app.gamification_toolbar.domain.model.GamificationToolbarScreen + +/** + * Represents a click on the search navigation bar button item analytic event. + * + * JSON payload: + * ``` + * { + * "route": "/home | /study-plan | /leaderboard", + * "action": "click", + * "part": "head", + * "target": "search" + * } + * ``` + * + * @constructor Creates a new instance of [GamificationToolbarClickedSearchHyperskillAnalyticEvent]. + * @param screen The screen where the event was triggered. + * + * @see HyperskillAnalyticEvent + */ +class GamificationToolbarClickedSearchHyperskillAnalyticEvent( + screen: GamificationToolbarScreen +) : HyperskillAnalyticEvent( + screen.analyticRoute, + HyperskillAnalyticAction.CLICK, + HyperskillAnalyticPart.HEAD, + HyperskillAnalyticTarget.SEARCH +) \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedStreakHyperskillAnalyticEvent.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedStreakHyperskillAnalyticEvent.kt index 58256bf52e..9fa9864fc4 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedStreakHyperskillAnalyticEvent.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/analytic/GamificationToolbarClickedStreakHyperskillAnalyticEvent.kt @@ -12,12 +12,16 @@ import org.hyperskill.app.gamification_toolbar.domain.model.GamificationToolbarS * JSON payload: * ``` * { - * "route": "/track | /home", + * "route": "/home | /study-plan | /leaderboard", * "action": "click", * "part": "head", * "target": "streak" * } * ``` + * + * @constructor Creates a new instance of [GamificationToolbarClickedStreakHyperskillAnalyticEvent]. + * @param screen The screen where the event was triggered. + * * @see HyperskillAnalyticEvent */ class GamificationToolbarClickedStreakHyperskillAnalyticEvent( diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/model/GamificationToolbarScreen.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/model/GamificationToolbarScreen.kt index d0df9ea506..6b55d0a334 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/model/GamificationToolbarScreen.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/domain/model/GamificationToolbarScreen.kt @@ -6,14 +6,12 @@ import org.hyperskill.app.sentry.domain.model.transaction.HyperskillSentryTransa enum class GamificationToolbarScreen { HOME, - TRACK, STUDY_PLAN, LEADERBOARD; internal val analyticRoute: HyperskillAnalyticRoute get() = when (this) { HOME -> HyperskillAnalyticRoute.Home() - TRACK -> HyperskillAnalyticRoute.Track() STUDY_PLAN -> HyperskillAnalyticRoute.StudyPlan() LEADERBOARD -> HyperskillAnalyticRoute.Leaderboard() } @@ -21,7 +19,6 @@ enum class GamificationToolbarScreen { internal val fetchContentSentryTransaction: HyperskillSentryTransaction get() = when (this) { HOME -> HyperskillSentryTransactionBuilder.buildGamificationToolbarHomeScreenRemoteDataLoading() - TRACK -> HyperskillSentryTransactionBuilder.buildGamificationToolbarTrackScreenRemoteDataLoading() STUDY_PLAN -> HyperskillSentryTransactionBuilder.buildGamificationToolbarStudyPlanScreenRemoteDataLoading() LEADERBOARD -> HyperskillSentryTransactionBuilder.buildGamificationToolbarLeaderboardScreenRemoteDataLoading() diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarFeature.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarFeature.kt index 4fd5f5e927..4f877d0653 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarFeature.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarFeature.kt @@ -49,6 +49,7 @@ object GamificationToolbarFeature { sealed interface Message { object ClickedStreak : Message object ClickedProgress : Message + object ClickedSearch : Message } internal sealed interface InternalMessage : Message { @@ -79,6 +80,7 @@ object GamificationToolbarFeature { sealed interface ViewAction : Action { object ShowProfileTab : ViewAction object ShowProgressScreen : ViewAction + object ShowSearchScreen : ViewAction } } diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarReducer.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarReducer.kt index edb7651908..63ecf55431 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarReducer.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/gamification_toolbar/presentation/GamificationToolbarReducer.kt @@ -1,6 +1,7 @@ package org.hyperskill.app.gamification_toolbar.presentation import org.hyperskill.app.gamification_toolbar.domain.analytic.GamificationToolbarClickedProgressHyperskillAnalyticEvent +import org.hyperskill.app.gamification_toolbar.domain.analytic.GamificationToolbarClickedSearchHyperskillAnalyticEvent import org.hyperskill.app.gamification_toolbar.domain.analytic.GamificationToolbarClickedStreakHyperskillAnalyticEvent import org.hyperskill.app.gamification_toolbar.domain.model.GamificationToolbarData import org.hyperskill.app.gamification_toolbar.domain.model.GamificationToolbarScreen @@ -123,6 +124,17 @@ class GamificationToolbarReducer( } else { null } + is Message.ClickedSearch -> + if (state is State.Content) { + state to setOf( + Action.ViewAction.ShowSearchScreen, + InternalAction.LogAnalyticEvent( + GamificationToolbarClickedSearchHyperskillAnalyticEvent(screen) + ) + ) + } else { + null + } } ?: (state to emptySet()) private fun createContentState(gamificationToolbarData: GamificationToolbarData): State.Content = diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchAnalyticParams.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchAnalyticParams.kt new file mode 100644 index 0000000000..2a457db3d0 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchAnalyticParams.kt @@ -0,0 +1,6 @@ +package org.hyperskill.app.search.domain.analytic + +internal object SearchAnalyticParams { + const val PARAM_QUERY = "query" + const val PARAM_TOPIC_ID = "topic_id" +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedItemHyperskillAnalyticEvent.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedItemHyperskillAnalyticEvent.kt new file mode 100644 index 0000000000..eba8b554fb --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedItemHyperskillAnalyticEvent.kt @@ -0,0 +1,48 @@ +package org.hyperskill.app.search.domain.analytic + +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticAction +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticEvent +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticPart +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticRoute +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticTarget + +/** + * Represents a click analytic event on the search results item. + * + * JSON payload: + * ``` + * { + * "route": "/search", + * "action": "click", + * "part": "search_results", + * "target": "topic", + * "context": + * { + * "query": "test", + * "topic_id": 1 + * } + * } + * ``` + * + * @property query a search query. + * @property topicId target topic id. + * + * @see HyperskillAnalyticEvent + */ +class SearchClickedItemHyperskillAnalyticEvent( + private val query: String, + private val topicId: Long +) : HyperskillAnalyticEvent( + HyperskillAnalyticRoute.Search(), + HyperskillAnalyticAction.CLICK, + HyperskillAnalyticPart.SEARCH_RESULTS, + HyperskillAnalyticTarget.TOPIC +) { + override val params: Map + get() = super.params + mapOf( + PARAM_CONTEXT to mapOf( + SearchAnalyticParams.PARAM_QUERY to query, + SearchAnalyticParams.PARAM_TOPIC_ID to topicId + ) + ) +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedRetrySearchHyperskillAnalyticEvent.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedRetrySearchHyperskillAnalyticEvent.kt new file mode 100644 index 0000000000..6f3a1ae7b8 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedRetrySearchHyperskillAnalyticEvent.kt @@ -0,0 +1,29 @@ +package org.hyperskill.app.search.domain.analytic + +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticAction +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticEvent +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticPart +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticRoute +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticTarget + +/** + * Represents a click analytic event of the error state placeholder retry button. + * + * JSON payload: + * ``` + * { + * "route": "/search", + * "action": "click", + * "part": "main", + * "target": "retry" + * } + * ``` + * + * @see HyperskillAnalyticEvent + */ +object SearchClickedRetrySearchHyperskillAnalyticEvent : HyperskillAnalyticEvent( + HyperskillAnalyticRoute.Search(), + HyperskillAnalyticAction.CLICK, + HyperskillAnalyticPart.MAIN, + HyperskillAnalyticTarget.RETRY +) \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedSearchHyperskillAnalyticEvent.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedSearchHyperskillAnalyticEvent.kt new file mode 100644 index 0000000000..2988057f5a --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchClickedSearchHyperskillAnalyticEvent.kt @@ -0,0 +1,42 @@ +package org.hyperskill.app.search.domain.analytic + +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticAction +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticEvent +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticPart +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticRoute +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticTarget + +/** + * Represents a click analytic event on the "Search" button. + * + * JSON payload: + * ``` + * { + * "route": "/search", + * "action": "click", + * "part": "main", + * "target": "search", + * "context": + * { + * "query": "test" + * } + * } + * ``` + * + * @property query a search query. + * + * @see HyperskillAnalyticEvent + */ +class SearchClickedSearchHyperskillAnalyticEvent( + private val query: String +) : HyperskillAnalyticEvent( + HyperskillAnalyticRoute.Search(), + HyperskillAnalyticAction.CLICK, + HyperskillAnalyticPart.MAIN, + HyperskillAnalyticTarget.SEARCH +) { + override val params: Map + get() = super.params + mapOf( + PARAM_CONTEXT to mapOf(SearchAnalyticParams.PARAM_QUERY to query) + ) +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchViewedHyperskillAnalyticEvent.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchViewedHyperskillAnalyticEvent.kt new file mode 100644 index 0000000000..7128c34849 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/analytic/SearchViewedHyperskillAnalyticEvent.kt @@ -0,0 +1,23 @@ +package org.hyperskill.app.search.domain.analytic + +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticAction +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticEvent +import org.hyperskill.app.analytic.domain.model.hyperskill.HyperskillAnalyticRoute + +/** + * Represents a view analytic event. + * + * JSON payload: + * ``` + * { + * "route": "/search", + * "action": "view" + * } + * ``` + * + * @see HyperskillAnalyticEvent + */ +object SearchViewedHyperskillAnalyticEvent : HyperskillAnalyticEvent( + route = HyperskillAnalyticRoute.Search(), + action = HyperskillAnalyticAction.VIEW +) \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/interactor/SearchInteractor.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/interactor/SearchInteractor.kt new file mode 100644 index 0000000000..819ab5e10d --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/domain/interactor/SearchInteractor.kt @@ -0,0 +1,30 @@ +package org.hyperskill.app.search.domain.interactor + +import org.hyperskill.app.search_results.domain.repository.SearchResultsRepository +import org.hyperskill.app.search_results.domain.repository.getTopicSearchResults +import org.hyperskill.app.topics.domain.model.Topic +import org.hyperskill.app.topics.domain.repository.TopicsRepository + +internal class SearchInteractor( + private val searchResultsRepository: SearchResultsRepository, + private val topicsRepository: TopicsRepository +) { + suspend fun searchTopics( + query: String, + pageSize: Int = 20, + page: Int = 1 + ): Result> = + searchResultsRepository + .getTopicSearchResults(query = query, pageSize = pageSize, page = page) + .map { searchResults -> + searchResults.map { it.targetId } + } + .fold( + onSuccess = { topicsIds -> + topicsRepository.getTopics(topicsIds) + }, + onFailure = { error -> + Result.failure(error) + } + ) +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchComponent.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchComponent.kt new file mode 100644 index 0000000000..cd4593de6b --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchComponent.kt @@ -0,0 +1,8 @@ +package org.hyperskill.app.search.injection + +import org.hyperskill.app.search.presentation.SearchFeature +import ru.nobird.app.presentation.redux.feature.Feature + +interface SearchComponent { + val searchFeature: Feature +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchComponentImpl.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchComponentImpl.kt new file mode 100644 index 0000000000..0c05be017f --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchComponentImpl.kt @@ -0,0 +1,24 @@ +package org.hyperskill.app.search.injection + +import org.hyperskill.app.core.injection.AppGraph +import org.hyperskill.app.search.domain.interactor.SearchInteractor +import org.hyperskill.app.search.presentation.SearchFeature +import ru.nobird.app.presentation.redux.feature.Feature + +internal class SearchComponentImpl(private val appGraph: AppGraph) : SearchComponent { + private val searchInteractor: SearchInteractor = + SearchInteractor( + searchResultsRepository = appGraph.buildSearchResultsDataComponent().searchResultsRepository, + topicsRepository = appGraph.buildTopicsDataComponent().topicsRepository + ) + + override val searchFeature: Feature + get() = SearchFeatureBuilder.build( + searchInteractor = searchInteractor, + sentryInteractor = appGraph.sentryComponent.sentryInteractor, + analyticInteractor = appGraph.analyticComponent.analyticInteractor, + resourceProvider = appGraph.commonComponent.resourceProvider, + logger = appGraph.loggerComponent.logger, + buildVariant = appGraph.commonComponent.buildKonfig.buildVariant, + ) +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchFeatureBuilder.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchFeatureBuilder.kt new file mode 100644 index 0000000000..76e5cef186 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/injection/SearchFeatureBuilder.kt @@ -0,0 +1,49 @@ +package org.hyperskill.app.search.injection + +import co.touchlab.kermit.Logger +import org.hyperskill.app.analytic.domain.interactor.AnalyticInteractor +import org.hyperskill.app.core.domain.BuildVariant +import org.hyperskill.app.core.presentation.ActionDispatcherOptions +import org.hyperskill.app.core.presentation.transformState +import org.hyperskill.app.core.view.mapper.ResourceProvider +import org.hyperskill.app.logging.presentation.wrapWithLogger +import org.hyperskill.app.search.domain.interactor.SearchInteractor +import org.hyperskill.app.search.presentation.SearchActionDispatcher +import org.hyperskill.app.search.presentation.SearchFeature +import org.hyperskill.app.search.presentation.SearchReducer +import org.hyperskill.app.search.view.mapper.SearchViewStateMapper +import org.hyperskill.app.sentry.domain.interactor.SentryInteractor +import ru.nobird.app.presentation.redux.dispatcher.wrapWithActionDispatcher +import ru.nobird.app.presentation.redux.feature.Feature +import ru.nobird.app.presentation.redux.feature.ReduxFeature + +internal object SearchFeatureBuilder { + private const val LOG_TAG = "SearchFeature" + + fun build( + searchInteractor: SearchInteractor, + sentryInteractor: SentryInteractor, + analyticInteractor: AnalyticInteractor, + resourceProvider: ResourceProvider, + logger: Logger, + buildVariant: BuildVariant, + ): Feature { + val searchReducer = SearchReducer( + resourceProvider = resourceProvider + ).wrapWithLogger(buildVariant, logger, LOG_TAG) + + val searchActionDispatcher = SearchActionDispatcher( + config = ActionDispatcherOptions(), + searchInteractor = searchInteractor, + sentryInteractor = sentryInteractor, + analyticInteractor = analyticInteractor + ) + + return ReduxFeature( + initialState = SearchFeature.initialState(), + reducer = searchReducer + ) + .transformState(SearchViewStateMapper::map) + .wrapWithActionDispatcher(searchActionDispatcher) + } +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchActionDispatcher.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchActionDispatcher.kt new file mode 100644 index 0000000000..2c1229f07c --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchActionDispatcher.kt @@ -0,0 +1,81 @@ +package org.hyperskill.app.search.presentation + +import kotlin.time.DurationUnit +import kotlin.time.toDuration +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import org.hyperskill.app.analytic.domain.interactor.AnalyticInteractor +import org.hyperskill.app.core.presentation.ActionDispatcherOptions +import org.hyperskill.app.search.domain.interactor.SearchInteractor +import org.hyperskill.app.search.presentation.SearchFeature.Action +import org.hyperskill.app.search.presentation.SearchFeature.InternalAction +import org.hyperskill.app.search.presentation.SearchFeature.InternalMessage +import org.hyperskill.app.search.presentation.SearchFeature.Message +import org.hyperskill.app.sentry.domain.interactor.SentryInteractor +import org.hyperskill.app.sentry.domain.model.transaction.HyperskillSentryTransactionBuilder +import org.hyperskill.app.sentry.domain.withTransaction +import ru.nobird.app.presentation.redux.dispatcher.CoroutineActionDispatcher + +internal class SearchActionDispatcher( + config: ActionDispatcherOptions, + private val searchInteractor: SearchInteractor, + private val sentryInteractor: SentryInteractor, + private val analyticInteractor: AnalyticInteractor +) : CoroutineActionDispatcher(config.createConfig()) { + private var searchJob: Job? = null + + companion object { + private val SEARCH_DELAY = 500.toDuration(DurationUnit.MILLISECONDS) + } + + override suspend fun doSuspendableAction(action: Action) { + when (action) { + is InternalAction.PerformSearch -> { + handlePerformSearchAction(action, ::onNewMessage) + } + InternalAction.CancelSearch -> { + cancelSearchJob() + } + is InternalAction.LogAnalyticEvent -> { + analyticInteractor.logEvent(action.analyticEvent) + } + else -> { + // no op + } + } + } + + private suspend fun handlePerformSearchAction( + action: InternalAction.PerformSearch, + onNewMessage: (Message) -> Unit + ) { + suspend fun search() { + sentryInteractor.withTransaction( + HyperskillSentryTransactionBuilder.buildSearchFeaturePerformSearch(), + onError = { InternalMessage.PerformSearchError(it) } + ) { + val topics = searchInteractor + .searchTopics(query = action.query) + .getOrThrow() + InternalMessage.PerformSearchSuccess(topics) + }.let(onNewMessage) + } + + cancelSearchJob() + + if (action.withDelay) { + searchJob = actionScope.launch { + delay(SEARCH_DELAY) + search() + } + } else { + search() + } + } + + private fun cancelSearchJob() { + searchJob?.cancel() + searchJob = null + } +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchFeature.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchFeature.kt new file mode 100644 index 0000000000..f08065ceb2 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchFeature.kt @@ -0,0 +1,74 @@ +package org.hyperskill.app.search.presentation + +import org.hyperskill.app.analytic.domain.model.AnalyticEvent +import org.hyperskill.app.step.domain.model.StepRoute +import org.hyperskill.app.topics.domain.model.Topic +import ru.nobird.app.core.model.Identifiable + +object SearchFeature { + internal data class State( + val query: String, + val searchResultsState: SearchResultsState + ) + + internal sealed interface SearchResultsState { + object Idle : SearchResultsState + object Loading : SearchResultsState + object Error : SearchResultsState + data class Content(val topics: List) : SearchResultsState + } + + data class ViewState( + val query: String, + val searchResultsViewState: SearchResultsViewState + ) + + sealed interface SearchResultsViewState { + object Idle : SearchResultsViewState + object Loading : SearchResultsViewState + object Error : SearchResultsViewState + object Empty : SearchResultsViewState + data class Content(val searchResults: List) : SearchResultsViewState { + data class Item( + override val id: Long, + val title: String + ) : Identifiable + } + } + + internal fun initialState(): State = + State( + query = "", + searchResultsState = SearchResultsState.Idle + ) + + sealed interface Message { + data class QueryChanged(val query: String) : Message + + object SearchClicked : Message + object RetrySearchClicked : Message + + data class SearchResultsItemClicked(val id: Long) : Message + + object ViewedEventMessage : Message + } + + internal sealed interface InternalMessage : Message { + data class PerformSearchError(val error: Throwable) : InternalMessage + data class PerformSearchSuccess(val topics: List) : InternalMessage + } + + sealed interface Action { + sealed interface ViewAction : Action { + data class OpenStepScreen(val stepRoute: StepRoute) : ViewAction + data class OpenStepScreenFailed(val message: String) : ViewAction + } + } + + internal sealed interface InternalAction : Action { + data class PerformSearch(val query: String, val withDelay: Boolean) : InternalAction + object CancelSearch : InternalAction + + data class LogAnalyticEvent(val analyticEvent: AnalyticEvent) : InternalAction + } +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchReducer.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchReducer.kt new file mode 100644 index 0000000000..5bfe3a51e3 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/presentation/SearchReducer.kt @@ -0,0 +1,140 @@ +package org.hyperskill.app.search.presentation + +import kotlinx.coroutines.CancellationException +import org.hyperskill.app.SharedResources +import org.hyperskill.app.core.view.mapper.ResourceProvider +import org.hyperskill.app.search.domain.analytic.SearchClickedItemHyperskillAnalyticEvent +import org.hyperskill.app.search.domain.analytic.SearchClickedRetrySearchHyperskillAnalyticEvent +import org.hyperskill.app.search.domain.analytic.SearchClickedSearchHyperskillAnalyticEvent +import org.hyperskill.app.search.domain.analytic.SearchViewedHyperskillAnalyticEvent +import org.hyperskill.app.search.presentation.SearchFeature.Action +import org.hyperskill.app.search.presentation.SearchFeature.InternalAction +import org.hyperskill.app.search.presentation.SearchFeature.InternalMessage +import org.hyperskill.app.search.presentation.SearchFeature.Message +import org.hyperskill.app.search.presentation.SearchFeature.State +import org.hyperskill.app.step.domain.model.StepRoute +import ru.nobird.app.presentation.redux.reducer.StateReducer + +private typealias SearchReducerResult = Pair> + +internal class SearchReducer( + private val resourceProvider: ResourceProvider +) : StateReducer { + override fun reduce(state: State, message: Message): SearchReducerResult = + when (message) { + is Message.QueryChanged -> { + handleQueryChangedMessage(state, message) + } + Message.SearchClicked -> { + handleSearchClickedMessage(state) + } + Message.RetrySearchClicked -> { + if (state.searchResultsState == SearchFeature.SearchResultsState.Error) { + state.copy( + searchResultsState = SearchFeature.SearchResultsState.Loading + ) to setOf( + InternalAction.PerformSearch(query = state.query, withDelay = false), + InternalAction.LogAnalyticEvent(SearchClickedRetrySearchHyperskillAnalyticEvent) + ) + } else { + null + } + } + is InternalMessage.PerformSearchError -> { + if (state.searchResultsState == SearchFeature.SearchResultsState.Loading && + message.error !is CancellationException + ) { + state.copy( + searchResultsState = SearchFeature.SearchResultsState.Error + ) to emptySet() + } else { + null + } + } + is InternalMessage.PerformSearchSuccess -> { + if (state.searchResultsState == SearchFeature.SearchResultsState.Loading) { + state.copy( + searchResultsState = SearchFeature.SearchResultsState.Content(message.topics) + ) to emptySet() + } else { + null + } + } + is Message.SearchResultsItemClicked -> { + handleSearchResultsItemClickedMessage(state, message) + } + Message.ViewedEventMessage -> { + state to setOf(InternalAction.LogAnalyticEvent(SearchViewedHyperskillAnalyticEvent)) + } + } ?: (state to emptySet()) + + private fun handleQueryChangedMessage( + state: State, + message: Message.QueryChanged + ): SearchReducerResult = + if (message.query == state.query) { + state to emptySet() + } else if (message.query.isBlank()) { + state.copy( + query = message.query, + searchResultsState = SearchFeature.SearchResultsState.Idle + ) to setOf(InternalAction.CancelSearch) + } else { + state.copy( + query = message.query, + searchResultsState = SearchFeature.SearchResultsState.Loading + ) to setOf(InternalAction.PerformSearch(query = message.query, withDelay = true)) + } + + private fun handleSearchClickedMessage(state: State): SearchReducerResult { + val analyticActions = setOf( + InternalAction.LogAnalyticEvent(SearchClickedSearchHyperskillAnalyticEvent(state.query)) + ) + + if (state.query.isBlank()) { + return state to analyticActions + } + + return when (state.searchResultsState) { + SearchFeature.SearchResultsState.Error -> + state.copy( + searchResultsState = SearchFeature.SearchResultsState.Loading + ) to (analyticActions + InternalAction.PerformSearch(query = state.query, withDelay = false)) + SearchFeature.SearchResultsState.Idle, + SearchFeature.SearchResultsState.Loading, + is SearchFeature.SearchResultsState.Content -> + state to analyticActions + } + } + + private fun handleSearchResultsItemClickedMessage( + state: State, + message: Message.SearchResultsItemClicked + ): SearchReducerResult? { + if (state.searchResultsState is SearchFeature.SearchResultsState.Content) { + val targetTopic = state.searchResultsState.topics.firstOrNull { it.id == message.id } ?: return null + return state to buildSet { + if (targetTopic.theoryId != null) { + add( + Action.ViewAction.OpenStepScreen( + StepRoute.Learn.TheoryOpenedFromSearch(targetTopic.theoryId) + ) + ) + } else { + add( + Action.ViewAction.OpenStepScreenFailed( + resourceProvider.getString(SharedResources.strings.search_open_step_screen_error_message) + ) + ) + } + add( + InternalAction.LogAnalyticEvent( + SearchClickedItemHyperskillAnalyticEvent(query = state.query, topicId = targetTopic.id) + ) + ) + } + } else { + return null + } + } +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/search/view/mapper/SearchViewStateMapper.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/search/view/mapper/SearchViewStateMapper.kt new file mode 100644 index 0000000000..1637cda0e5 --- /dev/null +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/search/view/mapper/SearchViewStateMapper.kt @@ -0,0 +1,34 @@ +package org.hyperskill.app.search.view.mapper + +import org.hyperskill.app.search.presentation.SearchFeature + +internal object SearchViewStateMapper { + fun map(state: SearchFeature.State): SearchFeature.ViewState = + SearchFeature.ViewState( + query = state.query, + searchResultsViewState = mapSearchResultsState(state.searchResultsState) + ) + + private fun mapSearchResultsState( + state: SearchFeature.SearchResultsState + ): SearchFeature.SearchResultsViewState = + when (state) { + SearchFeature.SearchResultsState.Idle -> SearchFeature.SearchResultsViewState.Idle + SearchFeature.SearchResultsState.Loading -> SearchFeature.SearchResultsViewState.Loading + SearchFeature.SearchResultsState.Error -> SearchFeature.SearchResultsViewState.Error + is SearchFeature.SearchResultsState.Content -> { + if (state.topics.isEmpty()) { + SearchFeature.SearchResultsViewState.Empty + } else { + SearchFeature.SearchResultsViewState.Content( + searchResults = state.topics.map { topic -> + SearchFeature.SearchResultsViewState.Content.Item( + id = topic.id, + title = topic.title + ) + } + ) + } + } + } +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/sentry/domain/model/transaction/HyperskillSentryTransactionBuilder.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/sentry/domain/model/transaction/HyperskillSentryTransactionBuilder.kt index 9a61dd20ca..8ac6a9161a 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/sentry/domain/model/transaction/HyperskillSentryTransactionBuilder.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/sentry/domain/model/transaction/HyperskillSentryTransactionBuilder.kt @@ -169,12 +169,6 @@ object HyperskillSentryTransactionBuilder { operation = HyperskillSentryTransactionOperation.API_LOAD ) - fun buildGamificationToolbarTrackScreenRemoteDataLoading(): HyperskillSentryTransaction = - HyperskillSentryTransaction( - name = "navigation-bar-items-feature-track-screen-remote-data-loading", - operation = HyperskillSentryTransactionOperation.API_LOAD - ) - fun buildGamificationToolbarStudyPlanScreenRemoteDataLoading(): HyperskillSentryTransaction = HyperskillSentryTransaction( name = "navigation-bar-items-feature-study_plan-screen-remote-data-loading", @@ -300,4 +294,13 @@ object HyperskillSentryTransactionBuilder { name = "challenge-widget-feature-fetch-challenges", operation = HyperskillSentryTransactionOperation.API_LOAD ) + + /** + * SearchFeature + */ + fun buildSearchFeaturePerformSearch(): HyperskillSentryTransaction = + HyperskillSentryTransaction( + name = "search-feature-perform-search", + operation = HyperskillSentryTransactionOperation.API_LOAD + ) } \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step/domain/model/StepRoute.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step/domain/model/StepRoute.kt index 38d522994d..ec2fdd606d 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step/domain/model/StepRoute.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step/domain/model/StepRoute.kt @@ -23,6 +23,9 @@ sealed interface StepRoute { @Serializable data class TheoryOpenedFromPractice(override val stepId: Long) : Learn + + @Serializable + data class TheoryOpenedFromSearch(override val stepId: Long) : Learn } @Serializable diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step/presentation/StepReducer.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step/presentation/StepReducer.kt index 1a24954c55..48d5c72b39 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step/presentation/StepReducer.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step/presentation/StepReducer.kt @@ -29,7 +29,17 @@ class StepReducer( is Message.StepLoaded.Success -> { State.Data( step = message.step, - isPracticingAvailable = stepRoute is StepRoute.Learn, + isPracticingAvailable = when (stepRoute) { + is StepRoute.Learn.Step, + is StepRoute.Learn.TheoryOpenedFromPractice -> + true + is StepRoute.Learn.TheoryOpenedFromSearch, + is StepRoute.LearnDaily, + is StepRoute.Repeat.Practice, + is StepRoute.Repeat.Theory, + is StepRoute.StageImplement -> + false + }, stepCompletionState = StepCompletionFeature.createState(message.step, stepRoute) ) to setOf(Action.UpdateNextLearningActivityState(message.step)) } diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/presentation/StepCompletionFeature.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/presentation/StepCompletionFeature.kt index 51132340cc..e11e3dc431 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/presentation/StepCompletionFeature.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step_completion/presentation/StepCompletionFeature.kt @@ -13,6 +13,7 @@ interface StepCompletionFeature { currentStep = step, startPracticingButtonAction = when (stepRoute) { is StepRoute.Learn.TheoryOpenedFromPractice, + is StepRoute.Learn.TheoryOpenedFromSearch, is StepRoute.Repeat.Theory -> StartPracticingButtonAction.NavigateToBack is StepRoute.Learn.Step, diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz/presentation/StepQuizReducer.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz/presentation/StepQuizReducer.kt index 11f66bf38c..6d840e5186 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz/presentation/StepQuizReducer.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz/presentation/StepQuizReducer.kt @@ -403,6 +403,7 @@ class StepQuizReducer( is StepRoute.Learn.Step -> StepRoute.Learn.TheoryOpenedFromPractice(stepId = topicTheoryId) is StepRoute.Learn.TheoryOpenedFromPractice, + is StepRoute.Learn.TheoryOpenedFromSearch, is StepRoute.LearnDaily, is StepRoute.Repeat.Theory, is StepRoute.StageImplement -> diff --git a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz/presentation/StepQuizResolver.kt b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz/presentation/StepQuizResolver.kt index d35003ef99..af5fab57a6 100644 --- a/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz/presentation/StepQuizResolver.kt +++ b/shared/src/commonMain/kotlin/org/hyperskill/app/step_quiz/presentation/StepQuizResolver.kt @@ -116,6 +116,7 @@ object StepQuizResolver { is StepRoute.LearnDaily, is StepRoute.StageImplement, is StepRoute.Learn.TheoryOpenedFromPractice, + is StepRoute.Learn.TheoryOpenedFromSearch, is StepRoute.Repeat.Theory -> { false } diff --git a/shared/src/commonMain/resources/MR/base/strings.xml b/shared/src/commonMain/resources/MR/base/strings.xml index 873bb79294..d33d6a9d14 100644 --- a/shared/src/commonMain/resources/MR/base/strings.xml +++ b/shared/src/commonMain/resources/MR/base/strings.xml @@ -530,6 +530,15 @@ Oops! We were unable to load the challenge. Reload + + Search + Find topic + Sorry, we were unable to open the search result: please try + again later. + + Nothing found. Try changing your search query. + Oops! We were unable to perform the search. + Project Mastery Topic Mastery From 1ca43b0685142a851afb6c7e2fc280e4d7dbc8d3 Mon Sep 17 00:00:00 2001 From: Ivan Magda Date: Wed, 13 Dec 2023 21:51:16 +0700 Subject: [PATCH 5/6] iOS: update app first screen (#785) ^ALTAPPS-1067 --- .../Contents.json | 15 ++++ .../onboarding-illustration.pdf | Bin 0 -> 89286 bytes .../Contents.json | 25 ------ .../onboarding-problem-of-day-card-dark.pdf | Bin 193644 -> 0 bytes .../onboarding-problem-of-day-card-light.pdf | Bin 193102 -> 0 bytes .../Models/Constants/Images/Images.swift | 6 -- .../Sources/Models/Constants/Strings.swift | 4 +- .../Modules/Onboarding/OnboardingView.swift | 44 +++++++---- .../Onboarding/OnboardingViewModel.swift | 10 ++- .../Styles/Buttons/OutlineButtonStyle.swift | 74 +++++++++++++++--- .../Buttons/RoundedRectangleButtonStyle.swift | 27 ++++--- .../iosHyperskillApp/Theme/ColorPalette.swift | 3 + .../commonMain/resources/MR/base/strings.xml | 7 +- .../commonMain/resources/MR/colors/colors.xml | 9 +++ 14 files changed, 148 insertions(+), 76 deletions(-) create mode 100644 iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-illustration.imageset/Contents.json create mode 100644 iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-illustration.imageset/onboarding-illustration.pdf delete mode 100644 iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-problem-of-day-card.imageset/Contents.json delete mode 100644 iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-problem-of-day-card.imageset/onboarding-problem-of-day-card-dark.pdf delete mode 100644 iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-problem-of-day-card.imageset/onboarding-problem-of-day-card-light.pdf diff --git a/iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-illustration.imageset/Contents.json b/iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-illustration.imageset/Contents.json new file mode 100644 index 0000000000..87ca47e3ea --- /dev/null +++ b/iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-illustration.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "onboarding-illustration.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-illustration.imageset/onboarding-illustration.pdf b/iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-illustration.imageset/onboarding-illustration.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ce044b9068fe86562329ae392299372b58a7576c GIT binary patch literal 89286 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

v*C7wv6ll{w&F~c@vl&!39FXP^ z&m7rp+sJ7!R-@t0W-g?tujL(ci!E-o1dvbM(=V36a!#+5M4B~Oa_YsHcTT2JZc(># zWZurVmu`DRv47B+=-u$DF5RTU4y+UVq6!g9qep?Ff^lon__^dw_wFX!!&_~=@%W5x zYb>eef8vkL49TU;ca#>5Zp?GmmgpwXwvx=h!9&e7O1)+73UqRzy}4McXI1_|8&RF9 zFs=Vhr0Z5gU!1oRnfaG+g`y!zo>9;PBglf*WDthQ1v%gRkaz%0D))8brEZq!c5`*u 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 p|XWxFbHGc#ya+Wt5nL!PL@#ibr?%DmZ2H4 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

~Uh(EFK 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 M$g``f4_`n2205Fc8UO$Q diff --git a/iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-problem-of-day-card.imageset/onboarding-problem-of-day-card-light.pdf b/iosHyperskillApp/iosHyperskillApp/Assets.xcassets/Onboarding/onboarding-problem-of-day-card.imageset/onboarding-problem-of-day-card-light.pdf deleted file mode 100644 index 18c3a602687b9696b22e51eb08bea1391e7dad66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193102 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 diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Images/Images.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Images/Images.swift index 5de090e5ee..6e4116ce6b 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Images/Images.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Images/Images.swift @@ -152,12 +152,6 @@ enum Images { } } - // MARK: - Onboarding - - - enum Onboarding { - static let problemOfDayCard = "onboarding-problem-of-day-card" - } - // MARK: - NotificationsOnboarding - enum NotificationsOnboarding { diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Strings.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Strings.swift index baef2d90ff..abe441f780 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Strings.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Strings.swift @@ -466,8 +466,8 @@ enum Strings { enum Onboarding { static let title = sharedStrings.onboarding_title.localized() static let text = sharedStrings.onboarding_text.localized() - static let signIn = sharedStrings.onboarding_sign_in.localized() - static let signUp = sharedStrings.onboarding_sign_up.localized() + static let primaryButton = sharedStrings.onboarding_primary_button_text.localized() + static let secondaryButton = sharedStrings.onboarding_secondary_button_text.localized() } // MARK: - NotificationsOnboarding - diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Onboarding/OnboardingView.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Onboarding/OnboardingView.swift index b7efde7730..f2a0959d10 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Onboarding/OnboardingView.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Onboarding/OnboardingView.swift @@ -3,9 +3,9 @@ import SwiftUI extension OnboardingView { struct Appearance { - let logoWidthHeight: CGFloat = 48 - let contentMaxWidth: CGFloat = 400 + + let illustrationImageMaxHeight: CGFloat = 220 } } @@ -16,6 +16,8 @@ struct OnboardingView: View { @Environment(\.horizontalSizeClass) private var horizontalSizeClass + private let actionButtonsFeedbackGenerator = FeedbackGenerator(feedbackType: .selection) + var body: some View { ZStack { UIViewControllerEventsWrapper(onViewDidAppear: viewModel.logViewedEvent) @@ -54,34 +56,44 @@ struct OnboardingView: View { Spacer() } - HyperskillLogoView(logoWidthHeight: appearance.logoWidthHeight) - Text(Strings.Onboarding.title) - .font(.largeTitle) - .foregroundColor(.primaryText) + .font(.largeTitle).bold() + .foregroundColor(.newPrimaryText) .multilineTextAlignment(.center) Text(Strings.Onboarding.text) - .font(.body) - .foregroundColor(.primaryText) + .font(.title3) + .foregroundColor(.newPrimaryText) .multilineTextAlignment(.center) Spacer() - Image(Images.Onboarding.problemOfDayCard) + Image(.onboardingIllustration) .renderingMode(.original) .resizable() .aspectRatio(contentMode: .fit) - .frame(maxWidth: .infinity) + .frame(maxWidth: .infinity, maxHeight: appearance.illustrationImageMaxHeight) Spacer() - Button(Strings.Onboarding.signIn, action: viewModel.doSignPresentation) - .buttonStyle(RoundedRectangleButtonStyle(style: .violet)) - .shineEffect() - - Button(Strings.Onboarding.signUp, action: viewModel.doClickedSignUpAction) - .buttonStyle(OutlineButtonStyle(style: .violet)) + Button( + Strings.Onboarding.primaryButton, + action: { + actionButtonsFeedbackGenerator.triggerFeedback() + viewModel.doPrimaryButtonAction() + } + ) + .buttonStyle(.primary) + .shineEffect() + + Button( + Strings.Onboarding.secondaryButton, + action: { + actionButtonsFeedbackGenerator.triggerFeedback() + viewModel.doSecondaryButtonAction() + } + ) + .buttonStyle(.tertiary) if horizontalSizeClass == .regular { Spacer() diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Onboarding/OnboardingViewModel.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Onboarding/OnboardingViewModel.swift index c6d77a732b..6fe587711d 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Onboarding/OnboardingViewModel.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Onboarding/OnboardingViewModel.swift @@ -26,13 +26,17 @@ final class OnboardingViewModel: FeatureViewModel< onNewMessage(OnboardingFeatureMessageInitialize(forceUpdate: true)) } - func doSignPresentation() { + func doPrimaryButtonAction() { + onNewMessage(OnboardingFeatureMessageClickedSignUn()) + } + + func doSecondaryButtonAction() { logClickedSignInEvent() moduleOutput?.handleOnboardingSignInRequested() } - func doClickedSignUpAction() { - onNewMessage(OnboardingFeatureMessageClickedSignUn()) + func doSignPresentation() { + moduleOutput?.handleOnboardingSignInRequested() } func doSignUpPresentation(isInSignUpMode: Bool) { diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Views/SwiftUI/Styles/Buttons/OutlineButtonStyle.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Views/SwiftUI/Styles/Buttons/OutlineButtonStyle.swift index 14f48ee0d0..4d06b34ed9 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Views/SwiftUI/Styles/Buttons/OutlineButtonStyle.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Views/SwiftUI/Styles/Buttons/OutlineButtonStyle.swift @@ -2,6 +2,7 @@ import SwiftUI struct OutlineButtonStyle: ButtonStyle { var foregroundColor = Color(ColorPalette.primary) + var foregroundPressedColor = Color(ColorPalette.primary) var font = Font.body var minHeight: CGFloat = 44 @@ -9,6 +10,7 @@ struct OutlineButtonStyle: ButtonStyle { var cornerRadius: CGFloat = 8 var borderColor = Color(ColorPalette.primaryAlpha38) + var borderPressedColor = Color(ColorPalette.primaryAlpha38) var borderWidth: CGFloat = 1 var bounceScale: CGFloat = 0.95 @@ -26,14 +28,22 @@ struct OutlineButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label - .foregroundColor(foregroundColor) + .foregroundColor(configuration.isPressed ? foregroundPressedColor : foregroundColor) .font(font) .frame(maxWidth: maxWidth, minHeight: minHeight, alignment: alignment) .contentShape(RoundedRectangle(cornerRadius: cornerRadius)) // Increase tap area for user interaction .padding(paddingEdgeSet) .background(backgroundColor) .cornerRadius(cornerRadius) - .overlay(RoundedRectangle(cornerRadius: cornerRadius).stroke(borderColor, lineWidth: borderWidth)) + .overlay( + RoundedRectangle( + cornerRadius: cornerRadius + ) + .stroke( + configuration.isPressed ? borderPressedColor : borderColor, + lineWidth: borderWidth + ) + ) .opacity(isEnabled ? 1 : opacityDisabled) .scaleEffect(configuration.isPressed ? bounceScale : 1) .animation(.easeOut(duration: bounceDuration), value: configuration.isPressed) @@ -43,22 +53,49 @@ struct OutlineButtonStyle: ButtonStyle { enum Style { case green case violet + case newGray fileprivate var foregroundColor: Color { switch self { case .green: - return Color(ColorPalette.secondary) + Color(ColorPalette.secondary) case .violet: - return Color(ColorPalette.primary) + Color(ColorPalette.primary) + case .newGray: + Color(ColorPalette.newButtonTertiary) + } + } + + fileprivate var foregroundPressedColor: Color { + switch self { + case .green: + Color(ColorPalette.secondary) + case .violet: + Color(ColorPalette.primary) + case .newGray: + Color(ColorPalette.newButtonTertiaryActive) } } fileprivate var borderColor: Color { switch self { case .green: - return Color(ColorPalette.secondaryAlpha38) + Color(ColorPalette.secondaryAlpha38) case .violet: - return Color(ColorPalette.primaryAlpha38) + Color(ColorPalette.primaryAlpha38) + case .newGray: + Color(ColorPalette.newButtonTertiary) + } + } + + fileprivate var borderPressedColor: Color { + switch self { + case .green: + Color(ColorPalette.secondaryAlpha38) + case .violet: + Color(ColorPalette.primaryAlpha38) + case .newGray: + Color(ColorPalette.newButtonTertiaryActive) } } } @@ -66,14 +103,31 @@ struct OutlineButtonStyle: ButtonStyle { extension OutlineButtonStyle { init(style: Style) { - self.init(foregroundColor: style.foregroundColor, borderColor: style.borderColor) + self.init( + foregroundColor: style.foregroundColor, + foregroundPressedColor: style.foregroundPressedColor, + borderColor: style.borderColor, + borderPressedColor: style.borderPressedColor + ) + } +} + +extension ButtonStyle where Self == OutlineButtonStyle { + static var tertiary: OutlineButtonStyle { + OutlineButtonStyle(style: .newGray) } } -struct OutlineButtonStyle_Previews: PreviewProvider { - static var previews: some View { +#Preview { + VStack { Button("Press Me", action: {}) .buttonStyle(OutlineButtonStyle()) - .padding() + + Button("Press Me", action: {}) + .buttonStyle(OutlineButtonStyle(style: .newGray)) + + Button("Press Me", action: {}) + .buttonStyle(.tertiary) } + .padding() } diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Views/SwiftUI/Styles/Buttons/RoundedRectangleButtonStyle.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Views/SwiftUI/Styles/Buttons/RoundedRectangleButtonStyle.swift index 64da2477ad..cbb493ddb5 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Views/SwiftUI/Styles/Buttons/RoundedRectangleButtonStyle.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Views/SwiftUI/Styles/Buttons/RoundedRectangleButtonStyle.swift @@ -102,19 +102,22 @@ extension RoundedRectangleButtonStyle { } } -struct RoundedRectangleButtonStyle_Previews: PreviewProvider { - static var previews: some View { - VStack { - Button("Press Me", action: {}) - .buttonStyle(RoundedRectangleButtonStyle()) +extension ButtonStyle where Self == RoundedRectangleButtonStyle { + static var primary: RoundedRectangleButtonStyle { + RoundedRectangleButtonStyle(style: .newViolet) + } +} - Button("Press Me", action: {}) - .buttonStyle(RoundedRectangleButtonStyle(overlayImage: .init(imageSystemName: "play"))) +#Preview { + VStack { + Button("Press Me", action: {}) + .buttonStyle(RoundedRectangleButtonStyle()) - Button("Press Me", action: {}) - .buttonStyle(RoundedRectangleButtonStyle(style: .newViolet)) - } - .previewLayout(.sizeThatFits) - .padding() + Button("Press Me", action: {}) + .buttonStyle(RoundedRectangleButtonStyle(overlayImage: .init(imageSystemName: "play"))) + + Button("Press Me", action: {}) + .buttonStyle(.primary) } + .padding() } diff --git a/iosHyperskillApp/iosHyperskillApp/Theme/ColorPalette.swift b/iosHyperskillApp/iosHyperskillApp/Theme/ColorPalette.swift index 97d901efb8..81d11bcdc3 100644 --- a/iosHyperskillApp/iosHyperskillApp/Theme/ColorPalette.swift +++ b/iosHyperskillApp/iosHyperskillApp/Theme/ColorPalette.swift @@ -187,6 +187,9 @@ enum ColorPalette { static let newButtonPrimary = sharedColors.button_primary.color.uiColor static let newButtonPrimaryActive = sharedColors.button_primary_active.color.uiColor + static let newButtonTertiary = sharedColors.button_tertiary.dynamicUIColor + static let newButtonTertiaryActive = sharedColors.button_tertiary_active.dynamicUIColor + static let newButtonGhost = sharedColors.button_ghost.dynamicUIColor static let newButtonGhostActive = sharedColors.button_ghost_active.dynamicUIColor diff --git a/shared/src/commonMain/resources/MR/base/strings.xml b/shared/src/commonMain/resources/MR/base/strings.xml index 3ea3d76dcc..5c81a97992 100644 --- a/shared/src/commonMain/resources/MR/base/strings.xml +++ b/shared/src/commonMain/resources/MR/base/strings.xml @@ -390,8 +390,11 @@ Me: If the IDE knows I\'m missing a semicolon, why won\'t it just add it itself? 🤔 - Welcome\nto My Hyperskill - Regular practice is key to mastering new skills. Learn on the web and practice with My Hyperskill to keep up your learning streak and stay on top of your studies. + My Hyperskill + Code a little every day, wherever you are. + Start for free + I already have an account + Sign in Sign up diff --git a/shared/src/commonMain/resources/MR/colors/colors.xml b/shared/src/commonMain/resources/MR/colors/colors.xml index e03331c1d4..e6f9cf359d 100644 --- a/shared/src/commonMain/resources/MR/colors/colors.xml +++ b/shared/src/commonMain/resources/MR/colors/colors.xml @@ -281,6 +281,15 @@ #566BE4 #3A4AD6 + + #21272A + #F2F4F8 + + + #4D5358 + #C1C7CD + + #455BD9 #C1D5FE From ad6d6a29cf6ce0478987686c6c586d1114f9669f Mon Sep 17 00:00:00 2001 From: Ivan Magda Date: Wed, 13 Dec 2023 21:54:18 +0700 Subject: [PATCH 6/6] iOS: search feature (#784) ^ALTAPPS-1058 --- .../project.pbxproj | 52 +++++++++ .../NavigationLink/NavigationLink+Empty.swift | 8 ++ .../Sources/Models/Constants/Strings.swift | 14 +++ ...GamificationToolbarViewActionHandler.swift | 5 +- .../Views/GamificationToolbarContent.swift | 23 ++++ .../Sources/Modules/Home/HomeViewModel.swift | 8 ++ .../Sources/Modules/Home/Views/HomeView.swift | 3 +- .../Leaderboard/LeaderboardViewModel.swift | 8 ++ .../Leaderboard/Views/LeaderboardView.swift | 3 +- .../Profile/Views/ProfileSkeletonView.swift | 6 +- .../Modules/Profile/Views/ProfileView.swift | 14 +-- .../Modules/Search/SearchAssembly.swift | 31 +++++ .../Modules/Search/SearchViewModel.swift | 52 +++++++++ .../Views/SearchPlaceholderEmptyView.swift | 22 ++++ .../Views/SearchPlaceholderLoadingView.swift | 19 ++++ .../SearchPlaceholderSuggestionsView.swift | 22 ++++ .../Modules/Search/Views/SearchView.swift | 107 ++++++++++++++++++ .../StudyPlan/StudyPlanViewModel.swift | 8 ++ .../StudyPlan/Views/StudyPlanView.swift | 3 +- .../commonMain/resources/MR/base/strings.xml | 4 + 20 files changed, 398 insertions(+), 14 deletions(-) create mode 100644 iosHyperskillApp/iosHyperskillApp/Sources/Extensions/SwiftUI/NavigationLink/NavigationLink+Empty.swift create mode 100644 iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/SearchAssembly.swift create mode 100644 iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/SearchViewModel.swift create mode 100644 iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderEmptyView.swift create mode 100644 iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderLoadingView.swift create mode 100644 iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderSuggestionsView.swift create mode 100644 iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchView.swift diff --git a/iosHyperskillApp/iosHyperskillApp.xcodeproj/project.pbxproj b/iosHyperskillApp/iosHyperskillApp.xcodeproj/project.pbxproj index 89f78b8cad..aaeae0fe59 100644 --- a/iosHyperskillApp/iosHyperskillApp.xcodeproj/project.pbxproj +++ b/iosHyperskillApp/iosHyperskillApp.xcodeproj/project.pbxproj @@ -187,6 +187,9 @@ 2C55E1902A056AFC00FE58D7 /* ProblemsLimitSkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C55E18F2A056AFC00FE58D7 /* ProblemsLimitSkeletonView.swift */; }; 2C55E1922A05706300FE58D7 /* HomeSubheadlineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C55E1912A05706300FE58D7 /* HomeSubheadlineView.swift */; }; 2C56611A2AEA418D00D607FB /* FillBlanksSelectCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C5661192AEA418D00D607FB /* FillBlanksSelectCollectionViewCell.swift */; }; + 2C5837A12B28413C0096B89B /* SearchPlaceholderEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C5837A02B28413C0096B89B /* SearchPlaceholderEmptyView.swift */; }; + 2C5837A32B2844E20096B89B /* SearchPlaceholderSuggestionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C5837A22B2844E20096B89B /* SearchPlaceholderSuggestionsView.swift */; }; + 2C5837A62B284E570096B89B /* NavigationLink+Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C5837A52B284E570096B89B /* NavigationLink+Empty.swift */; }; 2C58DE232803BF97002A2774 /* AuthLogoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C58DE222803BF97002A2774 /* AuthLogoView.swift */; }; 2C58DE252803C185002A2774 /* AuthSocialControlsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C58DE242803C185002A2774 /* AuthSocialControlsView.swift */; }; 2C58DE292803D197002A2774 /* UIColor+DynamicColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C58DE282803D197002A2774 /* UIColor+DynamicColor.swift */; }; @@ -473,6 +476,7 @@ 2CF41A8E28505D2C000736D6 /* LatexView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CF41A8D28505D2C000736D6 /* LatexView.swift */; }; 2CF4341228126C79002893CD /* View+EndEditing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CF4341128126C79002893CD /* View+EndEditing.swift */; }; 2CF43414281281DB002893CD /* AuthTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CF43413281281DB002893CD /* AuthTextField.swift */; }; + 2CF5DF912B2853DA006E4ED7 /* SearchPlaceholderLoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CF5DF902B2853DA006E4ED7 /* SearchPlaceholderLoadingView.swift */; }; 2CF72AA32847757300E1C192 /* StepQuizTableViewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CF72AA22847757300E1C192 /* StepQuizTableViewData.swift */; }; 2CF72AA5284775BF00E1C192 /* StepQuizTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CF72AA4284775BF00E1C192 /* StepQuizTableView.swift */; }; 2CF72AA828477E0600E1C192 /* StepQuizTableRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CF72AA728477E0600E1C192 /* StepQuizTableRowView.swift */; }; @@ -491,6 +495,8 @@ 40D8E6EFE44EB7A6092C171B /* Pods_iosHyperskillApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C0F8A86D62CB915A1E49CAA /* Pods_iosHyperskillApp.framework */; }; 59B66CD4D1508049555D35AE /* ProgressScreenView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCC18157582494D2909B214C /* ProgressScreenView.swift */; }; 60B4F143CF507F83C9581020 /* LeaderboardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E205DEF27554501F7BE01AA /* LeaderboardViewModel.swift */; }; + 7A628C36D862C98ED2046D4F /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 907B10B0F7D4970530A478A2 /* SearchView.swift */; }; + 8E154CD6AF7D45A2CA013F85 /* SearchAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F55BD539626D22DCF0E1344 /* SearchAssembly.swift */; }; 9195A8624F8058A7D5F936F8 /* NotificationsOnboardingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3570563AEEEEF2F5495BCA6 /* NotificationsOnboardingViewModel.swift */; }; AE0B2D1D267B8904498FA371 /* ProjectSelectionDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEDCC11294912B8656C8B264 /* ProjectSelectionDetailsViewModel.swift */; }; B2B30D0486FC13DCC80F4263 /* NotificationsOnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3944E4546DEF47A28B2E7292 /* NotificationsOnboardingView.swift */; }; @@ -621,6 +627,7 @@ E9FB89AC2893EA580011EFFB /* NotificationPermissionStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FB89AB2893EA580011EFFB /* NotificationPermissionStatus.swift */; }; E9FB89B02893EA900011EFFB /* UserNotificationsCenterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FB89AF2893EA900011EFFB /* UserNotificationsCenterDelegate.swift */; }; ECD10958C8BA7D758D3D1F66 /* ProjectSelectionDetailsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15AD7CF422D27CCAE2839046 /* ProjectSelectionDetailsAssembly.swift */; }; + ED49113F88FF32AAFE6AFFBC /* SearchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25AEA48C62195F44E21D6491 /* SearchViewModel.swift */; }; F759010A5FC990E99AAF0D76 /* ProgressScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A5BDA1E184CA8FBAAD8584 /* ProgressScreenViewModel.swift */; }; /* End PBXBuildFile section */ @@ -668,6 +675,7 @@ 1496D2AE71B028929CE863C6 /* TrackSelectionDetailsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TrackSelectionDetailsAssembly.swift; sourceTree = ""; }; 15AD7CF422D27CCAE2839046 /* ProjectSelectionDetailsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ProjectSelectionDetailsAssembly.swift; sourceTree = ""; }; 20A5BDA1E184CA8FBAAD8584 /* ProgressScreenViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ProgressScreenViewModel.swift; sourceTree = ""; }; + 25AEA48C62195F44E21D6491 /* SearchViewModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SearchViewModel.swift; sourceTree = ""; }; 2C005DCB27EF5B0300DC6503 /* GoogleServiceInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GoogleServiceInfo.swift; sourceTree = ""; }; 2C0146A928FDF2350083DA9C /* StepQuizCodeFullScreenInputProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StepQuizCodeFullScreenInputProtocol.swift; sourceTree = ""; }; 2C023C85285D927A00D2D5A9 /* StepQuizTableAssembly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StepQuizTableAssembly.swift; sourceTree = ""; }; @@ -850,6 +858,9 @@ 2C55E18F2A056AFC00FE58D7 /* ProblemsLimitSkeletonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProblemsLimitSkeletonView.swift; sourceTree = ""; }; 2C55E1912A05706300FE58D7 /* HomeSubheadlineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSubheadlineView.swift; sourceTree = ""; }; 2C5661192AEA418D00D607FB /* FillBlanksSelectCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FillBlanksSelectCollectionViewCell.swift; sourceTree = ""; }; + 2C5837A02B28413C0096B89B /* SearchPlaceholderEmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchPlaceholderEmptyView.swift; sourceTree = ""; }; + 2C5837A22B2844E20096B89B /* SearchPlaceholderSuggestionsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchPlaceholderSuggestionsView.swift; sourceTree = ""; }; + 2C5837A52B284E570096B89B /* NavigationLink+Empty.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NavigationLink+Empty.swift"; sourceTree = ""; }; 2C58DE222803BF97002A2774 /* AuthLogoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthLogoView.swift; sourceTree = ""; }; 2C58DE242803C185002A2774 /* AuthSocialControlsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthSocialControlsView.swift; sourceTree = ""; }; 2C58DE282803D197002A2774 /* UIColor+DynamicColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+DynamicColor.swift"; sourceTree = ""; }; @@ -1138,6 +1149,7 @@ 2CF41A8D28505D2C000736D6 /* LatexView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LatexView.swift; sourceTree = ""; }; 2CF4341128126C79002893CD /* View+EndEditing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+EndEditing.swift"; sourceTree = ""; }; 2CF43413281281DB002893CD /* AuthTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthTextField.swift; sourceTree = ""; }; + 2CF5DF902B2853DA006E4ED7 /* SearchPlaceholderLoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchPlaceholderLoadingView.swift; sourceTree = ""; }; 2CF72AA22847757300E1C192 /* StepQuizTableViewData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StepQuizTableViewData.swift; sourceTree = ""; }; 2CF72AA4284775BF00E1C192 /* StepQuizTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StepQuizTableView.swift; sourceTree = ""; }; 2CF72AA728477E0600E1C192 /* StepQuizTableRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StepQuizTableRowView.swift; sourceTree = ""; }; @@ -1162,6 +1174,8 @@ 71D01125D308034C53D75DA6 /* ProjectSelectionDetailsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ProjectSelectionDetailsView.swift; sourceTree = ""; }; 7555FF7B242A565900829871 /* iosHyperskillApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iosHyperskillApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; 7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7F55BD539626D22DCF0E1344 /* SearchAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SearchAssembly.swift; sourceTree = ""; }; + 907B10B0F7D4970530A478A2 /* SearchView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = ""; }; 9AACF19B25D42FD4AE322D5A /* ProgressScreenAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ProgressScreenAssembly.swift; sourceTree = ""; }; 9C0F8A86D62CB915A1E49CAA /* Pods_iosHyperskillApp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iosHyperskillApp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C2065D585FD89A96C31C08BC /* TrackSelectionDetailsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TrackSelectionDetailsView.swift; sourceTree = ""; }; @@ -1629,6 +1643,7 @@ 2C963BC82812D3410036DD53 /* ProfileSettings */, 69443CBBFA46C4A121EA173F /* ProgressScreen */, 2C5CA2452A203C4500DBF2F9 /* ProjectSelection */, + 3C00014807122833363E303F /* Search */, 2C9E5E8229B211DD003AEC16 /* StageImplement */, 2CAE8CEE280525A100E6C83D /* Step */, 2C41127428376DE3004948A3 /* StepQuiz */, @@ -2185,6 +2200,25 @@ path = Input; sourceTree = ""; }; + 2C58379F2B28412C0096B89B /* Views */ = { + isa = PBXGroup; + children = ( + 2C5837A02B28413C0096B89B /* SearchPlaceholderEmptyView.swift */, + 2CF5DF902B2853DA006E4ED7 /* SearchPlaceholderLoadingView.swift */, + 2C5837A22B2844E20096B89B /* SearchPlaceholderSuggestionsView.swift */, + 907B10B0F7D4970530A478A2 /* SearchView.swift */, + ); + path = Views; + sourceTree = ""; + }; + 2C5837A42B284E4C0096B89B /* NavigationLink */ = { + isa = PBXGroup; + children = ( + 2C5837A52B284E570096B89B /* NavigationLink+Empty.swift */, + ); + path = NavigationLink; + sourceTree = ""; + }; 2C58DE212803BE84002A2774 /* Views */ = { isa = PBXGroup; children = ( @@ -2341,6 +2375,7 @@ 2C725B5C28090CE500A49043 /* SwiftUI */ = { isa = PBXGroup; children = ( + 2C5837A42B284E4C0096B89B /* NavigationLink */, 2C323750283808300062CAF6 /* View */, ); path = SwiftUI; @@ -3511,6 +3546,16 @@ path = Injection; sourceTree = ""; }; + 3C00014807122833363E303F /* Search */ = { + isa = PBXGroup; + children = ( + 7F55BD539626D22DCF0E1344 /* SearchAssembly.swift */, + 25AEA48C62195F44E21D6491 /* SearchViewModel.swift */, + 2C58379F2B28412C0096B89B /* Views */, + ); + path = Search; + sourceTree = ""; + }; 46D884ECAA31C3DB83AF8E56 /* Details */ = { isa = PBXGroup; children = ( @@ -4307,6 +4352,7 @@ 2CEB50CE288AACEA0044F9AB /* StepQuizCodeFullScreenTab.swift in Sources */, 2CEB50C8288A94050044F9AB /* BlockExtensions.swift in Sources */, 2C54E4282A1F717F003406B9 /* CardView.swift in Sources */, + 2C5837A62B284E570096B89B /* NavigationLink+Empty.swift in Sources */, E9D2D675284E0B30000757AC /* StepQuizMatchingView.swift in Sources */, 2CBC97CD2A555AA20078E445 /* StageImplementProjectCompletedModalView.swift in Sources */, 2CC95C0E2A4EBB970036C73E /* ProjectLevelAvatarView.swift in Sources */, @@ -4666,6 +4712,7 @@ 2CA368E728EEAE09004F7FD8 /* AppView.swift in Sources */, 2C5215AA291E5B63006C2427 /* PullToRefresh.swift in Sources */, 2CAE8CF4280525D400E6C83D /* StepAssembly.swift in Sources */, + 2C5837A32B2844E20096B89B /* SearchPlaceholderSuggestionsView.swift in Sources */, 2CD316C028A3B2040002B2B2 /* ApplicationTheme+SharedTheme.swift in Sources */, 2C1061A4285C34C900EBD614 /* StepQuizChildQuizOutputProtocol.swift in Sources */, 2C20FBA4284F165A006D879E /* ProcessedContent.swift in Sources */, @@ -4789,9 +4836,11 @@ E9D537D42A71393A00F21828 /* ProfileBadgesGridView.swift in Sources */, C727878256DA0342EF174A4E /* TrackSelectionDetailsView.swift in Sources */, D9B929495D696A140BA3D150 /* TrackSelectionDetailsViewModel.swift in Sources */, + 2CF5DF912B2853DA006E4ED7 /* SearchPlaceholderLoadingView.swift in Sources */, ECD10958C8BA7D758D3D1F66 /* ProjectSelectionDetailsAssembly.swift in Sources */, 018CAC44EED7A992000ECF87 /* ProjectSelectionDetailsView.swift in Sources */, 2CB0ADEC2B04AD550089D557 /* ChallengeWidgetView.swift in Sources */, + 2C5837A12B28413C0096B89B /* SearchPlaceholderEmptyView.swift in Sources */, AE0B2D1D267B8904498FA371 /* ProjectSelectionDetailsViewModel.swift in Sources */, 2C8DD4092AFB7DFD00FD5359 /* ShareStreakModalViewController.swift in Sources */, 0809817CFCC9D4C45457B3C8 /* ProgressScreenAssembly.swift in Sources */, @@ -4805,6 +4854,9 @@ 043790C380B462AFEB2B13BC /* LeaderboardAssembly.swift in Sources */, BAEC674E5161E8C7A10ADAAB /* LeaderboardView.swift in Sources */, 60B4F143CF507F83C9581020 /* LeaderboardViewModel.swift in Sources */, + 8E154CD6AF7D45A2CA013F85 /* SearchAssembly.swift in Sources */, + 7A628C36D862C98ED2046D4F /* SearchView.swift in Sources */, + ED49113F88FF32AAFE6AFFBC /* SearchViewModel.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Extensions/SwiftUI/NavigationLink/NavigationLink+Empty.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Extensions/SwiftUI/NavigationLink/NavigationLink+Empty.swift new file mode 100644 index 0000000000..095f4ac4ac --- /dev/null +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Extensions/SwiftUI/NavigationLink/NavigationLink+Empty.swift @@ -0,0 +1,8 @@ +import SwiftUI + +extension NavigationLink where Label == EmptyView, Destination == EmptyView { + /// Useful in cases where a `NavigationLink` is needed but there should not be a destination. e.g. for programmatic navigation. + static var empty: NavigationLink { + self.init(destination: EmptyView(), label: { EmptyView() }) + } +} diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Strings.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Strings.swift index baef2d90ff..978726b700 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Strings.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Models/Constants/Strings.swift @@ -572,4 +572,18 @@ enum Strings { static let changeProject = sharedStrings.progress_screen_change_project.localized() } } + + // MARK: - Search - + + enum Search { + static let title = sharedStrings.search_title.localized() + + static let placeholderEmptyTitle = sharedStrings.search_placeholder_empty_title.localized() + static let placeholderEmptySubtitle = sharedStrings.search_placeholder_empty_subtitle.localized() + + static let placeholderSuggestionsTitle = sharedStrings.search_placeholder_suggestions_title.localized() + static let placeholderSuggestionsSubtitle = sharedStrings.search_placeholder_suggestions_subtitle.localized() + + static let placeholderErrorDescription = sharedStrings.search_placeholder_error_description.localized() + } } diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/GamificationToolbarViewActionHandler.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/GamificationToolbarViewActionHandler.swift index 0bb56cc16e..30ba234a29 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/GamificationToolbarViewActionHandler.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/GamificationToolbarViewActionHandler.swift @@ -13,7 +13,10 @@ enum GamificationToolbarViewActionHandler { let assembly = ProgressScreenAssembly() stackRouter.pushViewController(assembly.makeModule()) case .showSearchScreen: - #warning("TODO: ALTAPPS-1058 show search screen") + if #available(iOS 15.0, *) { + let assembly = SearchAssembly() + stackRouter.pushViewController(assembly.makeModule()) + } } } } diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/GamificationToolbarContent.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/GamificationToolbarContent.swift index 56d99edce0..257a14c8e7 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/GamificationToolbarContent.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/GamificationToolbar/Views/GamificationToolbarContent.swift @@ -4,6 +4,10 @@ import SwiftUI extension GamificationToolbarContent { struct Appearance { let skeletonSize = CGSize(width: 56, height: 28) + + let searchImageWidthHeight: CGFloat = 16 + let searchImagePadding: CGFloat = 6 + let searchImageBackgroundColor = Color(ColorPalette.surface) } } @@ -14,6 +18,7 @@ struct GamificationToolbarContent: ToolbarContent { let onStreakTap: () -> Void let onProgressTap: () -> Void + let onSearchTap: () -> Void var body: some ToolbarContent { ToolbarItem(placement: .primaryAction) { @@ -22,6 +27,9 @@ struct GamificationToolbarContent: ToolbarContent { HStack { SkeletonRoundedView(appearance: .init(size: appearance.skeletonSize)) SkeletonRoundedView(appearance: .init(size: appearance.skeletonSize)) + if #available(iOS 15.0, *) { + SkeletonRoundedView(appearance: .init(size: appearance.skeletonSize)) + } } case .error: HStack {} @@ -41,6 +49,21 @@ struct GamificationToolbarContent: ToolbarContent { isCompletedToday: data.streak.isCompleted, onTap: onStreakTap ) + + if #available(iOS 15.0, *) { + Button( + action: onSearchTap, + label: { + Image(systemName: "magnifyingglass") + .resizable() + .renderingMode(.template) + .aspectRatio(contentMode: .fit) + .frame(widthHeight: appearance.searchImageWidthHeight) + .padding(appearance.searchImagePadding) + .background(Circle().foregroundColor(appearance.searchImageBackgroundColor)) + } + ) + } } } } diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Home/HomeViewModel.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Home/HomeViewModel.swift index db8eeb0101..f04ffac5e6 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Home/HomeViewModel.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Home/HomeViewModel.swift @@ -67,6 +67,14 @@ final class HomeViewModel: FeatureViewModel UIViewController { + let searchComponent = AppGraphBridge.sharedAppGraph.buildSearchComponent() + + let searchViewModel = SearchViewModel( + feature: searchComponent.searchFeature + ) + + let stackRouter = StackRouter() + + let searchView = SearchView( + viewModel: searchViewModel, + stackRouter: stackRouter + ) + + let hostingController = StyledHostingController( + rootView: searchView + ) + hostingController.hidesBottomBarWhenPushed = true + hostingController.navigationItem.largeTitleDisplayMode = .always + hostingController.title = Strings.Search.title + + stackRouter.rootViewController = hostingController + + return hostingController + } +} diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/SearchViewModel.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/SearchViewModel.swift new file mode 100644 index 0000000000..c1f376b634 --- /dev/null +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/SearchViewModel.swift @@ -0,0 +1,52 @@ +import Foundation +import shared + +final class SearchViewModel: FeatureViewModel< + SearchFeature.ViewState, + SearchFeatureMessage, + SearchFeatureActionViewAction +> { + var searchResultsViewStateKs: SearchFeatureSearchResultsViewStateKs { .init(state.searchResultsViewState) } + + private var isFirstTimeBecomeFirstResponder = true + + override func shouldNotifyStateDidChange( + oldState: SearchFeature.ViewState, + newState: SearchFeature.ViewState + ) -> Bool { + !oldState.isEqual(newState) + } + + func shouldBecomeFirstResponder() -> Bool { + if isFirstTimeBecomeFirstResponder { + isFirstTimeBecomeFirstResponder = false + return true + } else { + return false + } + } + + func doQueryChanged(query: String) { + onNewMessage(SearchFeatureMessageQueryChanged(query: query)) + } + + func doSearch() { + onNewMessage(SearchFeatureMessageSearchClicked()) + } + + func doRetrySearch() { + onNewMessage(SearchFeatureMessageRetrySearchClicked()) + } + + func doSearchResultsItemPresentation(id: Int64) { + onNewMessage(SearchFeatureMessageSearchResultsItemClicked(id: id)) + } + + // MARK: Analytic + + func logViewedEvent() { + onNewMessage(SearchFeatureMessageViewedEventMessage()) + } +} + +extension SearchFeatureSearchResultsViewStateContent.Item: Identifiable {} diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderEmptyView.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderEmptyView.swift new file mode 100644 index 0000000000..a5f0bb6cd4 --- /dev/null +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderEmptyView.swift @@ -0,0 +1,22 @@ +import SwiftUI + +struct SearchPlaceholderEmptyView: View { + var body: some View { + VStack { + Text(Strings.Search.placeholderEmptyTitle) + .font(.title2.bold()) + .foregroundColor(.primaryText) + + Text(Strings.Search.placeholderEmptySubtitle) + .font(.body) + .foregroundColor(.secondaryText) + } + .frame(maxWidth: .infinity) + .multilineTextAlignment(.center) + } +} + +#Preview { + SearchPlaceholderEmptyView() + .padding() +} diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderLoadingView.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderLoadingView.swift new file mode 100644 index 0000000000..4c4d28af13 --- /dev/null +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderLoadingView.swift @@ -0,0 +1,19 @@ +import SwiftUI + +struct SearchPlaceholderLoadingView: View { + var body: some View { + ScrollView([], showsIndicators: false) { + VStack(alignment: .leading) { + ForEach(0..<10) { _ in + SkeletonRoundedView() + .frame(height: 60) + } + } + .padding([.horizontal, .bottom]) + } + } +} + +#Preview { + SearchPlaceholderLoadingView() +} diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderSuggestionsView.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderSuggestionsView.swift new file mode 100644 index 0000000000..0e2c09aa67 --- /dev/null +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchPlaceholderSuggestionsView.swift @@ -0,0 +1,22 @@ +import SwiftUI + +struct SearchPlaceholderSuggestionsView: View { + var body: some View { + VStack { + Text(Strings.Search.placeholderSuggestionsTitle) + .font(.title2.bold()) + .foregroundColor(.primaryText) + + Text(Strings.Search.placeholderSuggestionsSubtitle) + .font(.body) + .foregroundColor(.secondaryText) + } + .frame(maxWidth: .infinity) + .multilineTextAlignment(.center) + } +} + +#Preview { + SearchPlaceholderSuggestionsView() + .padding() +} diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchView.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchView.swift new file mode 100644 index 0000000000..07228162b3 --- /dev/null +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/Search/Views/SearchView.swift @@ -0,0 +1,107 @@ +import shared +import SwiftUI + +@available(iOS 15.0, *) +struct SearchView: View { + @StateObject var viewModel: SearchViewModel + + var stackRouter: StackRouterProtocol + + var body: some View { + ZStack { + UIViewControllerEventsWrapper(onViewDidAppear: viewModel.logViewedEvent) + + buildBody() + } + .searchable( + text: Binding.init( + get: { viewModel.state.query }, + set: viewModel.doQueryChanged(query:) + ) + ) + .onSubmit(of: .search, viewModel.doSearch) + .introspectViewController { viewController in + guard viewModel.shouldBecomeFirstResponder() else { + return + } + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + viewController.navigationItem.searchController?.searchBar.becomeFirstResponder() + } + } + .onAppear { + viewModel.startListening() + viewModel.onViewAction = handleViewAction(_:) + } + .onDisappear { + viewModel.stopListening() + viewModel.onViewAction = nil + } + } + + // MARK: Private API + + @ViewBuilder + private func buildBody() -> some View { + switch viewModel.searchResultsViewStateKs { + case .idle, .loading: + if viewModel.state.query.isEmpty { + SearchPlaceholderSuggestionsView() + } else { + SearchPlaceholderLoadingView() + } + case .error: + PlaceholderView( + configuration: .networkError( + titleText: Strings.Search.placeholderErrorDescription, + buttonText: Strings.StepQuiz.retryButton, + backgroundColor: .clear, + action: viewModel.doRetrySearch + ) + ) + case .empty: + SearchPlaceholderEmptyView() + case .content(let data): + List(data.searchResults) { searchResult in + Button( + action: { + viewModel.doSearchResultsItemPresentation(id: searchResult.id.int64Value) + }, + label: { + HStack { + Text(searchResult.title) + Spacer() + NavigationLink.empty + } + } + ) + .accentColor(.primaryText) + } + .listStyle(.insetGrouped) + } + } +} + +// MARK: - SearchView (ViewAction) - + +@available(iOS 15.0, *) +private extension SearchView { + func handleViewAction( + _ viewAction: SearchFeatureActionViewAction + ) { + switch SearchFeatureActionViewActionKs(viewAction) { + case .openStepScreen(let openStepScreenViewAction): + let assembly = StepAssembly(stepRoute: openStepScreenViewAction.stepRoute) + stackRouter.pushViewController(assembly.makeModule()) + case .openStepScreenFailed(let openStepScreenFailedViewAction): + ProgressHUD.showError(status: openStepScreenFailedViewAction.message) + } + } +} + +// MARK: - SearchView (Preview) - + +@available(iOS 17, *) +#Preview { + SearchAssembly().makeModule() +} diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StudyPlan/StudyPlanViewModel.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StudyPlan/StudyPlanViewModel.swift index ec15aa46ef..9a505f67c4 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StudyPlan/StudyPlanViewModel.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StudyPlan/StudyPlanViewModel.swift @@ -80,6 +80,14 @@ final class StudyPlanViewModel: FeatureViewModel< ) } + func doSearchBarButtonItemAction() { + onNewMessage( + StudyPlanScreenFeatureMessageGamificationToolbarMessage( + message: GamificationToolbarFeatureMessageClickedSearch() + ) + ) + } + func doReloadProblemsLimit() { onNewMessage( StudyPlanScreenFeatureMessageProblemsLimitMessage( diff --git a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StudyPlan/Views/StudyPlanView.swift b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StudyPlan/Views/StudyPlanView.swift index 578ab83d57..1d0381d351 100644 --- a/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StudyPlan/Views/StudyPlanView.swift +++ b/iosHyperskillApp/iosHyperskillApp/Sources/Modules/StudyPlan/Views/StudyPlanView.swift @@ -36,7 +36,8 @@ struct StudyPlanView: View { GamificationToolbarContent( viewStateKs: viewModel.gamificationToolbarViewStateKs, onStreakTap: viewModel.doStreakBarButtonItemAction, - onProgressTap: viewModel.doProgressBarButtonItemAction + onProgressTap: viewModel.doProgressBarButtonItemAction, + onSearchTap: viewModel.doSearchBarButtonItemAction ) } .onAppear { diff --git a/shared/src/commonMain/resources/MR/base/strings.xml b/shared/src/commonMain/resources/MR/base/strings.xml index d33d6a9d14..f8611abe15 100644 --- a/shared/src/commonMain/resources/MR/base/strings.xml +++ b/shared/src/commonMain/resources/MR/base/strings.xml @@ -537,7 +537,11 @@ again later. Nothing found. Try changing your search query. + Nothing found + Try changing your search query Oops! We were unable to perform the search. + Find topic + Search all of Hyperskill for topic theory Project Mastery