LibraryCompactGrid.kt 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package eu.kanade.presentation.library.components
  2. import androidx.compose.foundation.layout.PaddingValues
  3. import androidx.compose.foundation.layout.fillMaxSize
  4. import androidx.compose.foundation.lazy.grid.items
  5. import androidx.compose.runtime.Composable
  6. import androidx.compose.ui.Modifier
  7. import androidx.compose.ui.util.fastAny
  8. import eu.kanade.domain.library.model.LibraryManga
  9. import eu.kanade.domain.manga.model.MangaCover
  10. import eu.kanade.presentation.components.MangaCompactGridItem
  11. import eu.kanade.tachiyomi.ui.library.LibraryItem
  12. @Composable
  13. fun LibraryCompactGrid(
  14. items: List<LibraryItem>,
  15. showTitle: Boolean,
  16. columns: Int,
  17. contentPadding: PaddingValues,
  18. selection: List<LibraryManga>,
  19. onClick: (LibraryManga) -> Unit,
  20. onLongClick: (LibraryManga) -> Unit,
  21. onClickContinueReading: ((LibraryManga) -> Unit)?,
  22. searchQuery: String?,
  23. onGlobalSearchClicked: () -> Unit,
  24. ) {
  25. LazyLibraryGrid(
  26. modifier = Modifier.fillMaxSize(),
  27. columns = columns,
  28. contentPadding = contentPadding,
  29. ) {
  30. globalSearchItem(searchQuery, onGlobalSearchClicked)
  31. items(
  32. items = items,
  33. contentType = { "library_compact_grid_item" },
  34. ) { libraryItem ->
  35. val manga = libraryItem.libraryManga.manga
  36. MangaCompactGridItem(
  37. isSelected = selection.fastAny { it.id == libraryItem.libraryManga.id },
  38. title = manga.title.takeIf { showTitle },
  39. coverData = MangaCover(
  40. mangaId = manga.id,
  41. sourceId = manga.source,
  42. isMangaFavorite = manga.favorite,
  43. url = manga.thumbnailUrl,
  44. lastModified = manga.coverLastModified,
  45. ),
  46. coverBadgeStart = {
  47. DownloadsBadge(count = libraryItem.downloadCount.toInt())
  48. UnreadBadge(count = libraryItem.unreadCount.toInt())
  49. },
  50. coverBadgeEnd = {
  51. LanguageBadge(
  52. isLocal = libraryItem.isLocal,
  53. sourceLanguage = libraryItem.sourceLanguage,
  54. )
  55. },
  56. onLongClick = { onLongClick(libraryItem.libraryManga) },
  57. onClick = { onClick(libraryItem.libraryManga) },
  58. onClickContinueReading = if (onClickContinueReading != null) {
  59. { onClickContinueReading(libraryItem.libraryManga) }
  60. } else {
  61. null
  62. },
  63. )
  64. }
  65. }
  66. }