From 36711d1bf38c9342fb40744002f553d78ea4da4d Mon Sep 17 00:00:00 2001 From: Agzamus Date: Thu, 3 Sep 2026 23:34:45 +0300 Subject: [PATCH] ui: smaller week select --- .../vyatsu/ui/schedule/ScheduleScreen.kt | 60 +++++++++++-------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleScreen.kt b/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleScreen.kt index 0b564c1..70e267a 100644 --- a/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleScreen.kt +++ b/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleScreen.kt @@ -3,6 +3,7 @@ package agzam.vyatsu.ui.schedule import agzam.vyatsu.domain.model.Day import agzam.vyatsu.domain.model.SchedulePeriod import agzam.vyatsu.domain.model.TimeSlot +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -18,20 +19,19 @@ import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowDropDown import androidx.compose.material.icons.filled.Refresh import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExposedDropdownMenuAnchorType import androidx.compose.material3.ExposedDropdownMenuBox -import androidx.compose.material3.ExposedDropdownMenuDefaults.TrailingIcon import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChipDefaults import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.TopAppBar @@ -43,6 +43,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import java.time.DayOfWeek import java.time.LocalDate @@ -106,10 +107,22 @@ fun ScheduleScreen(viewModel: ScheduleViewModel, onSwitchGroup: () -> Unit) { val isTodayDay = day.date == state.todayDate val dayLabel = if (isTodayDay) "Сегодня " else "" - Text( - "$dayLabel ${dayName(day.date.dayOfWeek)} · ${day.date.format(FULL_DATE)}", - style = MaterialTheme.typography.titleMedium - ) + Row( + Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + "$dayLabel${dayName(day.date.dayOfWeek)} · ${day.date.format(FULL_DATE)}", + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.weight(1f) + ) + WeekSelector( + periods = schedule.periods, + selectedWeekStart = state.weekStart, + todayWeekStart = state.todayDate?.let { schedule.periodOf(it)?.weekStart }, + onSelect = viewModel::selectWeek + ) + } Row( Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(8.dp) @@ -123,15 +136,6 @@ fun ScheduleScreen(viewModel: ScheduleViewModel, onSwitchGroup: () -> Unit) { } HorizontalDivider(Modifier.padding(vertical = 8.dp)) - WeekSelector( - periods = schedule.periods, - selectedWeekStart = state.weekStart, - todayWeekStart = state.todayDate?.let { schedule.periodOf(it)?.weekStart }, - onSelect = viewModel::selectWeek - ) - - HorizontalDivider(Modifier.padding(vertical = 8.dp)) - DayChips( days = weekDays, selectedDate = state.dayDate, @@ -175,17 +179,25 @@ private fun WeekSelector( expanded = expanded, onExpandedChange = { expanded = it } ) { - OutlinedTextField( - value = selected?.let(::weekLabel) ?: "Выберите период", - onValueChange = {}, - readOnly = true, - label = { Text("Период") }, - singleLine = true, - trailingIcon = { TrailingIcon(expanded = expanded) }, + Row( modifier = Modifier - .fillMaxWidth() .menuAnchor(ExposedDropdownMenuAnchorType.PrimaryNotEditable, enabled = true) - ) + .clip(MaterialTheme.shapes.small) + .clickable(enabled = true, onClick = { expanded = true }) + .padding(horizontal = 10.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + selected?.let(::weekLabel) ?: "Период", + style = MaterialTheme.typography.labelLarge, + color = MaterialTheme.colorScheme.primary + ) + Icon( + imageVector = Icons.Default.ArrowDropDown, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary + ) + } ExposedDropdownMenu( expanded = expanded, onDismissRequest = { expanded = false }