ऐडवांस Place Search कॉम्पोनेंट

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

ऐडवांस Place Search कॉम्पोनेंट का कॉन्फ़िगरेशन

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

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

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

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

कस्टमाइज़ किए गए बटन के साथ, ऐडवांस जगह की खोज करने का व्यू
पसंद के मुताबिक बनाए गए बटन के साथ, Place Search का नतीजा

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

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

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

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

ऐडवांस Place Search कॉम्पोनेंट के उदाहरण

मुख्य ऐक्शन बटन बनाना और कॉर्नर ऐक्शन हटाना

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

Swift

struct AdvancedPlaceSearchDemoView: View {
  private let configuration = AdvancedPlaceSearchConfiguration(
    content: [.address(), .rating(), .type()],
    preferTruncation: true, // default is false
    theme: PlacesMaterialTheme(),
    attributionPosition: .bottom, // default is top
    mediaSize = .medium, // default is .small
    selectable: true // default is false
  )
  // can also do let placeSearchViewRequest = .searchNearby(...) to  configure a searchNearby request
  @State private var placeSearchViewRequest = .searchByText(
    SearchByTextRequest(
      textQuery: "Googleplex",
      placeProperties: [.all],
      locationBias: CircularCoordinateRegion(
        center: CLLocationCoordinate2D(latitude: 0, longitude: 0),
        radius: 0
      )
    )
  )

  @State private var favoritePlaces: Set<String> = []

  var body: some View {
    AdvancedPlaceSearchView(
      orientation: .horizontal, // default is vertical
      request: placeSearchViewRequest,
      configuration: configuration
    )
    .onLoad { places in
      print("places: \(places)")
    }
    .onRequestError { error in
      print("error: \(error)")
    }
    .onPlaceSelected { place, index in
      print("place: \(place)")
      print("index: \(index)")
    }
    .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
    }
    // Ensures that there are no corner actions.
    .cornerActions { _ in
      return []
    }
  }

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

        

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

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

Swift

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

  // Query for loading the place details component.
  @State var query: PlaceDetailsQuery = PlaceDetailsQuery(
    identifier: .placeID(peetsCoffeePlaceID)
  )
  let searchMediaOptions = SearchMediaOptions(query: "coffee", rankPreference: .newest)
  let searchReviewOptions = SearchReviewsOptions(query: "coffee", rankPreference: .newest)

  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)")
      }
    }
  }