@@ -26,27 +26,23 @@ enum BottleStage {
2626}
2727
2828struct BottleView : View {
29- @Binding var bottle : Bottle
29+ @ObservedObject var bottle : Bottle
3030 @State private var path = NavigationPath ( )
3131 @State var programLoading : Bool = false
32- @State var pins : [ PinnedProgram ] = [ ]
33- // We don't actually care about the value
34- // This just provides a way to trigger a refresh
35- @State var loadStartMenu : Bool = false
3632 @State var showWinetricksSheet : Bool = false
3733
3834 private let gridLayout = [ GridItem ( . adaptive( minimum: 100 , maximum: . infinity) ) ]
3935
4036 var body : some View {
4137 NavigationStack ( path: $path) {
4238 ScrollView {
43- if pins. count > 0 {
39+ let pinnedPrograms = bottle. programs. pinned
40+ if pinnedPrograms. count > 0 {
4441 LazyVGrid ( columns: gridLayout, alignment: . center) {
45- ForEach ( pins, id: \. url) { pin in
46- PinsView ( bottle: bottle,
47- pin: pin,
48- loadStartMenu: $loadStartMenu,
49- path: $path)
42+ ForEach ( bottle. settings. pins, id: \. url) { pin in
43+ PinsView (
44+ bottle: bottle, pin: pin, path: $path
45+ )
5046 }
5147 }
5248 . padding ( )
@@ -72,12 +68,6 @@ struct BottleView: View {
7268 }
7369 }
7470 . formStyle ( . grouped)
75- . onAppear {
76- updateStartMenu ( )
77- }
78- . onChange ( of: loadStartMenu) {
79- updateStartMenu ( )
80- }
8171 }
8272 . bottomBar {
8373 HStack {
@@ -130,19 +120,27 @@ struct BottleView: View {
130120 }
131121 . padding ( )
132122 }
123+ . onAppear {
124+ updateStartMenu ( )
125+ }
133126 . disabled ( !bottle. isActive)
134127 . navigationTitle ( bottle. settings. name)
135128 . sheet ( isPresented: $showWinetricksSheet) {
136129 WinetricksView ( bottle: bottle)
137130 }
131+ . onChange ( of: bottle. settings, { oldValue, newValue in
132+ guard oldValue != newValue else { return }
133+ // Trigger a reload
134+ BottleVM . shared. bottles = BottleVM . shared. bottles
135+ } )
138136 . navigationDestination ( for: BottleStage . self) { stage in
139137 switch stage {
140138 case . config:
141- ConfigView ( bottle: $ bottle)
139+ ConfigView ( bottle: bottle)
142140 case . programs:
143- ProgramsView ( bottle : bottle ,
144- reloadStartMenu : $loadStartMenu ,
145- path : $path )
141+ ProgramsView (
142+ bottle : bottle , path : $path
143+ )
146144 }
147145 }
148146 . navigationDestination ( for: Program . self) { program in
@@ -151,7 +149,7 @@ struct BottleView: View {
151149 }
152150 }
153151
154- func updateStartMenu( ) {
152+ private func updateStartMenu( ) {
155153 bottle. programs = bottle. updateInstalledPrograms ( )
156154 let startMenuPrograms = bottle. getStartMenuPrograms ( )
157155 for startMenuProgram in startMenuPrograms {
@@ -166,8 +164,6 @@ struct BottleView: View {
166164 }
167165 }
168166 }
169-
170- pins = bottle. settings. pins
171167 }
172168}
173169
0 commit comments