diff options
Diffstat (limited to 'Sora/Views/Shared')
| -rw-r--r-- | Sora/Views/Shared/ThumbnailGridView.swift | 45 |
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) + } + } +} |