Composant Advanced Place List

Le composant "Liste de lieux avancée" vous permet de définir et d'afficher une liste de lieux. Vous pouvez lister jusqu'à 20 lieux à partir du même ensemble d'identités compatibles avec le composant Place Details (ID de lieu, noms de ressources de lieu ou coordonnées de latitude/longitude).

Vous pouvez choisir d'afficher la liste horizontalement ou verticalement. L'orientation par défaut est verticale. Les mêmes informations et options de configuration que celles des fiches compactes et complètes d'informations sur les lieux sont disponibles pour chaque élément de la liste.

Utilisez les paramètres orientation, placeIdentifiers et configuration de AdvancedPlaceListView pour créer une liste. Pour en savoir plus, consultez Exemple.

Facturation

Chaque demande de liste vous est facturée, et toute modification apportée à la liste constitue un nouvel événement facturable.

Exemple

Cet exemple crée une liste basée sur des identifiants de lieux. Le paramètre configuration spécifie que chaque élément de la liste affichera l'adresse, la note et le type, ainsi que d'autres spécifications visuelles. Une action principale est créée pour permettre à un utilisateur d'ajouter ou de supprimer chaque élément de la liste de ses favoris. Les actions d'angle sont désactivées pour chaque élément de la liste.

Swift

  struct AdvancedPlaceListDemoView: View {
  private let configuration = AdvancedPlaceListConfiguration(
    content: [.address(), .rating(), .type()],
    preferTruncation: true,
    theme: PlacesMaterialTheme(),
    attributionPosition: .bottom,
    mediaSize = .medium,
    selectable: true
  )
  @State private var placeIdentifiers = [.placeID("ChIJj61dQgK6j4AR4GeTYWZsKWw")]

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

  var body: some View {
    AdvancedPlaceListView(
      orientation: .horizontal, // default is vertical
      placeIdentifiers: placeIdentifiers,
      configuration: configuration
    )
    .onLoad { results in
      for result in results {
        switch result {
          case .success(let place)
            print("place: \(place)")
          case .failure(let error)
            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)
    }
  }
}