package ru.notesapp.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.SwipeToDismissBox
import androidx.compose.material3.SwipeToDismissBoxValue
import androidx.compose.material3.rememberSwipeToDismissBoxState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import ru.notesapp.domain.Note
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun NoteList(
notes: List<Note>,
onClick: (Note) -> Unit,
onDelete: (Note) -> Unit,
modifier: Modifier = Modifier,
onLongClick: (Note) -> Unit = {},
) {
if (notes.isEmpty()) {
EmptyState(
title = "Пока нет заметок",
subtitle = "Нажмите +, чтобы добавить",
modifier = modifier.fillMaxSize()
)
return
}
LazyColumn(
modifier = modifier.fillMaxSize(),
contentPadding = PaddingValues(16.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
items(notes, key = { it.id }) { note ->
val dismissState = rememberSwipeToDismissBoxState(
confirmValueChange = { value ->
if (value == SwipeToDismissBoxValue.EndToStart) {
onDelete(note)
}
false
}
)
SwipeToDismissBox(
state = dismissState,
enableDismissFromStartToEnd = false,
enableDismissFromEndToStart = true,
backgroundContent = {
Box(
modifier = Modifier
.fillMaxSize()
.background(Color(0xFFE53935))
.padding(horizontal = 24.dp),
contentAlignment = Alignment.CenterEnd
) {
Icon(
imageVector = Icons.Default.Delete,
contentDescription = "Удалить",
tint = Color.White,
modifier = Modifier.size(28.dp)
)
}
}
) {
NoteCard(
note = note,
onClick = { onClick(note) },
onLongClick = { onLongClick(note) }
)
}
}
}
}