Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
4093616
entrypoints with resumable claim
panasetskaya Jun 29, 2026
8817524
mapping of previous steps
panasetskaya Jun 29, 2026
4664c5b
add todo
panasetskaya Jun 29, 2026
4ef191e
use default values
panasetskaya Jun 29, 2026
85bc292
use default values better
panasetskaya Jun 29, 2026
3c6f590
move freeText to stepContent instead of singleton in ui state
panasetskaya Jun 30, 2026
ecd8824
Merge branch 'develop' into feat-resume-claim
panasetskaya Jun 30, 2026
bde0ea6
test add missing param
panasetskaya Jul 1, 2026
c117281
todo text in dialog
panasetskaya Jul 1, 2026
8b52e26
Merge branch 'develop' into feat-resume-claim
StylianosGakis Jul 2, 2026
569af46
Add resume-draft-claim design spec
StylianosGakis Jul 3, 2026
94ff4fd
Add resume-draft-claim implementation plan
StylianosGakis Jul 3, 2026
b6cefb4
Download schema
StylianosGakis Jul 3, 2026
fd9bed8
Download strings with RESUME_CLAIM keys
StylianosGakis Jul 3, 2026
a53fec7
Add enable_claim_intent_resume feature flag
StylianosGakis Jul 3, 2026
b09a034
Add data-claim-intent module with resumable draft get and delete use …
StylianosGakis Jul 3, 2026
6827abf
Revert draft entry from pledge sheet and add DraftClaimDialog
StylianosGakis Jul 3, 2026
b4d1afe
Add draft claim card to the claim status cards pager
StylianosGakis Jul 3, 2026
34ccfa5
Replace ClaimChatKey resumableClaimId with resumeClaim flag
StylianosGakis Jul 3, 2026
61fd319
Carry flag-gated DraftClaim through the home data layer
StylianosGakis Jul 3, 2026
c12eecf
Add delete-draft-claim event to the home presenter
StylianosGakis Jul 3, 2026
6dd1530
Wire draft claim card, delete and expired dialogs on home
StylianosGakis Jul 3, 2026
42f9c24
Use displayName title and resumable-gated leave dialog in claim chat
StylianosGakis Jul 3, 2026
d60dde6
Wire data-claim-intent contributions into the app graph
StylianosGakis Jul 3, 2026
421a4f1
Show draft claim dialog from the inbox start-claim entry
StylianosGakis Jul 3, 2026
7a4b0f4
Clean up resume-claim leftovers
StylianosGakis Jul 3, 2026
b4778c7
Expand wildcard imports in ClaimChatDestination
StylianosGakis Jul 3, 2026
691861d
Address final review findings
StylianosGakis Jul 3, 2026
8ec5a41
Delete the expired draft when starting a new claim from the expired n…
StylianosGakis Jul 5, 2026
ad3525f
Download strings
StylianosGakis Jul 6, 2026
d1a2280
Merge branch 'develop' into feat-resume-claim
StylianosGakis Jul 6, 2026
96b1dfd
Align draft claim UI with Ready-for-dev design
StylianosGakis Jul 6, 2026
bbd12bf
Lay out the draft dialog buttons horizontally with a red-text confirm
StylianosGakis Jul 7, 2026
c7fb530
Download strings
StylianosGakis Jul 9, 2026
5c8f532
Merge branch 'develop' into feat-resume-claim
StylianosGakis Jul 9, 2026
6c05117
Fix feature-home tests and formatting after develop merge
StylianosGakis Jul 9, 2026
d295400
Run lint
StylianosGakis Jul 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ dependencies {
implementation(projects.dataAddons)
implementation(projects.dataChangetier)
implementation(projects.dataChat)

implementation(projects.dataClaimIntent)
implementation(projects.dataContract)
implementation(projects.dataConversations)
implementation(projects.dataCrossSellAfterClaimClosed)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,14 @@ private fun EntryProviderScope<HedvigNavKey>.addHomeEntries(
backstack.add(CoInsuredAddInfoKey(contractId, type))
},
navigateToHelpCenter = { backstack.add(HelpCenterKey) },
navigateToClaimChat = {
backstack.add(ClaimChatKey(messageId = null, isDevelopmentFlow = false))
navigateToClaimChat = { resumeClaim ->
backstack.add(
ClaimChatKey(
messageId = null,
isDevelopmentFlow = false,
resumeClaim = resumeClaim,
),
)
},
navigateToChipIdScreen = { backstack.add(ChipIdKey()) },
openAppSettings = externalNavigator::openAppSettings,
Expand Down Expand Up @@ -471,8 +477,8 @@ private fun EntryProviderScope<HedvigNavKey>.addChatEntries(
},
onNavigateToImageViewer = onNavigateToImageViewer,
onNavigateToNewConversation = navigateToNewConversation,
navigateToClaimChat = {
backstack.add(ClaimChatKey(messageId = null, isDevelopmentFlow = false))
navigateToClaimChat = { resumeClaim ->
backstack.add(ClaimChatKey(messageId = null, isDevelopmentFlow = false, resumeClaim = resumeClaim))
},
backstack = backstack,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@
<string name="ADDON_ADD_COVERAGE">Lägg till skydd</string>
<string name="ADDON_BADGE">Populär</string>
<string name="ADDON_BADGE_ACTIVE">Aktiv</string>
<string name="ADDON_CAR_CROSS_SELL_BANNER">Mer skydd för bilen</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_1">Drulle: kupé, nycklar, feltankning</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_2">Hyrbil när din egen bil repareras</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_3">Självriskreducering vid kollision</string>
<string name="ADDON_CAR_PLUS_DISPLAY_NAME">Bil Plus</string>
<string name="ADDON_FLOW_ADD_TO_INSURANCE_BUTTON">Fortsätt</string>
<string name="ADDON_FLOW_ALREADY_ACTIVE_EXPLANATION_SUBTITLE">Den här tilläggsförsäkringen är aktiv och gäller ihop med din försäkring.\n\nVill du ta bort den behöver du göra det från försäkringen den är kopplad till.</string>
Expand Down Expand Up @@ -63,6 +67,10 @@
<string name="ADDON_REMOVE_CONFIRM_BUTTON">Avsluta %1$s</string>
<string name="ADDON_REMOVE_DESCRIPTION">Om du avslutar detta tillägg ingår inte det extra skyddet längre i din hemförsäkring.</string>
<string name="ADDON_REMOVE_TITLE">Avsluta %1$s</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BANNER">Extra trygghet när du reser</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_1">Res upp till 60 dagar i sträck</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_2">Försenat flyg och bagage</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_3">Gäller för alla medförsäkrade</string>
<string name="ALERT_OK">OK</string>
<string name="AUDIO_RECORDER_LISTEN">Lyssna</string>
<string name="AUDIO_RECORDER_SEND">Skicka</string>
Expand Down Expand Up @@ -714,6 +722,23 @@
<string name="REMOVE_ADDON_SUCCESS_SUBTITLE">Den här ändringar börjar gälla %s.</string>
<string name="REMOVE_ADDON_SUCCESS_TITLE">Tillägg avslutade</string>
<string name="REMOVE_CONFIRMATION_BUTTON">Ja, radera</string>
<string name="RESUME_CLAIM_CONTINUE_BUTTON">Fortsätt</string>
<string name="RESUME_CLAIM_DEFAULT_TITLE">Försäkringsärende</string>
<string name="RESUME_CLAIM_DELETE_BODY">Ditt sparade utkast raderas permanent.</string>
<string name="RESUME_CLAIM_DELETE_BUTTON">Radera</string>
<string name="RESUME_CLAIM_DELETE_TITLE">Radera utkast?</string>
<string name="RESUME_CLAIM_DRAFT">Draft</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_BODY">Om du startar en ny anmälan raderas ditt sparade utkast</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_CONTINUE">Fortsätt anmälan</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_START_NEW">Starta ny anmälan</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_TITLE">Du har en påbörjad anmälan</string>
<string name="RESUME_CLAIM_EXPIRED_BODY">Vänligen starta en ny anmälan</string>
<string name="RESUME_CLAIM_EXPIRED_TITLE">Ditt utkast har gått ut</string>
<string name="RESUME_CLAIM_FALLBACK_TITLE">Fortsätt där du slutade</string>
<string name="RESUME_CLAIM_LEAVE_BODY">Din anmälan sparas automatiskt i 7 dagar.</string>
<string name="RESUME_CLAIM_LEAVE_CONFIRM">Ja, lämna</string>
<string name="RESUME_CLAIM_LEAVE_TITLE">Lämna anmälan?</string>
<string name="RESUME_CLAIM_STATED">Började %1$s</string>
<string name="SAVE_AND_CONTINUE_BUTTON_LABEL">Spara och fortsätt</string>
<string name="SEARCH_NOTHING_FOUND">Inga träffar på din sökning</string>
<string name="SEARCH_PLACEHOLDER">Sök</string>
Expand Down
25 changes: 25 additions & 0 deletions app/core/core-resources/src/androidMain/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@
<string name="ADDON_ADD_COVERAGE">Add coverage</string>
<string name="ADDON_BADGE">Popular</string>
<string name="ADDON_BADGE_ACTIVE">Active</string>
<string name="ADDON_CAR_CROSS_SELL_BANNER">More for your car insurance</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_1">All-risk: interior, keys, misfuelling</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_2">Compensation for rental car</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_3">Lower deductible for collision</string>
<string name="ADDON_CAR_PLUS_DISPLAY_NAME">Car Plus</string>
<string name="ADDON_FLOW_ADD_TO_INSURANCE_BUTTON">Continue</string>
<string name="ADDON_FLOW_ALREADY_ACTIVE_EXPLANATION_SUBTITLE">This addon is active and linked to your insurance.\n\nTo remove it, go to the insurance it’s linked to.</string>
Expand Down Expand Up @@ -63,6 +67,10 @@
<string name="ADDON_REMOVE_CONFIRM_BUTTON">Cancel %1$s</string>
<string name="ADDON_REMOVE_DESCRIPTION">By canceling this extended coverage, your home insurance will no longer include this extra protection.</string>
<string name="ADDON_REMOVE_TITLE">Cancel %1$s</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BANNER">Add extra safety when traveling</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_1">Travel up to 60 days in a row</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_2">Delayed bags and flights</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_3">Applies to all co-insured</string>
<string name="ALERT_OK">OK</string>
<string name="AUDIO_RECORDER_LISTEN">Listen</string>
<string name="AUDIO_RECORDER_SEND">Send</string>
Expand Down Expand Up @@ -714,6 +722,23 @@
<string name="REMOVE_ADDON_SUCCESS_SUBTITLE">This change will take effect from %s.</string>
<string name="REMOVE_ADDON_SUCCESS_TITLE">Removed successfully</string>
<string name="REMOVE_CONFIRMATION_BUTTON">Yes, remove</string>
<string name="RESUME_CLAIM_CONTINUE_BUTTON">Continue</string>
<string name="RESUME_CLAIM_DEFAULT_TITLE">Insurance case</string>
<string name="RESUME_CLAIM_DELETE_BODY">Your saved draft will be permanently deleted.</string>
<string name="RESUME_CLAIM_DELETE_BUTTON">Delete</string>
<string name="RESUME_CLAIM_DELETE_TITLE">Delete draft?</string>
<string name="RESUME_CLAIM_DRAFT">Draft</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_BODY">Starting a new claim will delete your saved draft</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_CONTINUE">Continue draft</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_START_NEW">Start new claim</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_TITLE">You have a draft claim</string>
<string name="RESUME_CLAIM_EXPIRED_BODY">Please make a new claim</string>
<string name="RESUME_CLAIM_EXPIRED_TITLE">Your draft has expired</string>
<string name="RESUME_CLAIM_FALLBACK_TITLE">Continue where you stopped</string>
<string name="RESUME_CLAIM_LEAVE_BODY">Your claim is automatically saved for 7 days.</string>
<string name="RESUME_CLAIM_LEAVE_CONFIRM">Yes, leave</string>
<string name="RESUME_CLAIM_LEAVE_TITLE">Leave claim?</string>
<string name="RESUME_CLAIM_STATED">Started %1$s</string>
<string name="SAVE_AND_CONTINUE_BUTTON_LABEL">Save and continue</string>
<string name="SEARCH_NOTHING_FOUND">No results for your search</string>
<string name="SEARCH_PLACEHOLDER">Search</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@
<string name="ADDON_ADD_COVERAGE">Lägg till skydd</string>
<string name="ADDON_BADGE">Populär</string>
<string name="ADDON_BADGE_ACTIVE">Aktiv</string>
<string name="ADDON_CAR_CROSS_SELL_BANNER">Mer skydd för bilen</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_1">Drulle: kupé, nycklar, feltankning</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_2">Hyrbil när din egen bil repareras</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_3">Självriskreducering vid kollision</string>
<string name="ADDON_CAR_PLUS_DISPLAY_NAME">Bil Plus</string>
<string name="ADDON_FLOW_ADD_TO_INSURANCE_BUTTON">Fortsätt</string>
<string name="ADDON_FLOW_ALREADY_ACTIVE_EXPLANATION_SUBTITLE">Den här tilläggsförsäkringen är aktiv och gäller ihop med din försäkring.\n\nVill du ta bort den behöver du göra det från försäkringen den är kopplad till.</string>
Expand Down Expand Up @@ -62,6 +66,10 @@
<string name="ADDON_REMOVE_CONFIRM_BUTTON">Avsluta %1$s</string>
<string name="ADDON_REMOVE_DESCRIPTION">Om du avslutar detta tillägg ingår inte det extra skyddet längre i din hemförsäkring.</string>
<string name="ADDON_REMOVE_TITLE">Avsluta %1$s</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BANNER">Extra trygghet när du reser</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_1">Res upp till 60 dagar i sträck</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_2">Försenat flyg och bagage</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_3">Gäller för alla medförsäkrade</string>
<string name="ALERT_OK">OK</string>
<string name="AUDIO_RECORDER_LISTEN">Lyssna</string>
<string name="AUDIO_RECORDER_SEND">Skicka</string>
Expand Down Expand Up @@ -713,6 +721,23 @@
<string name="REMOVE_ADDON_SUCCESS_SUBTITLE">Den här ändringar börjar gälla %1$s.</string>
<string name="REMOVE_ADDON_SUCCESS_TITLE">Tillägg avslutade</string>
<string name="REMOVE_CONFIRMATION_BUTTON">Ja, radera</string>
<string name="RESUME_CLAIM_CONTINUE_BUTTON">Fortsätt</string>
<string name="RESUME_CLAIM_DEFAULT_TITLE">Försäkringsärende</string>
<string name="RESUME_CLAIM_DELETE_BODY">Ditt sparade utkast raderas permanent.</string>
<string name="RESUME_CLAIM_DELETE_BUTTON">Radera</string>
<string name="RESUME_CLAIM_DELETE_TITLE">Radera utkast?</string>
<string name="RESUME_CLAIM_DRAFT">Draft</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_BODY">Om du startar en ny anmälan raderas ditt sparade utkast</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_CONTINUE">Fortsätt anmälan</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_START_NEW">Starta ny anmälan</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_TITLE">Du har en påbörjad anmälan</string>
<string name="RESUME_CLAIM_EXPIRED_BODY">Vänligen starta en ny anmälan</string>
<string name="RESUME_CLAIM_EXPIRED_TITLE">Ditt utkast har gått ut</string>
<string name="RESUME_CLAIM_FALLBACK_TITLE">Fortsätt där du slutade</string>
<string name="RESUME_CLAIM_LEAVE_BODY">Din anmälan sparas automatiskt i 7 dagar.</string>
<string name="RESUME_CLAIM_LEAVE_CONFIRM">Ja, lämna</string>
<string name="RESUME_CLAIM_LEAVE_TITLE">Lämna anmälan?</string>
<string name="RESUME_CLAIM_STATED">Började %1$s</string>
<string name="SAVE_AND_CONTINUE_BUTTON_LABEL">Spara och fortsätt</string>
<string name="SEARCH_NOTHING_FOUND">Inga träffar på din sökning</string>
<string name="SEARCH_PLACEHOLDER">Sök</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@
<string name="ADDON_ADD_COVERAGE">Add coverage</string>
<string name="ADDON_BADGE">Popular</string>
<string name="ADDON_BADGE_ACTIVE">Active</string>
<string name="ADDON_CAR_CROSS_SELL_BANNER">More for your car insurance</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_1">All-risk: interior, keys, misfuelling</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_2">Compensation for rental car</string>
<string name="ADDON_CAR_CROSS_SELL_BENEFIT_3">Lower deductible for collision</string>
<string name="ADDON_CAR_PLUS_DISPLAY_NAME">Car Plus</string>
<string name="ADDON_FLOW_ADD_TO_INSURANCE_BUTTON">Continue</string>
<string name="ADDON_FLOW_ALREADY_ACTIVE_EXPLANATION_SUBTITLE">This addon is active and linked to your insurance.\n\nTo remove it, go to the insurance it’s linked to.</string>
Expand Down Expand Up @@ -62,6 +66,10 @@
<string name="ADDON_REMOVE_CONFIRM_BUTTON">Cancel %1$s</string>
<string name="ADDON_REMOVE_DESCRIPTION">By canceling this extended coverage, your home insurance will no longer include this extra protection.</string>
<string name="ADDON_REMOVE_TITLE">Cancel %1$s</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BANNER">Add extra safety when traveling</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_1">Travel up to 60 days in a row</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_2">Delayed bags and flights</string>
<string name="ADDON_TRAVEL_CROSS_SELL_BENEFIT_3">Applies to all co-insured</string>
<string name="ALERT_OK">OK</string>
<string name="AUDIO_RECORDER_LISTEN">Listen</string>
<string name="AUDIO_RECORDER_SEND">Send</string>
Expand Down Expand Up @@ -713,6 +721,23 @@
<string name="REMOVE_ADDON_SUCCESS_SUBTITLE">This change will take effect from %1$s.</string>
<string name="REMOVE_ADDON_SUCCESS_TITLE">Removed successfully</string>
<string name="REMOVE_CONFIRMATION_BUTTON">Yes, remove</string>
<string name="RESUME_CLAIM_CONTINUE_BUTTON">Continue</string>
<string name="RESUME_CLAIM_DEFAULT_TITLE">Insurance case</string>
<string name="RESUME_CLAIM_DELETE_BODY">Your saved draft will be permanently deleted.</string>
<string name="RESUME_CLAIM_DELETE_BUTTON">Delete</string>
<string name="RESUME_CLAIM_DELETE_TITLE">Delete draft?</string>
<string name="RESUME_CLAIM_DRAFT">Draft</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_BODY">Starting a new claim will delete your saved draft</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_CONTINUE">Continue draft</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_START_NEW">Start new claim</string>
<string name="RESUME_CLAIM_DRAFT_ALERT_TITLE">You have a draft claim</string>
<string name="RESUME_CLAIM_EXPIRED_BODY">Please make a new claim</string>
<string name="RESUME_CLAIM_EXPIRED_TITLE">Your draft has expired</string>
<string name="RESUME_CLAIM_FALLBACK_TITLE">Continue where you stopped</string>
<string name="RESUME_CLAIM_LEAVE_BODY">Your claim is automatically saved for 7 days.</string>
<string name="RESUME_CLAIM_LEAVE_CONFIRM">Yes, leave</string>
<string name="RESUME_CLAIM_LEAVE_TITLE">Leave claim?</string>
<string name="RESUME_CLAIM_STATED">Started %1$s</string>
<string name="SAVE_AND_CONTINUE_BUTTON_LABEL">Save and continue</string>
<string name="SEARCH_NOTHING_FOUND">No results for your search</string>
<string name="SEARCH_PLACEHOLDER">Search</string>
Expand Down
21 changes: 21 additions & 0 deletions app/data/data-claim-intent/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
plugins {
id("hedvig.multiplatform.library")
id("hedvig.gradle.plugin")
}

hedvig {
apollo("octopus")
}

kotlin {
sourceSets {
commonMain.dependencies {
implementation(libs.apollo.normalizedCache)
implementation(libs.arrow.core)
implementation(projects.apolloCore)
implementation(projects.apolloOctopusPublic)
implementation(projects.coreCommonPublic)
implementation(projects.loggingPublic)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
mutation ClaimIntentDeleteDraft($id: ID!) {
claimIntentDeleteDraft(id: $id)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
query ResumableClaimIntent {
currentMember {
resumableClaimIntent {
id
displayName
createdAt
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.hedvig.android.data.claimintent

import arrow.core.Either
import arrow.core.raise.either
import arrow.core.raise.ensure
import com.apollographql.apollo.ApolloClient
import com.hedvig.android.apollo.safeExecute
import com.hedvig.android.core.common.ErrorMessage
import com.hedvig.android.core.common.di.AppScope
import com.hedvig.android.logger.logcat
import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.Inject
import octopus.ClaimIntentDeleteDraftMutation

interface DeleteClaimIntentDraftUseCase {
suspend fun invoke(id: String): Either<ErrorMessage, Unit>
}

@Inject
@ContributesBinding(AppScope::class)
internal class DeleteClaimIntentDraftUseCaseImpl(
private val apolloClient: ApolloClient,
) : DeleteClaimIntentDraftUseCase {
override suspend fun invoke(id: String): Either<ErrorMessage, Unit> {
return either {
val deleted = apolloClient
.mutation(ClaimIntentDeleteDraftMutation(id))
.safeExecute()
.mapLeft { error ->
logcat(operationError = error) { "DeleteClaimIntentDraftUseCase failed with $error" }
ErrorMessage()
}
.bind()
.claimIntentDeleteDraft
ensure(deleted) { ErrorMessage() }
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.hedvig.android.data.claimintent

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.core.common.di.AppScope
import com.hedvig.android.logger.logcat
import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.Inject
import octopus.ResumableClaimIntentQuery

interface GetResumableClaimIntentUseCase {
/**
* A null right side means the member has no resumable draft claim.
*/
suspend fun invoke(): Either<ErrorMessage, ResumableClaimIntent?>
}

@Inject
@ContributesBinding(AppScope::class)
internal class GetResumableClaimIntentUseCaseImpl(
private val apolloClient: ApolloClient,
) : GetResumableClaimIntentUseCase {
override suspend fun invoke(): Either<ErrorMessage, ResumableClaimIntent?> {
return either {
apolloClient
.query(ResumableClaimIntentQuery())
.fetchPolicy(FetchPolicy.NetworkOnly)
.safeExecute()
.mapLeft { error ->
logcat(operationError = error) { "GetResumableClaimIntentUseCase failed with $error" }
ErrorMessage()
}
.bind()
.currentMember
.resumableClaimIntent
?.let { resumableClaimIntent ->
ResumableClaimIntent(
id = resumableClaimIntent.id,
displayName = resumableClaimIntent.displayName,
startedAt = resumableClaimIntent.createdAt,
)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.hedvig.android.data.claimintent

import kotlin.time.Instant

data class ResumableClaimIntent(
val id: String,
val displayName: String?,
val startedAt: Instant,
)
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,31 @@ fun HedvigRedTextButton(
}
}

/**
* A secondary-fill button with a destructive (red) label, e.g. a "Delete" action that sits next to
* a primary action. Reuses the secondary style's red content token rather than a bespoke color.
*/
@Composable
fun HedvigSecondaryRedTextButton(
text: String,
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
buttonSize: ButtonSize = ButtonSize.Medium,
interactionSource: MutableInteractionSource? = null,
) {
HedvigButton(
onClick = onClick,
enabled = enabled,
modifier = modifier,
buttonStyle = ButtonDefaults.ButtonStyle.Secondary,
buttonSize = buttonSize,
interactionSource = interactionSource,
) {
HedvigText(text, color = ButtonDefaults.ButtonStyle.Secondary.style.buttonColors.redTextColor)
}
}

@Composable
fun HedvigButtonGhostWithBorder(
text: String,
Expand Down
Loading
Loading