struct ContentView: View {
   @State private var appData = ApplicationData.shared
   @State private var selectedItem: MapSelection<MKMapItem>?
   @State private var showCallout = false

   var body: some View {
      Map(position: $appData.cameraPos, selection: $selectedItem) {
         ForEach(appData.listLocations, id: \.self) { place in
            Marker(item: place)
               .tag(MapSelection(place))
         }
      }
      .onMapCameraChange(frequency: .onEnd) { context in
         appData.cameraPos = .region(context.region)
         Task {
            await appData.findPlaces()
         }
      }
      .onChange(of: selectedItem, { old, value in
         if value != nil {
            showCallout = true
         }
      })
      .mapItemDetailSheet(isPresented: $showCallout, item: selectedItem?.value, displaysMap: true)
   }
}