@@ -34,27 +34,31 @@ struct ParksMapScreen: View {
3434 parksContent
3535 . overlay { noParksFoundView }
3636 }
37- . loadingOverlay ( if: parksManager. isLoading)
37+ . loadingOverlay ( if: parksManager. isLoading || viewModel . newParkState . isProcessingNewPark )
3838 . background ( Color . swBackground)
3939 . onFirstAppear {
4040 viewModel. userCityDidChange ( defaults. mainUserInfo)
4141 }
4242 . onChange ( of: defaults. mainUserCityId) { _ in
4343 viewModel. userCityDidChange ( defaults. mainUserInfo)
4444 }
45+ . onChange ( of: sheetItem) { [ oldItem = sheetItem] newValue in
46+ if case . createNewPark = oldItem, newValue == nil {
47+ viewModel. finishCreatingNewPark ( )
48+ }
49+ }
50+ . onChange ( of: viewModel. newParkState) { newState in
51+ if case let . ready( model) = newState {
52+ sheetItem = . createNewPark( model)
53+ }
54+ }
4555 . task {
4656 do {
4757 try await parksManager. loadParksIfNeeded ( )
4858 } catch {
4959 SWAlert . shared. presentDefaultUIKit ( error)
5060 }
5161 }
52- . onAppear {
53- viewModel. setLocationTracking ( true )
54- }
55- . onDisappear {
56- viewModel. setLocationTracking ( false )
57- }
5862 . sheet ( item: $sheetItem) { makeContentView ( for: $0) }
5963 . toolbar {
6064 ToolbarItemGroup ( placement: . topBarLeading) {
@@ -98,7 +102,7 @@ struct ParksMapScreen: View {
98102}
99103
100104private extension ParksMapScreen {
101- enum SheetItem : Identifiable {
105+ enum SheetItem : Identifiable , Equatable {
102106 var id : String {
103107 switch self {
104108 case . filters: " filters "
@@ -224,9 +228,7 @@ private extension ParksMapScreen {
224228 @ViewBuilder
225229 var rightBarButton : some View {
226230 if defaults. isAuthorized {
227- Button {
228- sheetItem = . createNewPark( viewModel. newParkMapModel)
229- } label: {
231+ Button ( action: viewModel. requestLocationForNewPark) {
230232 Icons . Regular. plus. view
231233 . symbolVariant ( . circle)
232234 }
@@ -250,6 +252,7 @@ private extension ParksMapScreen {
250252 }
251253 )
252254 }
255+ . environment ( \. updateGeocodingCache, viewModel. updateGeocodingCache)
253256 case let . searchCity( storedCities) :
254257 NavigationView {
255258 ItemListScreen (
0 commit comments