Skip to content

Commit cc9365a

Browse files
committed
misc : introduce List.firstIfSingle extension
1 parent e383c7f commit cc9365a

File tree

2 files changed

+18
-11
lines changed
  • features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner
  • libraries/core/src/main/kotlin/io/element/android/libraries/core/extensions

2 files changed

+18
-11
lines changed

features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerState.kt

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import io.element.android.features.knockrequests.impl.KnockRequest
1414
import io.element.android.features.knockrequests.impl.R
1515
import io.element.android.features.knockrequests.impl.getBestName
1616
import io.element.android.libraries.architecture.AsyncAction
17+
import io.element.android.libraries.core.extensions.firstIfSingle
1718
import kotlinx.collections.immutable.ImmutableList
1819

1920
data class KnockRequestsBannerState(
@@ -23,17 +24,8 @@ data class KnockRequestsBannerState(
2324
val canAccept: Boolean,
2425
val eventSink: (KnockRequestsBannerEvents) -> Unit,
2526
) {
26-
val subtitle = if (knockRequests.size == 1) {
27-
knockRequests.first().userId.value
28-
} else {
29-
null
30-
}
31-
32-
val reason = if (knockRequests.size == 1) {
33-
knockRequests.first().reason
34-
} else {
35-
null
36-
}
27+
val subtitle = knockRequests.firstIfSingle()?.userId?.value
28+
val reason = knockRequests.firstIfSingle()?.reason
3729

3830
@Composable
3931
fun formattedTitle(): String {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* Copyright 2024 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only
5+
* Please see LICENSE in the repository root for full details.
6+
*/
7+
8+
package io.element.android.libraries.core.extensions
9+
10+
/**
11+
* Returns the first element if the list contains exactly one element, otherwise returns null.
12+
*/
13+
inline fun <reified T> List<T>.firstIfSingle(): T? {
14+
return if (size == 1) first() else null
15+
}

0 commit comments

Comments
 (0)