From a6d8f9f4df5d5c2d2f141633adbd871f84158953 Mon Sep 17 00:00:00 2001 From: Seyed Mojtaba Hosseini Zeidabadi Date: Tue, 3 Sep 2024 11:21:31 +0330 Subject: [PATCH 1/2] feat: make the data conform to RandomAccessCollection --- Sources/SwiftUIFlowLayout/SwiftUIFlowLayout.swift | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Sources/SwiftUIFlowLayout/SwiftUIFlowLayout.swift b/Sources/SwiftUIFlowLayout/SwiftUIFlowLayout.swift index f562449..93c11fc 100644 --- a/Sources/SwiftUIFlowLayout/SwiftUIFlowLayout.swift +++ b/Sources/SwiftUIFlowLayout/SwiftUIFlowLayout.swift @@ -2,20 +2,20 @@ import SwiftUI public let flowLayoutDefaultItemSpacing: CGFloat = 4 -public struct FlowLayout: View { +public struct FlowLayout: View where Data.Element: Hashable { let mode: Mode @Binding var binding: RefreshBinding - let items: [Data] + let items: Data let itemSpacing: CGFloat - @ViewBuilder let viewMapping: (Data) -> ItemView + @ViewBuilder let viewMapping: (Data.Element) -> ItemView @State private var totalHeight: CGFloat public init(mode: Mode, binding: Binding, - items: [Data], + items: Data, itemSpacing: CGFloat = flowLayoutDefaultItemSpacing, - @ViewBuilder viewMapping: @escaping (Data) -> ItemView) { + @ViewBuilder viewMapping: @escaping (Data.Element) -> ItemView) { self.mode = mode _binding = binding self.items = items @@ -100,9 +100,9 @@ private struct HeightReaderView: View { public extension FlowLayout where RefreshBinding == Never? { init(mode: Mode, - items: [Data], + items: Data, itemSpacing: CGFloat = flowLayoutDefaultItemSpacing, - @ViewBuilder viewMapping: @escaping (Data) -> ItemView) { + @ViewBuilder viewMapping: @escaping (Data.Element) -> ItemView) { self.init(mode: mode, binding: .constant(nil), items: items, From bc2fdd3bf22b048108a578bf217f52c9f8d36569 Mon Sep 17 00:00:00 2001 From: Seyed Mojtaba Hosseini Zeidabadi Date: Tue, 3 Sep 2024 11:21:54 +0330 Subject: [PATCH 2/2] test: add a simple preview showing off accepting a range of numbers --- Sources/SwiftUIFlowLayout/SwiftUIFlowLayout.swift | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Sources/SwiftUIFlowLayout/SwiftUIFlowLayout.swift b/Sources/SwiftUIFlowLayout/SwiftUIFlowLayout.swift index 93c11fc..268c2e4 100644 --- a/Sources/SwiftUIFlowLayout/SwiftUIFlowLayout.swift +++ b/Sources/SwiftUIFlowLayout/SwiftUIFlowLayout.swift @@ -165,3 +165,18 @@ struct TestWithDeletion_Previews: PreviewProvider { TestWithDeletion() } } + +struct TestWithRange_Previews: PreviewProvider { + static var previews: some View { + FlowLayout(mode: .scrollable, + items: 1..<100) { + Text("\($0)") + .font(.system(size: 12)) + .foregroundColor(.black) + .padding() + .background(RoundedRectangle(cornerRadius: 4) + .border(Color.gray) + .foregroundColor(Color.gray)) + }.padding() + } +}