Search column: add possibility to add content before and after card contents

This commit is contained in:
MM20 2022-09-08 21:22:09 +02:00
parent e3a466685c
commit bcd144e8a1
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -72,7 +72,7 @@ fun SearchColumn(
items = apps.toImmutableList(), items = apps.toImmutableList(),
columns = columns, columns = columns,
showLabels = showLabels, showLabels = showLabels,
reverse = reverse, reverse = reverse
) )
ListResults(appShortcuts.toImmutableList(), reverse) ListResults(appShortcuts.toImmutableList(), reverse)
val uc = unitConverter val uc = unitConverter
@ -113,48 +113,60 @@ fun LazyListScope.GridResults(
columns: Int, columns: Int,
reverse: Boolean, reverse: Boolean,
showLabels: Boolean, showLabels: Boolean,
before: (@Composable () -> Unit)? = null,
after: (@Composable () -> Unit)? = null,
) { ) {
if (items.isEmpty()) return if (items.isEmpty()) return
if (before != null) {
item(contentType = "ListItemsBefore") {
PartialCardRow(isFirst = true, isLast = false, reverse = reverse) {
before()
}
}
}
val rows = ceil(items.size / columns.toFloat()).toInt() val rows = ceil(items.size / columns.toFloat()).toInt()
items(rows) { items(rows) {
PartialCardRow(
isFirst = it == 0 && before == null,
isLast = it == rows - 1 && after == null,
reverse = reverse
) {
GridRow( GridRow(
items = items.subList(it * columns, (it * columns + columns).coerceAtMost(items.size)), modifier = Modifier.padding(
top = if (if (reverse) it == rows - 1 else it == 0) 4.dp else 0.dp,
bottom = if (if (reverse) it == 0 else it == rows - 1) 2.dp else 0.dp,
),
items = items.subList(
it * columns,
(it * columns + columns).coerceAtMost(items.size)
),
columns = columns, columns = columns,
showLabels = showLabels, showLabels = showLabels,
isFirst = if (reverse) it == rows - 1 else it == 0,
isLast = if (reverse) it == 0 else it == rows - 1
) )
} }
} }
if (after != null) {
item(contentType = "ListItemsAfter") {
PartialCardRow(isFirst = false, isLast = true, reverse = reverse) {
after()
}
}
}
}
@Composable @Composable
fun GridRow( fun GridRow(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
items: ImmutableList<Searchable>, items: ImmutableList<Searchable>,
columns: Int, columns: Int,
showLabels: Boolean, showLabels: Boolean,
isFirst: Boolean,
isLast: Boolean,
) {
Box(
modifier = modifier
.clipToBounds()
) {
PartialLauncherCard(
modifier = Modifier.padding(
start = 8.dp,
end = 8.dp,
top = if (isFirst) 4.dp else 0.dp,
bottom = if (isLast) 4.dp else 0.dp,
),
isTop = isFirst,
isBottom = isLast,
) { ) {
Row( Row(
modifier = Modifier.padding( modifier = modifier
top = if (isFirst) 4.dp else 0.dp,
bottom = if (isLast) 2.dp else 0.dp,
)
) { ) {
for (item in items) { for (item in items) {
GridItem( GridItem(
@ -170,50 +182,54 @@ fun GridRow(
} }
} }
} }
}
}
fun LazyListScope.ListResults( fun LazyListScope.ListResults(
items: ImmutableList<Searchable>, items: ImmutableList<Searchable>,
reverse: Boolean, reverse: Boolean,
before: (@Composable () -> Unit)? = null,
after: (@Composable () -> Unit)? = null,
) { ) {
if (items.isEmpty()) return if (items.isEmpty()) return
if (before != null) {
item(contentType = "ListItemsBefore") {
PartialCardRow(isFirst = true, isLast = false, reverse = reverse) {
before()
}
}
}
items(items.size) { items(items.size) {
PartialCardRow(
isFirst = it == 0 && before == null,
isLast = it == items.lastIndex && after == null,
reverse = reverse
) {
ListRow( ListRow(
modifier = Modifier.padding(
top = if (if (reverse) it == items.size - 1 else it == 0) 8.dp else 4.dp,
bottom = if (if (reverse) it == 0 else it == items.size - 1) 8.dp else 4.dp,
),
item = items[it], item = items[it],
isFirst = if (reverse) it == items.size - 1 else it == 0,
isLast = if (reverse) it == 0 else it == items.size - 1
) )
} }
} }
if (after != null) {
item(contentType = "ListItemsAfter") {
PartialCardRow(isFirst = false, isLast = true, reverse = reverse) {
after()
}
}
}
}
@Composable @Composable
fun ListRow( fun ListRow(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
item: Searchable, item: Searchable,
isFirst: Boolean,
isLast: Boolean,
) { ) {
Box( Box(
modifier = modifier modifier = modifier.padding(
.clipToBounds()
) {
PartialLauncherCard(
modifier = Modifier.padding(
start = 8.dp, start = 8.dp,
end = 8.dp, end = 8.dp,
top = if (isFirst) 4.dp else 0.dp,
bottom = if (isLast) 4.dp else 0.dp,
),
isTop = isFirst,
isBottom = isLast,
) {
Box(
modifier = Modifier.padding(
start = 8.dp,
end = 8.dp,
top = if (isFirst) 8.dp else 4.dp,
bottom = if (isLast) 8.dp else 4.dp,
) )
) { ) {
ListItem( ListItem(
@ -223,8 +239,6 @@ fun ListRow(
) )
} }
} }
}
}
fun LazyListScope.SingleResult(content: @Composable (() -> Unit)?) { fun LazyListScope.SingleResult(content: @Composable (() -> Unit)?) {
if (content == null) return if (content == null) return
@ -239,3 +253,32 @@ fun LazyListScope.SingleResult(content: @Composable (() -> Unit)?) {
} }
} }
} }
@Composable
fun PartialCardRow(
modifier: Modifier = Modifier,
isFirst: Boolean,
isLast: Boolean,
reverse: Boolean,
content: @Composable () -> Unit
) {
val isTop = isFirst && !reverse || isLast && reverse
val isBottom = isLast && !reverse || isFirst && reverse
Box(
modifier = modifier
.clipToBounds()
) {
PartialLauncherCard(
modifier = Modifier.padding(
start = 8.dp,
end = 8.dp,
top = if (isTop) 4.dp else 0.dp,
bottom = if (isBottom) 4.dp else 0.dp,
),
isTop = isTop,
isBottom = isBottom,
) {
content()
}
}
}