commit 184e566b1b07faf534fdc158b3b347fd62eb232e
parent 8c321e479b20d28f924cdedbfccce561bebbd2e3
Author: Swift Coder <scoder1747@gmail.com>
Date: Thu, 21 Nov 2024 16:16:09 -0500
Fix Page control indicator for not reflecting current index of Image being previewed
Changelog-Fixed: Fix Page control indicator
Signed-off-by: Swift Coder <scoder1747@gmail.com>
Diffstat:
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/damus/Views/Images/FullScreenCarouselView.swift b/damus/Views/Images/FullScreenCarouselView.swift
@@ -16,7 +16,7 @@ struct FullScreenCarouselView<Content: View>: View {
@State var showMenu = true
@State private var imageDict: [URL: UIImage] = [:]
let settings: UserSettingsStore
- @Binding var selectedIndex: Int
+ @ObservedObject var carouselSelection: CarouselSelection
let content: (() -> Content)?
init(video_coordinator: DamusVideoCoordinator, urls: [MediaUrl], showMenu: Bool = true, settings: UserSettingsStore, selectedIndex: Binding<Int>, @ViewBuilder content: @escaping () -> Content) {
@@ -24,7 +24,7 @@ struct FullScreenCarouselView<Content: View>: View {
self.urls = urls
self._showMenu = State(initialValue: showMenu)
self.settings = settings
- _selectedIndex = selectedIndex
+ self._carouselSelection = ObservedObject(initialValue: CarouselSelection(index: selectedIndex.wrappedValue))
self.content = content
}
@@ -33,12 +33,12 @@ struct FullScreenCarouselView<Content: View>: View {
self.urls = urls
self._showMenu = State(initialValue: showMenu)
self.settings = settings
- _selectedIndex = selectedIndex
+ self._carouselSelection = ObservedObject(initialValue: CarouselSelection(index: selectedIndex.wrappedValue))
self.content = nil
}
var background: some ShapeStyle {
- if case .video = urls[safe: selectedIndex] {
+ if case .video = urls[safe: carouselSelection.index] {
return AnyShapeStyle(Color.black)
}
else {
@@ -55,7 +55,7 @@ struct FullScreenCarouselView<Content: View>: View {
Color(self.background_color)
.ignoresSafeArea()
- TabView(selection: $selectedIndex) {
+ TabView(selection: $carouselSelection.index) {
ForEach(urls.indices, id: \.self) { index in
VStack {
if case .video = urls[safe: index] {
@@ -108,7 +108,7 @@ struct FullScreenCarouselView<Content: View>: View {
Spacer()
- if let url = urls[safe: selectedIndex],
+ if let url = urls[safe: carouselSelection.index],
let image = imageDict[url.url] {
ShareLink(item: Image(uiImage: image),
@@ -127,7 +127,7 @@ struct FullScreenCarouselView<Content: View>: View {
VStack {
if urls.count > 1 {
- PageControlView(currentPage: $selectedIndex, numberOfPages: urls.count)
+ PageControlView(currentPage: $carouselSelection.index, numberOfPages: urls.count)
.frame(maxWidth: 0, maxHeight: 0)
.padding(.top, 5)
}
@@ -189,3 +189,11 @@ struct FullScreenCarouselView_Previews: PreviewProvider {
}
}
}
+
+/// Class to define object for monitoring selectedIndex and updating mutlples views
+final class CarouselSelection: ObservableObject {
+ @Published var index: Int
+ init(index: Int) {
+ self.index = index
+ }
+}