package com.vgmlr.kerf
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
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.platform.LocalUriHandler
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
import androidx.compose.ui.text.font.FontFamily
@Composable
fun SearchDialog(notes: List<Note>, onSelect: (Int) -> Unit, onDismiss: () -> Unit) {
val kerfColors = LocalKerfColors.current!!
AlertDialog(
onDismissRequest = onDismiss,
properties = DialogProperties(usePlatformDefaultWidth = false),
confirmButton = { },
shape = RoundedCornerShape(0.dp),
containerColor = kerfColors.alertBackground,
text = {
Column(
modifier = Modifier.fillMaxWidth().padding(horizontal = 20.dp, vertical = 6.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
LazyColumn(modifier = Modifier.fillMaxWidth()) {
items(items = notes) { n ->
ListItem(
headlineContent = {
Text(
text = n.title.ifBlank { "Untitled" },
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
},
colors = ListItemDefaults.colors(
containerColor = kerfColors.alertBackground,
headlineColor = kerfColors.alertText
),
modifier = Modifier.clickable { onSelect(n.id) }
)
HorizontalDivider(color = Color.Gray.copy(alpha = 0.5f))
}
}
}
}
)
}
@Composable
fun ShareDialog(notes: List<Note>, onSelect: (Int) -> Unit, onAddNew: () -> Unit, onDismiss: () -> Unit) {
val kerfColors = LocalKerfColors.current!!
AlertDialog(
onDismissRequest = onDismiss,
properties = DialogProperties(usePlatformDefaultWidth = false),
confirmButton = { },
shape = RoundedCornerShape(0.dp),
containerColor = kerfColors.alertBackground,
text = {
Column(
modifier = Modifier.fillMaxWidth().padding(horizontal = 20.dp, vertical = 6.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
LazyColumn(modifier = Modifier.fillMaxWidth()) {
item {
ListItem(
headlineContent = { Text("New List", color = kerfColors.menuText) },
leadingContent = {
Icon(
Icons.Default.Add,
null,
tint = kerfColors.alertText
)
},
colors = ListItemDefaults.colors(containerColor = kerfColors.alertBackground),
modifier = Modifier.clickable { onAddNew() }
)
HorizontalDivider(color = Color.Gray.copy(alpha = 0.5f))
}
items(items = notes) { n ->
ListItem(
headlineContent = {
Text(
text = n.title.ifBlank { "Untitled" },
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
},
colors = ListItemDefaults.colors(
containerColor = kerfColors.alertBackground,
headlineColor = kerfColors.alertText
),
modifier = Modifier.clickable { onSelect(n.id) }
)
HorizontalDivider(color = Color.Gray.copy(alpha = 0.5f))
}
}
}
}
)
}
@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.fillMaxWidth(),
color = kerfColors.alertBackground
) {
Column(
modifier = Modifier.fillMaxWidth().padding(horizontal = 10.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)
}
}
}
}
}
}
@Composable
fun VersionDialog(onDismiss: () -> Unit) {
val uriHandler = LocalUriHandler.current
val kerfColors = LocalKerfColors.current!!
Dialog(
onDismissRequest = onDismiss,
properties = DialogProperties(usePlatformDefaultWidth = false)
) {
Surface(
modifier = Modifier.fillMaxWidth(),
color = kerfColors.alertBackground
) {
Column(
modifier = Modifier.fillMaxWidth().padding(horizontal = 10.dp, vertical = 26.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("com.vgmlr.kerf", color = kerfColors.alertText, fontSize = 14.sp)
Text("49.026.1", color = kerfColors.alertText, fontSize = 14.sp)
Text(
"vgmlr.com/mlwrk",
color = kerfColors.alertText,
fontSize = 14.sp,
modifier = Modifier.clickable { uriHandler.openUri("https://vgmlr.com/mlwrk") }
)
}
}
}
}