package com.sp365.calendar.components import androidx.compose.foundation.background import androidx.compose.foundation.gestures.detectVerticalDragGestures import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.unit.dp import com.google.accompanist.pager.ExperimentalPagerApi import com.google.accompanist.pager.rememberPagerState import com.sp365.calendar.model.EventNative import com.sp365.calendar.model.JobList import com.sp365.calendar.utils.calculateWeeksFromStart import java.time.LocalDate @OptIn(ExperimentalPagerApi::class) @Composable fun CalendarWithTaskScreen(job: List) { var currentDate by remember { mutableStateOf(LocalDate.now()) } val initialPage = calculateWeeksFromStart(LocalDate.now()) + 5000 val pagerState = rememberPagerState(initialPage = initialPage) var isExpanded by remember { mutableStateOf(false) } Column( modifier = Modifier .fillMaxSize() .background(color = Color(0xFFEDEDED)) ) { WeekHeader() if (isExpanded) { MonthCalendar( currentDate = currentDate, onDateSelected = { newDate -> currentDate = newDate } ) } else { WeekPager( pagerState = pagerState, currentDate = currentDate, onDateSelected = { newDate -> currentDate = newDate } ) } Box( modifier = Modifier .fillMaxWidth() .height(24.dp) .background( Color.White, shape = RoundedCornerShape( bottomStart = 12.dp, bottomEnd = 12.dp ) ) .padding(vertical = 4.dp) .pointerInput(Unit) { detectVerticalDragGestures( onVerticalDrag = { _, dragAmount -> isExpanded = dragAmount > 0 } ) }, contentAlignment = Alignment.Center ) { Box( modifier = Modifier .width(60.dp) .height(4.dp) .background(Color.Gray) ) } Spacer(modifier = Modifier.height(8.dp)) TaskList( currentDate = currentDate, jobs = job, onDateChange = { newDate -> currentDate = newDate } ) } }