ऐडवांस Place Search कॉम्पोनेंट
Place Search कॉम्पोनेंट के ऐडवांस वर्शन में, Place Search Essentials वाली सभी सुविधाएं मिलती हैं. इससे कॉम्पोनेंट के ऐक्शन बटन भी कॉन्फ़िगर किए जा सकते हैं. साथ ही, दिखने वाली समीक्षाओं और मीडिया पर खोज और फ़िल्टर करने के विकल्प भी लागू किए जा सकते हैं.
ऐडवांस Place Search कॉम्पोनेंट का कॉन्फ़िगरेशन
ऐडवांस सुविधाओं का ऐक्सेस पाने के लिए,AdvancedPlaceSearchView का इस्तेमाल करें.
ऐक्शन बटन कॉन्फ़िगर करना
ऐक्शन बटन हटाने या उन्हें पसंद के मुताबिक बनाने के लिए, AdvancedPlaceSearchView के .cornerActions और .mainActions तरीकों का इस्तेमाल करें.
विज़ुअल एट्रिब्यूशन से जुड़ी ज़रूरी शर्तें
अहम जानकारी: आपको उपयोगकर्ताओं को यह साफ़ तौर पर बताना होगा कि कोई कस्टम ऐक्शन बटन, 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)") } } }