From 0615c5099dc30b6e8dec59da0db906620ccaa254 Mon Sep 17 00:00:00 2001 From: Nicolas Frugoni Date: Fri, 26 Apr 2024 17:10:14 +0100 Subject: [PATCH] Refactor BPKImageGalleryImageGridStyle to use structs for chip and image categories (#1948) --- .../Classes/BPKImageGalleryGrid.swift | 110 ++++++++++-------- .../BPKImageGalleryImageGridStyle.swift | 51 ++++---- .../ImageGalleryGridExampleView.swift | 18 +-- 3 files changed, 93 insertions(+), 86 deletions(-) diff --git a/Backpack-SwiftUI/ImageGalleryGrid/Classes/BPKImageGalleryGrid.swift b/Backpack-SwiftUI/ImageGalleryGrid/Classes/BPKImageGalleryGrid.swift index 5eda86666..3ba7f21ee 100644 --- a/Backpack-SwiftUI/ImageGalleryGrid/Classes/BPKImageGalleryGrid.swift +++ b/Backpack-SwiftUI/ImageGalleryGrid/Classes/BPKImageGalleryGrid.swift @@ -47,55 +47,63 @@ struct ImageGalleryGrid: ViewModifier { public extension View { // swiftlint:disable function_parameter_count @ViewBuilder - func bpkImageGalleryGrid( + func bpkImageGalleryGrid( isPresented: Binding, selectedCategory: Binding, - style: BPKImageGalleryImageGridStyle, + categories: [BPKImageGalleryImageCategory], closeAccessibilityLabel: String, onImageTapped: @escaping (_ category: Int, _ image: Int) -> Void, onCloseTapped: @escaping () -> Void ) -> some View { - switch style { - case .chip(let categories): - modifier( - ImageGalleryGrid( - categories: { - ImageGalleryChipCategoryView( - categories: categories.map(\.title), - selectedCategoryIndex: selectedCategory - ) - }, - images: categories[selectedCategory.wrappedValue].images, - closeAccessibilityLabel: closeAccessibilityLabel, - onImageTapped: onImageTapped, - onCloseTapped: onCloseTapped, - selectedCategoryIndex: selectedCategory, - isPresented: isPresented - ) + modifier( + ImageGalleryGrid( + categories: { + ImageGalleryImageCategoryView( + categories: categories.map { + .init( + title: $0.title, + categoryImage: $0.categoryImage + ) + }, + selectedCategory: selectedCategory + ) + }, + images: categories[selectedCategory.wrappedValue].images, + closeAccessibilityLabel: closeAccessibilityLabel, + onImageTapped: onImageTapped, + onCloseTapped: onCloseTapped, + selectedCategoryIndex: selectedCategory, + isPresented: isPresented ) - case .image(let categories): - modifier( - ImageGalleryGrid( - categories: { - ImageGalleryImageCategoryView( - categories: categories.map { - .init( - title: $0.title, - categoryImage: $0.categoryImage - ) - }, - selectedCategory: selectedCategory - ) - }, - images: categories[selectedCategory.wrappedValue].images, - closeAccessibilityLabel: closeAccessibilityLabel, - onImageTapped: onImageTapped, - onCloseTapped: onCloseTapped, - selectedCategoryIndex: selectedCategory, - isPresented: isPresented - ) + ) + } + + // swiftlint:disable function_parameter_count + @ViewBuilder + func bpkImageGalleryGrid( + isPresented: Binding, + selectedCategory: Binding, + categories: [BPKImageGalleryChipCategory], + closeAccessibilityLabel: String, + onImageTapped: @escaping (_ category: Int, _ image: Int) -> Void, + onCloseTapped: @escaping () -> Void + ) -> some View { + modifier( + ImageGalleryGrid( + categories: { + ImageGalleryChipCategoryView( + categories: categories.map(\.title), + selectedCategoryIndex: selectedCategory + ) + }, + images: categories[selectedCategory.wrappedValue].images, + closeAccessibilityLabel: closeAccessibilityLabel, + onImageTapped: onImageTapped, + onCloseTapped: onCloseTapped, + selectedCategoryIndex: selectedCategory, + isPresented: isPresented ) - } + ) } } @@ -106,7 +114,7 @@ struct BPKImageGalleryImageGrid_Previews: PreviewProvider { .bpkImageGalleryGrid( isPresented: .constant(true), selectedCategory: .constant(0), - style: .image(testImageCategories), + categories: testImageCategories, closeAccessibilityLabel: "Close", onImageTapped: { _, _ in }, onCloseTapped: {} @@ -117,7 +125,7 @@ struct BPKImageGalleryImageGrid_Previews: PreviewProvider { .bpkImageGalleryGrid( isPresented: .constant(true), selectedCategory: .constant(0), - style: .chip(testChipCategories), + categories: testChipCategories, closeAccessibilityLabel: "Close", onImageTapped: { _, _ in }, onCloseTapped: {} @@ -125,36 +133,36 @@ struct BPKImageGalleryImageGrid_Previews: PreviewProvider { .previewDisplayName("Chips") } - private static var testChipCategories: [BPKImageGalleryImageGridStyle.ChipCategory] { + private static var testChipCategories: [BPKImageGalleryChipCategory] { [ - BPKImageGalleryImageGridStyle.ChipCategory( + .init( title: "Green but with very long title indeed (40)", images: testImages(40, color: .green) ), - BPKImageGalleryImageGridStyle.ChipCategory( + .init( title: "Blue photos (10)", images: testImages(5, color: .blue) ), - BPKImageGalleryImageGridStyle.ChipCategory( + .init( title: "Red photos (10)", images: testImages(6, color: .red) ) ] } - private static var testImageCategories: [BPKImageGalleryImageGridStyle.ImageCategory] { + private static var testImageCategories: [BPKImageGalleryImageCategory] { [ - BPKImageGalleryImageGridStyle.ImageCategory( + .init( title: "Green but with very long title indeed (40)", images: testImages(40, color: .green), categoryImage: { Color.green } ), - BPKImageGalleryImageGridStyle.ImageCategory( + .init( title: "Blue photos (10)", images: testImages(5, color: .blue), categoryImage: { Color.blue } ), - BPKImageGalleryImageGridStyle.ImageCategory( + .init( title: "Red photos (10)", images: testImages(6, color: .red), categoryImage: { Color.red } diff --git a/Backpack-SwiftUI/ImageGalleryGrid/Classes/BPKImageGalleryImageGridStyle.swift b/Backpack-SwiftUI/ImageGalleryGrid/Classes/BPKImageGalleryImageGridStyle.swift index cce556163..bc636e09b 100644 --- a/Backpack-SwiftUI/ImageGalleryGrid/Classes/BPKImageGalleryImageGridStyle.swift +++ b/Backpack-SwiftUI/ImageGalleryGrid/Classes/BPKImageGalleryImageGridStyle.swift @@ -18,36 +18,31 @@ import SwiftUI -public enum BPKImageGalleryImageGridStyle { - case chip(_ categories: [ChipCategory]) - case image(_ categories: [ImageCategory]) +public struct BPKImageGalleryChipCategory { + public let title: String + public let images: [BPKImageGalleryImage] - public struct ChipCategory { - public let title: String - public let images: [BPKImageGalleryImage] - - public init( - title: String, - images: [BPKImageGalleryImage] - ) { - self.title = title - self.images = images - } + public init( + title: String, + images: [BPKImageGalleryImage] + ) { + self.title = title + self.images = images } - - public struct ImageCategory { - public let title: String - public let images: [BPKImageGalleryImage] - public let categoryImage: () -> ImageView +} + +public struct BPKImageGalleryImageCategory { + public let title: String + public let images: [BPKImageGalleryImage] + public let categoryImage: () -> CategoryImageView - public init( - title: String, - images: [BPKImageGalleryImage], - categoryImage: @escaping () -> ImageView - ) { - self.title = title - self.images = images - self.categoryImage = categoryImage - } + public init( + title: String, + images: [BPKImageGalleryImage], + categoryImage: @escaping () -> CategoryImageView + ) { + self.title = title + self.images = images + self.categoryImage = categoryImage } } diff --git a/Example/Backpack/SwiftUI/Components/ImageGalleryGridView/ImageGalleryGridExampleView.swift b/Example/Backpack/SwiftUI/Components/ImageGalleryGridView/ImageGalleryGridExampleView.swift index 3a0a41b1c..d75173d2d 100644 --- a/Example/Backpack/SwiftUI/Components/ImageGalleryGridView/ImageGalleryGridExampleView.swift +++ b/Example/Backpack/SwiftUI/Components/ImageGalleryGridView/ImageGalleryGridExampleView.swift @@ -40,7 +40,7 @@ struct ImageGalleryGridExampleView: View { .bpkImageGalleryGrid( isPresented: $chipsPresented, selectedCategory: $selectedCategory, - style: .chip(chipCategories(imageForIndex: image(forIndex:))), + categories: chipCategories(imageForIndex: image(forIndex:)), closeAccessibilityLabel: "Close Gallery", onImageTapped: { category, image in onImageTapped(category: category, image: image) @@ -50,7 +50,10 @@ struct ImageGalleryGridExampleView: View { .bpkImageGalleryGrid( isPresented: $imagesPresented, selectedCategory: $selectedCategory, - style: .image(imageCategories(imageForIndex: image(forIndex:))), + categories: imageCategories( + imageForIndex: image(forIndex:), + categoryImageForIndex: image(forIndex:) + ), closeAccessibilityLabel: "Close Gallery", onImageTapped: { category, image in onImageTapped(category: category, image: image) @@ -72,9 +75,10 @@ struct ImageGalleryGridExampleView: View { ][categoryIndex] } - private func imageCategories( - imageForIndex: @escaping (Int) -> Image - ) -> [BPKImageGalleryImageGridStyle.ImageCategory] { + private func imageCategories( + imageForIndex: @escaping (Int) -> Image, + categoryImageForIndex: @escaping (Int) -> Category + ) -> [BPKImageGalleryImageCategory] { (0...3) .map { categoryIndex in .init( @@ -88,7 +92,7 @@ struct ImageGalleryGridExampleView: View { ) }, categoryImage: { - imageForIndex(categoryIndex) + categoryImageForIndex(categoryIndex) } ) } @@ -96,7 +100,7 @@ struct ImageGalleryGridExampleView: View { private func chipCategories( imageForIndex: @escaping (Int) -> Image - ) -> [BPKImageGalleryImageGridStyle.ChipCategory] { + ) -> [BPKImageGalleryChipCategory] { (0...3).map { categoryIndex in .init( title: categoryName(categoryIndex),