building and jumps working now

using observed object instead of binding works actually
undo
saint 2024-05-23 17:21:58 -04:00
parent 3a7c83c2d9
commit ae49a5cbfe
2 changed files with 58 additions and 80 deletions

View File

@ -77,7 +77,7 @@ struct SegRow: View {
struct Pane: View {
@State var paneConnector = PaneConnector()
@ObservedObject var paneConnector: PaneConnector
@State var segs: [SegDenorm]
@State var selectedRibbon: [Ribbon]
@ -95,7 +95,7 @@ struct Pane: View {
// var handleVisibilityChanged: (String, VisibilityChange, VisibilityTracker<String>) -> Void
var body: some View {
var body: some View{
ScrollViewReader { proxy in
VisibilityTrackingScrollView(action: handleVisibilityChanged) {
LazyVStack {
@ -115,11 +115,12 @@ struct Pane: View {
goToRibbon(selectedRibbon: selectedRibbon[0],
destRibbon: selectedRibbon[0],
appDatabase: appDatabase,
paneConnector: $paneConnector,
paneConnector: paneConnector,
refresh: $refresh,
loading: true)
}
.onChange(of: paneConnector.refresh) { _ in
print("inside change")
print("on change")
Task {

View File

@ -42,50 +42,60 @@ public extension UserDefaults {
func goToRibbon(selectedRibbon: Ribbon,
destRibbon: Ribbon,
appDatabase: AppDatabase,
paneConnector: Binding<PaneConnector>,
paneConnector: PaneConnector,
refresh: Binding<Bool>,
loading: Bool)
{
Task {
var scrollOffsetToSave = paneConnector.wrappedValue.currentOffset
var scrollIdToSave = paneConnector.wrappedValue.currentId
var updatedRibbon = selectedRibbon
DispatchQueue.main.asyncAfter(deadline: .now()) {
Task {
var scrollOffsetToSave = paneConnector.currentOffset
var scrollIdToSave = paneConnector.currentId
if selectedRibbon.id != destRibbon.id! || loading {
print("switching ribbons")
var updatedRibbon = selectedRibbon
print("go to ribbon")
print("\(selectedRibbon.id) \(destRibbon.id!)")
paneConnector.wrappedValue.showOverlay = true
if selectedRibbon.id != destRibbon.id! || loading {
print("switching ribbons")
if loading {
paneConnector.wrappedValue.currentId = destRibbon.scrollId
paneConnector.showOverlay = true
if loading {
paneConnector.currentId = destRibbon.scrollId
}
paneConnector.scrollId = destRibbon.scrollId
paneConnector.scrollOffset = CGFloat(destRibbon.scrollOffset)
paneConnector.refresh.toggle()
print("toggling")
print("paneconnector: \(paneConnector.refresh)")
refresh.wrappedValue.toggle()
var updateSelectRibbon = SelectedRibbon(id: Int64(1), ribbonId: destRibbon.id!)
// print("Saving selected ribbon")
// print(updateSelectRibbon)
do {
_ = try await appDatabase.saveSelectedRibbon(&updateSelectRibbon)
} catch {
// Print("something wrong")
}
}
paneConnector.wrappedValue.scrollId = destRibbon.scrollId
paneConnector.wrappedValue.scrollOffset = CGFloat(destRibbon.scrollOffset)
paneConnector.wrappedValue.refresh.toggle()
if !loading {
print("not loading")
updatedRibbon.scrollOffset = Int(floor(scrollOffsetToSave))
updatedRibbon.scrollId = scrollIdToSave
_ = try await appDatabase.saveRibbon(&updatedRibbon)
var updateSelectRibbon = SelectedRibbon(id: Int64(1), ribbonId: destRibbon.id!)
// print("Saving selected ribbon")
// print(updateSelectRibbon)
do {
_ = try await appDatabase.saveSelectedRibbon(&updateSelectRibbon)
} catch {
// Print("something wrong")
} else {
print("loading")
}
}
if !loading {
print("not loading")
updatedRibbon.scrollOffset = Int(floor(scrollOffsetToSave))
updatedRibbon.scrollId = scrollIdToSave
_ = try await appDatabase.saveRibbon(&updatedRibbon)
} else {
print("loading")
}
}
}
extension View {
@ -98,7 +108,7 @@ extension View {
struct RibbonCrown: View {
var ribbon: Ribbon
@Binding var paneConnector: PaneConnector
@ObservedObject var paneConnector: PaneConnector
var draggedRibbon: Ribbon?
var isDragging: Bool
@ -142,7 +152,7 @@ struct RibbonCrown: View {
goToRibbon(selectedRibbon: sr[0],
destRibbon: ribbon,
appDatabase: appDatabase,
paneConnector: $paneConnector,
paneConnector: paneConnector,
refresh: $refresh,
loading: false)
}
@ -175,53 +185,18 @@ func makeVerseView(seg: SegDenorm) -> some View {
return retView
}
class PaneConnector: NSObject, NSCopying {
class PaneConnector: NSObject, ObservableObject {
// var scrollId: String
// var scrollOffset: CGFloat
// var setScrollOffset: CGFloat
var showOverlay: Bool = false
var refresh: Bool = false
@Published var refresh: Bool = false
var currentId = ""
var currentOffset = CGFloat()
var visibilityTracker: VisibilityTracker<String>?
var scrollId = ""
var scrollOffset = CGFloat()
var setScrollOffset: CGFloat?
required override init() {}
// convenience init(showOverlay _: Bool, refresh _: Bool, currentId _: String,
// currentOffset _: CGFloat, visibilityTracker _: VisibilityTracker<String>?, scrollId _: String,
// scrollOffset _: CGFloat, setScrollOffset _: CGFloat) {
// self.init()
// self.showOverlay = showOverlay
// self.refresh = refresh
// self.currentId = currentId
// self.currentOffset = currentOffset
// self.visibilityTracker = visibilityTracker
// self.scrollId = scrollId
// self.scrollOffset = scrollOffset
// self.setScrollOffset = setScrollOffset
// }
// func copy(with _: NSZone? = nil) -> Any {
// let item = PaneConnector(
// return item
// }
func copy(with _: NSZone? = nil) -> Any {
let item = type(of: self).init()
item.showOverlay = showOverlay
item.refresh = refresh
item.currentId = currentId
item.currentOffset = currentOffset
item.visibilityTracker = visibilityTracker
item.scrollId = scrollId
item.setScrollOffset = setScrollOffset
return item
}
}
struct ContentView: View {
@ -229,7 +204,7 @@ struct ContentView: View {
@State var viewState = CGSize.zero
@State var pulledOut = CGSize.zero
@State var paneConnector = PaneConnector()
@StateObject var paneConnector = PaneConnector()
@State var refresh: Bool = false
@ -270,7 +245,7 @@ struct ContentView: View {
VStack {
ForEach(ribbons) { ribbon in
RibbonCrown(ribbon: ribbon,
paneConnector: $paneConnector,
paneConnector: paneConnector,
draggedRibbon: draggedRibbon,
isDragging: isDragging,
refresh: $refresh)
@ -297,14 +272,12 @@ struct ContentView: View {
.frame(alignment: .topLeading)
VStack {
// Top pane
// Top pane
Pane(paneConnector: paneConnector,
segs: segs,
selectedRibbon: selectedRibbon,
width: geometry.size.width - 50,
height: geometry.size.height / 2 - vertSep
)
width: geometry.size.width - 50,
height: geometry.size.height / 2 - vertSep)
//////
Text("separator").foregroundColor(Color(UIColor(red: 0.76, green: 0.76, blue: 0.76, alpha: 1.00)))
@ -410,6 +383,10 @@ struct ContentView: View {
// .zIndex(2)
// }
}
.onChange(of: paneConnector.refresh) { _ in
Print("we changing changing")
}
}
}