Календарь
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package ru.megboyzz.dnevnik.screens.ui.calendar
|
package ru.megboyzz.dnevnik.screens.ui.calendar
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
import androidx.compose.foundation.*
|
import androidx.compose.foundation.*
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.shape.CircleShape
|
import androidx.compose.foundation.shape.CircleShape
|
||||||
@@ -14,11 +15,13 @@ import androidx.compose.ui.graphics.painter.Painter
|
|||||||
import androidx.compose.ui.semantics.Role
|
import androidx.compose.ui.semantics.Role
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import com.kizitonwose.calendar.compose.CalendarState
|
||||||
import com.kizitonwose.calendar.compose.HorizontalCalendar
|
import com.kizitonwose.calendar.compose.HorizontalCalendar
|
||||||
import com.kizitonwose.calendar.compose.WeekCalendar
|
import com.kizitonwose.calendar.compose.WeekCalendar
|
||||||
import com.kizitonwose.calendar.compose.rememberCalendarState
|
import com.kizitonwose.calendar.compose.rememberCalendarState
|
||||||
import com.kizitonwose.calendar.compose.weekcalendar.rememberWeekCalendarState
|
import com.kizitonwose.calendar.compose.weekcalendar.rememberWeekCalendarState
|
||||||
import com.kizitonwose.calendar.core.*
|
import com.kizitonwose.calendar.core.*
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import ru.megboyzz.dnevnik.*
|
import ru.megboyzz.dnevnik.*
|
||||||
import ru.megboyzz.dnevnik.R
|
import ru.megboyzz.dnevnik.R
|
||||||
@@ -68,14 +71,10 @@ fun NiceCalendar(
|
|||||||
SimpleCalendarTitle(
|
SimpleCalendarTitle(
|
||||||
currentMonth = visibleMonth.yearMonth,
|
currentMonth = visibleMonth.yearMonth,
|
||||||
goToPrevious = {
|
goToPrevious = {
|
||||||
monthScrollCoroutineScope.launch {
|
state.scrollToPreviousMonth(monthScrollCoroutineScope)
|
||||||
state.animateScrollToMonth(state.firstVisibleMonth.yearMonth.previousMonth)
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
goToNext = {
|
goToNext = {
|
||||||
monthScrollCoroutineScope.launch {
|
state.scrollToNextMonth(monthScrollCoroutineScope)
|
||||||
state.animateScrollToMonth(state.firstVisibleMonth.yearMonth.nextMonth)
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
transitionEnabled = transitionEnabled
|
transitionEnabled = transitionEnabled
|
||||||
)
|
)
|
||||||
@@ -94,7 +93,7 @@ fun NiceCalendar(
|
|||||||
day = day,
|
day = day,
|
||||||
isSelected = selections.contains(day.date)
|
isSelected = selections.contains(day.date)
|
||||||
) { clickedDay ->
|
) { clickedDay ->
|
||||||
|
Log.i("Click!", "MonthDay is Clicked!")
|
||||||
//Чтобы два раза не вызывать week()
|
//Чтобы два раза не вызывать week()
|
||||||
val week = clickedDay.week()
|
val week = clickedDay.week()
|
||||||
|
|
||||||
@@ -104,12 +103,12 @@ fun NiceCalendar(
|
|||||||
}else selections.remove(day.date)
|
}else selections.remove(day.date)
|
||||||
|
|
||||||
weekScrollCoroutineScope.launch {
|
weekScrollCoroutineScope.launch {
|
||||||
weekState.startDate = clickedDay.date
|
weekState.startDate = week.days.first().date
|
||||||
|
weekState.endDate = week.days.last().date
|
||||||
weekState.animateScrollToWeek(clickedDay.date)
|
weekState.animateScrollToWeek(clickedDay.date)
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedWeek = if (selectedWeek == week) null else week
|
selectedWeek = if (selectedWeek == week) null else week
|
||||||
|
|
||||||
onClick(clickedDay, currentMonth, currentMonth.year)
|
onClick(clickedDay, currentMonth, currentMonth.year)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -126,10 +125,14 @@ fun NiceCalendar(
|
|||||||
},
|
},
|
||||||
dayContent = { day ->
|
dayContent = { day ->
|
||||||
WeekDay(
|
WeekDay(
|
||||||
day = CalendarDay(day.date, DayPosition.InDate),
|
day = day,
|
||||||
isSelected = selections.contains(day.date)
|
isSelected = selections.contains(day.date)
|
||||||
) { calendarDay ->
|
) { calendarDay ->
|
||||||
|
Log.i("Click!", "WeekDay is Clicked!")
|
||||||
|
if(!selections.contains(day.date)) {
|
||||||
|
selections.removeIf { it != day.date }
|
||||||
|
selections.add(day.date)
|
||||||
|
}else selections.remove(day.date)
|
||||||
selectedWeek = null
|
selectedWeek = null
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -142,6 +145,21 @@ fun NiceCalendar(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun CalendarState.scrollToPreviousMonth(coroutineScope: CoroutineScope){
|
||||||
|
val it = this
|
||||||
|
coroutineScope.launch {
|
||||||
|
it.scrollToMonth(it.firstVisibleMonth.yearMonth.previousMonth)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun CalendarState.scrollToNextMonth(coroutineScope: CoroutineScope){
|
||||||
|
val it = this
|
||||||
|
coroutineScope.launch {
|
||||||
|
it.scrollToMonth(it.firstVisibleMonth.yearMonth.nextMonth)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun CalendarNavigationIcon(
|
fun CalendarNavigationIcon(
|
||||||
icon: Painter,
|
icon: Painter,
|
||||||
@@ -273,16 +291,27 @@ fun MonthDay(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun WeekDay(
|
fun WeekDay(
|
||||||
day: CalendarDay,
|
day: WeekDay,
|
||||||
isSelected: Boolean,
|
isSelected: Boolean,
|
||||||
onClick: (CalendarDay) -> Unit
|
onClick: (CalendarDay) -> Unit
|
||||||
) {
|
) {
|
||||||
val newDay = day.copy(position = DayPosition.MonthDate)
|
Log.i("WeekDay", day.toString())
|
||||||
|
val position = when(day.position){
|
||||||
|
WeekDayPosition.InDate -> DayPosition.MonthDate
|
||||||
|
WeekDayPosition.OutDate -> DayPosition.MonthDate
|
||||||
|
WeekDayPosition.RangeDate -> DayPosition.MonthDate
|
||||||
|
}
|
||||||
|
val newDay = CalendarDay(day.date, position)
|
||||||
Day(day = newDay, isSelected = isSelected, onClick = onClick)
|
Day(day = newDay, isSelected = isSelected, onClick = onClick)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun Day(day: CalendarDay, isSelected: Boolean, onClick: (CalendarDay) -> Unit) {
|
fun Day(
|
||||||
|
day: CalendarDay,
|
||||||
|
isSelected: Boolean,
|
||||||
|
onClick: (CalendarDay) -> Unit
|
||||||
|
) {
|
||||||
|
Log.i("BaseDay", day.toString())
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.aspectRatio(ratio = 1f) // This is important for square sizing!
|
.aspectRatio(ratio = 1f) // This is important for square sizing!
|
||||||
|
|||||||
Reference in New Issue
Block a user