2023-02-27 14:27:15 -08:00
|
|
|
//
|
|
|
|
// ContentView.swift
|
|
|
|
// gloss
|
|
|
|
//
|
|
|
|
// Created by Saint on 10/23/22.
|
|
|
|
//
|
|
|
|
|
|
|
|
import SwiftUI
|
|
|
|
import GRDB
|
|
|
|
import GRDBQuery
|
|
|
|
import Introspect
|
|
|
|
import os
|
2023-03-11 20:31:48 -08:00
|
|
|
|
2023-02-27 14:27:15 -08:00
|
|
|
let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "network")
|
|
|
|
|
|
|
|
// var curBook = "John"
|
|
|
|
|
2023-02-28 14:03:58 -08:00
|
|
|
extension UserDefaults {
|
|
|
|
public func optionalInt(forKey defaultName: String) -> Int? {
|
|
|
|
let defaults = self
|
|
|
|
if let value = defaults.value(forKey: defaultName) {
|
|
|
|
return value as? Int
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
public func optionalBool(forKey defaultName: String) -> Bool? {
|
|
|
|
let defaults = self
|
|
|
|
if let value = defaults.value(forKey: defaultName) {
|
|
|
|
return value as? Bool
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-02-27 14:27:15 -08:00
|
|
|
struct BlueButtonStyle: ButtonStyle {
|
|
|
|
func makeBody(configuration: Self.Configuration) -> some View {
|
|
|
|
configuration.label
|
|
|
|
.font(.headline)
|
|
|
|
.frame(width: 160)
|
|
|
|
.contentShape(Rectangle())
|
|
|
|
.foregroundColor(configuration.isPressed ? Color.white.opacity(0.5) : Color.black)
|
|
|
|
.background(configuration.isPressed ? Color.purple.opacity(0.5) : Color.purple)
|
|
|
|
.listRowBackground(configuration.isPressed ? Color.blue.opacity(0.5) : Color.black)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
struct SwitchButton : View {
|
2023-03-01 10:47:34 -08:00
|
|
|
var ribbon: Ribbon
|
|
|
|
// var selectedRibbon: SelectedRibbon
|
|
|
|
|
2023-03-11 20:31:48 -08:00
|
|
|
// @Binding var book : String
|
2023-04-21 17:06:30 -07:00
|
|
|
// @Binding var scrollDelegate : ScrollViewHandler
|
2023-03-01 10:47:34 -08:00
|
|
|
@Binding var scrollView : UIScrollView?
|
2023-03-11 20:31:48 -08:00
|
|
|
@Binding var scrollUpdate : Bool
|
2023-02-28 14:03:58 -08:00
|
|
|
|
|
|
|
@Environment(\.appDatabase) private var appDatabase
|
2023-02-27 14:27:15 -08:00
|
|
|
|
2023-03-01 10:47:34 -08:00
|
|
|
@Query(SelectedRibbonRequest()) private var sr: [Ribbon]
|
2023-02-28 14:03:58 -08:00
|
|
|
|
|
|
|
@State var saveOffset = CGFloat()
|
2023-02-27 14:27:15 -08:00
|
|
|
var body: some View {
|
2023-02-28 14:03:58 -08:00
|
|
|
// ForEach(sr) { selectedRibbon in
|
2023-03-01 13:19:07 -08:00
|
|
|
Button(String(sr[0].id!) + " " + String(ribbon.id!) + " " + String(ribbon.scrollOffset),
|
2023-03-01 10:47:34 -08:00
|
|
|
// Button("meow",
|
|
|
|
action: {
|
|
|
|
Task {
|
|
|
|
var selectedRibbon = sr[0]
|
|
|
|
Print("SELECTED RIBBON", selectedRibbon)
|
|
|
|
|
2023-04-21 17:06:30 -07:00
|
|
|
// var saveScrollOffset = scrollDelegate.scrollOffset
|
2023-03-01 13:19:07 -08:00
|
|
|
|
|
|
|
var editedRibbon = selectedRibbon
|
2023-03-01 10:47:34 -08:00
|
|
|
|
2023-03-01 13:19:07 -08:00
|
|
|
Print("ribbon offset saved")
|
2023-03-01 10:47:34 -08:00
|
|
|
|
2023-03-11 20:31:48 -08:00
|
|
|
|
|
|
|
scrollUpdate = true
|
2023-03-01 10:47:34 -08:00
|
|
|
if (selectedRibbon.id != ribbon.id!) {
|
|
|
|
Print("switching")
|
2023-03-11 20:31:48 -08:00
|
|
|
// book = ribbon.book
|
2023-04-21 17:06:30 -07:00
|
|
|
// Print("applying offset", CGFloat(ribbon.scrollOffset))
|
2023-03-11 20:31:48 -08:00
|
|
|
// scrollOffset = CGFloat(ribbon.scrollOffset)
|
|
|
|
// scrollDelegate.scrollOffset = CGFloat(ribbon.scrollOffset)
|
2023-04-21 17:06:30 -07:00
|
|
|
// scrollDelegate.scrollOffset = CGFloat(ribbon.scrollOffset)
|
2023-03-11 20:31:48 -08:00
|
|
|
// scrollView!.contentOffset.y = CGFloat(ribbon.scrollOffset)
|
2023-03-01 10:47:34 -08:00
|
|
|
// scrollOffset = CGFloat(1500)
|
|
|
|
var updateSelectRibbon = SelectedRibbon(id: Int64(1), ribbonId: ribbon.id!)
|
|
|
|
Print("Savingg")
|
|
|
|
Print(updateSelectRibbon)
|
|
|
|
do {
|
|
|
|
_ = try await appDatabase.saveSelectedRibbon(&updateSelectRibbon)
|
|
|
|
} catch {
|
|
|
|
Print("something wrong")
|
2023-02-28 14:03:58 -08:00
|
|
|
}
|
2023-03-01 10:47:34 -08:00
|
|
|
}
|
2023-02-28 14:03:58 -08:00
|
|
|
|
2023-04-21 17:06:30 -07:00
|
|
|
// editedRibbon.scrollOffset = Int(saveScrollOffset)
|
2023-03-11 20:31:48 -08:00
|
|
|
|
|
|
|
_ = try await appDatabase.saveRibbon(&editedRibbon)
|
|
|
|
_ = Print("editedRibbon", editedRibbon)
|
|
|
|
_ = Print("ribbon", ribbon)
|
|
|
|
|
|
|
|
|
2023-03-01 10:47:34 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
)
|
|
|
|
.buttonStyle(BlueButtonStyle())
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
}
|
2023-02-28 14:03:58 -08:00
|
|
|
|
|
|
|
|
2023-04-21 17:06:30 -07:00
|
|
|
// class ScrollViewHandler: NSObject {
|
|
|
|
// public var scrollOffset = CGFloat(10)
|
|
|
|
// }
|
2023-02-28 14:03:58 -08:00
|
|
|
|
2023-04-21 17:06:30 -07:00
|
|
|
// extension ScrollViewHandler: UIScrollViewDelegate {
|
|
|
|
// func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
|
|
|
// scrollOffset = CGFloat(scrollView.contentOffset.y)
|
|
|
|
// // print("delegate", scrollView.contentOffset.y)
|
|
|
|
// // print("delegate prop", self.scrollOffset)
|
|
|
|
// }
|
|
|
|
// }
|
2023-02-27 14:27:15 -08:00
|
|
|
|
2023-03-01 10:47:34 -08:00
|
|
|
|
2023-03-11 20:31:48 -08:00
|
|
|
class Verse: NSObject, Codable {
|
|
|
|
var body: String
|
|
|
|
var verse: Int
|
|
|
|
}
|
|
|
|
|
|
|
|
func makeVerseView(seg: SegDenorm) -> some View {
|
|
|
|
var retView = Text("")
|
|
|
|
var segSplit = seg.body.components(separatedBy: ";;")
|
|
|
|
let decoder = JSONDecoder()
|
|
|
|
segSplit.enumerated().forEach({ (index, item) in
|
|
|
|
let verse = try! decoder.decode(Verse.self, from: item.data(using: .utf8)!)
|
|
|
|
|
|
|
|
retView = retView + Text(String(verse.verse))
|
|
|
|
.font(Font.custom("AveriaSerifLibre-Regular", size: 20))
|
|
|
|
.baselineOffset(6.0)
|
|
|
|
.foregroundColor(Color.white)
|
|
|
|
|
|
|
|
retView = retView + Text(verse.body)
|
|
|
|
.foregroundColor(Color.white)
|
|
|
|
.font(Font.custom("AveriaSerifLibre-Regular", size: 30))
|
|
|
|
})
|
|
|
|
return retView
|
|
|
|
}
|
2023-03-01 10:47:34 -08:00
|
|
|
|
2023-03-11 20:31:48 -08:00
|
|
|
private struct SegRow: View {
|
|
|
|
var seg: SegDenorm
|
2023-03-01 10:47:34 -08:00
|
|
|
|
2023-03-11 20:31:48 -08:00
|
|
|
var body: some View {
|
|
|
|
// makeVerseView(seg: seg)
|
|
|
|
|
|
|
|
|
|
|
|
var retView = Text("")
|
|
|
|
var segSplit = seg.body.components(separatedBy: ";;")
|
|
|
|
let decoder = JSONDecoder()
|
|
|
|
// Text(segSplit[0].body)
|
|
|
|
// .id(seg.id)
|
|
|
|
// VStack {
|
|
|
|
// ForEach(segSplit.indices) { i in
|
|
|
|
segSplit.enumerated().forEach({ (index, item) in
|
|
|
|
let verse = try! decoder.decode(Verse.self, from: item.data(using: .utf8)!)
|
|
|
|
|
|
|
|
retView = retView + Text(String(verse.verse))
|
|
|
|
// Text(seg.body)
|
|
|
|
// .contentShape(Rectangle())
|
|
|
|
.font(Font.custom("AveriaSerifLibre-Regular", size: 20))
|
|
|
|
.baselineOffset(6.0)
|
|
|
|
.foregroundColor(Color.white)
|
|
|
|
|
|
|
|
retView = retView + Text(verse.body)
|
|
|
|
// .frame(maxWidth: .infinity, alignment: .leading)
|
|
|
|
// .contentShape(Rectangle())
|
|
|
|
.foregroundColor(Color.white)
|
|
|
|
.font(Font.custom("AveriaSerifLibre-Regular", size: 30))
|
|
|
|
// .listRowBackground(Color(red: 0.2, green: 0.8, blue: 0.2))
|
|
|
|
// .listRowInsets(EdgeInsets())
|
|
|
|
// .padding(EdgeInsets(top: 10, leading: 20, bottom: 40, trailing: 20))
|
|
|
|
// .listRowSeparator(.hidden)
|
|
|
|
// .id(String(seg.id) + "body" + String(i))
|
|
|
|
// .id(seg.id)
|
|
|
|
//.onTapGesture {
|
|
|
|
// selectedLine = seg.id
|
|
|
|
// //Print(selectedLine)
|
|
|
|
//}
|
|
|
|
|
|
|
|
// .listRowBackground(Color(red: 0.2, green: 0.8, blue: 0.2))
|
|
|
|
// .listRowInsets(EdgeInsets())
|
|
|
|
// .padding(EdgeInsets(top: 10, leading: 20, bottom: 40, trailing: 20))
|
|
|
|
// .listRowSeparator(.hidden)
|
|
|
|
// .id(String(seg.id) + "verse" + String(i))
|
|
|
|
// .id(seg.id)
|
|
|
|
//.onTapGesture {
|
|
|
|
// selectedLine = seg.id
|
|
|
|
// //Print(selectedLine)
|
|
|
|
//}
|
|
|
|
})
|
|
|
|
// }
|
|
|
|
return retView
|
|
|
|
}
|
|
|
|
}
|
2023-03-01 10:47:34 -08:00
|
|
|
|
2023-02-27 14:27:15 -08:00
|
|
|
struct ContentView: View {
|
|
|
|
|
|
|
|
@State var viewState = CGSize.zero
|
|
|
|
@State var pulledOut = CGSize.zero
|
|
|
|
@State var taskTitle : String = "FIRST DOGGG"
|
|
|
|
@State var curBook : String = "Matthew"
|
|
|
|
@State var selectedLine : Int64?
|
2023-02-28 14:03:58 -08:00
|
|
|
|
2023-03-01 10:47:34 -08:00
|
|
|
@State var thisScrollView : UIScrollView?
|
2023-03-11 20:31:48 -08:00
|
|
|
@State var scrollUpdate = false
|
2023-03-01 10:47:34 -08:00
|
|
|
@State var initLoad = false
|
|
|
|
|
2023-04-21 17:06:30 -07:00
|
|
|
@State var currentId : String?
|
|
|
|
@State var currentOffset = CGFloat()
|
|
|
|
|
|
|
|
// set this to scroll to area
|
|
|
|
@State var scrollId : String?
|
|
|
|
@State var scrollOffset: CGFloat?
|
|
|
|
|
|
|
|
|
2023-03-11 20:31:48 -08:00
|
|
|
@Query(SegDenormRequest(book: "bible.mark")) private var segs: [SegDenorm]
|
|
|
|
|
2023-04-21 17:06:30 -07:00
|
|
|
// @State var scrollDelegate: ScrollViewHandler
|
2023-03-11 20:31:48 -08:00
|
|
|
// @State var scrollDelegate = ScrollViewHandler()
|
2023-03-01 10:47:34 -08:00
|
|
|
|
2023-02-28 14:03:58 -08:00
|
|
|
// @State var selectedRibbonId = Int64(UserDefaults.standard.optionalInt(forKey: "selectedRibbonId") ?? 1)
|
|
|
|
|
2023-03-01 10:47:34 -08:00
|
|
|
// ribbon
|
|
|
|
@Query(SelectedRibbonRequest()) private var selectedRibbon: [Ribbon]
|
2023-02-28 14:03:58 -08:00
|
|
|
|
|
|
|
@State var endedDrag = true
|
|
|
|
|
|
|
|
@State var readOffset = CGPoint()
|
2023-03-11 20:31:48 -08:00
|
|
|
|
|
|
|
@State var refresh: Bool = false
|
2023-02-27 14:27:15 -08:00
|
|
|
|
|
|
|
|
|
|
|
@Query(RibbonRequest()) private var ribbons: [Ribbon]
|
|
|
|
|
2023-02-28 14:03:58 -08:00
|
|
|
// @Query(RibbonRequest(id: Int64(UserDefaults.standard.optionalInt(forKey: "lastRibbonId") ?? 1))) private var selectedRibbon: [Ribbon]
|
2023-02-27 14:27:15 -08:00
|
|
|
|
|
|
|
init() {
|
|
|
|
UITableView.appearance().backgroundColor = UIColor(Color(red: 0.2, green: 0.2, blue: 0.2))
|
2023-02-28 14:03:58 -08:00
|
|
|
// _selectedRibbon = Query(RibbonRequest(id: Int64(UserDefaults.standard.optionalInt(forKey: "lastRibbonId") ?? 1)))
|
2023-04-21 17:06:30 -07:00
|
|
|
// self._scrollDelegate = State(initialValue: ScrollViewHandler())
|
2023-02-27 14:27:15 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
var body: some View {
|
2023-03-11 20:31:48 -08:00
|
|
|
Print("rendering")
|
|
|
|
|
2023-02-27 14:27:15 -08:00
|
|
|
GeometryReader { geometry in
|
|
|
|
ZStack{
|
|
|
|
VStack{
|
2023-03-11 20:31:48 -08:00
|
|
|
|
|
|
|
Text("MRK")
|
|
|
|
.font(Font.custom("AveriaSerifLibre-Regular", size: 20))
|
|
|
|
.foregroundColor(Color.white)
|
|
|
|
.background(Color(red: 0.3, green: 0.3, blue: 0.3))
|
|
|
|
.overlay( MyCustomShape().frame(width: 120, height: 100).foregroundColor(.white))
|
|
|
|
.frame(width: 120, height: 120)
|
|
|
|
|
|
|
|
|
|
|
|
Text("MTW")
|
|
|
|
.font(Font.custom("AveriaSerifLibre-Regular", size: 20))
|
|
|
|
.foregroundColor(Color.white)
|
|
|
|
.overlay( MyCustomShape().frame(width: 120, height: 100))
|
|
|
|
.frame(width: 120, height: 120)
|
|
|
|
|
|
|
|
|
2023-02-28 14:03:58 -08:00
|
|
|
ForEach(ribbons) { ribbon in
|
2023-03-01 10:47:34 -08:00
|
|
|
//ForEach(selectedRibbon) { sr in
|
2023-02-28 14:03:58 -08:00
|
|
|
SwitchButton(ribbon: ribbon,
|
2023-04-21 17:06:30 -07:00
|
|
|
// scrollDelegate: $scrollDelegate,
|
2023-03-11 20:31:48 -08:00
|
|
|
scrollView:$thisScrollView,
|
|
|
|
scrollUpdate:$scrollUpdate
|
2023-02-28 14:03:58 -08:00
|
|
|
)
|
|
|
|
.buttonStyle(BlueButtonStyle())
|
2023-03-01 10:47:34 -08:00
|
|
|
//}
|
2023-02-27 14:27:15 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
.frame(width: geometry.size.width, height: geometry.size.height, alignment: .topLeading)
|
2023-03-11 20:31:48 -08:00
|
|
|
.background(Color(red: 0.1, green: 0.1, blue: 0.1))
|
|
|
|
|
|
|
|
ScrollViewReader { proxy in
|
|
|
|
VisibilityTrackingScrollView(action: handleVisibilityChanged) {
|
|
|
|
// ScrollView {
|
|
|
|
|
2023-02-27 14:27:15 -08:00
|
|
|
LazyVStack {
|
2023-03-11 20:31:48 -08:00
|
|
|
Text(refresh ? "Selected" : "not Selected")
|
|
|
|
Button("Jump to #8") {
|
2023-04-21 17:06:30 -07:00
|
|
|
scrollId = "20"
|
2023-03-11 20:31:48 -08:00
|
|
|
|
|
|
|
}
|
|
|
|
ForEach(segs) { seg in
|
|
|
|
SegRow(seg: seg)
|
|
|
|
.id("\(seg.id)")
|
|
|
|
|
2023-02-27 14:27:15 -08:00
|
|
|
.padding(EdgeInsets(top: 10, leading: 20, bottom: 40, trailing: 20))
|
2023-03-11 20:31:48 -08:00
|
|
|
.trackVisibility(id: "\(seg.id)")
|
|
|
|
|
|
|
|
// .onChange(of: geometry.frame(in: .named("scrollView"))) { imageRect in
|
|
|
|
// Print(imageRect)
|
|
|
|
// Print(outerProxy)
|
|
|
|
// if isInView(innerRect: imageRect, isIn: outerProxy) {
|
|
|
|
// visibleIndex.insert(item)
|
|
|
|
// } else {
|
|
|
|
// visibleIndex.remove(item)
|
|
|
|
// }
|
2023-02-27 14:27:15 -08:00
|
|
|
// }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.background(Color(red: 0.2, green: 0.2, blue: 0.2))
|
|
|
|
}
|
2023-04-21 17:06:30 -07:00
|
|
|
.onChange(of: scrollId) { target in
|
|
|
|
if let target = target {
|
|
|
|
proxy.scrollTo(scrollId! , anchor: .top)
|
|
|
|
//scrollId = nil
|
|
|
|
|
|
|
|
DispatchQueue.main.async {
|
|
|
|
scrollOffset = -299
|
|
|
|
refresh.toggle()
|
|
|
|
}
|
|
|
|
}
|
2023-03-01 10:47:34 -08:00
|
|
|
|
2023-04-21 17:06:30 -07:00
|
|
|
|
2023-03-11 20:31:48 -08:00
|
|
|
|
2023-04-21 17:06:30 -07:00
|
|
|
}
|
|
|
|
.introspectScrollView { scrollView in
|
2023-03-11 20:31:48 -08:00
|
|
|
// Print("introspect")
|
2023-04-21 17:06:30 -07:00
|
|
|
// scrollView.delegate = scrollDelegate
|
|
|
|
// Print("Scroll delegate offset", scrollDelegate.scrollOffset)
|
2023-03-11 20:31:48 -08:00
|
|
|
|
2023-04-21 17:06:30 -07:00
|
|
|
if (scrollOffset != nil) {
|
|
|
|
Print("Setting scroll offset")
|
|
|
|
scrollView.contentOffset.y = scrollView.contentOffset.y + scrollOffset!
|
|
|
|
DispatchQueue.main.async { scrollOffset = nil }
|
2023-03-11 20:31:48 -08:00
|
|
|
}
|
|
|
|
|
2023-04-21 17:06:30 -07:00
|
|
|
// if (thisScrollView == nil) {
|
|
|
|
// Print("init scroll")
|
|
|
|
// thisScrollView = scrollView
|
|
|
|
// scrollView.contentOffset.y = CGFloat(selectedRibbon[0].scrollOffset)
|
|
|
|
// }
|
2023-03-11 20:31:48 -08:00
|
|
|
}
|
2023-02-27 14:27:15 -08:00
|
|
|
.listStyle(PlainListStyle())
|
2023-03-11 20:31:48 -08:00
|
|
|
}
|
2023-02-27 14:27:15 -08:00
|
|
|
.background(Color(red: 0.2, green: 0.2, blue: 0.2))
|
|
|
|
.frame(width: geometry.size.width - 50)
|
|
|
|
.offset(x:30 , y:0)
|
|
|
|
.offset(x: pulledOut.width)
|
|
|
|
.offset(x: viewState.width, y: viewState.height)
|
|
|
|
.gesture(
|
|
|
|
DragGesture()
|
|
|
|
.onChanged { gesture in
|
2023-02-28 14:03:58 -08:00
|
|
|
|
|
|
|
if (endedDrag) {
|
|
|
|
endedDrag = false
|
|
|
|
scrollOffset = readOffset.y - 20
|
|
|
|
_ = Print("meow")
|
|
|
|
}
|
2023-02-27 14:27:15 -08:00
|
|
|
// logger.error("hello222")
|
|
|
|
// NSLog("hellooo")
|
|
|
|
//Print(viewState.width)
|
2023-03-11 20:31:48 -08:00
|
|
|
if (abs(gesture.translation.width) > 20) {
|
|
|
|
viewState.width = gesture.translation.width
|
|
|
|
}
|
2023-02-27 14:27:15 -08:00
|
|
|
//offset.y = gesture.translation.width
|
|
|
|
// logger.log("hello")
|
|
|
|
}
|
|
|
|
.onEnded { _ in
|
2023-02-28 14:03:58 -08:00
|
|
|
endedDrag = true
|
2023-02-27 14:27:15 -08:00
|
|
|
var pulledOutWidth = CGFloat(0)
|
|
|
|
if (viewState.width < 0) {
|
|
|
|
pulledOutWidth = CGFloat(0)
|
|
|
|
}
|
|
|
|
else if abs(viewState.width + pulledOut.width ) > 30 {
|
|
|
|
pulledOutWidth = CGFloat(200)
|
|
|
|
}
|
|
|
|
|
|
|
|
withAnimation(.spring(response: 0.2)) {
|
|
|
|
pulledOut.width = pulledOutWidth
|
|
|
|
viewState = .zero
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-03-11 20:31:48 -08:00
|
|
|
func handleVisibilityChanged(_ id: String, change: VisibilityChange, tracker: VisibilityTracker<String>) {
|
2023-04-21 17:06:30 -07:00
|
|
|
|
|
|
|
// @Environment(\.appDatabase) var appDatabase
|
2023-03-11 20:31:48 -08:00
|
|
|
switch change {
|
|
|
|
case .shown: print("\(id) shown")
|
|
|
|
case .hidden: print("\(id) hidden")
|
2023-02-27 14:27:15 -08:00
|
|
|
}
|
2023-03-11 20:31:48 -08:00
|
|
|
print(tracker.visibleViews)
|
2023-04-21 17:06:30 -07:00
|
|
|
// if (currentId != nil) {
|
|
|
|
// currentOffset = tracker.visibleViews[currentId!]!
|
|
|
|
// }
|
|
|
|
|
|
|
|
let currentId = Array(tracker.visibleViews.keys)[0]
|
|
|
|
if (currentId != nil) {
|
|
|
|
|
|
|
|
// Access Shared Defaults Object
|
|
|
|
let userDefaults = UserDefaults.standard
|
|
|
|
|
|
|
|
// Write/Set Value
|
|
|
|
Print(currentId)
|
|
|
|
Print(tracker.visibleViews[currentId]!)
|
|
|
|
userDefaults.set(currentId, forKey: "currentId")
|
|
|
|
userDefaults.set(tracker.visibleViews[currentId]!, forKey: "currentOffset")
|
|
|
|
// userDefaults.set(tracker.visibleViews[currentId!]!, forKey: "currentOffset")
|
|
|
|
// var updateScrollState = ScrollState(id: Int64(1),
|
|
|
|
// scrollId: currentId!,
|
|
|
|
// scrollOffset: Int64(tracker.visibleViews[currentId!]!))
|
|
|
|
// Print("Savingg")
|
|
|
|
// Print(updateScrollState)
|
|
|
|
// Task(priority: .default) {
|
|
|
|
|
|
|
|
// do {
|
|
|
|
// _ = try await appDatabase.saveScrollState(&updateScrollState)
|
|
|
|
|
|
|
|
// } catch {
|
|
|
|
// Print("something wrong")
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
}
|
2023-02-27 14:27:15 -08:00
|
|
|
}
|
2023-03-11 20:31:48 -08:00
|
|
|
|
|
|
|
|
2023-02-27 14:27:15 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
private let itemFormatter: DateFormatter = {
|
|
|
|
let formatter = DateFormatter()
|
|
|
|
formatter.dateStyle = .short
|
|
|
|
formatter.timeStyle = .medium
|
|
|
|
return formatter
|
|
|
|
}()
|
|
|
|
|
|
|
|
struct ContentView_Previews: PreviewProvider {
|
|
|
|
static var previews: some View {
|
|
|
|
ContentView()
|
|
|
|
|
|
|
|
ContentView().environment(\.appDatabase, .random())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
extension View {
|
|
|
|
func Print(_ vars: Any...) -> some View {
|
|
|
|
for v in vars { print(v) }
|
|
|
|
return EmptyView()
|
|
|
|
}
|
|
|
|
}
|