जगह के बारे में ज़्यादा जानकारी देने वाला ऐडवांस कॉम्पोनेंट

जगह की जानकारी देने वाले कॉम्पोनेंट के ऐडवांस वर्शन में, जगह की जानकारी देने वाले कॉम्पोनेंट के बुनियादी वर्शन की तरह ही सुविधाएं मिलती हैं. इसकी मदद से, कॉम्पोनेंट के ऐक्शन बटन कॉन्फ़िगर किए जा सकते हैं. साथ ही, दिखाई गई समीक्षाओं और मीडिया पर खोज और फ़िल्टर करने के विकल्प लागू किए जा सकते हैं.

जगह के बारे में ज़्यादा जानकारी देने वाले कॉम्पोनेंट का ऐडवांस कॉन्फ़िगरेशन

ऐडवांस सुविधाओं का ऐक्सेस पाने के लिए, AdvancedPlaceDetailsView या AdvancedPlaceDetailsCompactView का इस्तेमाल करें.

ऐक्शन बटन कॉन्फ़िगर करना

कार्रवाई वाले बटन हटाने या उन्हें पसंद के मुताबिक बनाने के लिए, AdvancedPlaceDetailsView या AdvancedPlaceDetailsCompactView के .cornerActions और .mainActions तरीकों का इस्तेमाल करें.

विज़ुअल एट्रिब्यूशन से जुड़ी ज़रूरी शर्तें

जगह की जानकारी देने वाले कॉम्पैक्ट व्यू में, पसंद के मुताबिक बनाए गए बटन
जगह की ज़्यादा जानकारी वाले कॉम्पैक्ट व्यू में, पसंद के मुताबिक बनाया गया बटन

अहम जानकारी: आपको असली उपयोगकर्ताओं को यह साफ़ तौर पर बताना होगा कि कस्टम ऐक्शन बटन, Google के अलावा किसी तीसरे पक्ष के साथ उपयोगकर्ता की जानकारी कब शेयर करेगा. विज़ुअल एट्रिब्यूशन से जुड़ी ज़रूरी शर्तें देखें.

दाईं ओर दिए गए उदाहरण में, एक कस्टम इमेज दिखाई गई है. इससे साफ़ तौर पर पता चलता है कि उपयोगकर्ता की जानकारी "Altostrat" को भेजी जाएगी.

खोज और फ़िल्टर करने के विकल्प लागू करना

मीडिया या समीक्षाओं के लिए खोज और फ़िल्टर करने की सुविधा चालू करने के लिए, AdvancedPlaceDetailsView या AdvancedPlaceDetailsCompactView के .searchMediaOptions और .searchReviewOptions तरीकों का इस्तेमाल करें.

जगह की ज़्यादा जानकारी के उदाहरण

ऐक्शन बटन हटाना

Swift

struct DemoView: View {
  static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU"

  @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
    identifier: .placeID(peetsCoffeePlaceID)
  )

  var body: some View {
    AdvancedPlaceDetailsView(
      query: $query,
      configuration: AdvancedPlaceDetailsConfiguration(
        content: AdvancedPlaceDetailsView.allContent,
        theme: PlacesMaterialTheme()
      ),
      placeDetailsCallback: { result in
        if let place = result.place {
          print("Place: \(place.description)")
        } else {
          print("Error: \(String(describing: result.error))")
        }
      }
    )
    .mainActions{ _ in
      return []
    }
  }
}

कस्टम और पहले से तय की गई कार्रवाइयां जोड़ना

इस सैंपल में, उपयोगकर्ता के लिए किसी जगह को पसंदीदा या नापसंद करने का विकल्प जोड़ा गया है. साथ ही, इसमें पहले से तय की गई Maps में खोलें कार्रवाई भी शामिल है.

Swift

struct DemoView: View {
  static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU"

  @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
    identifier: .placeID(peetsCoffeePlaceID)
  )
  
  @State var favoritePlaces: Set<String> = []

  var body: some View {
    AdvancedPlaceDetailsView(
      query: $query,
      configuration: AdvancedPlaceDetailsConfiguration(
        content: AdvancedPlaceDetailsView.allContent,
        theme: PlacesMaterialTheme()
      ),
      placeDetailsCallback: { result in
        if let place = result.place {
          print("Place: \(place.description)")
        } else {
          print("Error: \(String(describing: result.error))")
        }
      }
    )
    .mainActions{ place in
      var actions: [MainPlaceActionElement] = []
      let placeID = place.placeID!
      if self.favoritePlaces.contains(placeID) {
        actions.append(
          .action(
            MainPlaceAction(
              image: Image(systemName: "heart.fill"),
              label: "Unfavorite"
            ) { _ in self.toggleFavorite(placeID) }
          )
        )
      } else {
        actions.append(
          .action(
            MainPlaceAction(
              image: Image(systemName: "heart"),
              label: "Favorite"
            ) { _ in self.toggleFavorite(placeID) }
          )
        )
      }
      actions.append(.actionId(.openMap(style: .primary)))
      return actions
    }
    .cornerActions { place in
      var actions: [CornerPlaceActionElement] = []
      let placeID = place.placeID!
      if self.favoritePlaces.contains(placeID) {
        actions.append(
          .action(
            CornerPlaceAction(
              image: Image(systemName: "heart.fill"),
              accessibilityLabel: "Unfavorite",
            ) { _ in self.toggleFavorite(placeID) }
          )
        )
      } else {
        actions.append(
          .action(
            CornerPlaceAction(
              image: Image(systemName: "heart"),
              accessibilityLabel: "Favorite",
            ) { _ in self.toggleFavorite(placeID) }
          )
        )
      }
      actions.append(.actionId(.openMap(style: .primary)))
      return actions
    }
  }

  func toggleFavorite(_ placeID: String) {
    if favoritePlaces.contains(placeID) {
      favoritePlaces.remove(placeID)
    } else {
      favoritePlaces.insert(placeID)
    }
  }
}

समीक्षाएं और मीडिया फ़िल्टर करना

इस कोड सैंपल में, सिर्फ़ ऐसे मीडिया और समीक्षाएं दिखती हैं जिनमें "कॉफ़ी" का ज़िक्र किया गया है.

Swift

struct DemoView: View {
  static let peetsCoffeePlaceID = "ChIJT7FdmYiAhYAROFOvrIxRJDU"

  @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
    identifier: .placeID(peetsCoffeePlaceID)
  )
  let searchMediaOptions = SearchMediaOptions(query: "coffee")
  let searchReviewsOptions = SearchReviewsOptions(query: "coffee")

  var body: some View {
    AdvancedPlaceDetailsView(
      query: $query,
      configuration: AdvancedPlaceDetailsConfiguration(
        content: [.media(), .reviews()],
        theme: PlacesMaterialTheme()
      ),
      placeDetailsCallback: { _ in }
    )
    .searchMediaOptions(searchMediaOptions) { results in
      guard let result = results.first else { return }
      switch result {
      case .success(let summary):
        print("Summary: \(summary)")
      case .failure(let error):
        print("Error: \(error)")
      }
    }
    .searchReviewsOptions(searchReviewsOptions) { results in
      guard let result = results.first else { return }
      switch result {
      case .success(let summary):
        print("Summary: \(summary)")
      case .failure(let error):
        print("Error: \(error)")
      }
    }
  }
}