diff options
Diffstat (limited to 'Sora/Views/Shared/ThumbnailGridView.swift')
| -rw-r--r-- | Sora/Views/Shared/ThumbnailGridView.swift | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/Sora/Views/Shared/ThumbnailGridView.swift b/Sora/Views/Shared/ThumbnailGridView.swift index a7130c2..ec8cd10 100644 --- a/Sora/Views/Shared/ThumbnailGridView.swift +++ b/Sora/Views/Shared/ThumbnailGridView.swift @@ -8,12 +8,27 @@ struct ThumbnailGridView<Item: Hashable & Identifiable, Content: View>: View { let columnsData: [[Item]] let content: (Item) -> Content + private var resolvedColumnCount: Int { + max(columnCount, 1) + } + + private var resolvedColumnsData: [[Item]] { + let clippedColumnsData = Array(columnsData.prefix(resolvedColumnCount)) + let missingColumnCount = resolvedColumnCount - clippedColumnsData.count + + if missingColumnCount <= 0 { + return clippedColumnsData + } + + return clippedColumnsData + Array(repeating: [], count: missingColumnCount) + } + var body: some View { if useAlternativeGrid { HStack(alignment: .top) { - ForEach(0..<columnCount, id: \.self) { columnIndex in + ForEach(Array(resolvedColumnsData.enumerated()), id: \.offset) { _, columnItems in LazyVStack { - ForEach(columnsData[columnIndex], id: \.id) { item in + ForEach(columnItems, id: \.id) { item in content(item) .id(item.id) } @@ -32,7 +47,7 @@ struct ThumbnailGridView<Item: Hashable & Identifiable, Content: View>: View { content(item) .id(item.id) } - .gridStyle(columns: columnCount) + .gridStyle(columns: resolvedColumnCount) .transaction { $0.animation = nil } #if os(macOS) .padding(8) |