کامپوننت جستجوی پیشرفته مکان

نسخه پیشرفته کامپوننت Place Search همان ویژگی‌های Place Search Essentials را ارائه می‌دهد. همچنین به شما امکان می‌دهد دکمه‌های عملیاتی کامپوننت را پیکربندی کنید و گزینه‌های جستجو و فیلتر را برای نظرات و رسانه‌هایی که ظاهر می‌شوند اعمال کنید.

پیکربندی جستجوی پیشرفته مکان

برای دسترسی به ویژگی‌های پیشرفته، AdvancedPlaceSearchView استفاده کنید.

پیکربندی دکمه‌های عملیاتی

از متدهای .cornerActions ‎ و .mainActions ‎ از AdvancedPlaceSearchView برای حذف یا سفارشی‌سازی دکمه‌های عملیاتی استفاده کنید.

الزامات انتساب بصری

نمای جستجوی پیشرفته مکان با دکمه‌های سفارشی
قرار دادن نتیجه جستجو با دکمه سفارشی

مهم: شما باید برای کاربران روشن کنید که چه زمانی یک دکمه اقدام سفارشی، اطلاعات کاربر را با شخص ثالثی غیر از گوگل به اشتراک می‌گذارد. به الزامات انتساب بصری مراجعه کنید.

این مثال یک تصویر سفارشی را نشان می‌دهد که به وضوح نشان می‌دهد اطلاعات کاربر به «Altostrat» ارسال خواهد شد.

اعمال گزینه‌های جستجو و فیلتر

از متدهای .searchMediaOptions ‎ و .searchReviewOptions ‎ از AdvancedPlaceSearchView برای فعال کردن جستجو و فیلتر کردن رسانه‌ها یا نظرات استفاده کنید.

مثال‌های جستجوی پیشرفته مکان

یک دکمه اکشن اصلی ایجاد کنید و اکشن‌های گوشه را حذف کنید

این نمونه کد یک دکمه‌ی اکشن اصلی برای افزودن یا حذف یک مکان به لیست علاقه‌مندی‌ها ایجاد می‌کند. همچنین تضمین می‌کند که هیچ اکشن گوشه‌ای پیکربندی نشده باشد.

سویفت

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

        

فیلتر کردن نظرات و رسانه‌ها

این نمونه کد نتایج جستجو را فیلتر می‌کند تا فقط رسانه‌ها و نقدهایی را نشان دهد که به «قهوه» اشاره دارند.

سویفت

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