From a9eb582c93dabcd2629d7eedc5cfa8e98c443ae0 Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Sun, 26 Apr 2026 12:42:51 -0400 Subject: [PATCH] refactor: replace LazyVerticalGrid with Column/Row layout in AllergenSelectionGrid for improved performance and layout control --- .../common/components/AllergenGrid.kt | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/safebite/app/presentation/common/components/AllergenGrid.kt b/app/src/main/java/com/safebite/app/presentation/common/components/AllergenGrid.kt index 757f6d6..dae115b 100644 --- a/app/src/main/java/com/safebite/app/presentation/common/components/AllergenGrid.kt +++ b/app/src/main/java/com/safebite/app/presentation/common/components/AllergenGrid.kt @@ -7,12 +7,10 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.lazy.grid.GridCells -import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults @@ -71,27 +69,38 @@ fun AllergenSelectionGrid( modifier: Modifier = Modifier ) { val dimens = LocalDimens.current + val columns = 3 + val rows = AllergenType.entries.toList().chunked(columns) - LazyVerticalGrid( - columns = GridCells.Fixed(3), + Column( modifier = modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(dimens.spacingSm), verticalArrangement = Arrangement.spacedBy(dimens.spacingSm) ) { - items(AllergenType.entries.toList()) { allergen -> - val currentLevel = selectedAllergens[allergen] ?: AllergenLevel.NONE - AllergenSelectionChip( - allergen = allergen, - level = currentLevel, - onClick = { - val nextLevel = when (currentLevel) { - AllergenLevel.NONE -> AllergenLevel.TRACE - AllergenLevel.TRACE -> AllergenLevel.SEVERE - AllergenLevel.SEVERE -> AllergenLevel.NONE - } - onLevelChanged(allergen, nextLevel) + rows.forEach { row -> + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(dimens.spacingSm) + ) { + row.forEach { allergen -> + val currentLevel = selectedAllergens[allergen] ?: AllergenLevel.NONE + AllergenSelectionChip( + modifier = Modifier.weight(1f), + allergen = allergen, + level = currentLevel, + onClick = { + val nextLevel = when (currentLevel) { + AllergenLevel.NONE -> AllergenLevel.TRACE + AllergenLevel.TRACE -> AllergenLevel.SEVERE + AllergenLevel.SEVERE -> AllergenLevel.NONE + } + onLevelChanged(allergen, nextLevel) + } + ) } - ) + repeat(columns - row.size) { + Spacer(modifier = Modifier.weight(1f)) + } + } } } }