79827077

Date: 2025-11-22 02:47:08
Score: 2.5
Natty:
Report link

Thank you for your respond NirajDota. here is my code to collecting the seatSections now.

private fun generateSeatsForTheater(
    theater: Theater,
    filledSeats: List<String>
): Map<String, Map<Int, List<Seat>>> {
    val seats = LinkedHashMap<String, Seat>(theater.columnCount * theater.rowCount)

    for (colIndex in 0 until theater.columnCount) {
        val rowLabel = ('A' + colIndex).toString()

        for (row in 1..theater.rowCount) {
            val seatId = "$rowLabel$row"

            val section = theater.sections.first {
                row - 1 in it.rowStart..it.rowEnd
            }

            seats[seatId] = Seat(
                id = seatId,
                row = rowLabel,
                column = row,
                sectionId = section.id,
                displayLabel = seatId,
                status = if (seatId in filledSeats) SeatStatus.UNAVAILABLE else SeatStatus.AVAILABLE
            )
        }
    }

    val seatSections = seats.values
        .groupBy { it.sectionId }
        .mapValues { (_, seatsInSection) ->
            seatsInSection
                .groupBy { it.column }
                .mapValues { (_, seatsInColumn) ->
                    seatsInColumn.sortedBy { it.row }
                }
                .toSortedMap()
        }

    return seatSections
}

I also use an items instead of item on my screen for now. I'll share my updated code below:

LazyRow(
    horizontalArrangement = Arrangement.spacedBy(16.dp),
    contentPadding = PaddingValues(horizontal = 24.dp)
) {
    items(uiState.seats.keys.toList(), key = { it }) { sectionId ->

        val columnMap = uiState.seats[sectionId]!!

        Row(horizontalArrangement = Arrangement.spacedBy(2.dp)) {

            columnMap.forEach { (_, seatsInColumn) ->
                Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {
                    seatsInColumn.forEach { seat ->
                        SeatItem(
                            seat = seat,
                            status = seat.status,
                            onSeatSelected = onSelectSeat
                        )
                    }
                }
            }
        }
    }
}

After all this improvements, the laggy effect has been decreased but still have the laggy feel. How do u think about it?

Reasons:
  • Blacklisted phrase (0.5): Thank you
  • Long answer (-1):
  • Has code block (-0.5):
  • Ends in question mark (2):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Ahmad Zaqi