diff options
| author | Fuwn <[email protected]> | 2026-02-18 15:55:25 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-02-18 16:15:30 -0800 |
| commit | 2a5e530af2d8e1ceb64ac384bcef0ba5ca139930 (patch) | |
| tree | 7270312261633096e9a9ab0a36c2041e0f7ec1a3 /Sora/Views/Shared/ThumbnailGridView.swift | |
| parent | chore: finalise performance optimisation batch and metrics (diff) | |
| download | sora-testing-2a5e530af2d8e1ceb64ac384bcef0ba5ca139930.tar.xz sora-testing-2a5e530af2d8e1ceb64ac384bcef0ba5ca139930.zip | |
fix: prevent thumbnail grid launch crash from column and data drift
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) |