summaryrefslogtreecommitdiff
path: root/Sora/Views/Shared/ThumbnailGridView.swift
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-02-18 15:55:25 -0800
committerFuwn <[email protected]>2026-02-18 16:15:30 -0800
commit2a5e530af2d8e1ceb64ac384bcef0ba5ca139930 (patch)
tree7270312261633096e9a9ab0a36c2041e0f7ec1a3 /Sora/Views/Shared/ThumbnailGridView.swift
parentchore: finalise performance optimisation batch and metrics (diff)
downloadsora-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.swift21
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)