summaryrefslogtreecommitdiff
path: root/Sora/Views/Shared
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Views/Shared')
-rw-r--r--Sora/Views/Shared/ThumbnailGridView.swift45
1 files changed, 45 insertions, 0 deletions
diff --git a/Sora/Views/Shared/ThumbnailGridView.swift b/Sora/Views/Shared/ThumbnailGridView.swift
new file mode 100644
index 0000000..a7130c2
--- /dev/null
+++ b/Sora/Views/Shared/ThumbnailGridView.swift
@@ -0,0 +1,45 @@
+import SwiftUI
+import WaterfallGrid
+
+struct ThumbnailGridView<Item: Hashable & Identifiable, Content: View>: View {
+ let items: [Item]
+ let columnCount: Int
+ let useAlternativeGrid: Bool
+ let columnsData: [[Item]]
+ let content: (Item) -> Content
+
+ var body: some View {
+ if useAlternativeGrid {
+ HStack(alignment: .top) {
+ ForEach(0..<columnCount, id: \.self) { columnIndex in
+ LazyVStack {
+ ForEach(columnsData[columnIndex], id: \.id) { item in
+ content(item)
+ .id(item.id)
+ }
+ }
+ .transaction { $0.animation = nil }
+ }
+ }
+ #if os(macOS)
+ .padding(8)
+ #else
+ .padding(.horizontal)
+ #endif
+ .transition(.opacity)
+ } else {
+ WaterfallGrid(items, id: \.id) { item in
+ content(item)
+ .id(item.id)
+ }
+ .gridStyle(columns: columnCount)
+ .transaction { $0.animation = nil }
+ #if os(macOS)
+ .padding(8)
+ #else
+ .padding(.horizontal)
+ #endif
+ .transition(.opacity)
+ }
+ }
+}