Componente Advanced Place List

El componente Advanced Place List te permite definir y mostrar una lista de lugares. Puedes enumerar hasta 20 lugares del mismo conjunto de identidades que admite el componente Place Details (IDs de lugar, nombres de recursos de lugar o coordenadas de latitud y longitud).

Puedes elegir entre una visualización de lista horizontal o vertical. La orientación predeterminada es vertical. Para cada elemento de la lista, se encuentran disponibles la misma información y las mismas opciones de configuración que en las tarjetas de detalles del lugar compactas y completas.

Usa los parámetros orientation, placeIdentifiers y configuration de AdvancedPlaceListView para crear una lista. Consulta Ejemplo para obtener más detalles.

Facturación

Se te factura por cada solicitud de lista, y cualquier cambio en la lista es un evento facturable nuevo.

Ejemplo

En este ejemplo, se crea una lista basada en identificadores de lugar. El parámetro configuration especifica que cada elemento de la lista mostrará la dirección, la calificación y el tipo, junto con otras especificaciones visuales. Se crea una acción principal para permitir que el usuario agregue o quite de favoritos cada elemento de la lista. Las acciones de esquina están inhabilitadas para cada elemento de la lista.

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