From e54c8f8c08e0c5bcdc17cf8da7d0b594b8b6f61b Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Tue, 23 Jun 2026 15:27:12 +0200 Subject: [PATCH 1/4] add Information step content --- .../android/apollo/octopus/schema.graphqls | 78 ++++++++++++++++++- .../graphql/FragmentClaimIntent.graphql | 7 ++ ...tationClaimIntentSubmitInformation.graphql | 5 ++ .../feature/claim/chat/ClaimChatViewModel.kt | 37 ++++++++- .../feature/claim/chat/data/ClaimIntent.kt | 10 +++ .../feature/claim/chat/data/ClaimIntentExt.kt | 7 ++ .../chat/data/SubmitInformationUseCase.kt | 41 ++++++++++ .../claim/chat/ui/ClaimChatDestination.kt | 61 ++++++++++++--- 8 files changed, 235 insertions(+), 11 deletions(-) create mode 100644 app/feature/feature-claim-chat/src/commonMain/graphql/MutationClaimIntentSubmitInformation.graphql create mode 100644 app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/SubmitInformationUseCase.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 3e30d7a249..a2460fb545 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 @@ -442,6 +442,22 @@ type AgreementDisplayItem { displaySubtitle: String displayValue: String! } +input AnswersInput { + relationship: String + isPregnant: Boolean + hasKids: Boolean + hasCat: Boolean + hasDog: Boolean + yourAge: String + partnerAge: String + isStudent: Boolean + housingType: String + houseAge: String + isRental: Boolean + hasCar: Boolean + carAge: String + wantsAllRisk: Boolean +} enum AppPlatform { IOS ANDROID @@ -1003,7 +1019,7 @@ type ClaimIntentStep { """ A union of all the different kinds of "step content". """ -union ClaimIntentStepContent = ClaimIntentStepContentForm|ClaimIntentStepContentSelect|ClaimIntentStepContentTask|ClaimIntentStepContentAudioRecording|ClaimIntentStepContentFileUpload|ClaimIntentStepContentSummary|ClaimIntentStepContentDeflection|ClaimIntentStepContentDeflectionMessage +union ClaimIntentStepContent = ClaimIntentStepContentForm|ClaimIntentStepContentSelect|ClaimIntentStepContentTask|ClaimIntentStepContentAudioRecording|ClaimIntentStepContentFileUpload|ClaimIntentStepContentSummary|ClaimIntentStepContentDeflection|ClaimIntentStepContentDeflectionMessage|ClaimIntentStepContentInformation """ An audio recording step is one where the user is meant to record some audio. Submitted using `Mutation.claimIntentSubmitAudio`. @@ -1181,6 +1197,22 @@ This typically will be backed by a String - but other formats could appear. """ scalar ClaimIntentStepContentFormFieldValue """ +A read and acknowledge notice if the member needs to be shown some urgent information (if water is still leaking -> turn off the pipe). Not terminal +Submitted using `Mutation.claimIntentSubmitInformation`. +""" +type ClaimIntentStepContentInformation { + notice: String! + """ + So we can show a white/red border if info/critical respectively. + """ + severity: ClaimIntentStepContentInformationSeverity! + buttonTitle: String! +} +enum ClaimIntentStepContentInformationSeverity { + INFO + CRITICAL +} +""" A select step is one that contains a choice to select one of several alternatives. It can be seen as a special-case form with nicer rendering. Submitted using `Mutation.claimIntentSubmitSelect`. @@ -1268,6 +1300,9 @@ input ClaimIntentSubmitFormInput { stepId: ID! fields: [ClaimIntentFormSubmitInputField!]! } +input ClaimIntentSubmitInformationInput { + stepId: ID! +} input ClaimIntentSubmitSelectInput { stepId: ID! selectedId: ID! @@ -2433,6 +2468,28 @@ type InsuranceEvidenceOutput { insuranceEvidenceInformation: InsuranceEvidenceInformation userError: UserError } +input InsuranceGuideInput { + """ + Email of the user. + """ + email: String + """ + Id of the insurance guide shopSession. + """ + shopSessionId: UUID! + """ + Insurance recommendation form answers. + """ + answers: AnswersInput! + """ + Insurance recommendations. + """ + recommendations: [RecommendationInput!]! +} +type InsuranceGuideOutput { + success: Boolean! + userError: UserError +} input InsurelyInitiateIframeDataCollectionInput { collectionId: String! partner: String @@ -3655,6 +3712,10 @@ type Mutation { """ claimIntentSubmitTask(input: ClaimIntentSubmitTaskInput!): ClaimIntentMutationOutput! """ + Acknowledge a step containing a `ClaimIntentStepContentInformation`, continuing the flow. + """ + claimIntentSubmitInformation(input: ClaimIntentSubmitInformationInput!): ClaimIntentMutationOutput! + """ Submit a step containing a `ClaimIntentStepContentSummary`. """ claimIntentSubmitSummary(input: ClaimIntentSubmitSummaryInput!): ClaimIntentMutationOutput! @@ -3729,6 +3790,10 @@ type Mutation { """ productOffersCancellationRequestedUpdate(productOfferIds: [UUID!]!, requested: Boolean!): ProductOffersMutationOutput! """ + Called to save insurance recommendation form and save recommendation email. + """ + insuranceGuide(input: InsuranceGuideInput!): InsuranceGuideOutput! + """ Create a `PriceIntent`. The `input.productName` has to be the name of a product among the ones listed at `Query.availableProducts`. The choice of product also affects which data will be needed for the intent to be confirmed and to produce offers. @@ -4305,6 +4370,10 @@ type ProductOffer { """ priceIntentId: UUID """ + Link to the price calculator for this offer (resumes the shop session). + """ + priceCalculatorLink: String + """ UI-safe masked form data used to generate the offer. PII fields (street, zipCode, city) are masked when address came from registration address lookup. """ priceIntentData: PricingFormData! @@ -4706,6 +4775,13 @@ type RecommendationExternalInsurance { """ dataCollectionId: String! } +input RecommendationInput { + productId: String! + name: String! + tier: String + productPageUrl: String! + priceCalculatorUrl: String! +} type RecommendedCrossSell { crossSell: CrossSell! bannerText: String! diff --git a/app/feature/feature-claim-chat/src/commonMain/graphql/FragmentClaimIntent.graphql b/app/feature/feature-claim-chat/src/commonMain/graphql/FragmentClaimIntent.graphql index 14e8d0d94e..be5412b125 100644 --- a/app/feature/feature-claim-chat/src/commonMain/graphql/FragmentClaimIntent.graphql +++ b/app/feature/feature-claim-chat/src/commonMain/graphql/FragmentClaimIntent.graphql @@ -25,6 +25,7 @@ fragment ClaimIntentStepContentFragment on ClaimIntentStepContent { ...SummaryFragment ...DeflectionFragment ...DeflectionMessageFragment + ...InformationFragment } fragment DeflectionMessageFragment on ClaimIntentStepContentDeflectionMessage { @@ -132,3 +133,9 @@ fragment DeflectionInfoBlockFragment on ClaimIntentStepContentDeflectionInfoBloc title description } + +fragment InformationFragment on ClaimIntentStepContentInformation { + notice + buttonTitle + severity +} diff --git a/app/feature/feature-claim-chat/src/commonMain/graphql/MutationClaimIntentSubmitInformation.graphql b/app/feature/feature-claim-chat/src/commonMain/graphql/MutationClaimIntentSubmitInformation.graphql new file mode 100644 index 0000000000..f1eb3264d5 --- /dev/null +++ b/app/feature/feature-claim-chat/src/commonMain/graphql/MutationClaimIntentSubmitInformation.graphql @@ -0,0 +1,5 @@ +mutation ClaimIntentSubmitInformation($input: ClaimIntentSubmitInformationInput!) { + claimIntentSubmitInformation(input: $input) { + ...ClaimIntentMutationOutputFragment + } +} diff --git a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ClaimChatViewModel.kt b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ClaimChatViewModel.kt index 97e4b68f97..fdcc96d249 100644 --- a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ClaimChatViewModel.kt +++ b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ClaimChatViewModel.kt @@ -45,6 +45,7 @@ import com.hedvig.feature.claim.chat.data.StepId import com.hedvig.feature.claim.chat.data.SubmitAudioRecordingUseCase import com.hedvig.feature.claim.chat.data.SubmitFileUploadUseCase import com.hedvig.feature.claim.chat.data.SubmitFormUseCase +import com.hedvig.feature.claim.chat.data.SubmitInformationUseCase import com.hedvig.feature.claim.chat.data.SubmitSelectUseCase import com.hedvig.feature.claim.chat.data.SubmitSummaryUseCase import com.hedvig.feature.claim.chat.data.SubmitTaskUseCase @@ -96,6 +97,8 @@ internal sealed interface ClaimChatEvent { data object DismissConfirmEditDialog : ClaimChatEvent + data class SubmitInformation(val id: StepId): ClaimChatEvent + data class SubmitForm( val stepId: StepId, ) : ClaimChatEvent @@ -177,6 +180,7 @@ internal class ClaimChatViewModel( regretStepUseCase: RegretStepUseCase, formFieldSearchUseCase: FormFieldSearchUseCase, fileService: FileService, + submitInformationUseCase: SubmitInformationUseCase ) : MoleculeViewModel( ClaimChatUiState.Initializing, ClaimChatPresenter( @@ -194,6 +198,7 @@ internal class ClaimChatViewModel( fileService, regretStepUseCase, formFieldSearchUseCase, + submitInformationUseCase ), ) { override fun onCleared() { @@ -217,6 +222,7 @@ internal class ClaimChatPresenter( private val fileService: FileService, private val regretStepUseCase: RegretStepUseCase, private val formFieldSearchUseCase: FormFieldSearchUseCase, + private val submitInformationUseCase: SubmitInformationUseCase ) : MoleculePresenter { @Composable override fun MoleculePresenterScope.present(lastState: ClaimChatUiState): ClaimChatUiState { @@ -936,6 +942,34 @@ internal class ClaimChatPresenter( ) } } + + is ClaimChatEvent.SubmitInformation -> { + val stepContent = steps.find { it.id == event.id }?.stepContent as? StepContent.Information + if (stepContent == null) { + logcat { "Step content not found or not Information" } + return@CollectEvents + } + currentContinueButtonLoading = true + launch { + submitInformationUseCase + .invoke(event.id) + .fold( + ifLeft = { + errorSubmittingStep = it + currentContinueButtonLoading = false + logcat { "ClaimChatEvent.SubmitInformation error: $it" } + }, + ifRight = { claimIntent -> + currentContinueButtonLoading = false + handleNext( + steps, + setOutcome, + claimIntent, + ) { progress = it } + }, + ) + } + } } } @@ -1112,7 +1146,8 @@ private fun ClaimIntentStep.clearContent(): ClaimIntentStep = when (val content is StepContent.Task, is StepContent.Deflect, is StepContent.DeflectMessage, - StepContent.Unknown, + is StepContent.Information, + StepContent.Unknown -> this } diff --git a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntent.kt b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntent.kt index 6df1fd1eed..6a985b8da7 100644 --- a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntent.kt +++ b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntent.kt @@ -7,6 +7,7 @@ import kotlin.jvm.JvmInline import kotlin.time.Instant import kotlinx.serialization.Contextual import kotlinx.serialization.Serializable +import octopus.type.ClaimIntentStepContentInformationSeverity @JvmInline value class ClaimIntentId(val value: String) @@ -179,6 +180,15 @@ internal sealed interface StepContent { object Unknown : StepContent { override val isSkippable: Boolean = false } + + @Serializable + data class Information( + val notice: String, + val buttonTitle: String, + val severity: ClaimIntentStepContentInformationSeverity + ): StepContent { + override val isSkippable: Boolean = false + } } sealed interface AudioRecordingStepState { diff --git a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntentExt.kt b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntentExt.kt index 191359eb00..bff41a02ef 100644 --- a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntentExt.kt +++ b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntentExt.kt @@ -18,6 +18,7 @@ import octopus.fragment.DeflectionInfoBlockFragment import octopus.fragment.DeflectionMessageFragment import octopus.fragment.FileUploadFragment import octopus.fragment.FormFragment +import octopus.fragment.InformationFragment import octopus.fragment.SummaryFragment import octopus.fragment.TaskFragment import octopus.type.ClaimIntentStepContentFormFieldType @@ -186,6 +187,12 @@ private fun ClaimIntentStepContentFragment.toStepContent(locale: CommonLocale): message = message ) + is InformationFragment -> StepContent.Information( + notice = notice, + buttonTitle = buttonTitle, + severity = severity + ) + else -> { logcat { "ClaimIntentStepContentFragment: Unknown step" } raise(ClaimChatErrorMessage.NeedsUpdate) diff --git a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/SubmitInformationUseCase.kt b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/SubmitInformationUseCase.kt new file mode 100644 index 0000000000..f3fce61cd7 --- /dev/null +++ b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/SubmitInformationUseCase.kt @@ -0,0 +1,41 @@ +package com.hedvig.feature.claim.chat.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.di.AppScope +import com.hedvig.android.language.LanguageService +import com.hedvig.android.logger.logcat +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn +import octopus.ClaimIntentSubmitInformationMutation +import octopus.type.ClaimIntentSubmitInformationInput + +@SingleIn(AppScope::class) +@Inject +internal class SubmitInformationUseCase( + private val apolloClient: ApolloClient, + private val languageService: LanguageService, +) { + suspend fun invoke(id: StepId): Either { + return either { + apolloClient + .mutation( + ClaimIntentSubmitInformationMutation( + input = ClaimIntentSubmitInformationInput( + stepId = id.value, + ), + ), + ) + .safeExecute() + .mapLeft { + logcat { "SubmitInformationUseCase error: $it" } + ClaimChatErrorMessage.GeneralError + } + .bind() + .claimIntentSubmitInformation + .toClaimIntent(languageService.getLocale()) + } + } +} diff --git a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt index 4da169403e..588bfd7a73 100644 --- a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt +++ b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt @@ -69,11 +69,13 @@ import com.hedvig.android.design.system.hedvig.HedvigAlertDialog 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.HedvigNotificationCard import com.hedvig.android.design.system.hedvig.HedvigText import com.hedvig.android.design.system.hedvig.HedvigTheme import com.hedvig.android.design.system.hedvig.HorizontalDivider import com.hedvig.android.design.system.hedvig.Icon import com.hedvig.android.design.system.hedvig.IconButton +import com.hedvig.android.design.system.hedvig.NotificationDefaults import com.hedvig.android.design.system.hedvig.TopAppBar import com.hedvig.android.design.system.hedvig.TopAppBarActionType import com.hedvig.android.design.system.hedvig.TopAppBarColors @@ -116,12 +118,14 @@ import hedvig.resources.GENERAL_ARE_YOU_SURE import hedvig.resources.NETWORK_ERROR_ALERT_MESSAGE import hedvig.resources.Res import hedvig.resources.claims_alert_body +import hedvig.resources.claims_skip_button import hedvig.resources.general_cancel_button import hedvig.resources.general_close_button import hedvig.resources.general_error import kotlin.time.Clock import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import octopus.type.ClaimIntentStepContentInformationSeverity import org.jetbrains.compose.resources.stringResource @Composable @@ -717,6 +721,19 @@ private fun StepTopContent( Spacer(Modifier.height(4.dp)) } + if (stepItem.stepContent is StepContent.Information) { + val priority = when(stepItem.stepContent.severity) { + ClaimIntentStepContentInformationSeverity.CRITICAL -> NotificationDefaults.NotificationPriority.Error + else -> NotificationDefaults.NotificationPriority.InfoInline + } + HedvigNotificationCard( + message = stepItem.stepContent.notice, + priority = priority, + withIcon = true + ) + Spacer(Modifier.height(4.dp)) + } + AnimatedVisibility( stepItem.stepContent is StepContent.Summary, enter = if (hasAnimation) fadeIn(animationSpec = tween()) else EnterTransition.None, @@ -899,15 +916,41 @@ private fun StepBottomContent( } is StepContent.DeflectMessage -> { - HedvigButton( - modifier = modifier.fillMaxWidth(), - text = stringResource(Res.string.general_close_button), - onClick = dropUnlessResumed { - closeFlow() - }, - enabled = true, - buttonStyle = ButtonDefaults.ButtonStyle.Secondary - ) + HedvigButton( + modifier = modifier.fillMaxWidth(), + text = stringResource(Res.string.general_close_button), + onClick = dropUnlessResumed { + closeFlow() + }, + enabled = true, + buttonStyle = ButtonDefaults.ButtonStyle.Secondary + ) + } + + is StepContent.Information -> { + Column { + HedvigButton( + modifier = modifier.fillMaxWidth(), + text = stepItem.stepContent.buttonTitle, + onClick = dropUnlessResumed { + onEvent(SubmitInformation(stepItem.id)) + }, + enabled = !currentContinueButtonLoading + ) + Spacer(Modifier.height(16.dp)) + if (stepItem.stepContent.isSkippable) { + HedvigButton( + modifier = modifier.fillMaxWidth(), + text = stringResource(Res.string.claims_skip_button), + onClick = dropUnlessResumed { + onEvent(Skip(stepItem.id)) + }, + enabled = true, + buttonStyle = ButtonDefaults.ButtonStyle.Secondary + ) + } + } + } } } From d4872a553d3d53190574929c62f9641289c38231 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Tue, 23 Jun 2026 15:47:25 +0200 Subject: [PATCH 2/4] modifier --- .../com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt index 588bfd7a73..9309d94718 100644 --- a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt +++ b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt @@ -726,10 +726,12 @@ private fun StepTopContent( ClaimIntentStepContentInformationSeverity.CRITICAL -> NotificationDefaults.NotificationPriority.Error else -> NotificationDefaults.NotificationPriority.InfoInline } + Spacer(Modifier.height(16.dp)) HedvigNotificationCard( message = stepItem.stepContent.notice, priority = priority, - withIcon = true + withIcon = true, + modifier = Modifier.fillMaxWidth() ) Spacer(Modifier.height(4.dp)) } From c6a327eb47405fb4a76eae902984d00ee95691ac Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Tue, 23 Jun 2026 22:06:27 +0200 Subject: [PATCH 3/4] check isAnimationComplete --- .../claim/chat/ui/ClaimChatDestination.kt | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt index 9309d94718..a1fb40f97d 100644 --- a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt +++ b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt @@ -722,18 +722,20 @@ private fun StepTopContent( } if (stepItem.stepContent is StepContent.Information) { - val priority = when(stepItem.stepContent.severity) { - ClaimIntentStepContentInformationSeverity.CRITICAL -> NotificationDefaults.NotificationPriority.Error - else -> NotificationDefaults.NotificationPriority.InfoInline + if (isAnimationComplete) { + val priority = when(stepItem.stepContent.severity) { + ClaimIntentStepContentInformationSeverity.CRITICAL -> NotificationDefaults.NotificationPriority.Error + else -> NotificationDefaults.NotificationPriority.InfoInline + } + Spacer(Modifier.height(16.dp)) + HedvigNotificationCard( + message = stepItem.stepContent.notice, + priority = priority, + withIcon = true, + modifier = Modifier.fillMaxWidth() + ) + Spacer(Modifier.height(4.dp)) } - Spacer(Modifier.height(16.dp)) - HedvigNotificationCard( - message = stepItem.stepContent.notice, - priority = priority, - withIcon = true, - modifier = Modifier.fillMaxWidth() - ) - Spacer(Modifier.height(4.dp)) } AnimatedVisibility( From 8bb2e9c7230cf9b8528b6f252445425ee75093af Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Wed, 24 Jun 2026 15:32:40 +0200 Subject: [PATCH 4/4] apply changes from comments re skippable and InformationSeverity --- .../feature/claim/chat/data/ClaimIntent.kt | 7 ++++++- .../feature/claim/chat/data/ClaimIntentExt.kt | 6 +++++- .../claim/chat/ui/ClaimChatDestination.kt | 17 +++-------------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntent.kt b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntent.kt index 6a985b8da7..874ee72675 100644 --- a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntent.kt +++ b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntent.kt @@ -185,10 +185,15 @@ internal sealed interface StepContent { data class Information( val notice: String, val buttonTitle: String, - val severity: ClaimIntentStepContentInformationSeverity + val severity: InformationSeverity, ): StepContent { override val isSkippable: Boolean = false } + } + + +enum class InformationSeverity { + Critical, Info } sealed interface AudioRecordingStepState { diff --git a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntentExt.kt b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntentExt.kt index bff41a02ef..b4af40b245 100644 --- a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntentExt.kt +++ b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/data/ClaimIntentExt.kt @@ -22,6 +22,7 @@ import octopus.fragment.InformationFragment import octopus.fragment.SummaryFragment import octopus.fragment.TaskFragment import octopus.type.ClaimIntentStepContentFormFieldType +import octopus.type.ClaimIntentStepContentInformationSeverity import octopus.type.ClaimIntentStepContentSelectStyle context(raise: Raise) @@ -190,7 +191,10 @@ private fun ClaimIntentStepContentFragment.toStepContent(locale: CommonLocale): is InformationFragment -> StepContent.Information( notice = notice, buttonTitle = buttonTitle, - severity = severity + severity = when (severity) { + ClaimIntentStepContentInformationSeverity.CRITICAL -> InformationSeverity.Critical + else -> InformationSeverity.Info + } ) else -> { diff --git a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt index a1fb40f97d..300a86ac4c 100644 --- a/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt +++ b/app/feature/feature-claim-chat/src/commonMain/kotlin/com/hedvig/feature/claim/chat/ui/ClaimChatDestination.kt @@ -93,6 +93,7 @@ import com.hedvig.feature.claim.chat.ClaimChatViewModelFactory import com.hedvig.feature.claim.chat.data.ClaimChatErrorMessage import com.hedvig.feature.claim.chat.data.ClaimIntentOutcome import com.hedvig.feature.claim.chat.data.ClaimIntentStep +import com.hedvig.feature.claim.chat.data.InformationSeverity import com.hedvig.feature.claim.chat.data.StepContent import com.hedvig.feature.claim.chat.data.StepId import com.hedvig.feature.claim.chat.ui.common.HelipadRiveAnimation @@ -724,8 +725,8 @@ private fun StepTopContent( if (stepItem.stepContent is StepContent.Information) { if (isAnimationComplete) { val priority = when(stepItem.stepContent.severity) { - ClaimIntentStepContentInformationSeverity.CRITICAL -> NotificationDefaults.NotificationPriority.Error - else -> NotificationDefaults.NotificationPriority.InfoInline + InformationSeverity.Critical -> NotificationDefaults.NotificationPriority.Error + InformationSeverity.Info -> NotificationDefaults.NotificationPriority.InfoInline } Spacer(Modifier.height(16.dp)) HedvigNotificationCard( @@ -941,18 +942,6 @@ private fun StepBottomContent( }, enabled = !currentContinueButtonLoading ) - Spacer(Modifier.height(16.dp)) - if (stepItem.stepContent.isSkippable) { - HedvigButton( - modifier = modifier.fillMaxWidth(), - text = stringResource(Res.string.claims_skip_button), - onClick = dropUnlessResumed { - onEvent(Skip(stepItem.id)) - }, - enabled = true, - buttonStyle = ButtonDefaults.ButtonStyle.Secondary - ) - } } }