<div class="mb-20 d-flex align-items-start justify-content-between gap-10 tablet-flex-column">
<div class="flex-grow-1 w-100">
{% for id, partner in partners %}
<div class="partner-card" id="partner-{{ partner.id }}">
<div style="flex: 0 0 33%;">
<a href="{{ partner.isPractitioner ? path('default_praticien_fiche', {"slug": partner.slug}) : path('default_checkout_identification', {"partner": partner.id}) }}">
<div class="d-flex align-items-center gap-5">
<div class="avatar"><img src="{{ partner.avatar ? documents_avatar_directory~partner.avatar : asset('assets/media/avatars/blank.png') }}" /></div>
<div>
<div class="text-primary fw-bold">{{ partner.lastName }}, {{ partner.firstName }}</div>
<div>{{ partner.specialitiesString }}</div>
</div>
</div>
</a>
{% if partner.allowTeleconsultation %}
<div class="mt-5 d-flex gap-3 mobile-display-none">
<div>
<svg xmlns="http://www.w3.org/2000/svg" width="22.076" height="14.776" viewBox="0 0 22.076 14.776">
<g id="Icon_feather-video" data-name="Icon feather-video" transform="translate(-0.5 -6.5)">
<path id="Tracé_192" data-name="Tracé 192" d="M30.388,10.5,24,15.063l6.388,4.563Z" transform="translate(-8.812 -1.175)" fill="none" stroke="#186d7c" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
<path id="Tracé_193" data-name="Tracé 193" d="M3.325,7.5H13.363a1.825,1.825,0,0,1,1.825,1.825v9.126a1.825,1.825,0,0,1-1.825,1.825H3.325A1.825,1.825,0,0,1,1.5,18.451V9.325A1.825,1.825,0,0,1,3.325,7.5Z" fill="none" stroke="#186d7c" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/>
</g>
</svg>
</div>
<div>
Téléconsultation
</div>
</div>
{% endif %}
{% if partner.address %}
<div class="mt-5">
{{ partner.address }}<br/>
{% if partner.address2 %}{{ partner.address2 }}<br/>{% endif %}
{{ partner.zipCode }} {{ partner.city }}
</div>
{% endif %}
{% if partner.secondaryLocations and partner.secondaryLocations|length > 0 %}
{% set nbLocations = 0 %}
{% for secondaryLocation in partner.secondaryLocations %}
{% if secondaryLocation.active %}
{% set nbLocations = nbLocations + 1 %}
{% endif %}
{% endfor %}
{% if nbLocations > 0 %}
<div class="text-primary fst-italic fs-7">Et {{ nbLocations }} autre{% if nbLocations > 1 %}s{% endif%} lieu{% if nbLocations > 1 %}x{% endif%}</div>
{% endif %}
{% endif %}
{% if partner.isPractitioner and partner.lowestServiceDelivery %}
<div class="mt-5 text-primary fw-bold mobile-display-none">
À partir de {{ partner.lowestServiceDelivery.price }}€/h
</div>
{% endif %}
</div>
<div class="flex-grow-1 w-100">
<div class="d-flex flex-column justify-content-between h-100">
<div class="d-flex flex-wrap gap-4 mb-5">
{% for need in partner.need %}
<div class="partner-tag">{{ need.label }}</div>
{% endfor %}
</div>
<div class="d-flex align-items-center justify-content-between">
{% set noteValue = partner.noteValue %}
{% if noteValue %}
<div class="mt-2 d-flex gap-1">
<svg xmlns="http://www.w3.org/2000/svg" width="18.709" height="17.841" viewBox="0 0 18.709 17.841">
<defs>
<linearGradient id="grad_star_1_{{ id }}">
<stop offset="50%" stop-color="{{ noteValue and noteValue >= 0.5 ? '#ff6700' : '#E1E1E1' }}"/>
<stop offset="50%" stop-color="{{ noteValue and noteValue >= 1 ? '#ff6700' : '#E1E1E1' }}"/>
</linearGradient>
</defs>
<path id="Icon_feather-star" data-name="Icon feather-star" d="M11.854,3,14.59,8.543l6.118.894-4.427,4.312,1.045,6.092-5.472-2.878L6.382,19.841l1.045-6.092L3,9.437l6.118-.894Z" transform="translate(-2.5 -2.5)" fill="url(#grad_star_1_{{ id }})" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="18.709" height="17.841" viewBox="0 0 18.709 17.841">
<defs>
<linearGradient id="grad_star_2_{{ id }}">
<stop offset="50%" stop-color="{{ noteValue and noteValue >= 1.5 ? '#ff6700' : '#E1E1E1' }}"/>
<stop offset="50%" stop-color="{{ noteValue and noteValue >= 2 ? '#ff6700' : '#E1E1E1' }}"/>
</linearGradient>
</defs>
<path id="Icon_feather-star" data-name="Icon feather-star" d="M11.854,3,14.59,8.543l6.118.894-4.427,4.312,1.045,6.092-5.472-2.878L6.382,19.841l1.045-6.092L3,9.437l6.118-.894Z" transform="translate(-2.5 -2.5)" fill="url(#grad_star_2_{{ id }})" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="18.709" height="17.841" viewBox="0 0 18.709 17.841">
<defs>
<linearGradient id="grad_star_3_{{ id }}">
<stop offset="50%" stop-color="{{ noteValue and noteValue >= 2.5 ? '#ff6700' : '#E1E1E1' }}"/>
<stop offset="50%" stop-color="{{ noteValue and noteValue >= 3 ? '#ff6700' : '#E1E1E1' }}"/>
</linearGradient>
</defs>
<path id="Icon_feather-star" data-name="Icon feather-star" d="M11.854,3,14.59,8.543l6.118.894-4.427,4.312,1.045,6.092-5.472-2.878L6.382,19.841l1.045-6.092L3,9.437l6.118-.894Z" transform="translate(-2.5 -2.5)" fill="url(#grad_star_3_{{ id }})" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="18.709" height="17.841" viewBox="0 0 18.709 17.841">
<defs>
<linearGradient id="grad_star_4_{{ id }}">
<stop offset="50%" stop-color="{{ noteValue and noteValue >= 3.5 ? '#ff6700' : '#E1E1E1' }}"/>
<stop offset="50%" stop-color="{{ noteValue and noteValue >= 4 ? '#ff6700' : '#E1E1E1' }}"/>
</linearGradient>
</defs>
<path id="Icon_feather-star" data-name="Icon feather-star" d="M11.854,3,14.59,8.543l6.118.894-4.427,4.312,1.045,6.092-5.472-2.878L6.382,19.841l1.045-6.092L3,9.437l6.118-.894Z" transform="translate(-2.5 -2.5)" fill="url(#grad_star_4_{{ id }})" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="18.709" height="17.841" viewBox="0 0 18.709 17.841">
<defs>
<linearGradient id="grad_star_5_{{ id }}">
<stop offset="50%" stop-color="{{ noteValue and noteValue >= 4.5 ? '#ff6700' : '#E1E1E1' }}"/>
<stop offset="50%" stop-color="{{ noteValue and noteValue >= 5 ? '#ff6700' : '#E1E1E1' }}"/>
</linearGradient>
</defs>
<path id="Icon_feather-star" data-name="Icon feather-star" d="M11.854,3,14.59,8.543l6.118.894-4.427,4.312,1.045,6.092-5.472-2.878L6.382,19.841l1.045-6.092L3,9.437l6.118-.894Z" transform="translate(-2.5 -2.5)" fill="url(#grad_star_5_{{ id }})" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/>
</svg>
<div class="ms-3">{{ partner.notes.count }} avis</div>
</div>
{% else %}
<div></div>
{% endif%}
<div>
<a href="{{ type is not defined or type != "coach" ? path('default_praticien_fiche', {"slug": partner.slug}) : path('default_checkout_identification', {"partner": partner.id, "coaching": 1}) }}">
<button>Choisir ce {{ typeStr }}</button>
</a>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
<div style="flex: 0 0 30%;" class="w-100">
<div class="position-sticky top-50">
<div class="border-radius10" id="zv-map" style="height: 300px;width: 100%;"></div>
<div class="mt-10">
<label for="rangeLocalisation" class="form-label">Distance de recherche: <b><span id="rangeLocalisationValue">{{ rad ? rad : 5 }}</span> km</b></label>
<input type="range" class="form-range" id="rangeLocalisation" min="5" max="50" value="{{ rad ? rad : 5 }}" />
</div>
</div>
</div>
</div>
<script>
var map = L.map('zv-map').setView({lon: 1.9, lat: 46.98}, 5);
{% if partners and partners|length > 0 %}
var bounds = [];
{% for partner in partners %}
{% if partner.addressCoordY and partner.addressCoordX %}
bounds.push([{{ partner.addressCoordY }}, {{ partner.addressCoordX }}]);
{% endif %}
{% endfor %}
map.fitBounds(bounds, {padding: [50, 50]});
{% endif %}
// add the OpenStreetMap tiles
L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
maxZoom: 19,
attribution: 'OpenStreetMap'
}).addTo(map);
// show the scale bar on the lower left corner
L.control.scale({imperial: true, metric: true}).addTo(map);
// Icons
var LeafIcon = L.Icon.extend({
options: {
iconSize: [19, 47],
}
});
var markers = new L.MarkerClusterGroup({
iconCreateFunction: function (cluster) {
return L.divIcon({
html: cluster.getChildCount(),
className: 'cluster',
iconSize: null
});
}
});
{% for partner in partners %}
{% if partner.addressCoordY and partner.addressCoordX %}
var markerTmp = L.marker([{{ partner.addressCoordY }}, {{ partner.addressCoordX }}]).on('click', function(e) {
document.getElementById('partner-{{ partner.id }}').scrollIntoView();
});
markers.addLayer(markerTmp);
{% endif %}
{% endfor %}
map.addLayer(markers);
</script>
<script>
(function() {
document.getElementById('rangeLocalisation').addEventListener("input", function(e) {
document.getElementById('rangeLocalisationValue').innerText = e.target.value;
});
document.getElementById('rangeLocalisation').addEventListener("change", function(e) {
location.href = URL_add_parameter(location.href, 'rad', e.target.value);
});
function URL_add_parameter(url, param, value){
var hash = {};
var parser = document.createElement('a');
parser.href = url;
var parameters = parser.search.split(/\?|&/);
for(var i=0; i < parameters.length; i++) {
if(!parameters[i])
continue;
var ary = parameters[i].split('=');
hash[ary[0]] = ary[1];
}
hash[param] = value;
var list = [];
Object.keys(hash).forEach(function (key) {
list.push(key + '=' + hash[key]);
});
parser.search = '?' + list.join('&');
return parser.href;
}
})();
</script>