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>
This commit is contained in:
Swift Coder
2024-11-21 16:16:09 -05:00
committed by Daniel D’Aquino
parent 8c321e479b
commit 184e566b1b

View File

@@ -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
}
}