refactor DataStore
This commit is contained in:
parent
97a429ac9c
commit
7f1df180bb
|
@ -21,27 +21,27 @@ class DataItem {
|
|||
}
|
||||
|
||||
class DataStore: ObservableObject {
|
||||
var items = CurrentValueSubject<[Int: DataItem], Never>([:])
|
||||
@Published var items = [Int: DataItem]()
|
||||
|
||||
func setView(_ view: AnyView, tabViewDelegate: PagerTabViewDelegate? = nil, at index: Int) {
|
||||
if let item = items.value[index] {
|
||||
if let item = items[index] {
|
||||
item.view = view
|
||||
item.tabViewDelegate = tabViewDelegate
|
||||
} else {
|
||||
items.value[index] = DataItem(view: view, tabViewDelegate: tabViewDelegate)
|
||||
items[index] = DataItem(view: view, tabViewDelegate: tabViewDelegate)
|
||||
}
|
||||
}
|
||||
|
||||
func setAppear(callback: @escaping () -> Void, at index: Int) {
|
||||
if let item = items.value[index] {
|
||||
if let item = items[index] {
|
||||
item.appearCallback = callback
|
||||
} else {
|
||||
items.value[index] = DataItem(view: nil, callback: callback)
|
||||
items[index] = DataItem(view: nil, callback: callback)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func remove(at index: Int) {
|
||||
items.value[index] = nil
|
||||
items[index] = nil
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ struct PagerTabItemModifier<NavTabView: View> : ViewModifier {
|
|||
at: index)
|
||||
}
|
||||
}.onDisappear {
|
||||
dataStore.items.value[index]?.tabViewDelegate?.setState(state: .normal)
|
||||
dataStore.items[index]?.tabViewDelegate?.setState(state: .normal)
|
||||
dataStore.remove(at: index)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,14 +18,14 @@ struct NavBarItem: View {
|
|||
}
|
||||
|
||||
var body: some View {
|
||||
if id < dataStore.items.value.keys.count {
|
||||
if id < dataStore.items.keys.count {
|
||||
Button(action: {
|
||||
self.currentIndex = id
|
||||
}, label: {
|
||||
dataStore.items.value[id]?.view
|
||||
dataStore.items[id]?.view
|
||||
}).buttonStyle(PlainButtonStyle())
|
||||
.onLongPressGesture(minimumDuration: 0, maximumDistance: .infinity) { pressing in
|
||||
dataStore.items.value[id]?.tabViewDelegate?.setState(state: pressing ? .highlighted : .selected)
|
||||
dataStore.items[id]?.tabViewDelegate?.setState(state: pressing ? .highlighted : .selected)
|
||||
} perform: {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ public struct PagerTabViewStyle {
|
|||
var indicatorBarHeight: CGFloat
|
||||
var indicatorBarColor: Color
|
||||
|
||||
public init(tabItemSpacing: CGFloat = 0, tabItemHeight: CGFloat = 100, indicatorBarHeight: CGFloat = 2, indicatorBarColor: Color = .blue){
|
||||
public init(tabItemSpacing: CGFloat = 0, tabItemHeight: CGFloat = 50, indicatorBarHeight: CGFloat = 2, indicatorBarColor: Color = .blue){
|
||||
self.tabItemSpacing = tabItemSpacing
|
||||
self.tabItemHeight = tabItemHeight
|
||||
self.indicatorBarHeight = indicatorBarHeight
|
||||
|
@ -52,8 +52,7 @@ public struct PagerTabStripView<Content> : View where Content: View {
|
|||
if let selection = selection {
|
||||
useBinding = true
|
||||
self._selectionBiding = selection
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
useBinding = false
|
||||
self._selectionBiding = .constant(0)
|
||||
}
|
||||
|
@ -134,13 +133,13 @@ private struct WrapperPagerTabStripView<Content> : View where Content: View {
|
|||
})
|
||||
.onChange(of: self.selection) { [selection] newIndex in
|
||||
self.currentOffset = self.offsetFor(index: newIndex)
|
||||
if let callback = dataStore.items.value[newIndex]?.appearCallback {
|
||||
if let callback = dataStore.items[newIndex]?.appearCallback {
|
||||
callback()
|
||||
}
|
||||
if let tabViewDelegate = dataStore.items.value[selection]?.tabViewDelegate {
|
||||
if let tabViewDelegate = dataStore.items[selection]?.tabViewDelegate {
|
||||
tabViewDelegate.setState(state: .normal)
|
||||
}
|
||||
if let tabViewDelegate = dataStore.items.value[newIndex]?.tabViewDelegate, newIndex != selection {
|
||||
if let tabViewDelegate = dataStore.items[newIndex]?.tabViewDelegate, newIndex != selection {
|
||||
tabViewDelegate.setState(state: .selected)
|
||||
}
|
||||
}
|
||||
|
@ -159,9 +158,9 @@ private struct WrapperPagerTabStripView<Content> : View where Content: View {
|
|||
}
|
||||
.modifier(NavBarModifier(itemCount: $itemCount, selection: $selection))
|
||||
.environmentObject(self.dataStore)
|
||||
.onReceive(self.dataStore.items.throttle(for: 0.05, scheduler: DispatchQueue.main, latest: true)) { items in
|
||||
.onReceive(self.dataStore.$items.throttle(for: 0.05, scheduler: DispatchQueue.main, latest: true)) { items in
|
||||
self.itemCount = items.keys.count
|
||||
if let tabViewDelegate = dataStore.items.value[selection]?.tabViewDelegate {
|
||||
if let tabViewDelegate = dataStore.items[selection]?.tabViewDelegate {
|
||||
tabViewDelegate.setState(state: .selected)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue