diff --git a/app/data/data-addons/src/main/kotlin/com/hedvig/android/data/addons/data/GetTravelAddonBannerInfoUseCase.kt b/app/data/data-addons/src/main/kotlin/com/hedvig/android/data/addons/data/GetTravelAddonBannerInfoUseCase.kt index 4a6593a321..fdd0c6112b 100644 --- a/app/data/data-addons/src/main/kotlin/com/hedvig/android/data/addons/data/GetTravelAddonBannerInfoUseCase.kt +++ b/app/data/data-addons/src/main/kotlin/com/hedvig/android/data/addons/data/GetTravelAddonBannerInfoUseCase.kt @@ -3,7 +3,6 @@ package com.hedvig.android.data.addons.data import arrow.core.Either import arrow.core.NonEmptyList import arrow.core.raise.either -import arrow.core.raise.ensureNotNull import arrow.core.toNonEmptyListOrNull import com.apollographql.apollo.ApolloClient import com.apollographql.apollo.cache.normalized.FetchPolicy.CacheAndNetwork diff --git a/app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/Toggle.kt b/app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/Toggle.kt index 069220b0a8..c70093fefd 100644 --- a/app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/Toggle.kt +++ b/app/design-system/design-system-hedvig/src/main/kotlin/com/hedvig/android/design/system/hedvig/Toggle.kt @@ -64,7 +64,6 @@ import com.hedvig.android.design.system.hedvig.tokens.SmallSizeDefaultToggleToke import com.hedvig.android.design.system.hedvig.tokens.SmallSizeDetailedToggleTokens import com.hedvig.android.design.system.hedvig.tokens.ToggleColorTokens import com.hedvig.android.design.system.hedvig.tokens.ToggleIconSizeTokens -import com.hedvig.android.logger.logcat import kotlin.math.roundToInt import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest diff --git a/app/feature/feature-movingflow/src/main/graphql/MutationMoveIntentRequest.graphql b/app/feature/feature-movingflow/src/main/graphql/MutationMoveIntentRequest.graphql index 197f495f02..822f11ccdc 100644 --- a/app/feature/feature-movingflow/src/main/graphql/MutationMoveIntentRequest.graphql +++ b/app/feature/feature-movingflow/src/main/graphql/MutationMoveIntentRequest.graphql @@ -1,6 +1,8 @@ -mutation MoveIntentV2Request($intentId: ID!, +mutation MoveIntentV2Request( + $intentId: ID!, $moveIntentRequestInput: MoveIntentRequestInput!, - $addonsFlagOn: Boolean!) { + $addonsFlagOn: Boolean!, +) { moveIntentRequest(intentId: $intentId, input: $moveIntentRequestInput) { moveIntent { ...MoveIntentQuotesFragment @@ -79,4 +81,10 @@ fragment MoveAddonQuoteFragment on MoveAddonQuote { addonVariant { ...AddonVariantFragment } + removeDialogInfo { + title + description + confirmButtonTitle + cancelButtonTitle + } } diff --git a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/data/MovingFlowQuotes.kt b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/data/MovingFlowQuotes.kt index 9950d85786..de86b7d649 100644 --- a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/data/MovingFlowQuotes.kt +++ b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/data/MovingFlowQuotes.kt @@ -11,6 +11,7 @@ import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.DisplayItem import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.MoveHomeQuote import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.MoveHomeQuote.Deductible import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.MoveMtaQuote +import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.UserExcludable.ExclusionDialogInfo import kotlinx.datetime.LocalDate import kotlinx.serialization.Serializable import octopus.feature.movingflow.fragment.MoveIntentQuotesFragment @@ -72,7 +73,7 @@ internal data class MovingFlowQuotes( ) internal sealed interface AddonQuote { - val addonId: String + val addonId: AddonId val premium: UiMoney val startDate: LocalDate val displayItems: List @@ -81,18 +82,19 @@ internal data class MovingFlowQuotes( @Serializable data class HomeAddonQuote( - override val addonId: String, + override val addonId: AddonId, override val premium: UiMoney, override val startDate: LocalDate, override val displayItems: List, override val exposureName: String, override val addonVariant: AddonVariant, override val isExcludedByUser: Boolean, + override val exclusionDialogInfo: ExclusionDialogInfo?, ) : AddonQuote, UserExcludable @Serializable data class MtaAddonQuote( - override val addonId: String, + override val addonId: AddonId, override val premium: UiMoney, override val startDate: LocalDate, override val displayItems: List, @@ -103,9 +105,23 @@ internal data class MovingFlowQuotes( internal interface UserExcludable { val isExcludedByUser: Boolean + val exclusionDialogInfo: ExclusionDialogInfo? + + @Serializable + data class ExclusionDialogInfo( + val addonId: AddonId, + val title: String, + val description: String, + val confirmButtonTitle: String, + val cancelButtonTitle: String, + ) } } +@Serializable +@JvmInline +internal value class AddonId(val id: String) + internal fun MoveIntentQuotesFragment.toMovingFlowQuotes(): MovingFlowQuotes { return MovingFlowQuotes( homeQuotes = homeQuotes.orEmpty().map { houseQuote -> @@ -129,7 +145,7 @@ internal fun MoveIntentQuotesFragment.toMovingFlowQuotes(): MovingFlowQuotes { defaultChoice = houseQuote.defaultChoice, relatedAddonQuotes = houseQuote.addons.orEmpty().map { addon -> HomeAddonQuote( - addonId = addon.addonId, + addonId = AddonId(addon.addonId), premium = UiMoney.fromMoneyFragment(addon.premium), startDate = addon.startDate, exposureName = addon.displayName, @@ -141,6 +157,15 @@ internal fun MoveIntentQuotesFragment.toMovingFlowQuotes(): MovingFlowQuotes { ) }, addonVariant = addon.addonVariant.toAddonVariant(), + exclusionDialogInfo = addon.removeDialogInfo?.let { removeDialogInfo -> + ExclusionDialogInfo( + addonId = AddonId(addon.addonId), + title = removeDialogInfo.title, + description = removeDialogInfo.description, + confirmButtonTitle = removeDialogInfo.confirmButtonTitle, + cancelButtonTitle = removeDialogInfo.cancelButtonTitle, + ) + }, isExcludedByUser = false, ) }, @@ -155,7 +180,7 @@ internal fun MoveIntentQuotesFragment.toMovingFlowQuotes(): MovingFlowQuotes { displayItems = mtaQuote.displayItems.map { it.toDisplayItem() }, relatedAddonQuotes = mtaQuote.addons.orEmpty().map { addon -> MtaAddonQuote( - addonId = addon.addonId, + addonId = AddonId(addon.addonId), premium = UiMoney.fromMoneyFragment(addon.premium), startDate = addon.startDate, exposureName = addon.displayName, diff --git a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/storage/MovingFlowRepository.kt b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/storage/MovingFlowRepository.kt index 10a589b470..2ac917e55d 100644 --- a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/storage/MovingFlowRepository.kt +++ b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/storage/MovingFlowRepository.kt @@ -1,7 +1,7 @@ package com.hedvig.android.feature.movingflow.storage +import com.hedvig.android.feature.movingflow.data.AddonId import com.hedvig.android.feature.movingflow.data.HousingType -import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes import com.hedvig.android.feature.movingflow.data.MovingFlowState import com.hedvig.android.feature.movingflow.data.MovingFlowState.PropertyState.ApartmentState import com.hedvig.android.feature.movingflow.data.MovingFlowState.PropertyState.ApartmentState.IsAvailableForStudentState.Available @@ -122,14 +122,14 @@ internal class MovingFlowRepository( } // Flips the mark of a home addon which determines if they do not wish to contain that addon in their new quote - suspend fun toggleHomeAddonExclusion(addonQuoteToToggle: MovingFlowQuotes.AddonQuote) { + suspend fun toggleHomeAddonExclusion(addonId: AddonId) { movingFlowStorage.editMovingFlowState { existingState -> existingState.copy( movingFlowQuotes = existingState.movingFlowQuotes?.copy( existingState.movingFlowQuotes.homeQuotes.map { homeQuote -> homeQuote.copy( relatedAddonQuotes = homeQuote.relatedAddonQuotes.map { addonQuote -> - if (addonQuote == addonQuoteToToggle) { + if (addonQuote.addonId == addonId) { addonQuote.copy(isExcludedByUser = !addonQuote.isExcludedByUser) } else { addonQuote diff --git a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/addhouseinformation/AddHouseInformationViewModel.kt b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/addhouseinformation/AddHouseInformationViewModel.kt index 741eacaf32..f58abe5d34 100644 --- a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/addhouseinformation/AddHouseInformationViewModel.kt +++ b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/addhouseinformation/AddHouseInformationViewModel.kt @@ -166,9 +166,9 @@ internal class AddHouseInformationPresenter( apolloClient .mutation( MoveIntentV2RequestMutation( - moveIntentId, - inputForSubmissionValue.moveIntentRequestInput, - isAddonFlagEnabled, + intentId = moveIntentId, + moveIntentRequestInput = inputForSubmissionValue.moveIntentRequestInput, + addonsFlagOn = isAddonFlagEnabled, ), ) .safeExecute() diff --git a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryDestination.kt b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryDestination.kt index ed9bcf4cfe..010b1b5f0b 100644 --- a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryDestination.kt +++ b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryDestination.kt @@ -58,11 +58,13 @@ import com.hedvig.android.data.productvariant.ProductVariant import com.hedvig.android.data.productvariant.ProductVariantPeril import com.hedvig.android.design.system.hedvig.AccordionData import com.hedvig.android.design.system.hedvig.AccordionList +import com.hedvig.android.design.system.hedvig.ButtonDefaults.ButtonSize.Large import com.hedvig.android.design.system.hedvig.ButtonDefaults.ButtonSize.Medium import com.hedvig.android.design.system.hedvig.ButtonDefaults.ButtonStyle.Ghost import com.hedvig.android.design.system.hedvig.ButtonDefaults.ButtonStyle.Secondary import com.hedvig.android.design.system.hedvig.ErrorDialog import com.hedvig.android.design.system.hedvig.HedvigAlertDialog +import com.hedvig.android.design.system.hedvig.HedvigBottomSheet import com.hedvig.android.design.system.hedvig.HedvigButton import com.hedvig.android.design.system.hedvig.HedvigErrorSection import com.hedvig.android.design.system.hedvig.HedvigFullScreenCenterAlignedProgress @@ -75,6 +77,8 @@ import com.hedvig.android.design.system.hedvig.NotificationDefaults.Notification import com.hedvig.android.design.system.hedvig.Surface import com.hedvig.android.design.system.hedvig.datepicker.HedvigDateTimeFormatterDefaults import com.hedvig.android.design.system.hedvig.datepicker.getLocale +import com.hedvig.android.design.system.hedvig.rememberHedvigBottomSheetState +import com.hedvig.android.feature.movingflow.data.AddonId import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.AddonQuote.HomeAddonQuote import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.AddonQuote.MtaAddonQuote @@ -82,6 +86,7 @@ import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.DisplayItem import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.MoveHomeQuote import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.MoveHomeQuote.Deductible import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.MoveMtaQuote +import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.UserExcludable.ExclusionDialogInfo import com.hedvig.android.feature.movingflow.ui.MovingFlowTopAppBar import com.hedvig.android.feature.movingflow.ui.summary.SummaryUiState.Content import com.hedvig.android.feature.movingflow.ui.summary.SummaryUiState.Content.SubmitError.Generic @@ -89,6 +94,7 @@ import com.hedvig.android.feature.movingflow.ui.summary.SummaryUiState.Content.S import com.hedvig.android.feature.movingflow.ui.summary.SummaryUiState.Loading import com.hedvig.android.tiersandaddons.QuoteCard import com.hedvig.android.tiersandaddons.QuoteCardDefaults +import com.hedvig.android.tiersandaddons.QuoteCardDefaults.UnderDetailsContentState import com.hedvig.android.tiersandaddons.QuoteDisplayItem import hedvig.resources.R import kotlinx.datetime.LocalDate @@ -125,7 +131,7 @@ private fun SummaryScreen( navigateUp: () -> Unit, navigateBack: () -> Unit, exitFlow: () -> Unit, - toggleHomeAddonExclusion: (MovingFlowQuotes.AddonQuote) -> Unit, + toggleHomeAddonExclusion: (AddonId) -> Unit, onConfirmChanges: () -> Unit, onDismissSubmissionError: () -> Unit, ) { @@ -171,7 +177,7 @@ private fun SummaryScreen( @Composable private fun SummaryScreen( content: SummaryUiState.Content, - toggleHomeAddonExclusion: (MovingFlowQuotes.AddonQuote) -> Unit, + toggleHomeAddonExclusion: (AddonId) -> Unit, onConfirmChanges: () -> Unit, onDismissSubmissionError: () -> Unit, ) { @@ -198,6 +204,33 @@ private fun SummaryScreen( onDismiss = onDismissSubmissionError, ) } + val exclusionBottomSheetState = rememberHedvigBottomSheetState() + HedvigBottomSheet(exclusionBottomSheetState) { data -> + HedvigText(data.title) + HedvigText(data.description, color = HedvigTheme.colorScheme.textSecondary) + Spacer(Modifier.height(32.dp)) + HedvigButton( + text = data.confirmButtonTitle, + onClick = { + exclusionBottomSheetState.dismiss() + toggleHomeAddonExclusion(data.addonId) + }, + enabled = true, + buttonSize = Large, + modifier = Modifier.fillMaxWidth(), + ) + Spacer(Modifier.height(8.dp)) + HedvigButton( + text = data.cancelButtonTitle, + onClick = { exclusionBottomSheetState.dismiss() }, + enabled = true, + buttonStyle = Ghost, + buttonSize = Large, + modifier = Modifier.fillMaxWidth(), + ) + Spacer(Modifier.height(8.dp)) + Spacer(Modifier.windowInsetsBottomHeight(WindowInsets.safeDrawing)) + } Box(propagateMinConstraints = true) { var bottomAttachedContentHeightPx by remember { mutableIntStateOf(0) } Column( @@ -213,17 +246,19 @@ private fun SummaryScreen( AddonQuoteCard( quote = addonQuote, canExcludeAddons = content.canExcludeAddons, - toggleHomeAddonExclusion = { toggleHomeAddonExclusion(addonQuote) }, + toggleHomeAddonExclusion = { + if (addonQuote.exclusionDialogInfo != null && !addonQuote.isExcludedByUser) { + exclusionBottomSheetState.show(addonQuote.exclusionDialogInfo) + } else { + toggleHomeAddonExclusion(addonQuote.addonId) + } + }, ) } for (mtaQuote in content.summaryInfo.moveMtaQuotes) { QuoteCard(mtaQuote) for (addonQuote in mtaQuote.relatedAddonQuotes) { - AddonQuoteCard( - quote = addonQuote, - canExcludeAddons = content.canExcludeAddons, - toggleHomeAddonExclusion = { toggleHomeAddonExclusion(addonQuote) }, - ) + AddonQuoteCard(quote = addonQuote) } } } @@ -311,41 +346,18 @@ private fun QuoteCard( @Composable private fun AddonQuoteCard( - quote: MovingFlowQuotes.AddonQuote, + quote: MovingFlowQuotes.AddonQuote.HomeAddonQuote, canExcludeAddons: Boolean, toggleHomeAddonExclusion: () -> Unit, modifier: Modifier = Modifier, ) { - val startDate = formatStartDate(quote.startDate) - val subtitle = if (quote is HomeAddonQuote && quote.isExcludedByUser) { - null - } else { - stringResource(R.string.CHANGE_ADDRESS_ACTIVATION_DATE, startDate) - } - QuoteCard( - displayName = quote.addonVariant.displayName, - contractGroup = null, - insurableLimits = emptyList(), - // todo: here we don't want to show insurable limits for addons, that may change later - documents = quote.addonVariant.documents, - subtitle = subtitle, - premium = quote.premium.toString(), - isExcluded = when (quote) { - is HomeAddonQuote -> quote.isExcludedByUser - is MtaAddonQuote -> false - }, - displayItems = quote.displayItems.map { - QuoteDisplayItem( - title = it.title, - subtitle = it.subtitle, - value = it.value, - ) - }, + AddonQuoteCard( + quote = quote, modifier = modifier, underDetailsContent = { state -> Column { AnimatedVisibility( - visible = canExcludeAddons && state.showDetails && quote is HomeAddonQuote && !quote.isExcludedByUser, + visible = canExcludeAddons && state.showDetails && !quote.isExcludedByUser, enter = expandVertically(expandFrom = Alignment.Top), exit = shrinkVertically(shrinkTowards = Alignment.Top), modifier = Modifier.padding(bottom = 8.dp), @@ -360,7 +372,7 @@ private fun AddonQuoteCard( modifier = Modifier.fillMaxWidth(), ) } - if (quote is HomeAddonQuote && quote.isExcludedByUser) { + if (quote.isExcludedByUser) { HedvigButton( text = stringResource(R.string.ADDON_ADD_COVERAGE), onClick = toggleHomeAddonExclusion, @@ -377,6 +389,51 @@ private fun AddonQuoteCard( ) } +@Composable +private fun AddonQuoteCard(quote: MovingFlowQuotes.AddonQuote.MtaAddonQuote, modifier: Modifier = Modifier) { + AddonQuoteCard( + quote = quote, + modifier = modifier, + underDetailsContent = null, + ) +} + +@Composable +private fun AddonQuoteCard( + quote: MovingFlowQuotes.AddonQuote, + modifier: Modifier = Modifier, + underDetailsContent: (@Composable (UnderDetailsContentState) -> Unit)?, +) { + val startDate = formatStartDate(quote.startDate) + val subtitle = if (quote is HomeAddonQuote && quote.isExcludedByUser) { + null + } else { + stringResource(R.string.CHANGE_ADDRESS_ACTIVATION_DATE, startDate) + } + QuoteCard( + displayName = quote.addonVariant.displayName, + contractGroup = null, + insurableLimits = emptyList(), + // todo: here we don't want to show insurable limits for addons, that may change later + documents = quote.addonVariant.documents, + subtitle = subtitle, + premium = quote.premium.toString(), + isExcluded = when (quote) { + is HomeAddonQuote -> quote.isExcludedByUser + is MtaAddonQuote -> false + }, + displayItems = quote.displayItems.map { + QuoteDisplayItem( + title = it.title, + subtitle = it.subtitle, + value = it.value, + ) + }, + modifier = modifier, + underDetailsContent = underDetailsContent ?: { QuoteCardDefaults.UnderDetailsContent(it) }, + ) +} + @Composable private fun formatStartDate(startDate: LocalDate): String { val locale = getLocale() @@ -506,7 +563,7 @@ private class SummaryUiStateProvider : PreviewParameterProvider defaultChoice = false, relatedAddonQuotes = List(1) { HomeAddonQuote( - addonId = it.toString(), + addonId = AddonId(it.toString()), premium = UiMoney(129.0, SEK), startDate = startDate, displayItems = listOf( @@ -518,6 +575,13 @@ private class SummaryUiStateProvider : PreviewParameterProvider ), exposureName = "exposureName", addonVariant = addonVariant, + exclusionDialogInfo = ExclusionDialogInfo( + addonId = AddonId(it.toString()), + title = "title", + description = "description", + confirmButtonTitle = "confirmButtonTitle", + cancelButtonTitle = "cancelButtonTitle", + ), isExcludedByUser = true, ) }, @@ -539,7 +603,7 @@ private class SummaryUiStateProvider : PreviewParameterProvider displayItems = emptyList(), relatedAddonQuotes = listOf( MtaAddonQuote( - addonId = "1", + addonId = AddonId("1"), premium = UiMoney(30.0, SEK), startDate = startDate, displayItems = listOf( diff --git a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryViewModel.kt b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryViewModel.kt index 8462502b91..96d48dea9b 100644 --- a/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryViewModel.kt +++ b/app/feature/feature-movingflow/src/main/kotlin/com/hedvig/android/feature/movingflow/ui/summary/SummaryViewModel.kt @@ -16,7 +16,7 @@ import com.apollographql.apollo.ApolloClient import com.hedvig.android.apollo.safeExecute import com.hedvig.android.core.uidata.UiMoney import com.hedvig.android.feature.movingflow.MovingFlowDestinations.Summary -import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes +import com.hedvig.android.feature.movingflow.data.AddonId import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.AddonQuote.HomeAddonQuote import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.MoveHomeQuote import com.hedvig.android.feature.movingflow.data.MovingFlowQuotes.MoveMtaQuote @@ -89,7 +89,7 @@ internal class SummaryPresenter( } is ToggleHomeAddonExclusion -> { - launch { movingFlowRepository.toggleHomeAddonExclusion(event.addonQuote) } + launch { movingFlowRepository.toggleHomeAddonExclusion(event.addonId) } } } } @@ -127,7 +127,7 @@ internal class SummaryPresenter( MoveIntentV2CommitMutation( intentId = summaryRoute.moveIntentId, homeQuoteId = summaryRoute.homeQuoteId, - excludedAddons = submitChangesDataValue.excludedAddonIds.orEmpty(), + excludedAddons = submitChangesDataValue.excludedAddonIds.orEmpty().map(AddonId::id), ), ) .safeExecute() @@ -215,7 +215,7 @@ internal sealed interface SummaryEvent { data object DismissSubmissionError : SummaryEvent - data class ToggleHomeAddonExclusion(val addonQuote: MovingFlowQuotes.AddonQuote) : SummaryEvent + data class ToggleHomeAddonExclusion(val addonId: AddonId) : SummaryEvent } internal data class SummaryInfo( @@ -240,5 +240,5 @@ internal data class SummaryInfo( private data class SubmitChangesData( val forDate: LocalDate, - val excludedAddonIds: NonEmptyList?, + val excludedAddonIds: NonEmptyList?, )