From f989fe2be811b00a7c62c0e577510136a79d1f02 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Thu, 6 Nov 2025 15:53:17 +0100 Subject: [PATCH 01/20] add query --- .../android/apollo/octopus/schema.graphqls | 99 +++++++++++++++---- .../src/main/graphql/QueryPuppyGuide.graphql | 14 +++ .../help/center/data/GetPuppyGuideUseCase.kt | 51 ++++++++++ .../navigation/HelpCenterDestination.kt | 9 ++ 4 files changed, 154 insertions(+), 19 deletions(-) create mode 100644 app/feature/feature-help-center/src/main/graphql/QueryPuppyGuide.graphql create mode 100644 app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt diff --git a/app/apollo/apollo-octopus-public/src/commonMain/graphql/com/hedvig/android/apollo/octopus/schema.graphqls b/app/apollo/apollo-octopus-public/src/commonMain/graphql/com/hedvig/android/apollo/octopus/schema.graphqls index 12d933cf63..aafe8b4ca0 100644 --- a/app/apollo/apollo-octopus-public/src/commonMain/graphql/com/hedvig/android/apollo/octopus/schema.graphqls +++ b/app/apollo/apollo-octopus-public/src/commonMain/graphql/com/hedvig/android/apollo/octopus/schema.graphqls @@ -198,19 +198,6 @@ input BrowserInfo { timeZoneOffset: Int! javaEnabled: Boolean! } -""" -Yearly savings from bundle discount -""" -type BundleYearlySavings { - """ - Total yearly savings amount from bundle discount - """ - amount: Money! - """ - Whether the bundle discount covers the full period (true) or has pending/future items (false) - """ - bundleDiscountCoversFullPeriod: Boolean! -} type CampaignDiscount { """ The type of discount, determines the relevancy of the other fields. @@ -289,10 +276,6 @@ type CartBundleDiscountInfo { Number of products in cart that are eligible for bundle discount """ eligibleProductCount: Int - """ - Yearly savings from bundle discount - """ - yearlySavings: BundleYearlySavings! } type CartCost { """ @@ -635,6 +618,7 @@ Root type expressing the entire flow for members trying to report a new claim. type ClaimIntent { id: ID! currentStep: ClaimIntentStep! + sourceMessages: [ClaimIntentSourceMessage!] } input ClaimIntentFormSubmitInputField { fieldId: ID! @@ -644,6 +628,17 @@ type ClaimIntentMutationOutput { intent: ClaimIntent userError: UserError } +type ClaimIntentSourceMessage { + id: ID! + text: String! +} +input ClaimIntentStartInput { + """ + Optionally inject a chat message ID to start the claim intent from. This will replace the audio recording + as the first step, using the chat history as the implicit first step. + """ + sourceMessageId: ID +} """ Represents a single step in the claim submission flow. Steps have some universally shared properties, as well as variable `content` which comes in many different @@ -657,7 +652,7 @@ type ClaimIntentStep { """ A union of all the different kinds of "step content". """ -union ClaimIntentStepContent = ClaimIntentStepContentForm|ClaimIntentStepContentTask|ClaimIntentStepContentAudioRecording|ClaimIntentStepContentSummary +union ClaimIntentStepContent = ClaimIntentStepContentForm|ClaimIntentStepContentTask|ClaimIntentStepContentAudioRecording|ClaimIntentStepContentSummary|ClaimIntentStepContentOutcome """ An audio recording step is one where the user is meant to record some audio. Submitted using `Mutation.claimIntentSubmitAudio`. @@ -735,6 +730,13 @@ This typically will be backed by a String - but other formats could appear. """ scalar ClaimIntentStepContentFormFieldValue """ +A step that shows the outcome of a claim intent. +This is a terminal step - there is no way to submit it. +""" +type ClaimIntentStepContentOutcome { + claimId: ID! +} +""" A read-only step where the entire claim intent information is displayed before submitting. Submitted using `Mutation.claimIntentSubmitSummary`. """ @@ -748,6 +750,8 @@ type ClaimIntentStepContentSummaryAudioRecording { } type ClaimIntentStepContentSummaryFileUpload { url: Url! + contentType: String! + fileName: String! } type ClaimIntentStepContentSummaryItem { title: String! @@ -1949,6 +1953,11 @@ type Member { """ crossSellV2(input: CrossSellInput!): CrossSellV2! """ + Young Pet Guide stories for the member. + Returns a list of educational content stories for young pet owners. + """ + puppyGuideStories: [PuppyGuideStory!]! + """ Fetch all the active contracts for this member. Active contracts include all insurances that are either active today, or to-be-active in the future. """ @@ -2137,6 +2146,7 @@ input MemberLogDeviceInput { os: String! brand: String! model: String! + pushNotificationEnabled: Boolean } """ Container for mutations that refer to the currently authenticated member. @@ -2694,7 +2704,7 @@ type Mutation { """ Create or (reuse and existing) unsubmitted claim intent. """ - claimIntentStart: ClaimIntent! + claimIntentStart(input: ClaimIntentStartInput): ClaimIntent! """ Submit a step containing a `ClaimIntentStepContentForm`. """ @@ -2822,6 +2832,10 @@ type Mutation { """ productOfferAddonsSelect(productOfferId: UUID!, addonIds: [UUID!]!): ProductOffersMutationOutput! """ + Mark a young pet guide story as read for a specific member. + """ + puppyGuideEngagement(engagement: PuppyEngagementInput!): PuppyGuideStoryMutationOutput! + """ Update the customer of the shop session. Only non-null fields will be changed. Can trigger automatic lookup of other information. The session can be placed in a "point of no return" state where it is no longer legal to update the customer, @@ -3405,6 +3419,53 @@ type ProductVariantComparisonRow { """ covered: [String!]! } +input PuppyEngagementInput { + name: String! + rating: Int + opened: Boolean + read: Boolean + closed: Boolean +} +type PuppyGuideStory { + """ + The unique name/identifier of the story. + """ + name: String! + """ + The display title of the story. + """ + title: String! + """ + The subtitle or description of the story. + """ + subtitle: String! + """ + The main content of the story. + """ + content: String! + """ + The image associated with this story. + """ + image: String! + """ + Categories this story belongs to. + """ + categories: [String!]! + """ + The date when the story was marked as read by the user. + """ + read: Boolean! + """ + The user's rating of the story. + """ + rating: Int +} +type PuppyGuideStoryMutationOutput { + """ + Indicates whether the mutation was successful. + """ + success: Boolean! +} type Query { """ Return a conversation for a given ID. diff --git a/app/feature/feature-help-center/src/main/graphql/QueryPuppyGuide.graphql b/app/feature/feature-help-center/src/main/graphql/QueryPuppyGuide.graphql new file mode 100644 index 0000000000..0c4c92ea65 --- /dev/null +++ b/app/feature/feature-help-center/src/main/graphql/QueryPuppyGuide.graphql @@ -0,0 +1,14 @@ +query PuppyGuide { + currentMember { + puppyGuideStories { + categories + content + image + name + rating + read + subtitle + title + } + } +} diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt new file mode 100644 index 0000000000..b9968e1a9f --- /dev/null +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt @@ -0,0 +1,51 @@ +package com.hedvig.android.feature.help.center.data + +import arrow.core.Either +import arrow.core.raise.either +import com.apollographql.apollo.ApolloClient +import com.hedvig.android.apollo.safeExecute +import com.hedvig.android.core.common.ErrorMessage +import com.hedvig.android.logger.logcat +import octopus.PuppyGuideQuery + +internal interface GetPuppyGuideUseCase { + suspend fun invoke(): Either?> +} +internal class GetPuppyGuideUseCaseImpl( + private val apolloClient: ApolloClient, +) : GetPuppyGuideUseCase { + override suspend fun invoke(): Either?> { + return either { + apolloClient + .query(PuppyGuideQuery()) + .safeExecute() + .onLeft { logcat { "Cannot load PuppyGuideStory: $it" } } + .getOrNull() + ?.currentMember + ?.puppyGuideStories + ?.map { story -> + PuppyGuideStory( + categories = story.categories, + content = story.content, + image = story.image, + name = story.name, + rating = story.rating, + isRead = story.read, + subtitle = story.subtitle, + title = story.title, + ) + } + } + } +} + +internal data class PuppyGuideStory( + val categories : List, + val content : String, + val image: String, + val name:String, + val rating: Int?, + val isRead: Boolean, + val subtitle: String, + val title: String +) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt index c8f824a270..cdc6f57bca 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt @@ -43,6 +43,15 @@ internal sealed interface HelpCenterDestinations { override val typeList: List = listOf(typeOf>()) } } + + @Serializable + data class PuppyGuide( + val puppyArticles: List + ): HelpCenterDestinations, Destination { + companion object : DestinationNavTypeAware { + override val typeList: List = listOf(typeOf>()) + } + } } val helpCenterCrossSellBottomSheetPermittingDestinations: List> = listOf( From fc8243fe51f2d1468a9cc6857158740708e74085 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Thu, 6 Nov 2025 17:37:15 +0100 Subject: [PATCH 02/20] add basic vm structure and useCase --- .../android/apollo/octopus/schema.graphqls | 19 ++++++ .../feature/help/center/HelpCenterGraph.kt | 9 +++ .../help/center/HelpCenterPresenter.kt | 7 +- .../help/center/HelpCenterViewModel.kt | 5 ++ .../help/center/data/GetPuppyGuideUseCase.kt | 2 + .../help/center/di/HelpCenterModule.kt | 7 ++ .../center/home/HelpCenterHomeDestination.kt | 28 ++++++-- .../navigation/HelpCenterDestination.kt | 1 + .../puppyguide/PuppyArticleDestination.kt | 7 ++ .../puppyguide/PuppyArticleViewModel.kt | 45 +++++++++++++ .../puppyguide/PuppyGuideDestination.kt | 9 +++ .../center/puppyguide/PuppyGuideViewModel.kt | 66 +++++++++++++++++++ 12 files changed, 197 insertions(+), 8 deletions(-) create mode 100644 app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt create mode 100644 app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt create mode 100644 app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt create mode 100644 app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt diff --git a/app/apollo/apollo-octopus-public/src/commonMain/graphql/com/hedvig/android/apollo/octopus/schema.graphqls b/app/apollo/apollo-octopus-public/src/commonMain/graphql/com/hedvig/android/apollo/octopus/schema.graphqls index aafe8b4ca0..25752d5b09 100644 --- a/app/apollo/apollo-octopus-public/src/commonMain/graphql/com/hedvig/android/apollo/octopus/schema.graphqls +++ b/app/apollo/apollo-octopus-public/src/commonMain/graphql/com/hedvig/android/apollo/octopus/schema.graphqls @@ -1897,6 +1897,8 @@ type Member { claims: [Claim!]! claimsActive: [Claim!]! claimsHistory: [Claim!]! + partnerClaimsActive: [PartnerClaim!]! + partnerClaimsHistory: [PartnerClaim!]! firstName: String! lastName: String! ssn: String @@ -2914,6 +2916,22 @@ type Mutation { """ upsellTravelAddonActivate(quoteId: ID!, addonId: ID!): UpsellTravelAddonActivationOutput! } +type PartnerClaim { + id: ID! + externalId: String! + exposureDisplayName: String + status: ClaimStatus + submittedAt: Date! + payoutAmount: Money + associatedTypeOfContract: String + claimType: String + handlerEmail: String + displayItems: [ClaimDisplayItem!]! + """ + Terms & conditions for the claim found using claims contractId and dateOfOccurrence, otherwise null. + """ + productVariant: ProductVariant +} type PartnerData { sas: SasPartnerData } @@ -3473,6 +3491,7 @@ type Query { """ conversation(id: UUID!): Conversation claim(id: ID!): Claim + partnerClaim(id: ID!): PartnerClaim claimIntent(id: ID!): ClaimIntent! personalInformation(input: PersonalInformationInput!): PersonalInformation """ diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt index 7b200246a4..adf705cb48 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt @@ -12,6 +12,8 @@ import com.hedvig.android.feature.help.center.home.HelpCenterHomeDestination import com.hedvig.android.feature.help.center.navigation.HelpCenterDestination import com.hedvig.android.feature.help.center.navigation.HelpCenterDestinations import com.hedvig.android.feature.help.center.navigation.HelpCenterDestinations.Emergency +import com.hedvig.android.feature.help.center.puppyguide.PuppyGuideDestination +import com.hedvig.android.feature.help.center.puppyguide.PuppyGuideViewModel import com.hedvig.android.feature.help.center.question.HelpCenterQuestionDestination import com.hedvig.android.feature.help.center.question.HelpCenterQuestionViewModel import com.hedvig.android.feature.help.center.topic.HelpCenterTopicDestination @@ -139,6 +141,13 @@ fun NavGraphBuilder.helpCenterGraph( openUrl = openUrl, ) } + + navdestination(HelpCenterDestinations.PuppyGuide) { + val viewModel = koinViewModel { + parametersOf(puppyArticles) + } + PuppyGuideDestination(viewModel) + } } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt index 8d20b0d420..a304487086 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt @@ -24,7 +24,9 @@ import com.hedvig.android.feature.help.center.HelpCenterUiState.Search import com.hedvig.android.feature.help.center.data.FAQItem import com.hedvig.android.feature.help.center.data.FAQTopic import com.hedvig.android.feature.help.center.data.GetHelpCenterFAQUseCase +import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCase import com.hedvig.android.feature.help.center.data.GetQuickLinksUseCase +import com.hedvig.android.feature.help.center.data.PuppyGuideStory import com.hedvig.android.feature.help.center.data.QuickLinkDestination import com.hedvig.android.feature.help.center.model.QuickAction import com.hedvig.android.molecule.public.MoleculePresenter @@ -61,6 +63,7 @@ internal data class HelpCenterUiState( val search: Search?, val showNavigateToInboxButton: Boolean, val destinationToNavigate: QuickLinkDestination? = null, + val puppyGuide: List? ) { data class QuickLink(val quickAction: QuickAction) @@ -93,6 +96,7 @@ internal class HelpCenterPresenter( private val getQuickLinksUseCase: GetQuickLinksUseCase, private val hasAnyActiveConversationUseCase: HasAnyActiveConversationUseCase, private val getHelpCenterFAQUseCase: GetHelpCenterFAQUseCase, + private val getPuppyGuideUseCase: GetPuppyGuideUseCase ) : MoleculePresenter { @Composable override fun MoleculePresenterScope.present(lastState: HelpCenterUiState): HelpCenterUiState { @@ -152,7 +156,8 @@ internal class HelpCenterPresenter( combine( flow = flow { emit(getQuickLinksUseCase.invoke()) }, flow2 = flow { emit(getHelpCenterFAQUseCase.invoke()) }, - ) { quickLinks, faq -> + flow3 = flow { emit(getPuppyGuideUseCase.invoke()) } + ) { quickLinks, faq, puppyGuide -> quickLinksUiState = quickLinks.fold( ifLeft = { HelpCenterUiState.QuickLinkUiState.NoQuickLinks diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt index 8c4dd9354a..b9a0bcdba3 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt @@ -2,6 +2,7 @@ package com.hedvig.android.feature.help.center import com.hedvig.android.data.conversations.HasAnyActiveConversationUseCase import com.hedvig.android.feature.help.center.data.GetHelpCenterFAQUseCase +import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCase import com.hedvig.android.feature.help.center.data.GetQuickLinksUseCase import com.hedvig.android.molecule.android.MoleculeViewModel @@ -9,6 +10,8 @@ internal class HelpCenterViewModel( getQuickLinksUseCase: GetQuickLinksUseCase, hasAnyActiveConversationUseCase: HasAnyActiveConversationUseCase, getHelpCenterFAQUseCase: GetHelpCenterFAQUseCase, + getPuppyGuideUseCase: GetPuppyGuideUseCase + ) : MoleculeViewModel( initialState = HelpCenterUiState( topics = listOf(), @@ -17,10 +20,12 @@ internal class HelpCenterViewModel( quickLinksUiState = HelpCenterUiState.QuickLinkUiState.Loading, search = null, showNavigateToInboxButton = false, + puppyGuide = null ), presenter = HelpCenterPresenter( getQuickLinksUseCase = getQuickLinksUseCase, hasAnyActiveConversationUseCase = hasAnyActiveConversationUseCase, getHelpCenterFAQUseCase = getHelpCenterFAQUseCase, + getPuppyGuideUseCase = getPuppyGuideUseCase ), ) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt index b9968e1a9f..9a586b4572 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt @@ -6,6 +6,7 @@ import com.apollographql.apollo.ApolloClient import com.hedvig.android.apollo.safeExecute import com.hedvig.android.core.common.ErrorMessage import com.hedvig.android.logger.logcat +import kotlinx.serialization.Serializable import octopus.PuppyGuideQuery internal interface GetPuppyGuideUseCase { @@ -39,6 +40,7 @@ internal class GetPuppyGuideUseCaseImpl( } } +@Serializable internal data class PuppyGuideStory( val categories : List, val content : String, diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt index 053df4eaa4..a7fc519b8b 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt @@ -14,6 +14,8 @@ import com.hedvig.android.feature.help.center.data.GetInsuranceForEditCoInsuredU import com.hedvig.android.feature.help.center.data.GetInsuranceForEditCoInsuredUseCaseImpl import com.hedvig.android.feature.help.center.data.GetMemberActionsUseCase import com.hedvig.android.feature.help.center.data.GetMemberActionsUseCaseImpl +import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCase +import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCaseImpl import com.hedvig.android.feature.help.center.data.GetQuickLinksUseCase import com.hedvig.android.feature.help.center.question.HelpCenterQuestionViewModel import com.hedvig.android.feature.help.center.topic.HelpCenterTopicViewModel @@ -31,6 +33,10 @@ val helpCenterModule = module { GetHelpCenterTopicUseCaseImpl(get()) } + single { + GetPuppyGuideUseCaseImpl(get()) + } + single { GetQuickLinksUseCase( apolloClient = get(), @@ -54,6 +60,7 @@ val helpCenterModule = module { getQuickLinksUseCase = get(), hasAnyActiveConversationUseCase = get(), getHelpCenterFAQUseCase = get(), + getPuppyGuideUseCase = get() ) } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt index 3f1cf5f01a..af71ff8e8d 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt @@ -99,6 +99,7 @@ import com.hedvig.android.feature.help.center.HelpCenterUiState import com.hedvig.android.feature.help.center.HelpCenterViewModel import com.hedvig.android.feature.help.center.data.FAQItem import com.hedvig.android.feature.help.center.data.FAQTopic +import com.hedvig.android.feature.help.center.data.PuppyGuideStory import com.hedvig.android.feature.help.center.data.QuickLinkDestination import com.hedvig.android.feature.help.center.model.QuickAction import com.hedvig.android.feature.help.center.model.QuickAction.MultiSelectExpandedLink @@ -157,6 +158,7 @@ internal fun HelpCenterHomeDestination( reload = { viewModel.emit(HelpCenterEvent.ReloadFAQAndQuickLinks) }, + puppyGuide = uiState.puppyGuide ) } @@ -165,6 +167,7 @@ private fun HelpCenterHomeScreen( search: HelpCenterUiState.Search?, topics: List, questions: List, + puppyGuide: List?, quickLinksUiState: HelpCenterUiState.QuickLinkUiState, selectedQuickAction: QuickAction?, onNavigateToTopic: (topicId: String) -> Unit, @@ -326,6 +329,7 @@ private fun HelpCenterHomeScreen( showNavigateToInboxButton = showNavigateToInboxButton, onNavigateToInbox = onNavigateToInbox, onNavigateToNewConversation = onNavigateToNewConversation, + puppyGuide = puppyGuide ) } else { SearchResults( @@ -352,6 +356,7 @@ private fun ContentWithoutSearch( topics: List, onNavigateToTopic: (topicId: String) -> Unit, questions: List, + puppyGuide: List?, onNavigateToQuestion: (questionId: String) -> Unit, showNavigateToInboxButton: Boolean, onNavigateToInbox: () -> Unit, @@ -363,13 +368,17 @@ private fun ContentWithoutSearch( Modifier.padding(WindowInsets.safeDrawing.only(WindowInsetsSides.Horizontal).asPaddingValues()), ) { Spacer(Modifier.height(32.dp)) - Image( - painter = painterResource(id = R.drawable.pillow_hedvig), - contentDescription = null, - modifier = Modifier - .size(170.dp) - .align(Alignment.CenterHorizontally), - ) + if (puppyGuide!=null) { + PuppyGuideCard() + } else { + Image( + painter = painterResource(id = R.drawable.pillow_hedvig), + contentDescription = null, + modifier = Modifier + .size(170.dp) + .align(Alignment.CenterHorizontally), + ) + } Spacer(Modifier.height(50.dp)) Column( verticalArrangement = Arrangement.spacedBy(8.dp), @@ -445,6 +454,11 @@ private fun ContentWithoutSearch( } } +@Composable +private fun PuppyGuideCard() { + TODO() +} + @Composable private fun SearchResults( activeSearchState: HelpCenterUiState.ActiveSearchState, diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt index cdc6f57bca..6d07041255 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt @@ -1,5 +1,6 @@ package com.hedvig.android.feature.help.center.navigation +import com.hedvig.android.feature.help.center.data.PuppyGuideStory import com.hedvig.android.navigation.common.Destination import com.hedvig.android.navigation.common.DestinationNavTypeAware import com.hedvig.android.ui.emergency.FirstVetSection diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt new file mode 100644 index 0000000000..df9bfc0c95 --- /dev/null +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt @@ -0,0 +1,7 @@ +package com.hedvig.android.feature.help.center.puppyguide + +import androidx.compose.runtime.Composable + +@Composable +internal fun PuppyArticleDestination() { +} diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt new file mode 100644 index 0000000000..daa3f68b05 --- /dev/null +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt @@ -0,0 +1,45 @@ +package com.hedvig.android.feature.help.center.puppyguide + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import com.hedvig.android.feature.help.center.data.PuppyGuideStory +import com.hedvig.android.molecule.android.MoleculeViewModel +import com.hedvig.android.molecule.public.MoleculePresenter +import com.hedvig.android.molecule.public.MoleculePresenterScope + +internal class PuppyArticleViewModel( + story: PuppyGuideStory, +) : MoleculeViewModel( + presenter = PuppyArticlePresenter(), + initialState = PuppyArticleUiState.Success(story), + ) + +private class PuppyArticlePresenter( +) : MoleculePresenter { + @Composable + override fun MoleculePresenterScope.present( + lastState: PuppyArticleUiState, + ): PuppyArticleUiState { + var currentState by remember { mutableStateOf(lastState) } + + CollectEvents { event -> + when (event) { + // Handle events here if needed + else -> { + //todo + } + } + } + + return currentState + } +} + +internal sealed interface PuppyArticleEvent + +internal sealed interface PuppyArticleUiState { + data class Success(val story: PuppyGuideStory) : PuppyArticleUiState +} diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt new file mode 100644 index 0000000000..207333b8bd --- /dev/null +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -0,0 +1,9 @@ +package com.hedvig.android.feature.help.center.puppyguide + +import androidx.compose.runtime.Composable + +@Composable +internal fun PuppyGuideDestination( + viewModel: PuppyGuideViewModel +) { +} diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt new file mode 100644 index 0000000000..8cc910679f --- /dev/null +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt @@ -0,0 +1,66 @@ +package com.hedvig.android.feature.help.center.puppyguide + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCase +import com.hedvig.android.feature.help.center.data.PuppyGuideStory +import com.hedvig.android.molecule.android.MoleculeViewModel +import com.hedvig.android.molecule.public.MoleculePresenter +import com.hedvig.android.molecule.public.MoleculePresenterScope + +internal class PuppyGuideViewModel( + getPuppyGuideUseCase: GetPuppyGuideUseCase, +) : MoleculeViewModel( + presenter = PuppyGuidePresenter(getPuppyGuideUseCase), + initialState = PuppyGuideUiState.Loading, + ) + +private class PuppyGuidePresenter( + private val getPuppyGuideUseCase: GetPuppyGuideUseCase, +) : MoleculePresenter { + @Composable + override fun MoleculePresenterScope.present( + lastState: PuppyGuideUiState, + ): PuppyGuideUiState { + var currentState by remember { mutableStateOf(lastState) } + var loadIteration by remember { mutableIntStateOf(0) } + + CollectEvents { event -> + when (event) { + PuppyGuideEvent.Reload -> loadIteration++ + } + } + + LaunchedEffect(loadIteration) { + getPuppyGuideUseCase.invoke().fold( + ifLeft = { + currentState = PuppyGuideUiState.Failure + }, + ifRight = { stories -> + currentState = if (stories == null) { + PuppyGuideUiState.Failure + } else { + PuppyGuideUiState.Success(stories) + } + }, + ) + } + + return currentState + } +} + +internal sealed interface PuppyGuideEvent { + data object Reload : PuppyGuideEvent +} + +internal sealed interface PuppyGuideUiState { + data class Success(val stories: List) : PuppyGuideUiState + data object Loading : PuppyGuideUiState + data object Failure : PuppyGuideUiState +} From be3936be38614902950a103e4160996c916b5a52 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Thu, 6 Nov 2025 21:00:48 +0100 Subject: [PATCH 03/20] help center home screen changes --- .../src/main/res/values-sv-rSE/strings.xml | 7 ++ .../src/main/res/values/strings.xml | 7 ++ .../feature/help/center/HelpCenterGraph.kt | 13 ++- .../help/center/HelpCenterPresenter.kt | 4 +- .../center/home/HelpCenterHomeDestination.kt | 98 +++++++++++++++--- .../navigation/HelpCenterDestination.kt | 8 +- .../main/res/drawable/hundar_badar_pet.jpg | Bin 0 -> 260166 bytes 7 files changed, 111 insertions(+), 26 deletions(-) create mode 100644 app/feature/feature-help-center/src/main/res/drawable/hundar_badar_pet.jpg diff --git a/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml b/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml index 80040470e5..bc56479727 100644 --- a/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml +++ b/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml @@ -184,6 +184,7 @@ Gör röstinspelning Beskriv i text Din skadeanmälan + Händelsedatum Vilken försäkring gäller det? Vad gäller ditt ärende? Berätta vad som hände @@ -399,6 +400,7 @@ Invalid National Identity Number Vi försöker reparera i första hand, men om din %1$s skulle behöva ersättas helt (ex. om den blivit stulen) ersätts du med **%2$d\u0025** av inköpspriset **%3$d kr**, alltså **%4$d kr**. Värdering + Fråga angående skadeanmälan - Fordon reg. %1$s Välj land och språk Logga ut Få ett prisförslag @@ -525,6 +527,9 @@ Koppla autogiro Reseintyg Din profil + Läs guider + Hjälpsamma guider för dig och din valp + Valpguide Inte nu Slå på Läs mer @@ -824,6 +829,7 @@ Stängt Dina tidigare skador visas här automatiskt efter att de har hanterats. Ingen skadehistorik + Ditt skadeärende har stängts. Ditt skadeärende har stängts eftersom vi inte har fått någon återkoppling från dig. Se konversation för mer information. Din skadeanmälan granskas av en av våra försäkringsspecialister. Vi hör av oss snart med en uppdatering. Vi har återöppnat din skadeanmälan och en av våra försäkringsspecialister granskar den. Vi hör av oss snart med en uppdatering. @@ -853,6 +859,7 @@ Kvitto saknas Inskickat Uppladdade filer + Ta kontakt med skadeteamet Om du avslutar går du tillbaka till startsidan och dina inmatade uppgifter kommer att gå förlorade. Fortsätt Edit diff --git a/app/core/core-resources/src/main/res/values/strings.xml b/app/core/core-resources/src/main/res/values/strings.xml index 73a2be60fc..e11939cc57 100644 --- a/app/core/core-resources/src/main/res/values/strings.xml +++ b/app/core/core-resources/src/main/res/values/strings.xml @@ -184,6 +184,7 @@ Use voice recording Describe using text Your claim + Date of occurrence What insurance is it about? What does your claim concern? Tell us what happened @@ -399,6 +400,7 @@ Invalid National Identity Number We first try to repair your %1$s, but if it needs to be replaced (e.g. if it was stolen) you will be compensated **%2$d\u0025** of the purchase price **%3$d SEK**, i.e **%4$d SEK**. Valuation + Question regarding claim, Vehicle reg. %1$s Preferences Logout Get a price quote @@ -525,6 +527,9 @@ Connect payment Travel certificates Your profile + Go to guides + Helpful guides for you and your puppy + Puppy Guide Not now Activate More info @@ -824,6 +829,7 @@ Closed Your past claims will appear here automatically once processed. No claims in history + Your claim was closed. Your claim was closed as we didn’t hear back from you. Please see conversation for more details. Your claim is being reviewed by one of our insurance specialists. We\'ll get back to you soon with an update. We have reopened your claim and one of our insurance specialists is reviewing it. We\'ll get back to you soon with an update. @@ -853,6 +859,7 @@ Receipt missing Submitted Uploaded files + Contact the claims team If you exit, you\'ll go back to the start page and your inputted data will be lost. Continue Edit diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt index adf705cb48..f4c02fd12e 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt @@ -85,6 +85,13 @@ fun NavGraphBuilder.helpCenterGraph( onNavigateToNewConversation(backStackEntry) }, onNavigateUp = navigator::navigateUp, + onNavigateToPuppyGuide = { + with(navigator) { + backStackEntry.navigate( + HelpCenterDestinations.PuppyGuide, + ) + } + } ) } @@ -142,10 +149,8 @@ fun NavGraphBuilder.helpCenterGraph( ) } - navdestination(HelpCenterDestinations.PuppyGuide) { - val viewModel = koinViewModel { - parametersOf(puppyArticles) - } + navdestination { + val viewModel = koinViewModel() PuppyGuideDestination(viewModel) } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt index a304487086..cba27bae33 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt @@ -157,7 +157,7 @@ internal class HelpCenterPresenter( flow = flow { emit(getQuickLinksUseCase.invoke()) }, flow2 = flow { emit(getHelpCenterFAQUseCase.invoke()) }, flow3 = flow { emit(getPuppyGuideUseCase.invoke()) } - ) { quickLinks, faq, puppyGuide -> + ) { quickLinks, faq, puppyGuideResult -> quickLinksUiState = quickLinks.fold( ifLeft = { HelpCenterUiState.QuickLinkUiState.NoQuickLinks @@ -175,12 +175,14 @@ internal class HelpCenterPresenter( ) val topics = faq.getOrNull()?.topics ?: listOf() val questions = faq.getOrNull()?.commonFAQ ?: listOf() + val puppyGuide = puppyGuideResult.getOrNull() currentState = currentState.copy( topics = topics, questions = questions, quickLinksUiState = quickLinksUiState, selectedQuickAction = selectedQuickAction, showNavigateToInboxButton = hasAnyActiveConversation, + puppyGuide = puppyGuide ) }.collect() } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt index af71ff8e8d..68a6bb95e1 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt @@ -15,6 +15,7 @@ import androidx.compose.animation.shrinkVertically import androidx.compose.animation.togetherWith import androidx.compose.foundation.Image import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -46,10 +47,13 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.shadow import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalFocusManager @@ -71,6 +75,7 @@ import com.hedvig.android.compose.ui.withoutPlacement import com.hedvig.android.design.system.hedvig.ButtonDefaults.ButtonSize.Large import com.hedvig.android.design.system.hedvig.DialogDefaults import com.hedvig.android.design.system.hedvig.HedvigButton +import com.hedvig.android.design.system.hedvig.HedvigButtonGhostWithBorder import com.hedvig.android.design.system.hedvig.HedvigCard import com.hedvig.android.design.system.hedvig.HedvigDialog import com.hedvig.android.design.system.hedvig.HedvigErrorSection @@ -119,6 +124,7 @@ internal fun HelpCenterHomeDestination( onNavigateUp: () -> Unit, onNavigateToInbox: () -> Unit, onNavigateToNewConversation: () -> Unit, + onNavigateToPuppyGuide: () -> Unit, ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() LaunchedEffect(uiState.destinationToNavigate) { @@ -158,7 +164,8 @@ internal fun HelpCenterHomeDestination( reload = { viewModel.emit(HelpCenterEvent.ReloadFAQAndQuickLinks) }, - puppyGuide = uiState.puppyGuide + puppyGuide = uiState.puppyGuide, + onNavigateToPuppyGuide = onNavigateToPuppyGuide ) } @@ -182,6 +189,7 @@ private fun HelpCenterHomeScreen( onUpdateSearchResults: (String, HelpCenterUiState.HelpSearchResults?) -> Unit, onClearSearch: () -> Unit, reload: () -> Unit, + onNavigateToPuppyGuide: () -> Unit, ) { when (selectedQuickAction) { is StandaloneQuickLink -> { @@ -329,7 +337,8 @@ private fun HelpCenterHomeScreen( showNavigateToInboxButton = showNavigateToInboxButton, onNavigateToInbox = onNavigateToInbox, onNavigateToNewConversation = onNavigateToNewConversation, - puppyGuide = puppyGuide + puppyGuide = puppyGuide, + onNavigateToPuppyGuide = onNavigateToPuppyGuide ) } else { SearchResults( @@ -361,6 +370,7 @@ private fun ContentWithoutSearch( showNavigateToInboxButton: Boolean, onNavigateToInbox: () -> Unit, onNavigateToNewConversation: () -> Unit, + onNavigateToPuppyGuide: () -> Unit, ) { Column { Column( @@ -368,16 +378,26 @@ private fun ContentWithoutSearch( Modifier.padding(WindowInsets.safeDrawing.only(WindowInsetsSides.Horizontal).asPaddingValues()), ) { Spacer(Modifier.height(32.dp)) - if (puppyGuide!=null) { - PuppyGuideCard() - } else { - Image( - painter = painterResource(id = R.drawable.pillow_hedvig), - contentDescription = null, - modifier = Modifier - .size(170.dp) - .align(Alignment.CenterHorizontally), - ) + AnimatedContent(puppyGuide!=null, + contentAlignment = Alignment.Center) { puppyGuideAvailable -> + Column( + Modifier.fillMaxWidth() + ) { + if (puppyGuideAvailable) { + PuppyGuideCard( + onClick = onNavigateToPuppyGuide, + modifier = Modifier.padding(horizontal = 16.dp) + ) + } else { + Image( + painter = painterResource(id = R.drawable.pillow_hedvig), + contentDescription = null, + modifier = Modifier + .size(170.dp) + .align(Alignment.CenterHorizontally), + ) + } + } } Spacer(Modifier.height(50.dp)) Column( @@ -455,8 +475,43 @@ private fun ContentWithoutSearch( } @Composable -private fun PuppyGuideCard() { - TODO() +private fun PuppyGuideCard( + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { + HedvigCard( + color = HedvigTheme.colorScheme.backgroundPrimary, + modifier = modifier + .fillMaxWidth() + .shadow(1.dp, HedvigTheme.shapes.cornerXLarge) + .clickable(enabled = true) { + onClick() + } + ) { + Column { + Image( + painter = painterResource(id = com.hedvig.android.feature.help.center.R.drawable.hundar_badar_pet), + contentDescription = null, + contentScale = ContentScale.Crop, + modifier = Modifier + .height(182.dp) + .clip(HedvigTheme.shapes.cornerXLargeTop) + .align(Alignment.CenterHorizontally), + ) + Spacer(Modifier.height(16.dp)) + HedvigText(stringResource(R.string.PUPPY_GUIDE_TITLE), + modifier = Modifier.padding(horizontal = 16.dp)) + HedvigText(stringResource(R.string.PUPPY_GUIDE_SUBTITLE), + modifier = Modifier.padding(horizontal = 16.dp), + color = HedvigTheme.colorScheme.textSecondary) + Spacer(Modifier.height(16.dp)) + HedvigButtonGhostWithBorder( + stringResource(R.string.PUPPY_GUIDE_GO_BUTTON), + onClick = onClick, + modifier = Modifier.padding(horizontal = 16.dp).fillMaxWidth()) + Spacer(Modifier.height(16.dp)) + } + } } @Composable @@ -820,6 +875,17 @@ private fun PreviewHelpCenterHomeScreen( onUpdateSearchResults = { _, _ -> }, search = null, reload = {}, + puppyGuide = listOf(PuppyGuideStory( + categories = listOf("Food"), + content = "some content", + image = "", + name = "", + rating = 5, + isRead = false, + subtitle = "Subtitle", + title = "Title" + )), + onNavigateToPuppyGuide = {} ) } } @@ -865,6 +931,8 @@ private fun PreviewQuickLinkAnimations() { onUpdateSearchResults = { _, _ -> }, search = null, reload = {}, + puppyGuide = null, + onNavigateToPuppyGuide = {} ) } } @@ -894,6 +962,8 @@ private fun PreviewQuickLinkEmptyState() { onUpdateSearchResults = { _, _ -> }, search = null, reload = {}, + puppyGuide = null, + onNavigateToPuppyGuide = {} ) } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt index 6d07041255..0574931cae 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt @@ -46,13 +46,7 @@ internal sealed interface HelpCenterDestinations { } @Serializable - data class PuppyGuide( - val puppyArticles: List - ): HelpCenterDestinations, Destination { - companion object : DestinationNavTypeAware { - override val typeList: List = listOf(typeOf>()) - } - } + data object PuppyGuide: HelpCenterDestinations, Destination } val helpCenterCrossSellBottomSheetPermittingDestinations: List> = listOf( diff --git a/app/feature/feature-help-center/src/main/res/drawable/hundar_badar_pet.jpg b/app/feature/feature-help-center/src/main/res/drawable/hundar_badar_pet.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7e8f8bfc2944fb07dceb1896afb80fcfd848fa6 GIT binary patch literal 260166 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μf+Wp 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%0DBZ&KLBU$UJm^Cu~vPMNf1GY>>21t=K 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 %n>k;+oL-3&#^hZ?_nQobAY%FH^3!IPp_ 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 URR@ru6DPewm6~;$TW9+J0Oj}*HUIzs literal 0 HcmV?d00001 From 9218e49e280717d51dc8b860d740d4eb1fbc26c2 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Thu, 6 Nov 2025 21:14:59 +0100 Subject: [PATCH 04/20] label --- .../src/main/res/values-sv-rSE/strings.xml | 1 + .../src/main/res/values/strings.xml | 1 + .../help/center/di/HelpCenterModule.kt | 5 ++++ .../center/home/HelpCenterHomeDestination.kt | 29 ++++++++++++------- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml b/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml index bc56479727..c7a8101819 100644 --- a/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml +++ b/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml @@ -528,6 +528,7 @@ Reseintyg Din profil Läs guider + Utvalda guider Hjälpsamma guider för dig och din valp Valpguide Inte nu diff --git a/app/core/core-resources/src/main/res/values/strings.xml b/app/core/core-resources/src/main/res/values/strings.xml index e11939cc57..7913fcc097 100644 --- a/app/core/core-resources/src/main/res/values/strings.xml +++ b/app/core/core-resources/src/main/res/values/strings.xml @@ -528,6 +528,7 @@ Travel certificates Your profile Go to guides + Featured guides Helpful guides for you and your puppy Puppy Guide Not now diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt index a7fc519b8b..f679bed1b1 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt @@ -17,6 +17,7 @@ import com.hedvig.android.feature.help.center.data.GetMemberActionsUseCaseImpl import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCase import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCaseImpl import com.hedvig.android.feature.help.center.data.GetQuickLinksUseCase +import com.hedvig.android.feature.help.center.puppyguide.PuppyGuideViewModel import com.hedvig.android.feature.help.center.question.HelpCenterQuestionViewModel import com.hedvig.android.feature.help.center.topic.HelpCenterTopicViewModel import com.hedvig.android.featureflags.FeatureManager @@ -90,4 +91,8 @@ val helpCenterModule = module { hasAnyActiveConversationUseCase = get(), ) } + + viewModel { + PuppyGuideViewModel( getPuppyGuideUseCase = get()) + } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt index 68a6bb95e1..4e588916ac 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt @@ -83,6 +83,8 @@ import com.hedvig.android.design.system.hedvig.HedvigPreview import com.hedvig.android.design.system.hedvig.HedvigText import com.hedvig.android.design.system.hedvig.HedvigTextButton import com.hedvig.android.design.system.hedvig.HedvigTheme +import com.hedvig.android.design.system.hedvig.HighlightLabel +import com.hedvig.android.design.system.hedvig.HighlightLabelDefaults import com.hedvig.android.design.system.hedvig.HighlightLabelDefaults.HighlightColor import com.hedvig.android.design.system.hedvig.HighlightLabelDefaults.HighlightShade.LIGHT import com.hedvig.android.design.system.hedvig.Icon @@ -379,7 +381,8 @@ private fun ContentWithoutSearch( ) { Spacer(Modifier.height(32.dp)) AnimatedContent(puppyGuide!=null, - contentAlignment = Alignment.Center) { puppyGuideAvailable -> + contentAlignment = Alignment.Center, + ) { puppyGuideAvailable -> Column( Modifier.fillMaxWidth() ) { @@ -489,15 +492,21 @@ private fun PuppyGuideCard( } ) { Column { - Image( - painter = painterResource(id = com.hedvig.android.feature.help.center.R.drawable.hundar_badar_pet), - contentDescription = null, - contentScale = ContentScale.Crop, - modifier = Modifier - .height(182.dp) - .clip(HedvigTheme.shapes.cornerXLargeTop) - .align(Alignment.CenterHorizontally), - ) + Box(Modifier.align(Alignment.CenterHorizontally)) { + Image( + painter = painterResource(id = com.hedvig.android.feature.help.center.R.drawable.hundar_badar_pet), + contentDescription = null, + contentScale = ContentScale.Crop, + modifier = Modifier + .height(182.dp) + .clip(HedvigTheme.shapes.cornerXLargeTop), + ) + HighlightLabel(stringResource(R.string.PUPPY_GUIDE_LABEL), + size = HighlightLabelDefaults.HighLightSize.Small, + color = HighlightLabelDefaults.HighlightColor.Pink(LIGHT), + modifier= Modifier.padding(top = 16.dp, start = 16.dp)) + } + Spacer(Modifier.height(16.dp)) HedvigText(stringResource(R.string.PUPPY_GUIDE_TITLE), modifier = Modifier.padding(horizontal = 16.dp)) From ec0fa1bd08f1507515fa23fcbc4c0edb5aaadb50 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Thu, 6 Nov 2025 22:35:20 +0100 Subject: [PATCH 05/20] PuppyGuideDestination --- .../android/app/navigation/HedvigNavHost.kt | 1 + .../hedvig/android/app/ui/NavigationSuite.kt | 4 +- .../src/main/res/values-sv-rSE/strings.xml | 1 + .../src/main/res/values/strings.xml | 1 + .../feature-help-center/build.gradle.kts | 2 + .../feature/help/center/HelpCenterGraph.kt | 13 +- .../help/center/HelpCenterPresenter.kt | 8 +- .../help/center/HelpCenterViewModel.kt | 7 +- .../help/center/data/GetPuppyGuideUseCase.kt | 9 +- .../help/center/di/HelpCenterModule.kt | 4 +- .../center/home/HelpCenterHomeDestination.kt | 71 ++++--- .../navigation/HelpCenterDestination.kt | 2 +- .../puppyguide/PuppyArticleViewModel.kt | 9 +- .../puppyguide/PuppyGuideDestination.kt | 197 +++++++++++++++++- .../center/puppyguide/PuppyGuideViewModel.kt | 6 +- 15 files changed, 274 insertions(+), 61 deletions(-) diff --git a/app/app/src/main/kotlin/com/hedvig/android/app/navigation/HedvigNavHost.kt b/app/app/src/main/kotlin/com/hedvig/android/app/navigation/HedvigNavHost.kt index d6d4424d29..e619d85f11 100644 --- a/app/app/src/main/kotlin/com/hedvig/android/app/navigation/HedvigNavHost.kt +++ b/app/app/src/main/kotlin/com/hedvig/android/app/navigation/HedvigNavHost.kt @@ -405,6 +405,7 @@ internal fun HedvigNavHost( navigateToInbox(backStackEntry) }, openUrl = openUrl, + imageLoader = imageLoader, ) imageViewerGraph(hedvigAppState.navController, imageLoader) } diff --git a/app/app/src/main/kotlin/com/hedvig/android/app/ui/NavigationSuite.kt b/app/app/src/main/kotlin/com/hedvig/android/app/ui/NavigationSuite.kt index 551a4f9dde..c99c32aa89 100644 --- a/app/app/src/main/kotlin/com/hedvig/android/app/ui/NavigationSuite.kt +++ b/app/app/src/main/kotlin/com/hedvig/android/app/ui/NavigationSuite.kt @@ -39,8 +39,8 @@ internal fun NavigationSuite( .fillMaxWidth(), ) { AnimatedVisibility( - visible = navigationSuiteType == NavigationSuiteType.NavigationRail - || navigationSuiteType == NavigationSuiteType.NavigationRailXLarge, + visible = navigationSuiteType == NavigationSuiteType.NavigationRail || + navigationSuiteType == NavigationSuiteType.NavigationRailXLarge, enter = expandHorizontally(expandFrom = Alignment.End), exit = shrinkHorizontally(shrinkTowards = Alignment.End), ) { diff --git a/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml b/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml index c7a8101819..d5348cd21b 100644 --- a/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml +++ b/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml @@ -528,6 +528,7 @@ Reseintyg Din profil Läs guider + Välkommen till Hedvigs valpguide. Vi har samlat användbara artiklar och guider för att hjälpa dig med allt från första promenader till veterinärbesök. Utvalda guider Hjälpsamma guider för dig och din valp Valpguide diff --git a/app/core/core-resources/src/main/res/values/strings.xml b/app/core/core-resources/src/main/res/values/strings.xml index 7913fcc097..7948cc2a6b 100644 --- a/app/core/core-resources/src/main/res/values/strings.xml +++ b/app/core/core-resources/src/main/res/values/strings.xml @@ -528,6 +528,7 @@ Travel certificates Your profile Go to guides + Welcome to Hedvig\'s puppy guide. We’ve gathered useful articles and guides to help you with everything from first walks to vet visits. Featured guides Helpful guides for you and your puppy Puppy Guide diff --git a/app/feature/feature-help-center/build.gradle.kts b/app/feature/feature-help-center/build.gradle.kts index d826d9cfc2..2188ac5321 100644 --- a/app/feature/feature-help-center/build.gradle.kts +++ b/app/feature/feature-help-center/build.gradle.kts @@ -12,6 +12,7 @@ hedvig { dependencies { api(libs.androidx.navigation.common) + api(libs.coil.coil) implementation(libs.androidx.activity.compose) implementation(libs.androidx.compose.foundation) @@ -20,6 +21,7 @@ dependencies { implementation(libs.apollo.runtime) implementation(libs.arrow.core) implementation(libs.arrow.fx) + implementation(libs.coil.compose) implementation(libs.compose.richtext) implementation(libs.compose.richtextCommonmark) implementation(libs.coroutines.core) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt index f4c02fd12e..a81877e02a 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt @@ -2,6 +2,7 @@ package com.hedvig.android.feature.help.center import androidx.navigation.NavBackStackEntry import androidx.navigation.NavGraphBuilder +import coil.ImageLoader import com.hedvig.android.feature.help.center.commonclaim.FirstVetDestination import com.hedvig.android.feature.help.center.commonclaim.emergency.EmergencyDestination import com.hedvig.android.feature.help.center.data.InnerHelpCenterDestination @@ -33,6 +34,7 @@ fun NavGraphBuilder.helpCenterGraph( onNavigateToInbox: (NavBackStackEntry) -> Unit, onNavigateToNewConversation: (NavBackStackEntry) -> Unit, openUrl: (String) -> Unit, + imageLoader: ImageLoader, ) { navgraph( startDestination = HelpCenterDestinations.HelpCenter::class, @@ -91,7 +93,7 @@ fun NavGraphBuilder.helpCenterGraph( HelpCenterDestinations.PuppyGuide, ) } - } + }, ) } @@ -151,7 +153,14 @@ fun NavGraphBuilder.helpCenterGraph( navdestination { val viewModel = koinViewModel() - PuppyGuideDestination(viewModel) + PuppyGuideDestination( + viewModel, + onNavigateUp = navigator::navigateUp, + onNavigateToArticle = { + // todo + }, + imageLoader = imageLoader, + ) } } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt index cba27bae33..14ae7877e9 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterPresenter.kt @@ -63,7 +63,7 @@ internal data class HelpCenterUiState( val search: Search?, val showNavigateToInboxButton: Boolean, val destinationToNavigate: QuickLinkDestination? = null, - val puppyGuide: List? + val puppyGuide: List?, ) { data class QuickLink(val quickAction: QuickAction) @@ -96,7 +96,7 @@ internal class HelpCenterPresenter( private val getQuickLinksUseCase: GetQuickLinksUseCase, private val hasAnyActiveConversationUseCase: HasAnyActiveConversationUseCase, private val getHelpCenterFAQUseCase: GetHelpCenterFAQUseCase, - private val getPuppyGuideUseCase: GetPuppyGuideUseCase + private val getPuppyGuideUseCase: GetPuppyGuideUseCase, ) : MoleculePresenter { @Composable override fun MoleculePresenterScope.present(lastState: HelpCenterUiState): HelpCenterUiState { @@ -156,7 +156,7 @@ internal class HelpCenterPresenter( combine( flow = flow { emit(getQuickLinksUseCase.invoke()) }, flow2 = flow { emit(getHelpCenterFAQUseCase.invoke()) }, - flow3 = flow { emit(getPuppyGuideUseCase.invoke()) } + flow3 = flow { emit(getPuppyGuideUseCase.invoke()) }, ) { quickLinks, faq, puppyGuideResult -> quickLinksUiState = quickLinks.fold( ifLeft = { @@ -182,7 +182,7 @@ internal class HelpCenterPresenter( quickLinksUiState = quickLinksUiState, selectedQuickAction = selectedQuickAction, showNavigateToInboxButton = hasAnyActiveConversation, - puppyGuide = puppyGuide + puppyGuide = puppyGuide, ) }.collect() } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt index b9a0bcdba3..dffc05c82e 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterViewModel.kt @@ -10,8 +10,7 @@ internal class HelpCenterViewModel( getQuickLinksUseCase: GetQuickLinksUseCase, hasAnyActiveConversationUseCase: HasAnyActiveConversationUseCase, getHelpCenterFAQUseCase: GetHelpCenterFAQUseCase, - getPuppyGuideUseCase: GetPuppyGuideUseCase - + getPuppyGuideUseCase: GetPuppyGuideUseCase, ) : MoleculeViewModel( initialState = HelpCenterUiState( topics = listOf(), @@ -20,12 +19,12 @@ internal class HelpCenterViewModel( quickLinksUiState = HelpCenterUiState.QuickLinkUiState.Loading, search = null, showNavigateToInboxButton = false, - puppyGuide = null + puppyGuide = null, ), presenter = HelpCenterPresenter( getQuickLinksUseCase = getQuickLinksUseCase, hasAnyActiveConversationUseCase = hasAnyActiveConversationUseCase, getHelpCenterFAQUseCase = getHelpCenterFAQUseCase, - getPuppyGuideUseCase = getPuppyGuideUseCase + getPuppyGuideUseCase = getPuppyGuideUseCase, ), ) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt index 9a586b4572..a9bdd517ae 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt @@ -12,6 +12,7 @@ import octopus.PuppyGuideQuery internal interface GetPuppyGuideUseCase { suspend fun invoke(): Either?> } + internal class GetPuppyGuideUseCaseImpl( private val apolloClient: ApolloClient, ) : GetPuppyGuideUseCase { @@ -42,12 +43,12 @@ internal class GetPuppyGuideUseCaseImpl( @Serializable internal data class PuppyGuideStory( - val categories : List, - val content : String, + val categories: List, + val content: String, val image: String, - val name:String, + val name: String, val rating: Int?, val isRead: Boolean, val subtitle: String, - val title: String + val title: String, ) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt index f679bed1b1..ad063e8105 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt @@ -61,7 +61,7 @@ val helpCenterModule = module { getQuickLinksUseCase = get(), hasAnyActiveConversationUseCase = get(), getHelpCenterFAQUseCase = get(), - getPuppyGuideUseCase = get() + getPuppyGuideUseCase = get(), ) } @@ -93,6 +93,6 @@ val helpCenterModule = module { } viewModel { - PuppyGuideViewModel( getPuppyGuideUseCase = get()) + PuppyGuideViewModel(getPuppyGuideUseCase = get()) } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt index 4e588916ac..04796f2df9 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/home/HelpCenterHomeDestination.kt @@ -167,7 +167,7 @@ internal fun HelpCenterHomeDestination( viewModel.emit(HelpCenterEvent.ReloadFAQAndQuickLinks) }, puppyGuide = uiState.puppyGuide, - onNavigateToPuppyGuide = onNavigateToPuppyGuide + onNavigateToPuppyGuide = onNavigateToPuppyGuide, ) } @@ -340,7 +340,7 @@ private fun HelpCenterHomeScreen( onNavigateToInbox = onNavigateToInbox, onNavigateToNewConversation = onNavigateToNewConversation, puppyGuide = puppyGuide, - onNavigateToPuppyGuide = onNavigateToPuppyGuide + onNavigateToPuppyGuide = onNavigateToPuppyGuide, ) } else { SearchResults( @@ -380,16 +380,17 @@ private fun ContentWithoutSearch( Modifier.padding(WindowInsets.safeDrawing.only(WindowInsetsSides.Horizontal).asPaddingValues()), ) { Spacer(Modifier.height(32.dp)) - AnimatedContent(puppyGuide!=null, + AnimatedContent( + puppyGuide != null, contentAlignment = Alignment.Center, ) { puppyGuideAvailable -> Column( - Modifier.fillMaxWidth() + Modifier.fillMaxWidth(), ) { if (puppyGuideAvailable) { PuppyGuideCard( onClick = onNavigateToPuppyGuide, - modifier = Modifier.padding(horizontal = 16.dp) + modifier = Modifier.padding(horizontal = 16.dp), ) } else { Image( @@ -478,18 +479,15 @@ private fun ContentWithoutSearch( } @Composable -private fun PuppyGuideCard( - onClick: () -> Unit, - modifier: Modifier = Modifier, -) { +private fun PuppyGuideCard(onClick: () -> Unit, modifier: Modifier = Modifier) { HedvigCard( color = HedvigTheme.colorScheme.backgroundPrimary, modifier = modifier .fillMaxWidth() .shadow(1.dp, HedvigTheme.shapes.cornerXLarge) .clickable(enabled = true) { - onClick() - } + onClick() + }, ) { Column { Box(Modifier.align(Alignment.CenterHorizontally)) { @@ -501,23 +499,30 @@ private fun PuppyGuideCard( .height(182.dp) .clip(HedvigTheme.shapes.cornerXLargeTop), ) - HighlightLabel(stringResource(R.string.PUPPY_GUIDE_LABEL), + HighlightLabel( + stringResource(R.string.PUPPY_GUIDE_LABEL), size = HighlightLabelDefaults.HighLightSize.Small, - color = HighlightLabelDefaults.HighlightColor.Pink(LIGHT), - modifier= Modifier.padding(top = 16.dp, start = 16.dp)) + color = HighlightColor.Pink(LIGHT), + modifier = Modifier.padding(top = 16.dp, start = 16.dp), + ) } Spacer(Modifier.height(16.dp)) - HedvigText(stringResource(R.string.PUPPY_GUIDE_TITLE), - modifier = Modifier.padding(horizontal = 16.dp)) - HedvigText(stringResource(R.string.PUPPY_GUIDE_SUBTITLE), + HedvigText( + stringResource(R.string.PUPPY_GUIDE_TITLE), modifier = Modifier.padding(horizontal = 16.dp), - color = HedvigTheme.colorScheme.textSecondary) + ) + HedvigText( + stringResource(R.string.PUPPY_GUIDE_SUBTITLE), + modifier = Modifier.padding(horizontal = 16.dp), + color = HedvigTheme.colorScheme.textSecondary, + ) Spacer(Modifier.height(16.dp)) HedvigButtonGhostWithBorder( stringResource(R.string.PUPPY_GUIDE_GO_BUTTON), onClick = onClick, - modifier = Modifier.padding(horizontal = 16.dp).fillMaxWidth()) + modifier = Modifier.padding(horizontal = 16.dp).fillMaxWidth(), + ) Spacer(Modifier.height(16.dp)) } } @@ -884,17 +889,19 @@ private fun PreviewHelpCenterHomeScreen( onUpdateSearchResults = { _, _ -> }, search = null, reload = {}, - puppyGuide = listOf(PuppyGuideStory( - categories = listOf("Food"), - content = "some content", - image = "", - name = "", - rating = 5, - isRead = false, - subtitle = "Subtitle", - title = "Title" - )), - onNavigateToPuppyGuide = {} + puppyGuide = listOf( + PuppyGuideStory( + categories = listOf("Food"), + content = "some content", + image = "", + name = "", + rating = 5, + isRead = false, + subtitle = "Subtitle", + title = "Title", + ), + ), + onNavigateToPuppyGuide = {}, ) } } @@ -941,7 +948,7 @@ private fun PreviewQuickLinkAnimations() { search = null, reload = {}, puppyGuide = null, - onNavigateToPuppyGuide = {} + onNavigateToPuppyGuide = {}, ) } } @@ -972,7 +979,7 @@ private fun PreviewQuickLinkEmptyState() { search = null, reload = {}, puppyGuide = null, - onNavigateToPuppyGuide = {} + onNavigateToPuppyGuide = {}, ) } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt index 0574931cae..16d8f71654 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt @@ -46,7 +46,7 @@ internal sealed interface HelpCenterDestinations { } @Serializable - data object PuppyGuide: HelpCenterDestinations, Destination + data object PuppyGuide : HelpCenterDestinations, Destination } val helpCenterCrossSellBottomSheetPermittingDestinations: List> = listOf( diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt index daa3f68b05..1fe3649b42 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt @@ -17,19 +17,16 @@ internal class PuppyArticleViewModel( initialState = PuppyArticleUiState.Success(story), ) -private class PuppyArticlePresenter( -) : MoleculePresenter { +private class PuppyArticlePresenter() : MoleculePresenter { @Composable - override fun MoleculePresenterScope.present( - lastState: PuppyArticleUiState, - ): PuppyArticleUiState { + override fun MoleculePresenterScope.present(lastState: PuppyArticleUiState): PuppyArticleUiState { var currentState by remember { mutableStateOf(lastState) } CollectEvents { event -> when (event) { // Handle events here if needed else -> { - //todo + // todo } } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index 207333b8bd..a2a8e2d362 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -1,9 +1,204 @@ package com.hedvig.android.feature.help.center.puppyguide +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.safeDrawing +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.blur +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.painter.ColorPainter +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import coil.ImageLoader +import coil.compose.AsyncImage +import com.hedvig.android.compose.ui.EmptyContentDescription +import com.hedvig.android.design.system.hedvig.ButtonDefaults +import com.hedvig.android.design.system.hedvig.HedvigButton +import com.hedvig.android.design.system.hedvig.HedvigErrorSection +import com.hedvig.android.design.system.hedvig.HedvigFullScreenCenterAlignedProgress +import com.hedvig.android.design.system.hedvig.HedvigScaffold +import com.hedvig.android.design.system.hedvig.HedvigText +import com.hedvig.android.design.system.hedvig.HedvigTheme +import com.hedvig.android.design.system.hedvig.Surface +import com.hedvig.android.design.system.hedvig.TopAppBarWithBack +import com.hedvig.android.feature.help.center.data.PuppyGuideStory +import hedvig.resources.R @Composable internal fun PuppyGuideDestination( - viewModel: PuppyGuideViewModel + viewModel: PuppyGuideViewModel, + onNavigateUp: () -> Unit, + imageLoader: ImageLoader, + onNavigateToArticle: (PuppyGuideStory) -> Unit, ) { + val uiState by viewModel.uiState.collectAsStateWithLifecycle() + when (val state = uiState) { + PuppyGuideUiState.Failure -> HedvigScaffold( + navigateUp = onNavigateUp, + ) { + HedvigErrorSection( + onButtonClick = { + viewModel.emit(PuppyGuideEvent.Reload) + }, + modifier = Modifier.weight(1f), + ) + } + + PuppyGuideUiState.Loading -> HedvigFullScreenCenterAlignedProgress() + is PuppyGuideUiState.Success -> PuppyGuideScreen( + state, + onNavigateUp = onNavigateUp, + onNavigateToArticle = onNavigateToArticle, + imageLoader = imageLoader, + ) + } +} + +@Composable +private fun PuppyGuideScreen( + uiState: PuppyGuideUiState.Success, + onNavigateToArticle: (PuppyGuideStory) -> Unit, + onNavigateUp: () -> Unit, + imageLoader: ImageLoader, +) { + Surface( + color = HedvigTheme.colorScheme.backgroundPrimary, + modifier = Modifier.windowInsetsPadding(WindowInsets.safeDrawing), + ) { + Column( + Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()), + ) { + TopAppBarWithBack( + title = "", + onClick = onNavigateUp, + ) + Column( + Modifier + .padding(horizontal = 16.dp) + .fillMaxWidth(), + ) { + Spacer(modifier = Modifier.height(8.dp)) + Image( + painter = painterResource(id = com.hedvig.android.feature.help.center.R.drawable.hundar_badar_pet), + contentDescription = null, + contentScale = ContentScale.Crop, + alignment = Alignment.Center, + modifier = Modifier + .height(300.dp) + .clip(HedvigTheme.shapes.cornerXLarge), + ) + Spacer(modifier = Modifier.height(16.dp)) + HedvigText(stringResource(R.string.PUPPY_GUIDE_TITLE)) + Spacer(modifier = Modifier.height(8.dp)) + HedvigText( + stringResource(R.string.PUPPY_GUIDE_INFO), + color = HedvigTheme.colorScheme.textSecondary, + ) + Spacer(modifier = Modifier.height(48.dp)) + val categories = uiState.stories.flatMap { it.categories }.toSet().toList() + GuideCategoriesRow( + categories, + onCategoryClick = { + // todo + }, + ) + Spacer(modifier = Modifier.height(48.dp)) + categories.forEach { cat -> + CategoryWithArticlesSection( + cat, + stories = uiState.stories.filter { it.categories.contains(cat) }, + onNavigateToArticle = onNavigateToArticle, + imageLoader = imageLoader, + ) + } + } + } + } +} + +@Composable +private fun GuideCategoriesRow(categories: List, onCategoryClick: (String) -> Unit) { + Row(Modifier.horizontalScroll(rememberScrollState())) { + categories.forEach { + HedvigButton( + text = it, + enabled = true, + buttonSize = ButtonDefaults.ButtonSize.Medium, + buttonStyle = ButtonDefaults.ButtonStyle.Secondary, + onClick = { + onCategoryClick(it) + }, + ) + Spacer(Modifier.width(8.dp)) + } + } +} + +@Composable +private fun CategoryWithArticlesSection( + category: String, + stories: List, + onNavigateToArticle: (PuppyGuideStory) -> Unit, + imageLoader: ImageLoader, + modifier: Modifier = Modifier, +) { + Column(modifier) { + HedvigText( + category, + fontStyle = HedvigTheme.typography.headlineSmall.fontStyle, + fontSize = HedvigTheme.typography.headlineSmall.fontSize, + fontFamily = HedvigTheme.typography.headlineSmall.fontFamily, + ) + Spacer(Modifier.height(12.dp)) + Row(Modifier.horizontalScroll(rememberScrollState())) { + stories.forEach { story -> + Column( + Modifier.clickable(onClick = { + onNavigateToArticle(story) + }), + ) { + val fallbackPainter: Painter = ColorPainter(Color.Black.copy(alpha = 0.7f)) + AsyncImage( + model = story.image, + contentDescription = EmptyContentDescription, // todo + placeholder = fallbackPainter, + error = fallbackPainter, + fallback = fallbackPainter, + imageLoader = imageLoader, + contentScale = ContentScale.Crop, + modifier = Modifier + .size(148.dp) + .clip(HedvigTheme.shapes.cornerMedium), + ) + Spacer(Modifier.height(8.dp)) + HedvigText(story.title) + } + } + } + Spacer(Modifier.height(48.dp)) + } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt index 8cc910679f..0e163b6c14 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt @@ -24,9 +24,7 @@ private class PuppyGuidePresenter( private val getPuppyGuideUseCase: GetPuppyGuideUseCase, ) : MoleculePresenter { @Composable - override fun MoleculePresenterScope.present( - lastState: PuppyGuideUiState, - ): PuppyGuideUiState { + override fun MoleculePresenterScope.present(lastState: PuppyGuideUiState): PuppyGuideUiState { var currentState by remember { mutableStateOf(lastState) } var loadIteration by remember { mutableIntStateOf(0) } @@ -61,6 +59,8 @@ internal sealed interface PuppyGuideEvent { internal sealed interface PuppyGuideUiState { data class Success(val stories: List) : PuppyGuideUiState + data object Loading : PuppyGuideUiState + data object Failure : PuppyGuideUiState } From 897636fa8e43b7d2c01f46e811489da372553089 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 09:13:55 +0100 Subject: [PATCH 06/20] paddings --- .../help/center/puppyguide/PuppyGuideDestination.kt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index a2a8e2d362..5a9edb6e2c 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -3,6 +3,7 @@ package com.hedvig.android.feature.help.center.puppyguide import androidx.compose.foundation.Image import androidx.compose.foundation.clickable import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -174,10 +175,15 @@ private fun CategoryWithArticlesSection( fontFamily = HedvigTheme.typography.headlineSmall.fontFamily, ) Spacer(Modifier.height(12.dp)) - Row(Modifier.horizontalScroll(rememberScrollState())) { + Row( + horizontalArrangement = Arrangement.spacedBy(24.dp), + modifier = Modifier.horizontalScroll(rememberScrollState())) { + val size = 148.dp stories.forEach { story -> Column( - Modifier.clickable(onClick = { + Modifier + .width(size) + .clickable(onClick = { onNavigateToArticle(story) }), ) { @@ -191,7 +197,7 @@ private fun CategoryWithArticlesSection( imageLoader = imageLoader, contentScale = ContentScale.Crop, modifier = Modifier - .size(148.dp) + .size(size) .clip(HedvigTheme.shapes.cornerMedium), ) Spacer(Modifier.height(8.dp)) From 95f416533b18dc732428fddaee176be6e1e5007c Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 10:17:11 +0100 Subject: [PATCH 07/20] add PuppyGuideArticle destination and previews --- .../feature/help/center/HelpCenterGraph.kt | 21 +++- .../help/center/di/HelpCenterModule.kt | 8 ++ .../navigation/HelpCenterDestination.kt | 3 + .../puppyguide/PuppyArticleDestination.kt | 105 +++++++++++++++++- .../puppyguide/PuppyArticleViewModel.kt | 43 +++++-- .../puppyguide/PuppyGuideDestination.kt | 93 ++++++++++++++-- 6 files changed, 251 insertions(+), 22 deletions(-) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt index a81877e02a..2480e89b68 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt @@ -13,6 +13,8 @@ import com.hedvig.android.feature.help.center.home.HelpCenterHomeDestination import com.hedvig.android.feature.help.center.navigation.HelpCenterDestination import com.hedvig.android.feature.help.center.navigation.HelpCenterDestinations import com.hedvig.android.feature.help.center.navigation.HelpCenterDestinations.Emergency +import com.hedvig.android.feature.help.center.puppyguide.PuppyArticleDestination +import com.hedvig.android.feature.help.center.puppyguide.PuppyArticleViewModel import com.hedvig.android.feature.help.center.puppyguide.PuppyGuideDestination import com.hedvig.android.feature.help.center.puppyguide.PuppyGuideViewModel import com.hedvig.android.feature.help.center.question.HelpCenterQuestionDestination @@ -151,17 +153,30 @@ fun NavGraphBuilder.helpCenterGraph( ) } - navdestination { + navdestination { backStackEntry -> val viewModel = koinViewModel() PuppyGuideDestination( viewModel, onNavigateUp = navigator::navigateUp, - onNavigateToArticle = { - // todo + onNavigateToArticle = { story -> + with(navigator) { backStackEntry.navigate(HelpCenterDestinations.PuppyGuideArticle( + story.name + ))} }, imageLoader = imageLoader, ) } + + navdestination { + val viewModel = koinViewModel() { + parametersOf(storyName) + } + PuppyArticleDestination( + viewModel = viewModel, + navigateUp = navigator::navigateUp, + imageLoader = imageLoader + ) + } } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt index ad063e8105..f02c3514e8 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt @@ -17,6 +17,7 @@ import com.hedvig.android.feature.help.center.data.GetMemberActionsUseCaseImpl import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCase import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCaseImpl import com.hedvig.android.feature.help.center.data.GetQuickLinksUseCase +import com.hedvig.android.feature.help.center.puppyguide.PuppyArticleViewModel import com.hedvig.android.feature.help.center.puppyguide.PuppyGuideViewModel import com.hedvig.android.feature.help.center.question.HelpCenterQuestionViewModel import com.hedvig.android.feature.help.center.topic.HelpCenterTopicViewModel @@ -95,4 +96,11 @@ val helpCenterModule = module { viewModel { PuppyGuideViewModel(getPuppyGuideUseCase = get()) } + + viewModel { params -> + PuppyArticleViewModel( + getPuppyGuideUseCase = get(), + storyName = params.get(), + ) + } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt index 16d8f71654..9f7a9eabd0 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/navigation/HelpCenterDestination.kt @@ -47,6 +47,9 @@ internal sealed interface HelpCenterDestinations { @Serializable data object PuppyGuide : HelpCenterDestinations, Destination + + @Serializable + data class PuppyGuideArticle(val storyName: String) : HelpCenterDestinations, Destination } val helpCenterCrossSellBottomSheetPermittingDestinations: List> = listOf( diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt index df9bfc0c95..99edc18f31 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt @@ -1,7 +1,110 @@ package com.hedvig.android.feature.help.center.puppyguide import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import coil.ImageLoader +import com.hedvig.android.design.system.hedvig.HedvigErrorSection +import com.hedvig.android.design.system.hedvig.HedvigFullScreenCenterAlignedProgress +import com.hedvig.android.design.system.hedvig.HedvigScaffold +import com.hedvig.android.design.system.hedvig.HedvigShortMultiScreenPreview +import com.hedvig.android.design.system.hedvig.HedvigTheme +import com.hedvig.android.design.system.hedvig.Surface +import com.hedvig.android.design.system.hedvig.rememberPreviewImageLoader +import com.hedvig.android.feature.help.center.data.PuppyGuideStory @Composable -internal fun PuppyArticleDestination() { +internal fun PuppyArticleDestination( + viewModel: PuppyArticleViewModel, + navigateUp: () -> Unit, + imageLoader: ImageLoader, +) { + val uiState by viewModel.uiState.collectAsStateWithLifecycle() + PuppyArticleScreen( + uiState, + navigateUp = navigateUp, + onReload = { + viewModel.emit(PuppyArticleEvent.Reload) + }, + imageLoader + ) + +} + +@Composable +private fun PuppyArticleScreen( + uiState: PuppyArticleUiState, + navigateUp: () -> Unit, + onReload: () -> Unit, + imageLoader: ImageLoader, +) { + when (uiState) { + PuppyArticleUiState.Failure -> HedvigScaffold( + navigateUp = navigateUp, + ) { + HedvigErrorSection( + onButtonClick = onReload, + modifier = Modifier.weight(1f), + ) + } + + PuppyArticleUiState.Loading -> HedvigFullScreenCenterAlignedProgress() + + is PuppyArticleUiState.Success -> PuppyArticleSuccessScreen( + uiState, + navigateUp = navigateUp, + imageLoader = imageLoader + ) + } +} + +@Composable +private fun PuppyArticleSuccessScreen( + uiState: PuppyArticleUiState.Success, + navigateUp: () -> Unit, + imageLoader: ImageLoader, +) { + } + +@HedvigShortMultiScreenPreview +@Composable +private fun PuppyArticleScreenPreview( + @PreviewParameter(PuppyArticleUiStatePreviewProvider::class) uiState: PuppyArticleUiState, +) { + HedvigTheme { + Surface(color = HedvigTheme.colorScheme.backgroundPrimary) { + PuppyArticleScreen( + uiState, + {}, + {}, + rememberPreviewImageLoader() + ) + } + } +} + + +private class PuppyArticleUiStatePreviewProvider : + CollectionPreviewParameterProvider( + listOf( + PuppyArticleUiState.Success( + story = PuppyGuideStory( + categories = listOf("Food"), + content = "some long long long long long long long long long long long long" + + " long long long long long long long long long long long long content", + image = "", + name = "", + rating = 5, + isRead = false, + subtitle = "5 min read", + title = "Puppy food", + ), + ), + PuppyArticleUiState.Loading, + PuppyArticleUiState.Failure, + ), + ) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt index 1fe3649b42..b6aae7fc7d 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt @@ -1,42 +1,67 @@ package com.hedvig.android.feature.help.center.puppyguide import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCase import com.hedvig.android.feature.help.center.data.PuppyGuideStory import com.hedvig.android.molecule.android.MoleculeViewModel import com.hedvig.android.molecule.public.MoleculePresenter import com.hedvig.android.molecule.public.MoleculePresenterScope internal class PuppyArticleViewModel( - story: PuppyGuideStory, + getPuppyGuideUseCase: GetPuppyGuideUseCase, + storyName: String, ) : MoleculeViewModel( - presenter = PuppyArticlePresenter(), - initialState = PuppyArticleUiState.Success(story), + presenter = PuppyArticlePresenter(getPuppyGuideUseCase, storyName), + initialState = PuppyArticleUiState.Loading, ) -private class PuppyArticlePresenter() : MoleculePresenter { +private class PuppyArticlePresenter( + private val getPuppyGuideUseCase: GetPuppyGuideUseCase, + private val storyName: String, +) : MoleculePresenter { @Composable override fun MoleculePresenterScope.present(lastState: PuppyArticleUiState): PuppyArticleUiState { var currentState by remember { mutableStateOf(lastState) } + var loadIteration by remember { mutableIntStateOf(0) } CollectEvents { event -> when (event) { - // Handle events here if needed - else -> { - // todo - } + PuppyArticleEvent.Reload -> loadIteration++ } } + LaunchedEffect(loadIteration) { + getPuppyGuideUseCase.invoke().fold( + ifLeft = { + currentState = PuppyArticleUiState.Failure + }, + ifRight = { stories -> + val matchingStory = stories?.firstOrNull { it.name == storyName } + currentState = if (matchingStory == null) { + PuppyArticleUiState.Failure + } else { + PuppyArticleUiState.Success(matchingStory) + } + }, + ) + } + return currentState } } -internal sealed interface PuppyArticleEvent +internal sealed interface PuppyArticleEvent { + data object Reload: PuppyArticleEvent +} internal sealed interface PuppyArticleUiState { data class Success(val story: PuppyGuideStory) : PuppyArticleUiState + data object Loading: PuppyArticleUiState + data object Failure: PuppyArticleUiState } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index 5a9edb6e2c..8ee0f8c608 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -22,7 +22,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.blur import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.ColorPainter @@ -30,8 +29,11 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.lifecycle.viewmodel.compose.viewModel import coil.ImageLoader import coil.compose.AsyncImage import com.hedvig.android.compose.ui.EmptyContentDescription @@ -39,11 +41,14 @@ import com.hedvig.android.design.system.hedvig.ButtonDefaults import com.hedvig.android.design.system.hedvig.HedvigButton import com.hedvig.android.design.system.hedvig.HedvigErrorSection import com.hedvig.android.design.system.hedvig.HedvigFullScreenCenterAlignedProgress +import com.hedvig.android.design.system.hedvig.HedvigPreview import com.hedvig.android.design.system.hedvig.HedvigScaffold +import com.hedvig.android.design.system.hedvig.HedvigShortMultiScreenPreview import com.hedvig.android.design.system.hedvig.HedvigText import com.hedvig.android.design.system.hedvig.HedvigTheme import com.hedvig.android.design.system.hedvig.Surface import com.hedvig.android.design.system.hedvig.TopAppBarWithBack +import com.hedvig.android.design.system.hedvig.rememberPreviewImageLoader import com.hedvig.android.feature.help.center.data.PuppyGuideStory import hedvig.resources.R @@ -55,21 +60,38 @@ internal fun PuppyGuideDestination( onNavigateToArticle: (PuppyGuideStory) -> Unit, ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() - when (val state = uiState) { + PuppyGuideScreen( + uiState, + onNavigateToArticle = onNavigateToArticle, + onNavigateUp = onNavigateUp, + reload = { + viewModel.emit(PuppyGuideEvent.Reload) + }, + imageLoader = imageLoader, + ) +} + +@Composable +private fun PuppyGuideScreen( + uiState: PuppyGuideUiState, + onNavigateToArticle: (PuppyGuideStory) -> Unit, + onNavigateUp: () -> Unit, + reload: () -> Unit, + imageLoader: ImageLoader, +) { + when (uiState) { PuppyGuideUiState.Failure -> HedvigScaffold( navigateUp = onNavigateUp, ) { HedvigErrorSection( - onButtonClick = { - viewModel.emit(PuppyGuideEvent.Reload) - }, + onButtonClick = reload, modifier = Modifier.weight(1f), ) } PuppyGuideUiState.Loading -> HedvigFullScreenCenterAlignedProgress() - is PuppyGuideUiState.Success -> PuppyGuideScreen( - state, + is PuppyGuideUiState.Success -> PuppyGuideSuccessScreen( + uiState, onNavigateUp = onNavigateUp, onNavigateToArticle = onNavigateToArticle, imageLoader = imageLoader, @@ -78,7 +100,7 @@ internal fun PuppyGuideDestination( } @Composable -private fun PuppyGuideScreen( +private fun PuppyGuideSuccessScreen( uiState: PuppyGuideUiState.Success, onNavigateToArticle: (PuppyGuideStory) -> Unit, onNavigateUp: () -> Unit, @@ -201,10 +223,63 @@ private fun CategoryWithArticlesSection( .clip(HedvigTheme.shapes.cornerMedium), ) Spacer(Modifier.height(8.dp)) - HedvigText(story.title) + HedvigText(story.title, + fontSize = HedvigTheme.typography.label.fontSize) } } } Spacer(Modifier.height(48.dp)) } } + +@HedvigShortMultiScreenPreview +@Composable +private fun PuppyArticleScreenAnimations( + @PreviewParameter(PuppyGuideUiStatePreviewProvider::class) uiState: PuppyGuideUiState, +) { + HedvigTheme { + Surface(color = HedvigTheme.colorScheme.backgroundPrimary) { + PuppyGuideScreen( + uiState, + {}, + {}, + reload = {}, + imageLoader = rememberPreviewImageLoader(), + ) + } + } +} + + +private class PuppyGuideUiStatePreviewProvider : + CollectionPreviewParameterProvider( + listOf( + PuppyGuideUiState.Success( + stories = listOf( + PuppyGuideStory( + categories = listOf("Food"), + content = "some long long long long long long long long long long long long" + + " long long long long long long long long long long long long content", + image = "", + name = "", + rating = 5, + isRead = false, + subtitle = "5 min read", + title = "Puppy food", + ), + PuppyGuideStory( + categories = listOf("Training"), + content = "some long long long long long long long long long long long long" + + " long long long long long long long long long long long long content", + image = "", + name = "", + rating = 5, + isRead = false, + subtitle = "Puppy training", + title = "4 min read", + )), + ), + PuppyGuideUiState.Loading, + PuppyGuideUiState.Failure, + ), + ) From 4c7740b3d3e423436caa8e569e902f8ee5801694 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 10:20:13 +0100 Subject: [PATCH 08/20] paddings --- .../puppyguide/PuppyGuideDestination.kt | 67 +++++++++++-------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index 8ee0f8c608..2cf441c1e6 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -33,7 +33,6 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.lifecycle.viewmodel.compose.viewModel import coil.ImageLoader import coil.compose.AsyncImage import com.hedvig.android.compose.ui.EmptyContentDescription @@ -41,7 +40,6 @@ import com.hedvig.android.design.system.hedvig.ButtonDefaults import com.hedvig.android.design.system.hedvig.HedvigButton import com.hedvig.android.design.system.hedvig.HedvigErrorSection import com.hedvig.android.design.system.hedvig.HedvigFullScreenCenterAlignedProgress -import com.hedvig.android.design.system.hedvig.HedvigPreview import com.hedvig.android.design.system.hedvig.HedvigScaffold import com.hedvig.android.design.system.hedvig.HedvigShortMultiScreenPreview import com.hedvig.android.design.system.hedvig.HedvigText @@ -120,20 +118,27 @@ private fun PuppyGuideSuccessScreen( onClick = onNavigateUp, ) Column( - Modifier + modifier = Modifier .padding(horizontal = 16.dp) .fillMaxWidth(), ) { Spacer(modifier = Modifier.height(8.dp)) - Image( - painter = painterResource(id = com.hedvig.android.feature.help.center.R.drawable.hundar_badar_pet), - contentDescription = null, - contentScale = ContentScale.Crop, - alignment = Alignment.Center, + Column( + horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier - .height(300.dp) - .clip(HedvigTheme.shapes.cornerXLarge), - ) + .fillMaxWidth(), + ) { + Image( + painter = painterResource(id = com.hedvig.android.feature.help.center.R.drawable.hundar_badar_pet), + contentDescription = null, + contentScale = ContentScale.Crop, + alignment = Alignment.Center, + modifier = Modifier + .height(300.dp) + .clip(HedvigTheme.shapes.cornerXLarge), + ) + } + Spacer(modifier = Modifier.height(16.dp)) HedvigText(stringResource(R.string.PUPPY_GUIDE_TITLE)) Spacer(modifier = Modifier.height(8.dp)) @@ -199,15 +204,18 @@ private fun CategoryWithArticlesSection( Spacer(Modifier.height(12.dp)) Row( horizontalArrangement = Arrangement.spacedBy(24.dp), - modifier = Modifier.horizontalScroll(rememberScrollState())) { + modifier = Modifier.horizontalScroll(rememberScrollState()), + ) { val size = 148.dp stories.forEach { story -> Column( Modifier .width(size) - .clickable(onClick = { - onNavigateToArticle(story) - }), + .clickable( + onClick = { + onNavigateToArticle(story) + }, + ), ) { val fallbackPainter: Painter = ColorPainter(Color.Black.copy(alpha = 0.7f)) AsyncImage( @@ -223,8 +231,10 @@ private fun CategoryWithArticlesSection( .clip(HedvigTheme.shapes.cornerMedium), ) Spacer(Modifier.height(8.dp)) - HedvigText(story.title, - fontSize = HedvigTheme.typography.label.fontSize) + HedvigText( + story.title, + fontSize = HedvigTheme.typography.label.fontSize, + ) } } } @@ -257,16 +267,16 @@ private class PuppyGuideUiStatePreviewProvider : PuppyGuideUiState.Success( stories = listOf( PuppyGuideStory( - categories = listOf("Food"), - content = "some long long long long long long long long long long long long" + - " long long long long long long long long long long long long content", - image = "", - name = "", - rating = 5, - isRead = false, - subtitle = "5 min read", - title = "Puppy food", - ), + categories = listOf("Food"), + content = "some long long long long long long long long long long long long" + + " long long long long long long long long long long long long content", + image = "", + name = "", + rating = 5, + isRead = false, + subtitle = "5 min read", + title = "Puppy food", + ), PuppyGuideStory( categories = listOf("Training"), content = "some long long long long long long long long long long long long" + @@ -277,7 +287,8 @@ private class PuppyGuideUiStatePreviewProvider : isRead = false, subtitle = "Puppy training", title = "4 min read", - )), + ), + ), ), PuppyGuideUiState.Loading, PuppyGuideUiState.Failure, From 3ab2b34d805383ee3bc64fb48ecb353d86654f2a Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 11:10:19 +0100 Subject: [PATCH 09/20] fonts --- .../src/main/res/values-sv-rSE/strings.xml | 9 +- .../src/main/res/values/strings.xml | 5 +- .../puppyguide/PuppyArticleDestination.kt | 144 +++++++++++++++++- .../puppyguide/PuppyArticleViewModel.kt | 4 + .../puppyguide/PuppyGuideDestination.kt | 6 +- 5 files changed, 154 insertions(+), 14 deletions(-) diff --git a/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml b/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml index d5348cd21b..0ea32cb369 100644 --- a/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml +++ b/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml @@ -527,11 +527,14 @@ Koppla autogiro Reseintyg Din profil - Läs guider - Välkommen till Hedvigs valpguide. Vi har samlat användbara artiklar och guider för att hjälpa dig med allt från första promenader till veterinärbesök. + Se guider + I valpguiden hittar du användbara artiklar som hjälper dig med allt från första veterinärbesöket till hur du väljer rätt foder. Utvalda guider + Inte hjälpsam + Hur hittade du den här artikeln? + Mycket hjälpsam Hjälpsamma guider för dig och din valp - Valpguide + Valpguiden Inte nu Slå på Läs mer diff --git a/app/core/core-resources/src/main/res/values/strings.xml b/app/core/core-resources/src/main/res/values/strings.xml index 7948cc2a6b..f24af35b78 100644 --- a/app/core/core-resources/src/main/res/values/strings.xml +++ b/app/core/core-resources/src/main/res/values/strings.xml @@ -528,8 +528,11 @@ Travel certificates Your profile Go to guides - Welcome to Hedvig\'s puppy guide. We’ve gathered useful articles and guides to help you with everything from first walks to vet visits. + In the puppy guide, you’ll find helpful articles covering everything from the first vet visit to choosing the right food. Featured guides + Not helpful + How did you find this article? + Very helpful Helpful guides for you and your puppy Puppy Guide Not now diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt index 99edc18f31..5a84f47c5e 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt @@ -1,20 +1,52 @@ package com.hedvig.android.feature.help.center.puppyguide +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.safeDrawing +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.painter.ColorPainter +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider +import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import coil.ImageLoader +import coil.compose.AsyncImage +import com.halilibo.richtext.commonmark.Markdown +import com.halilibo.richtext.ui.RichTextStyle +import com.halilibo.richtext.ui.string.RichTextStringStyle +import com.hedvig.android.compose.ui.EmptyContentDescription import com.hedvig.android.design.system.hedvig.HedvigErrorSection import com.hedvig.android.design.system.hedvig.HedvigFullScreenCenterAlignedProgress import com.hedvig.android.design.system.hedvig.HedvigScaffold import com.hedvig.android.design.system.hedvig.HedvigShortMultiScreenPreview +import com.hedvig.android.design.system.hedvig.HedvigText import com.hedvig.android.design.system.hedvig.HedvigTheme +import com.hedvig.android.design.system.hedvig.ProvideTextStyle +import com.hedvig.android.design.system.hedvig.RichText import com.hedvig.android.design.system.hedvig.Surface +import com.hedvig.android.design.system.hedvig.TopAppBarWithBack import com.hedvig.android.design.system.hedvig.rememberPreviewImageLoader import com.hedvig.android.feature.help.center.data.PuppyGuideStory +import hedvig.resources.R @Composable internal fun PuppyArticleDestination( @@ -29,9 +61,11 @@ internal fun PuppyArticleDestination( onReload = { viewModel.emit(PuppyArticleEvent.Reload) }, - imageLoader + imageLoader = imageLoader, + onRatingClick = { + viewModel.emit(PuppyArticleEvent.RatingClick(it)) + } ) - } @Composable @@ -39,6 +73,7 @@ private fun PuppyArticleScreen( uiState: PuppyArticleUiState, navigateUp: () -> Unit, onReload: () -> Unit, + onRatingClick: (Int) -> Unit, imageLoader: ImageLoader, ) { when (uiState) { @@ -56,7 +91,8 @@ private fun PuppyArticleScreen( is PuppyArticleUiState.Success -> PuppyArticleSuccessScreen( uiState, navigateUp = navigateUp, - imageLoader = imageLoader + imageLoader = imageLoader, + onRatingClick = onRatingClick ) } } @@ -65,9 +101,102 @@ private fun PuppyArticleScreen( private fun PuppyArticleSuccessScreen( uiState: PuppyArticleUiState.Success, navigateUp: () -> Unit, + onRatingClick: (Int) -> Unit, imageLoader: ImageLoader, ) { - + Surface( + color = HedvigTheme.colorScheme.backgroundPrimary, + modifier = Modifier.windowInsetsPadding(WindowInsets.safeDrawing), + ) { + Column( + Modifier + .fillMaxSize(), + ) { + TopAppBarWithBack( + title = "", + onClick = navigateUp, + ) + Column( + modifier = Modifier + .padding(horizontal = 16.dp) + .fillMaxWidth() + .verticalScroll(rememberScrollState()), + ) { + Spacer(modifier = Modifier.height(8.dp)) + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .fillMaxWidth(), + ) { + val fallbackPainter: Painter = ColorPainter(Color.Black.copy(alpha = 0.7f)) + AsyncImage( + model = uiState.story.image, + contentDescription = EmptyContentDescription, // todo + placeholder = fallbackPainter, + error = fallbackPainter, + fallback = fallbackPainter, + imageLoader = imageLoader, + contentScale = ContentScale.Crop, + modifier = Modifier + .height(200.dp) + .clip(HedvigTheme.shapes.cornerMedium), + ) + } + Spacer(Modifier.height(16.dp)) + HedvigText( + uiState.story.title, + style = HedvigTheme.typography.headlineMedium, + ) + Spacer(Modifier.height(4.dp)) + HedvigText( + uiState.story.subtitle, + style = HedvigTheme.typography.label, + color = HedvigTheme.colorScheme.textSecondaryTranslucent, + ) + Spacer(Modifier.height(24.dp)) + ProvideTextStyle(HedvigTheme.typography.bodySmall) { + RichText( + style = RichTextStyle( + headingStyle = { _, currentStyle -> + currentStyle.copy( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.SemiBold, + ) + }, + stringStyle = RichTextStringStyle( + boldStyle = SpanStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.SemiBold, + ), + ), + ) + ) { + Markdown( + content = uiState.story.content, + ) + } + } + Spacer(Modifier.height(48.dp)) + HedvigText(stringResource(R.string.PUPPY_GUIDE_RATING_QUESTION)) + RatingSection( + onRatingClick = onRatingClick + ) + } + } + } +} + +@Composable +private fun RatingSection( + onRatingClick: (Int) -> Unit, + modifier: Modifier = Modifier +) { + Column( + modifier = modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + + } } @HedvigShortMultiScreenPreview @@ -79,9 +208,10 @@ private fun PuppyArticleScreenPreview( Surface(color = HedvigTheme.colorScheme.backgroundPrimary) { PuppyArticleScreen( uiState, - {}, - {}, - rememberPreviewImageLoader() + navigateUp = {}, + onReload = {}, + onRatingClick = {}, + imageLoader = rememberPreviewImageLoader(), ) } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt index b6aae7fc7d..b0d4fd3d8b 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt @@ -33,6 +33,9 @@ private class PuppyArticlePresenter( CollectEvents { event -> when (event) { PuppyArticleEvent.Reload -> loadIteration++ + is PuppyArticleEvent.RatingClick -> { + //todo + } } } @@ -58,6 +61,7 @@ private class PuppyArticlePresenter( internal sealed interface PuppyArticleEvent { data object Reload: PuppyArticleEvent + data class RatingClick(val rating: Int): PuppyArticleEvent } internal sealed interface PuppyArticleUiState { diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index 2cf441c1e6..740d6bc03c 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -110,8 +110,7 @@ private fun PuppyGuideSuccessScreen( ) { Column( Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()), + .fillMaxSize(), ) { TopAppBarWithBack( title = "", @@ -120,7 +119,8 @@ private fun PuppyGuideSuccessScreen( Column( modifier = Modifier .padding(horizontal = 16.dp) - .fillMaxWidth(), + .fillMaxWidth() + .verticalScroll(rememberScrollState()), ) { Spacer(modifier = Modifier.height(8.dp)) Column( From 4e4c1494593861027770e9bd85cf4f47f701b07b Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 11:19:48 +0100 Subject: [PATCH 10/20] add TextOverflow --- .../puppyguide/PuppyGuideDestination.kt | 90 ++++++++++++------- 1 file changed, 59 insertions(+), 31 deletions(-) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index 740d6bc03c..39a8fec491 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -24,13 +24,16 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.painter.ColorPainter import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import coil.ImageLoader @@ -208,40 +211,65 @@ private fun CategoryWithArticlesSection( ) { val size = 148.dp stories.forEach { story -> - Column( - Modifier - .width(size) - .clickable( - onClick = { - onNavigateToArticle(story) - }, - ), - ) { - val fallbackPainter: Painter = ColorPainter(Color.Black.copy(alpha = 0.7f)) - AsyncImage( - model = story.image, - contentDescription = EmptyContentDescription, // todo - placeholder = fallbackPainter, - error = fallbackPainter, - fallback = fallbackPainter, - imageLoader = imageLoader, - contentScale = ContentScale.Crop, - modifier = Modifier - .size(size) - .clip(HedvigTheme.shapes.cornerMedium), - ) - Spacer(Modifier.height(8.dp)) - HedvigText( - story.title, - fontSize = HedvigTheme.typography.label.fontSize, - ) - } + ArticleItem( + story = story, + onNavigateToArticle = onNavigateToArticle, + imageLoader = imageLoader, + size = size + ) } } Spacer(Modifier.height(48.dp)) } } +@Composable +private fun ArticleItem( + story: PuppyGuideStory, + onNavigateToArticle: (PuppyGuideStory) -> Unit, + imageLoader: ImageLoader, + size: Dp, + modifier: Modifier = Modifier, + shape: Shape = HedvigTheme.shapes.cornerMedium +) { + Column( + modifier + .width(size) + .clip(shape) + .clickable( + onClick = { + onNavigateToArticle(story) + }, + ), + ) { + val fallbackPainter: Painter = ColorPainter(Color.Black.copy(alpha = 0.7f)) + AsyncImage( + model = story.image, + contentDescription = EmptyContentDescription, // todo + placeholder = fallbackPainter, + error = fallbackPainter, + fallback = fallbackPainter, + imageLoader = imageLoader, + contentScale = ContentScale.Crop, + modifier = Modifier + .size(size) + .clip(shape), + ) + Spacer(Modifier.height(8.dp)) + HedvigText( + story.title, + style = HedvigTheme.typography.label, + maxLines = 1, + overflow= TextOverflow.Ellipsis, //todo: not by a11y req + ) + HedvigText( + story.subtitle, + style = HedvigTheme.typography.label, + color = HedvigTheme.colorScheme.textSecondaryTranslucent + ) + } +} + @HedvigShortMultiScreenPreview @Composable private fun PuppyArticleScreenAnimations( @@ -275,7 +303,7 @@ private class PuppyGuideUiStatePreviewProvider : rating = 5, isRead = false, subtitle = "5 min read", - title = "Puppy food", + title = "Puppy food food food food food food food ", ), PuppyGuideStory( categories = listOf("Training"), @@ -285,8 +313,8 @@ private class PuppyGuideUiStatePreviewProvider : name = "", rating = 5, isRead = false, - subtitle = "Puppy training", - title = "4 min read", + subtitle = "4 min read", + title = "Puppy training", ), ), ), From ad59622b8fd30822f72ee9d73292fb63b386c1ce Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 11:29:12 +0100 Subject: [PATCH 11/20] fix styles --- .../puppyguide/PuppyArticleDestination.kt | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt index 5a84f47c5e..b9fea357fe 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt @@ -22,8 +22,6 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.SpanStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import androidx.compose.ui.unit.dp @@ -64,7 +62,7 @@ internal fun PuppyArticleDestination( imageLoader = imageLoader, onRatingClick = { viewModel.emit(PuppyArticleEvent.RatingClick(it)) - } + }, ) } @@ -92,7 +90,7 @@ private fun PuppyArticleScreen( uiState, navigateUp = navigateUp, imageLoader = imageLoader, - onRatingClick = onRatingClick + onRatingClick = onRatingClick, ) } } @@ -154,22 +152,24 @@ private fun PuppyArticleSuccessScreen( color = HedvigTheme.colorScheme.textSecondaryTranslucent, ) Spacer(Modifier.height(24.dp)) - ProvideTextStyle(HedvigTheme.typography.bodySmall) { + ProvideTextStyle( + HedvigTheme.typography.bodySmall + .copy(color = HedvigTheme.colorScheme.textSecondaryTranslucent), + ) { + val headingColor = HedvigTheme.colorScheme.textPrimary RichText( style = RichTextStyle( headingStyle = { _, currentStyle -> currentStyle.copy( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.SemiBold, + color = headingColor, ) }, - stringStyle = RichTextStringStyle( + stringStyle = RichTextStringStyle( boldStyle = SpanStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.SemiBold, + color = headingColor, ), ), - ) + ), ) { Markdown( content = uiState.story.content, @@ -179,7 +179,7 @@ private fun PuppyArticleSuccessScreen( Spacer(Modifier.height(48.dp)) HedvigText(stringResource(R.string.PUPPY_GUIDE_RATING_QUESTION)) RatingSection( - onRatingClick = onRatingClick + onRatingClick = onRatingClick, ) } } @@ -189,10 +189,10 @@ private fun PuppyArticleSuccessScreen( @Composable private fun RatingSection( onRatingClick: (Int) -> Unit, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { Column( - modifier = modifier.fillMaxWidth(), + modifier = modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, ) { From a87b7180f4010a7fc86e9bb27a9c5728c00b05d3 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 11:53:21 +0100 Subject: [PATCH 12/20] read label --- .../src/main/res/values-sv-rSE/strings.xml | 3 +- .../src/main/res/values/strings.xml | 3 +- .../puppyguide/PuppyGuideDestination.kt | 49 +++++++++++++------ 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml b/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml index 0ea32cb369..42a07d34c2 100644 --- a/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml +++ b/app/core/core-resources/src/main/res/values-sv-rSE/strings.xml @@ -530,8 +530,9 @@ Se guider I valpguiden hittar du användbara artiklar som hjälper dig med allt från första veterinärbesöket till hur du väljer rätt foder. Utvalda guider + Läst Inte hjälpsam - Hur hittade du den här artikeln? + Var den här artikeln hjälpsam? Mycket hjälpsam Hjälpsamma guider för dig och din valp Valpguiden diff --git a/app/core/core-resources/src/main/res/values/strings.xml b/app/core/core-resources/src/main/res/values/strings.xml index f24af35b78..d062a31992 100644 --- a/app/core/core-resources/src/main/res/values/strings.xml +++ b/app/core/core-resources/src/main/res/values/strings.xml @@ -530,8 +530,9 @@ Go to guides In the puppy guide, you’ll find helpful articles covering everything from the first vet visit to choosing the right food. Featured guides + Read Not helpful - How did you find this article? + Was this article helpful? Very helpful Helpful guides for you and your puppy Puppy Guide diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index 39a8fec491..68f9a6297e 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.clickable import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -47,6 +48,8 @@ import com.hedvig.android.design.system.hedvig.HedvigScaffold import com.hedvig.android.design.system.hedvig.HedvigShortMultiScreenPreview import com.hedvig.android.design.system.hedvig.HedvigText import com.hedvig.android.design.system.hedvig.HedvigTheme +import com.hedvig.android.design.system.hedvig.HighlightLabel +import com.hedvig.android.design.system.hedvig.HighlightLabelDefaults import com.hedvig.android.design.system.hedvig.Surface import com.hedvig.android.design.system.hedvig.TopAppBarWithBack import com.hedvig.android.design.system.hedvig.rememberPreviewImageLoader @@ -242,25 +245,41 @@ private fun ArticleItem( }, ), ) { - val fallbackPainter: Painter = ColorPainter(Color.Black.copy(alpha = 0.7f)) - AsyncImage( - model = story.image, - contentDescription = EmptyContentDescription, // todo - placeholder = fallbackPainter, - error = fallbackPainter, - fallback = fallbackPainter, - imageLoader = imageLoader, - contentScale = ContentScale.Crop, - modifier = Modifier - .size(size) - .clip(shape), - ) + Box( + contentAlignment = Alignment.TopEnd, + ) { + val fallbackPainter: Painter = ColorPainter(Color.Black.copy(alpha = 0.7f)) + AsyncImage( + model = story.image, + contentDescription = EmptyContentDescription, // todo + placeholder = fallbackPainter, + error = fallbackPainter, + fallback = fallbackPainter, + imageLoader = imageLoader, + contentScale = ContentScale.Crop, + modifier = Modifier + .size(size) + .clip(shape), + ) + if (story.isRead) { + HighlightLabel( + modifier = modifier.padding(end = 12.dp, + top = 12.dp), + labelText = stringResource(R.string.PUPPY_GUIDE_LABEL_READ), + size = HighlightLabelDefaults.HighLightSize.Small, + color = HighlightLabelDefaults.HighlightColor.Grey( + HighlightLabelDefaults.HighlightShade.LIGHT) + ) + } + + } + Spacer(Modifier.height(8.dp)) HedvigText( story.title, style = HedvigTheme.typography.label, maxLines = 1, - overflow= TextOverflow.Ellipsis, //todo: not by a11y req + overflow = TextOverflow.Ellipsis, //todo: not by a11y req ) HedvigText( story.subtitle, @@ -301,7 +320,7 @@ private class PuppyGuideUiStatePreviewProvider : image = "", name = "", rating = 5, - isRead = false, + isRead = true, subtitle = "5 min read", title = "Puppy food food food food food food food ", ), From 362073a6b5bab53a0f8a2deb7e18ae9e6fe7e8b7 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 13:14:41 +0100 Subject: [PATCH 13/20] bring into view first variant --- .../puppyguide/PuppyGuideDestination.kt | 52 +++++++++++++++---- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index 68f9a6297e..1e3986283b 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -17,10 +17,18 @@ import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.relocation.BringIntoViewRequester +import androidx.compose.foundation.relocation.bringIntoViewRequester import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateMapOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -28,6 +36,8 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.painter.ColorPainter import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.input.nestedscroll.NestedScrollConnection +import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -55,6 +65,7 @@ import com.hedvig.android.design.system.hedvig.TopAppBarWithBack import com.hedvig.android.design.system.hedvig.rememberPreviewImageLoader import com.hedvig.android.feature.help.center.data.PuppyGuideStory import hedvig.resources.R +import kotlinx.coroutines.launch @Composable internal fun PuppyGuideDestination( @@ -126,7 +137,7 @@ private fun PuppyGuideSuccessScreen( modifier = Modifier .padding(horizontal = 16.dp) .fillMaxWidth() - .verticalScroll(rememberScrollState()), + .verticalScroll(rememberScrollState()) ) { Spacer(modifier = Modifier.height(8.dp)) Column( @@ -154,21 +165,44 @@ private fun PuppyGuideSuccessScreen( ) Spacer(modifier = Modifier.height(48.dp)) val categories = uiState.stories.flatMap { it.categories }.toSet().toList() + + var selectedCategory by remember { mutableStateOf(null) } + val requesters = remember { mutableStateMapOf() } + + val scope = rememberCoroutineScope() + LaunchedEffect(selectedCategory) { + selectedCategory?.let { cat -> + requesters[cat]?.let { requester -> + scope.launch { requester.bringIntoView() } + } + } + } + GuideCategoriesRow( categories, onCategoryClick = { - // todo + selectedCategory = it }, ) Spacer(modifier = Modifier.height(48.dp)) - categories.forEach { cat -> - CategoryWithArticlesSection( - cat, - stories = uiState.stories.filter { it.categories.contains(cat) }, - onNavigateToArticle = onNavigateToArticle, - imageLoader = imageLoader, - ) + Column(Modifier.fillMaxWidth()) { + categories.forEach { cat -> + val requester = remember(cat) { + BringIntoViewRequester().also { + requesters[cat] = it + } + } + CategoryWithArticlesSection( + cat, + stories = uiState.stories.filter { it.categories.contains(cat) }, + onNavigateToArticle = onNavigateToArticle, + imageLoader = imageLoader, + modifier = Modifier + .bringIntoViewRequester(requester) + ) + } } + } } } From ce1310e15ff1e46f093a4afcd4b1c374d5469b3d Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 13:31:12 +0100 Subject: [PATCH 14/20] add rating --- .../puppyguide/PuppyArticleDestination.kt | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt index b9fea357fe..aa22fb0974 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt @@ -1,6 +1,9 @@ package com.hedvig.android.feature.help.center.puppyguide +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize @@ -8,6 +11,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing +import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -22,6 +26,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import androidx.compose.ui.unit.dp @@ -32,12 +37,14 @@ import com.halilibo.richtext.commonmark.Markdown import com.halilibo.richtext.ui.RichTextStyle import com.halilibo.richtext.ui.string.RichTextStringStyle import com.hedvig.android.compose.ui.EmptyContentDescription +import com.hedvig.android.design.system.hedvig.HedvigCard import com.hedvig.android.design.system.hedvig.HedvigErrorSection import com.hedvig.android.design.system.hedvig.HedvigFullScreenCenterAlignedProgress import com.hedvig.android.design.system.hedvig.HedvigScaffold import com.hedvig.android.design.system.hedvig.HedvigShortMultiScreenPreview import com.hedvig.android.design.system.hedvig.HedvigText import com.hedvig.android.design.system.hedvig.HedvigTheme +import com.hedvig.android.design.system.hedvig.HorizontalItemsWithMaximumSpaceTaken import com.hedvig.android.design.system.hedvig.ProvideTextStyle import com.hedvig.android.design.system.hedvig.RichText import com.hedvig.android.design.system.hedvig.Surface @@ -178,9 +185,11 @@ private fun PuppyArticleSuccessScreen( } Spacer(Modifier.height(48.dp)) HedvigText(stringResource(R.string.PUPPY_GUIDE_RATING_QUESTION)) + Spacer(Modifier.height(16.dp)) RatingSection( onRatingClick = onRatingClick, ) + Spacer(Modifier.height(16.dp)) } } } @@ -192,10 +201,51 @@ private fun RatingSection( modifier: Modifier = Modifier, ) { Column( - modifier = modifier.fillMaxWidth(), + modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally, ) { - + val ratings = listOf(1,2,3,4,5) + Row( + horizontalArrangement = Arrangement.SpaceAround, + modifier = Modifier + ) { + ratings.forEach { rating -> + HedvigCard( + modifier = Modifier.weight(1f), + onClick = { + onRatingClick(rating) + } + ) { + HedvigText( + text = rating.toString(), + style = HedvigTheme.typography.bodyLarge, + textAlign = TextAlign.Center, + modifier = Modifier.padding(vertical = 16.dp) + ) + } + Spacer(Modifier.width(6.dp)) + } + } + Spacer(Modifier.height(16.dp)) + HorizontalItemsWithMaximumSpaceTaken( + startSlot = { + HedvigText( + stringResource(R.string.PUPPY_GUIDE_RATING_NOT_HELPFUL), + style = HedvigTheme.typography.label, + color = HedvigTheme.colorScheme.textSecondaryTranslucent, + ) + }, + endSlot = { + Row(horizontalArrangement = Arrangement.End) { + HedvigText( + stringResource(R.string.PUPPY_GUIDE_RATING_VERY_HELPFUL), + style = HedvigTheme.typography.label, + color = HedvigTheme.colorScheme.textSecondaryTranslucent, + ) + } + }, + spaceBetween = 8.dp + ) } } From 5e8e77d5c2e9715f78758e799e6d450643ae664c Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 13:36:05 +0100 Subject: [PATCH 15/20] change colors for rating --- .../help/center/puppyguide/PuppyArticleDestination.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt index aa22fb0974..4367ba4b7a 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt @@ -188,6 +188,7 @@ private fun PuppyArticleSuccessScreen( Spacer(Modifier.height(16.dp)) RatingSection( onRatingClick = onRatingClick, + selectedRating = uiState.story.rating ) Spacer(Modifier.height(16.dp)) } @@ -197,6 +198,7 @@ private fun PuppyArticleSuccessScreen( @Composable private fun RatingSection( + selectedRating: Int?, onRatingClick: (Int) -> Unit, modifier: Modifier = Modifier, ) { @@ -214,11 +216,15 @@ private fun RatingSection( modifier = Modifier.weight(1f), onClick = { onRatingClick(rating) - } + }, + color = if (selectedRating ==rating) HedvigTheme.colorScheme.signalGreenFill + else HedvigTheme.colorScheme.surfacePrimary ) { HedvigText( text = rating.toString(), style = HedvigTheme.typography.bodyLarge, + color = if (selectedRating ==rating) HedvigTheme.colorScheme.textBlack + else HedvigTheme.colorScheme.textSecondaryTranslucent, textAlign = TextAlign.Center, modifier = Modifier.padding(vertical = 16.dp) ) From 88d7d47759de1465fb3a79f8b16a44e15c500aeb Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 13:40:58 +0100 Subject: [PATCH 16/20] lazylist with sticky header --- .../puppyguide/PuppyGuideDestination.kt | 141 +++++++++--------- 1 file changed, 74 insertions(+), 67 deletions(-) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index 1e3986283b..446ba61eb7 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -17,14 +17,13 @@ import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.foundation.relocation.BringIntoViewRequester -import androidx.compose.foundation.relocation.bringIntoViewRequester +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope @@ -36,8 +35,6 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.painter.ColorPainter import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.input.nestedscroll.NestedScrollConnection -import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -121,88 +118,98 @@ private fun PuppyGuideSuccessScreen( onNavigateUp: () -> Unit, imageLoader: ImageLoader, ) { + val categories = uiState.stories.flatMap { it.categories }.toSet().toList() + var selectedCategory by remember { mutableStateOf(null) } + val listState = rememberLazyListState() + val scope = rememberCoroutineScope() + + LaunchedEffect(selectedCategory) { + selectedCategory?.let { cat -> + val index = categories.indexOf(cat) + if (index >= 0) { + // +2 to account for header item and sticky header + // Negative offset to scroll less and avoid sticky header covering the title + scope.launch { + listState.animateScrollToItem(index + 2, scrollOffset = -100) + } + } + } + } + Surface( color = HedvigTheme.colorScheme.backgroundPrimary, modifier = Modifier.windowInsetsPadding(WindowInsets.safeDrawing), ) { Column( - Modifier - .fillMaxSize(), + Modifier.fillMaxSize(), ) { TopAppBarWithBack( title = "", onClick = onNavigateUp, ) - Column( + + LazyColumn( + state = listState, modifier = Modifier - .padding(horizontal = 16.dp) .fillMaxWidth() - .verticalScroll(rememberScrollState()) + .padding(horizontal = 16.dp) ) { - Spacer(modifier = Modifier.height(8.dp)) - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier - .fillMaxWidth(), - ) { - Image( - painter = painterResource(id = com.hedvig.android.feature.help.center.R.drawable.hundar_badar_pet), - contentDescription = null, - contentScale = ContentScale.Crop, - alignment = Alignment.Center, - modifier = Modifier - .height(300.dp) - .clip(HedvigTheme.shapes.cornerXLarge), - ) - } - - Spacer(modifier = Modifier.height(16.dp)) - HedvigText(stringResource(R.string.PUPPY_GUIDE_TITLE)) - Spacer(modifier = Modifier.height(8.dp)) - HedvigText( - stringResource(R.string.PUPPY_GUIDE_INFO), - color = HedvigTheme.colorScheme.textSecondary, - ) - Spacer(modifier = Modifier.height(48.dp)) - val categories = uiState.stories.flatMap { it.categories }.toSet().toList() - - var selectedCategory by remember { mutableStateOf(null) } - val requesters = remember { mutableStateMapOf() } - - val scope = rememberCoroutineScope() - LaunchedEffect(selectedCategory) { - selectedCategory?.let { cat -> - requesters[cat]?.let { requester -> - scope.launch { requester.bringIntoView() } + // Header content + item { + Column { + Spacer(modifier = Modifier.height(8.dp)) + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxWidth(), + ) { + Image( + painter = painterResource(id = com.hedvig.android.feature.help.center.R.drawable.hundar_badar_pet), + contentDescription = null, + contentScale = ContentScale.Crop, + alignment = Alignment.Center, + modifier = Modifier + .height(300.dp) + .clip(HedvigTheme.shapes.cornerXLarge), + ) } + Spacer(modifier = Modifier.height(16.dp)) + HedvigText(stringResource(R.string.PUPPY_GUIDE_TITLE)) + Spacer(modifier = Modifier.height(8.dp)) + HedvigText( + stringResource(R.string.PUPPY_GUIDE_INFO), + color = HedvigTheme.colorScheme.textSecondary, + ) + Spacer(modifier = Modifier.height(48.dp)) } } - GuideCategoriesRow( - categories, - onCategoryClick = { - selectedCategory = it - }, - ) - Spacer(modifier = Modifier.height(48.dp)) - Column(Modifier.fillMaxWidth()) { - categories.forEach { cat -> - val requester = remember(cat) { - BringIntoViewRequester().also { - requesters[cat] = it - } + // Sticky category row + stickyHeader { + Surface( + color = HedvigTheme.colorScheme.backgroundPrimary, + modifier = Modifier.fillMaxWidth() + ) { + Column { + GuideCategoriesRow( + categories, + onCategoryClick = { + selectedCategory = it + }, + ) + Spacer(modifier = Modifier.height(24.dp)) } - CategoryWithArticlesSection( - cat, - stories = uiState.stories.filter { it.categories.contains(cat) }, - onNavigateToArticle = onNavigateToArticle, - imageLoader = imageLoader, - modifier = Modifier - .bringIntoViewRequester(requester) - ) } } + // Category sections + items(categories) { cat -> + CategoryWithArticlesSection( + cat, + stories = uiState.stories.filter { it.categories.contains(cat) }, + onNavigateToArticle = onNavigateToArticle, + imageLoader = imageLoader, + ) + } } } } From 44547d25c2a3faea1eed218aa1e8015a86ecaa10 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 14:09:11 +0100 Subject: [PATCH 17/20] send rating with mutation --- .../MutationPuppyGuideEngagement.graphql | 5 ++ .../feature/help/center/HelpCenterGraph.kt | 14 ++++-- .../center/data/SetArticleRatingUseCase.kt | 32 +++++++++++++ .../help/center/di/HelpCenterModule.kt | 7 +++ .../puppyguide/PuppyArticleDestination.kt | 33 ++++++------- .../puppyguide/PuppyArticleViewModel.kt | 46 ++++++++++++++++--- .../puppyguide/PuppyGuideDestination.kt | 25 +++++----- 7 files changed, 121 insertions(+), 41 deletions(-) create mode 100644 app/feature/feature-help-center/src/main/graphql/MutationPuppyGuideEngagement.graphql create mode 100644 app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/SetArticleRatingUseCase.kt diff --git a/app/feature/feature-help-center/src/main/graphql/MutationPuppyGuideEngagement.graphql b/app/feature/feature-help-center/src/main/graphql/MutationPuppyGuideEngagement.graphql new file mode 100644 index 0000000000..0964b67a59 --- /dev/null +++ b/app/feature/feature-help-center/src/main/graphql/MutationPuppyGuideEngagement.graphql @@ -0,0 +1,5 @@ +mutation PuppyGuideEngagement($name: String!, $rating: Int, $read: Boolean) { + puppyGuideEngagement(engagement: {name: $name, rating: $rating, read: $read}) { + success + } +} diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt index 2480e89b68..c6b2decc90 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/HelpCenterGraph.kt @@ -159,22 +159,26 @@ fun NavGraphBuilder.helpCenterGraph( viewModel, onNavigateUp = navigator::navigateUp, onNavigateToArticle = { story -> - with(navigator) { backStackEntry.navigate(HelpCenterDestinations.PuppyGuideArticle( - story.name - ))} + with(navigator) { + backStackEntry.navigate( + HelpCenterDestinations.PuppyGuideArticle( + story.name, + ), + ) + } }, imageLoader = imageLoader, ) } navdestination { - val viewModel = koinViewModel() { + val viewModel = koinViewModel { parametersOf(storyName) } PuppyArticleDestination( viewModel = viewModel, navigateUp = navigator::navigateUp, - imageLoader = imageLoader + imageLoader = imageLoader, ) } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/SetArticleRatingUseCase.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/SetArticleRatingUseCase.kt new file mode 100644 index 0000000000..0a387dcdd1 --- /dev/null +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/SetArticleRatingUseCase.kt @@ -0,0 +1,32 @@ +package com.hedvig.android.feature.help.center.data + +import arrow.core.Either +import com.apollographql.apollo.ApolloClient +import com.apollographql.apollo.api.Optional +import com.hedvig.android.apollo.safeExecute +import com.hedvig.android.core.common.ErrorMessage +import octopus.PuppyGuideEngagementMutation + +interface SetArticleRatingUseCase { + suspend fun invoke(articleName: String, rating: Int): Either +} + +internal class SetArticleRatingUseCaseImpl( + private val apolloClient: ApolloClient, +) : SetArticleRatingUseCase { + override suspend fun invoke( + articleName: String, + rating: Int, + ): Either { + return apolloClient + .mutation( + PuppyGuideEngagementMutation( + name = articleName, + rating = Optional.present(rating), + read = Optional.present(true), + ), + ) + .safeExecute() + .mapLeft { _ -> ErrorMessage() } + } +} diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt index f02c3514e8..b09b7cc361 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/di/HelpCenterModule.kt @@ -17,6 +17,8 @@ import com.hedvig.android.feature.help.center.data.GetMemberActionsUseCaseImpl import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCase import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCaseImpl import com.hedvig.android.feature.help.center.data.GetQuickLinksUseCase +import com.hedvig.android.feature.help.center.data.SetArticleRatingUseCase +import com.hedvig.android.feature.help.center.data.SetArticleRatingUseCaseImpl import com.hedvig.android.feature.help.center.puppyguide.PuppyArticleViewModel import com.hedvig.android.feature.help.center.puppyguide.PuppyGuideViewModel import com.hedvig.android.feature.help.center.question.HelpCenterQuestionViewModel @@ -100,7 +102,12 @@ val helpCenterModule = module { viewModel { params -> PuppyArticleViewModel( getPuppyGuideUseCase = get(), + setArticleRatingUseCase = get(), storyName = params.get(), ) } + + single { + SetArticleRatingUseCaseImpl(apolloClient = get()) + } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt index 4367ba4b7a..9d0f922f1c 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt @@ -188,7 +188,7 @@ private fun PuppyArticleSuccessScreen( Spacer(Modifier.height(16.dp)) RatingSection( onRatingClick = onRatingClick, - selectedRating = uiState.story.rating + selectedRating = uiState.story.rating, ) Spacer(Modifier.height(16.dp)) } @@ -197,19 +197,15 @@ private fun PuppyArticleSuccessScreen( } @Composable -private fun RatingSection( - selectedRating: Int?, - onRatingClick: (Int) -> Unit, - modifier: Modifier = Modifier, -) { +private fun RatingSection(selectedRating: Int?, onRatingClick: (Int) -> Unit, modifier: Modifier = Modifier) { Column( - modifier = modifier, + modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally, ) { - val ratings = listOf(1,2,3,4,5) + val ratings = listOf(1, 2, 3, 4, 5) Row( horizontalArrangement = Arrangement.SpaceAround, - modifier = Modifier + modifier = Modifier, ) { ratings.forEach { rating -> HedvigCard( @@ -217,16 +213,22 @@ private fun RatingSection( onClick = { onRatingClick(rating) }, - color = if (selectedRating ==rating) HedvigTheme.colorScheme.signalGreenFill - else HedvigTheme.colorScheme.surfacePrimary + color = if (selectedRating == rating) { + HedvigTheme.colorScheme.signalGreenFill + } else { + HedvigTheme.colorScheme.surfacePrimary + }, ) { HedvigText( text = rating.toString(), style = HedvigTheme.typography.bodyLarge, - color = if (selectedRating ==rating) HedvigTheme.colorScheme.textBlack - else HedvigTheme.colorScheme.textSecondaryTranslucent, + color = if (selectedRating == rating) { + HedvigTheme.colorScheme.textBlack + } else { + HedvigTheme.colorScheme.textSecondaryTranslucent + }, textAlign = TextAlign.Center, - modifier = Modifier.padding(vertical = 16.dp) + modifier = Modifier.padding(vertical = 16.dp), ) } Spacer(Modifier.width(6.dp)) @@ -250,7 +252,7 @@ private fun RatingSection( ) } }, - spaceBetween = 8.dp + spaceBetween = 8.dp, ) } } @@ -273,7 +275,6 @@ private fun PuppyArticleScreenPreview( } } - private class PuppyArticleUiStatePreviewProvider : CollectionPreviewParameterProvider( listOf( diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt index b0d4fd3d8b..04032b939e 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt @@ -9,32 +9,37 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import com.hedvig.android.feature.help.center.data.GetPuppyGuideUseCase import com.hedvig.android.feature.help.center.data.PuppyGuideStory +import com.hedvig.android.feature.help.center.data.SetArticleRatingUseCase +import com.hedvig.android.logger.logcat import com.hedvig.android.molecule.android.MoleculeViewModel import com.hedvig.android.molecule.public.MoleculePresenter import com.hedvig.android.molecule.public.MoleculePresenterScope internal class PuppyArticleViewModel( getPuppyGuideUseCase: GetPuppyGuideUseCase, + setArticleRatingUseCase: SetArticleRatingUseCase, storyName: String, ) : MoleculeViewModel( - presenter = PuppyArticlePresenter(getPuppyGuideUseCase, storyName), + presenter = PuppyArticlePresenter(getPuppyGuideUseCase, storyName, setArticleRatingUseCase), initialState = PuppyArticleUiState.Loading, ) private class PuppyArticlePresenter( private val getPuppyGuideUseCase: GetPuppyGuideUseCase, private val storyName: String, + private val setArticleRatingUseCase: SetArticleRatingUseCase, ) : MoleculePresenter { @Composable override fun MoleculePresenterScope.present(lastState: PuppyArticleUiState): PuppyArticleUiState { var currentState by remember { mutableStateOf(lastState) } var loadIteration by remember { mutableIntStateOf(0) } + var rating by remember { mutableStateOf(null) } CollectEvents { event -> when (event) { PuppyArticleEvent.Reload -> loadIteration++ is PuppyArticleEvent.RatingClick -> { - //todo + rating = event.rating } } } @@ -55,17 +60,44 @@ private class PuppyArticlePresenter( ) } - return currentState + LaunchedEffect(rating) { + val state = currentState as? PuppyArticleUiState.Success ?: return@LaunchedEffect + val currentRating = rating ?: return@LaunchedEffect + val articleName = state.story.name + setArticleRatingUseCase.invoke( + articleName = articleName, + rating = currentRating, + ).fold( + ifLeft = { + // todo: snackbar? + }, + ifRight = { + // todo: snackbar? + }, + ) + } + + return when (val state = currentState) { + PuppyArticleUiState.Failure -> state + PuppyArticleUiState.Loading -> state + is PuppyArticleUiState.Success -> + state.copy( + story = state.story.copy(rating = rating), + ) + } } } internal sealed interface PuppyArticleEvent { - data object Reload: PuppyArticleEvent - data class RatingClick(val rating: Int): PuppyArticleEvent + data object Reload : PuppyArticleEvent + + data class RatingClick(val rating: Int) : PuppyArticleEvent } internal sealed interface PuppyArticleUiState { data class Success(val story: PuppyGuideStory) : PuppyArticleUiState - data object Loading: PuppyArticleUiState - data object Failure: PuppyArticleUiState + + data object Loading : PuppyArticleUiState + + data object Failure : PuppyArticleUiState } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index 446ba61eb7..c816f3310d 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -152,7 +152,7 @@ private fun PuppyGuideSuccessScreen( state = listState, modifier = Modifier .fillMaxWidth() - .padding(horizontal = 16.dp) + .padding(horizontal = 16.dp), ) { // Header content item { @@ -187,7 +187,7 @@ private fun PuppyGuideSuccessScreen( stickyHeader { Surface( color = HedvigTheme.colorScheme.backgroundPrimary, - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(), ) { Column { GuideCategoriesRow( @@ -259,7 +259,7 @@ private fun CategoryWithArticlesSection( story = story, onNavigateToArticle = onNavigateToArticle, imageLoader = imageLoader, - size = size + size = size, ) } } @@ -274,7 +274,7 @@ private fun ArticleItem( imageLoader: ImageLoader, size: Dp, modifier: Modifier = Modifier, - shape: Shape = HedvigTheme.shapes.cornerMedium + shape: Shape = HedvigTheme.shapes.cornerMedium, ) { Column( modifier @@ -304,15 +304,15 @@ private fun ArticleItem( ) if (story.isRead) { HighlightLabel( - modifier = modifier.padding(end = 12.dp, - top = 12.dp), + modifier = modifier.padding( + end = 12.dp, + top = 12.dp, + ), labelText = stringResource(R.string.PUPPY_GUIDE_LABEL_READ), - size = HighlightLabelDefaults.HighLightSize.Small, - color = HighlightLabelDefaults.HighlightColor.Grey( - HighlightLabelDefaults.HighlightShade.LIGHT) + size = HighlightLabelDefaults.HighLightSize.Small, + color = HighlightLabelDefaults.HighlightColor.Grey(HighlightLabelDefaults.HighlightShade.LIGHT), ) } - } Spacer(Modifier.height(8.dp)) @@ -320,12 +320,12 @@ private fun ArticleItem( story.title, style = HedvigTheme.typography.label, maxLines = 1, - overflow = TextOverflow.Ellipsis, //todo: not by a11y req + overflow = TextOverflow.Ellipsis, // todo: not by a11y req ) HedvigText( story.subtitle, style = HedvigTheme.typography.label, - color = HedvigTheme.colorScheme.textSecondaryTranslucent + color = HedvigTheme.colorScheme.textSecondaryTranslucent, ) } } @@ -348,7 +348,6 @@ private fun PuppyArticleScreenAnimations( } } - private class PuppyGuideUiStatePreviewProvider : CollectionPreviewParameterProvider( listOf( From f902556bab271da26ba4fc3c8f7e59c418348c18 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 14:26:31 +0100 Subject: [PATCH 18/20] fix offsets and paddings --- .../help/center/puppyguide/PuppyArticleDestination.kt | 4 +++- .../help/center/puppyguide/PuppyGuideDestination.kt | 9 ++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt index 9d0f922f1c..5a95922136 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -143,7 +144,8 @@ private fun PuppyArticleSuccessScreen( imageLoader = imageLoader, contentScale = ContentScale.Crop, modifier = Modifier - .height(200.dp) + .fillMaxWidth() + .defaultMinSize(minHeight = 200.dp) .clip(HedvigTheme.shapes.cornerMedium), ) } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index c816f3310d..ba8a7f8b77 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -127,10 +127,12 @@ private fun PuppyGuideSuccessScreen( selectedCategory?.let { cat -> val index = categories.indexOf(cat) if (index >= 0) { - // +2 to account for header item and sticky header // Negative offset to scroll less and avoid sticky header covering the title scope.launch { - listState.animateScrollToItem(index + 2, scrollOffset = -100) + listState.animateScrollToItem( + index + 2, + scrollOffset = -200 //todo: wtf + ) } } } @@ -154,7 +156,6 @@ private fun PuppyGuideSuccessScreen( .fillMaxWidth() .padding(horizontal = 16.dp), ) { - // Header content item { Column { Spacer(modifier = Modifier.height(8.dp)) @@ -183,7 +184,6 @@ private fun PuppyGuideSuccessScreen( } } - // Sticky category row stickyHeader { Surface( color = HedvigTheme.colorScheme.backgroundPrimary, @@ -201,7 +201,6 @@ private fun PuppyGuideSuccessScreen( } } - // Category sections items(categories) { cat -> CategoryWithArticlesSection( cat, From d3211991a7a899a3ffb9a39c84ef1b7d3d9a7225 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 15:00:27 +0100 Subject: [PATCH 19/20] fix rating --- .../feature/help/center/data/GetPuppyGuideUseCase.kt | 4 ++++ .../feature/help/center/data/SetArticleRatingUseCase.kt | 5 ++++- .../help/center/puppyguide/PuppyArticleDestination.kt | 8 ++++++-- .../help/center/puppyguide/PuppyArticleViewModel.kt | 4 +++- .../help/center/puppyguide/PuppyGuideDestination.kt | 3 ++- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt index a9bdd517ae..b279a59de6 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt @@ -26,6 +26,10 @@ internal class GetPuppyGuideUseCaseImpl( ?.currentMember ?.puppyGuideStories ?.map { story -> + //todo: remove log + if (story.name=="Ögonvård") { + logcat { "Mariia: story Ögonvård read or not: ${story.read} rating: ${story.rating} " } + } PuppyGuideStory( categories = story.categories, content = story.content, diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/SetArticleRatingUseCase.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/SetArticleRatingUseCase.kt index 0a387dcdd1..776bdfb3dd 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/SetArticleRatingUseCase.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/SetArticleRatingUseCase.kt @@ -5,6 +5,7 @@ import com.apollographql.apollo.ApolloClient import com.apollographql.apollo.api.Optional import com.hedvig.android.apollo.safeExecute import com.hedvig.android.core.common.ErrorMessage +import com.hedvig.android.logger.logcat import octopus.PuppyGuideEngagementMutation interface SetArticleRatingUseCase { @@ -23,10 +24,12 @@ internal class SetArticleRatingUseCaseImpl( PuppyGuideEngagementMutation( name = articleName, rating = Optional.present(rating), - read = Optional.present(true), ), ) .safeExecute() .mapLeft { _ -> ErrorMessage() } + .onRight { data -> + logcat { "Mariia. Rating $rating for story $articleName set successfully" } + } } } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt index 5a95922136..ebf9c8f71d 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt @@ -52,6 +52,7 @@ import com.hedvig.android.design.system.hedvig.Surface import com.hedvig.android.design.system.hedvig.TopAppBarWithBack import com.hedvig.android.design.system.hedvig.rememberPreviewImageLoader import com.hedvig.android.feature.help.center.data.PuppyGuideStory +import com.hedvig.android.logger.logcat import hedvig.resources.R @Composable @@ -188,6 +189,7 @@ private fun PuppyArticleSuccessScreen( Spacer(Modifier.height(48.dp)) HedvigText(stringResource(R.string.PUPPY_GUIDE_RATING_QUESTION)) Spacer(Modifier.height(16.dp)) + logcat { "Mariia: uiState.story.rating ${uiState.story.rating}" } RatingSection( onRatingClick = onRatingClick, selectedRating = uiState.story.rating, @@ -210,12 +212,14 @@ private fun RatingSection(selectedRating: Int?, onRatingClick: (Int) -> Unit, mo modifier = Modifier, ) { ratings.forEach { rating -> + val isSelectedRating =selectedRating == rating + logcat { "Mariia: isSelectedRating $isSelectedRating" } HedvigCard( modifier = Modifier.weight(1f), onClick = { onRatingClick(rating) }, - color = if (selectedRating == rating) { + color = if (isSelectedRating) { HedvigTheme.colorScheme.signalGreenFill } else { HedvigTheme.colorScheme.surfacePrimary @@ -224,7 +228,7 @@ private fun RatingSection(selectedRating: Int?, onRatingClick: (Int) -> Unit, mo HedvigText( text = rating.toString(), style = HedvigTheme.typography.bodyLarge, - color = if (selectedRating == rating) { + color = if (isSelectedRating) { HedvigTheme.colorScheme.textBlack } else { HedvigTheme.colorScheme.textSecondaryTranslucent diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt index 04032b939e..84a2b591ef 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt @@ -54,6 +54,8 @@ private class PuppyArticlePresenter( currentState = if (matchingStory == null) { PuppyArticleUiState.Failure } else { + logcat { "Mariia. Story rating is: ${matchingStory.rating} "} + rating = matchingStory.rating PuppyArticleUiState.Success(matchingStory) } }, @@ -72,7 +74,7 @@ private class PuppyArticlePresenter( // todo: snackbar? }, ifRight = { - // todo: snackbar? + logcat { "Mariia: rating set!" } }, ) } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index ba8a7f8b77..1c443a35b2 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -72,6 +72,7 @@ internal fun PuppyGuideDestination( onNavigateToArticle: (PuppyGuideStory) -> Unit, ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() + PuppyGuideScreen( uiState, onNavigateToArticle = onNavigateToArticle, @@ -301,7 +302,7 @@ private fun ArticleItem( .size(size) .clip(shape), ) - if (story.isRead) { + if (story.isRead || story.rating!=null) { HighlightLabel( modifier = modifier.padding( end = 12.dp, From 193d4355c7fccb13f52d6b3af370436f15d23082 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Fri, 7 Nov 2025 15:09:44 +0100 Subject: [PATCH 20/20] fix cache --- app/feature/feature-help-center/build.gradle.kts | 1 + .../feature/help/center/data/GetPuppyGuideUseCase.kt | 7 +++++-- .../help/center/puppyguide/PuppyArticleDestination.kt | 2 +- .../help/center/puppyguide/PuppyArticleViewModel.kt | 2 +- .../help/center/puppyguide/PuppyGuideDestination.kt | 4 ++-- .../feature/help/center/puppyguide/PuppyGuideViewModel.kt | 2 ++ 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/feature/feature-help-center/build.gradle.kts b/app/feature/feature-help-center/build.gradle.kts index 2188ac5321..e6e0f5df41 100644 --- a/app/feature/feature-help-center/build.gradle.kts +++ b/app/feature/feature-help-center/build.gradle.kts @@ -19,6 +19,7 @@ dependencies { implementation(libs.androidx.lifecycle.compose) implementation(libs.androidx.navigation.compose) implementation(libs.apollo.runtime) + implementation(libs.apollo.normalizedCache) implementation(libs.arrow.core) implementation(libs.arrow.fx) implementation(libs.coil.compose) diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt index b279a59de6..03fe5387fa 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/data/GetPuppyGuideUseCase.kt @@ -3,6 +3,8 @@ package com.hedvig.android.feature.help.center.data import arrow.core.Either import arrow.core.raise.either import com.apollographql.apollo.ApolloClient +import com.apollographql.apollo.cache.normalized.FetchPolicy +import com.apollographql.apollo.cache.normalized.fetchPolicy import com.hedvig.android.apollo.safeExecute import com.hedvig.android.core.common.ErrorMessage import com.hedvig.android.logger.logcat @@ -20,14 +22,15 @@ internal class GetPuppyGuideUseCaseImpl( return either { apolloClient .query(PuppyGuideQuery()) + .fetchPolicy(FetchPolicy.NetworkOnly) .safeExecute() .onLeft { logcat { "Cannot load PuppyGuideStory: $it" } } .getOrNull() ?.currentMember ?.puppyGuideStories ?.map { story -> - //todo: remove log - if (story.name=="Ögonvård") { + // todo: remove log + if (story.name == "Ögonvård") { logcat { "Mariia: story Ögonvård read or not: ${story.read} rating: ${story.rating} " } } PuppyGuideStory( diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt index ebf9c8f71d..2ae491e381 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleDestination.kt @@ -212,7 +212,7 @@ private fun RatingSection(selectedRating: Int?, onRatingClick: (Int) -> Unit, mo modifier = Modifier, ) { ratings.forEach { rating -> - val isSelectedRating =selectedRating == rating + val isSelectedRating = selectedRating == rating logcat { "Mariia: isSelectedRating $isSelectedRating" } HedvigCard( modifier = Modifier.weight(1f), diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt index 84a2b591ef..1ddbdbfee6 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyArticleViewModel.kt @@ -54,7 +54,7 @@ private class PuppyArticlePresenter( currentState = if (matchingStory == null) { PuppyArticleUiState.Failure } else { - logcat { "Mariia. Story rating is: ${matchingStory.rating} "} + logcat { "Mariia. Story rating is: ${matchingStory.rating} " } rating = matchingStory.rating PuppyArticleUiState.Success(matchingStory) } diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt index 1c443a35b2..8b557540c1 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideDestination.kt @@ -132,7 +132,7 @@ private fun PuppyGuideSuccessScreen( scope.launch { listState.animateScrollToItem( index + 2, - scrollOffset = -200 //todo: wtf + scrollOffset = -200, // todo: wtf ) } } @@ -302,7 +302,7 @@ private fun ArticleItem( .size(size) .clip(shape), ) - if (story.isRead || story.rating!=null) { + if (story.isRead || story.rating != null) { HighlightLabel( modifier = modifier.padding( end = 12.dp, diff --git a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt index 0e163b6c14..abfa3c0c58 100644 --- a/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt +++ b/app/feature/feature-help-center/src/main/kotlin/com/hedvig/android/feature/help/center/puppyguide/PuppyGuideViewModel.kt @@ -12,12 +12,14 @@ import com.hedvig.android.feature.help.center.data.PuppyGuideStory import com.hedvig.android.molecule.android.MoleculeViewModel import com.hedvig.android.molecule.public.MoleculePresenter import com.hedvig.android.molecule.public.MoleculePresenterScope +import kotlinx.coroutines.flow.SharingStarted internal class PuppyGuideViewModel( getPuppyGuideUseCase: GetPuppyGuideUseCase, ) : MoleculeViewModel( presenter = PuppyGuidePresenter(getPuppyGuideUseCase), initialState = PuppyGuideUiState.Loading, + sharingStarted = SharingStarted.WhileSubscribed(), ) private class PuppyGuidePresenter(