Skip to main content

Pull this view out into a standalone file

ID
2b64a0e
date
2023-06-08 09:53:23+00:00
author
Alex Chan <alex@alexwlchan.net>
parent
ec40633
message
Pull this view out into a standalone file
changed files
3 files, 50 additions, 27 deletions

Changed files

BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj (24688) → BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj (25136)

diff --git a/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj b/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
index 80f28a6..fa11309 100644
--- a/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
+++ b/BlinkReviewer/BlinkReviewer.xcodeproj/project.pbxproj
@@ -19,6 +19,7 @@
 		94D751202A31B53E005859E7 /* AlbumInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D7511F2A31B53E005859E7 /* AlbumInfo.swift */; };
 		94D751222A31BD8E005859E7 /* PhotoReviewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D751212A31BD8E005859E7 /* PhotoReviewer.swift */; };
 		94D7512B2A31D6AC005859E7 /* AssetHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D7512A2A31D6AC005859E7 /* AssetHelpers.swift */; };
+		94D751302A31DC4A005859E7 /* ThumbnailList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D7512F2A31DC4A005859E7 /* ThumbnailList.swift */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -55,6 +56,7 @@
 		94D7511F2A31B53E005859E7 /* AlbumInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumInfo.swift; sourceTree = "<group>"; };
 		94D751212A31BD8E005859E7 /* PhotoReviewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoReviewer.swift; sourceTree = "<group>"; };
 		94D7512A2A31D6AC005859E7 /* AssetHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetHelpers.swift; sourceTree = "<group>"; };
+		94D7512F2A31DC4A005859E7 /* ThumbnailList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThumbnailList.swift; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -148,6 +150,7 @@
 				94D7511D2A31B243005859E7 /* PreviewImage.swift */,
 				94D7511F2A31B53E005859E7 /* AlbumInfo.swift */,
 				94D751212A31BD8E005859E7 /* PhotoReviewer.swift */,
+				94D7512F2A31DC4A005859E7 /* ThumbnailList.swift */,
 			);
 			path = Views;
 			sourceTree = "<group>";
@@ -296,6 +299,7 @@
 				94D7511E2A31B243005859E7 /* PreviewImage.swift in Sources */,
 				94D750F02A31A796005859E7 /* BlinkReviewerApp.swift in Sources */,
 				94D751202A31B53E005859E7 /* AlbumInfo.swift in Sources */,
+				94D751302A31DC4A005859E7 /* ThumbnailList.swift in Sources */,
 				94D751222A31BD8E005859E7 /* PhotoReviewer.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;

BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (2625) → BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift (1242)

diff --git a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
index c054860..8aab99f 100644
--- a/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
+++ b/BlinkReviewer/BlinkReviewer/Views/PhotoReviewer.swift
@@ -15,33 +15,9 @@ struct PhotoReviewer: View {
     var body: some View {
         VStack {
             Divider()
-            ScrollViewReader { proxy in
-                ScrollView(.horizontal) {
-                    LazyHStack(spacing: 5) {
-                        // TODO: placeholder images for start/end
-                        // TODO: Allow tapping thumbnails to jump to that
-                        
-                        // Implementation note: we use the localIdentifier rather than the
-                        // array index as the id here, because the app gets way slower if
-                        // you use the array index -- it tries to regenerate a bunch of
-                        // the thumbnails every time you change position.
-                        ForEach(Array(assets.enumerated()), id: \.element.localIdentifier) { index, asset in
-                            ThumbnailImage(
-                                thumbnail: asset.getThumbnail(),
-                                isSelected: assets[selectedAssetIndex].localIdentifier == asset.localIdentifier
-                            ).onTapGesture {
-                                selectedAssetIndex = index
-                            }
-                        }
-                    }.padding()
-                }.frame(height: 70)
-                    .onChange(of: selectedAssetIndex, perform: { newIndex in
-                        withAnimation {
-                            proxy.scrollTo(assets[newIndex].localIdentifier, anchor: .center)
-                        }
-                        
-                    })
-            }
+            
+            ThumbnailList(assets: assets, selectedAssetIndex: $selectedAssetIndex)
+            
             Divider()
             
             PreviewImage(asset: assets[selectedAssetIndex])

BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift (0) → BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift (1620)

diff --git a/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift b/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift
new file mode 100644
index 0000000..c509111
--- /dev/null
+++ b/BlinkReviewer/BlinkReviewer/Views/ThumbnailList.swift
@@ -0,0 +1,43 @@
+//
+//  ThumbnailList.swift
+//  BlinkReviewer
+//
+//  Created by Alex Chan on 08/06/2023.
+//
+
+import SwiftUI
+import Photos
+
+struct ThumbnailList: View {
+    var assets: [PHAsset]
+    @Binding var selectedAssetIndex: Int
+    
+    var body: some View {
+        ScrollViewReader { proxy in
+            ScrollView(.horizontal) {
+                LazyHStack(spacing: 5) {
+                    // TODO: placeholder images for start/end
+                    // TODO: Allow tapping thumbnails to jump to that
+                    
+                    // Implementation note: we use the localIdentifier rather than the
+                    // array index as the id here, because the app gets way slower if
+                    // you use the array index -- it tries to regenerate a bunch of
+                    // the thumbnails every time you change position.
+                    ForEach(Array(assets.enumerated()), id: \.element.localIdentifier) { index, asset in
+                        ThumbnailImage(
+                            thumbnail: asset.getThumbnail(),
+                            isSelected: assets[selectedAssetIndex].localIdentifier == asset.localIdentifier
+                        ).onTapGesture {
+                            selectedAssetIndex = index
+                        }
+                    }
+                }.padding()
+            }.frame(height: 70)
+                .onChange(of: selectedAssetIndex, perform: { newIndex in
+                    withAnimation {
+                        proxy.scrollTo(assets[newIndex].localIdentifier, anchor: .center)
+                    }
+                })
+        }
+    }
+}