package com.vgmlr.kerf
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.*
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.text.font.FontFamily
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SearchDialog(notes: List<Note>, onSelect: (Int) -> Unit, onDismiss: () -> Unit) {
val kerfColors = LocalKerfColors.current!!
Dialog(
onDismissRequest = onDismiss,
properties = DialogProperties(usePlatformDefaultWidth = false)
) {
Surface(
modifier = Modifier.padding(horizontal = 50.dp),
shape = RoundedCornerShape(ROUND_END),
color = kerfColors.alertBackground,
border = EDGE
) {
Column(
modifier = Modifier
.width(IntrinsicSize.Max)
.padding(horizontal = 24.dp, vertical = 26.dp)
.heightIn(max = 340.dp)
.verticalScroll(rememberScrollState())
) {
notes.forEachIndexed { index, n ->
Box(
modifier = Modifier
.fillMaxWidth()
.heightIn(min = 56.dp)
.clickable { onSelect(n.id) }
.padding(horizontal = 16.dp),
contentAlignment = Alignment.CenterStart
) {
Text(
text = n.title.ifBlank { "Untitled" },
color = kerfColors.alertText,
style = MaterialTheme.typography.bodyLarge,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
if (notes.size > 1 && index < notes.lastIndex) {
HorizontalDivider(color = Color.Gray.copy(alpha = 0.3f))
}
}
}
}
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun ShareDialog(
notes: List<Note>,
onSelect: (Int) -> Unit,
onAddNew: () -> Unit,
onDismiss: () -> Unit
) {
val kerfColors = LocalKerfColors.current!!
Dialog(
onDismissRequest = onDismiss,
properties = DialogProperties(usePlatformDefaultWidth = false)
) {
Surface(
modifier = Modifier.padding(horizontal = 50.dp),
shape = RoundedCornerShape(ROUND_END),
color = kerfColors.alertBackground,
border = EDGE
) {
Column(
modifier = Modifier
.width(IntrinsicSize.Max)
.padding(horizontal = 24.dp, vertical = 26.dp)
.heightIn(max = 340.dp)
.verticalScroll(rememberScrollState())
) {
Row(
modifier = Modifier
.fillMaxWidth()
.heightIn(min = 56.dp)
.clickable { onAddNew() }
.padding(horizontal = 16.dp),
verticalAlignment = Alignment.CenterVertically
) {
Text(
"New List",
color = kerfColors.menuText,
style = MaterialTheme.typography.bodyLarge,
modifier = Modifier.weight(1f)
)
Spacer(Modifier.width(16.dp))
Icon(
Icons.Default.Add,
null,
tint = kerfColors.alertText.copy(alpha = 0.4f)
)
}
if (notes.isNotEmpty()) {
HorizontalDivider(color = Color.Gray.copy(alpha = 0.3f))
}
notes.forEachIndexed { index, n ->
Box(
modifier = Modifier
.fillMaxWidth()
.heightIn(min = 56.dp)
.clickable { onSelect(n.id) }
.padding(horizontal = 16.dp),
contentAlignment = Alignment.CenterStart
) {
Text(
text = n.title.ifBlank { "Untitled" },
color = kerfColors.alertText,
style = MaterialTheme.typography.bodyLarge,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
if (index < notes.lastIndex) {
HorizontalDivider(color = Color.Gray.copy(alpha = 0.3f))
}
}
}
}
}
}
@Composable
fun DataDialog(createdAt: Long?, updatedAt: Long?, lastShared: Long?, onDismiss: () -> Unit) {
val createddate = KerfUtils.formatLastSharedDate(createdAt)
val modifieddate = KerfUtils.formatLastSharedDate(updatedAt)
val shareddate = KerfUtils.formatLastSharedDate(lastShared)
val kerfColors = LocalKerfColors.current!!
Dialog(
onDismissRequest = onDismiss,
properties = DialogProperties(usePlatformDefaultWidth = false)
) {
Surface(
modifier = Modifier.padding(horizontal = 50.dp),
color = kerfColors.alertBackground,
shape = RoundedCornerShape(ROUND_END),
border = EDGE
) {
Column(
modifier = Modifier.padding(horizontal = 24.dp, vertical = 32.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Row {
Column(horizontalAlignment = Alignment.End) {
Text("Created", color = kerfColors.alertText, fontSize = 14.sp)
Text("Modified", color = kerfColors.alertText, fontSize = 14.sp)
Text("Shared", color = kerfColors.alertText, fontSize = 14.sp)
}
Spacer(Modifier.width(16.dp))
Column {
Text(
createddate,
color = kerfColors.alertText,
fontSize = 13.sp,
fontFamily = FontFamily.Monospace
)
Text(
modifieddate,
color = kerfColors.alertText,
fontSize = 13.sp,
fontFamily = FontFamily.Monospace
)
Text(
shareddate,
color = kerfColors.alertText,
fontSize = 13.sp,
fontFamily = FontFamily.Monospace
)
}
}
}
}
}
}