diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerState.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerState.kt index 5ad89b239a..e65cd2fb26 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerState.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerState.kt @@ -14,6 +14,7 @@ import io.element.android.features.knockrequests.impl.KnockRequest import io.element.android.features.knockrequests.impl.R import io.element.android.features.knockrequests.impl.getBestName import io.element.android.libraries.architecture.AsyncAction +import io.element.android.libraries.core.extensions.firstIfSingle import kotlinx.collections.immutable.ImmutableList data class KnockRequestsBannerState( @@ -23,17 +24,8 @@ data class KnockRequestsBannerState( val canAccept: Boolean, val eventSink: (KnockRequestsBannerEvents) -> Unit, ) { - val subtitle = if (knockRequests.size == 1) { - knockRequests.first().userId.value - } else { - null - } - - val reason = if (knockRequests.size == 1) { - knockRequests.first().reason - } else { - null - } + val subtitle = knockRequests.firstIfSingle()?.userId?.value + val reason = knockRequests.firstIfSingle()?.reason @Composable fun formattedTitle(): String { diff --git a/libraries/core/src/main/kotlin/io/element/android/libraries/core/extensions/List.kt b/libraries/core/src/main/kotlin/io/element/android/libraries/core/extensions/List.kt new file mode 100644 index 0000000000..0dee04408a --- /dev/null +++ b/libraries/core/src/main/kotlin/io/element/android/libraries/core/extensions/List.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only + * Please see LICENSE in the repository root for full details. + */ + +package io.element.android.libraries.core.extensions + +/** + * Returns the first element if the list contains exactly one element, otherwise returns null. + */ +inline fun List.firstIfSingle(): T? { + return if (size == 1) first() else null +}