Un question, un doute, besoin d’aide ? Réservez ici votre rendez-vous téléphonique et un expert vous assistera dans votre projet !
#lfc-rdv-4vhzaf{max-width:620px;border:1px solid #e5e5e5;border-radius:12px;padding:18px;background:#fff}
#lfc-rdv-4vhzaf .lfc-rdv-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
#lfc-rdv-4vhzaf label{display:block;font-weight:700;margin:0 0 5px}
#lfc-rdv-4vhzaf input,#lfc-rdv-4vhzaf select,#lfc-rdv-4vhzaf textarea{width:100%;box-sizing:border-box;padding:9px;border:1px solid #d9d9d9;border-radius:6px;background:#fff}
#lfc-rdv-4vhzaf textarea{min-height:90px}
#lfc-rdv-4vhzaf .lfc-rdv-field{margin:0 0 12px}
#lfc-rdv-4vhzaf .lfc-rdv-submit{padding:11px 18px;border:0;border-radius:6px;cursor:pointer;font-weight:700}
#lfc-rdv-4vhzaf .lfc-rdv-notice{margin-top:12px;font-weight:700}
#lfc-rdv-4vhzaf .lfc-rdv-slot-status{display:block;margin-top:6px;color:#555;font-size:13px;line-height:1.35}
#lfc-rdv-4vhzaf.is-loading .lfc-rdv-slot-status:before{content:'';display:inline-block;width:12px;height:12px;margin-right:7px;border:2px solid #d1d5db;border-top-color:#111827;border-radius:50%;vertical-align:-2px;animation:lfc-rdv-spin .8s linear infinite}
#lfc-rdv-4vhzaf .lfc-rdv-submit:disabled{opacity:.6;cursor:wait}
@keyframes lfc-rdv-spin{to{transform:rotate(360deg)}}
@media(max-width:640px){#lfc-rdv-4vhzaf .lfc-rdv-grid{grid-template-columns:1fr}}
(function(){
const root=document.getElementById('lfc-rdv-4vhzaf'); if(!root) return;
const form=root.querySelector('.lfc-rdv-form'), type=form.querySelector('[name="type_id"]'), date=form.querySelector('[name="date"]'), slot=form.querySelector('[name="slot"]'), notice=root.querySelector('.lfc-rdv-notice'), slotStatus=root.querySelector('.lfc-rdv-slot-status'), submit=form.querySelector('.lfc-rdv-submit');
const ajaxUrl='https://staging.cuisina9.fr/wp-admin/admin-ajax.php';
const strings={"title":"Prendre rendez-vous","type":"Type de rendez-vous","date":"Date","slot":"Cr\u00e9neau","choose_type":"Choisissez un type","choose_date":"Choisissez une date","loading":"Recherche des cr\u00e9neaux\u2026","no_slot":"Aucun cr\u00e9neau disponible pour cette date.","first_name":"Pr\u00e9nom","last_name":"Nom","email":"Email","phone":"T\u00e9l\u00e9phone","message":"Message optionnel","book":"Confirmer le rendez-vous","booking":"R\u00e9servation en cours\u2026","success":"Votre rendez-vous est confirm\u00e9. Vous allez recevoir un email de confirmation.","error":"Impossible de r\u00e9server ce cr\u00e9neau. Merci d\u2019en choisir un autre.","missing":"Merci de compl\u00e9ter les champs obligatoires.","email_subject_client":"Confirmation de votre rendez-vous \u2014 {site_name}","email_client_intro":"Bonjour {customer_name},","email_client_confirmed":"Votre rendez-vous est confirm\u00e9. Vous trouverez l\u2019invitation calendrier en pi\u00e8ce jointe.","email_client_phone_notice":"Vous serez appel\u00e9 sur le num\u00e9ro que vous avez saisi lors de la prise de rendez-vous.","email_client_details":"{type_label}\r\n{date_label}","email_client_footer":"\u00c0 bient\u00f4t, {site_name}","email_agent_subject":"Nouveau rendez-vous \u2014 {type_label} \u2014 {customer_name}","email_agent_title":"Nouveau rendez-vous confirm\u00e9","email_type_label":"Type","email_date_label":"Date","email_operator_label":"Op\u00e9rateur","email_client_label":"Client","email_phone_label":"T\u00e9l\u00e9phone","email_message_label":"Message"};
let slotsRequestId=0, slotsController=null;
function setNotice(text){notice.textContent=text||'';}
function setSlotStatus(text,loading){ if(slotStatus) slotStatus.textContent=text||''; root.classList.toggle('is-loading',!!loading); slot.setAttribute('aria-busy',loading?'true':'false'); if(submit) submit.disabled=!!loading; }
function post(data,signal){return fetch(ajaxUrl,{method:'POST',credentials:'same-origin',headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'},body:new URLSearchParams(data).toString(),signal:signal}).then(r=>r.json());}
function resetSlots(text){slot.innerHTML=''+(text||strings.choose_date)+'';slot.disabled=true;}
function loadSlots(){
const reqId=++slotsRequestId;
if(slotsController && slotsController.abort) slotsController.abort();
slotsController=window.AbortController ? new AbortController() : null;
setNotice(''); resetSlots(strings.loading); setSlotStatus(strings.loading,true);
if(!type.value || !date.value){ resetSlots(strings.choose_date); setSlotStatus('',false); return; }
post({action:'lfc_rdv_slots',nonce:form.nonce.value,locale:form.locale.value,type_id:type.value,date:date.value},slotsController ? slotsController.signal : undefined).then(function(res){
if(reqId!==slotsRequestId) return;
slot.innerHTML=''; setSlotStatus('',false);
if(!res || !res.success || !res.data || !res.data.slots || !res.data.slots.length){ resetSlots(strings.no_slot); setSlotStatus(strings.no_slot,false); return; }
const empty=document.createElement('option'); empty.value=''; empty.textContent=strings.slot; slot.appendChild(empty);
res.data.slots.forEach(function(s){ const opt=document.createElement('option'); opt.value=s.start; opt.textContent=s.label; slot.appendChild(opt); });
slot.disabled=false;
}).catch(function(err){ if(err && err.name==='AbortError') return; if(reqId!==slotsRequestId) return; resetSlots(strings.no_slot); setSlotStatus(strings.no_slot,false); });
}
type.addEventListener('change',loadSlots); date.addEventListener('change',loadSlots);
form.addEventListener('submit',function(e){
e.preventDefault(); setNotice(strings.booking);
const data={action:'lfc_rdv_book'}; new FormData(form).forEach(function(v,k){data[k]=v;});
post(data).then(function(res){
if(res && res.success){ setNotice(strings.success); form.reset(); resetSlots(strings.choose_date); }
else { setNotice((res && res.data && res.data.message) ? res.data.message : strings.error); loadSlots(); }
}).catch(function(){ setNotice(strings.error); });
});
})();
Prendre rendez-vous
Choisissez un type
Je souhaite de l'aide pour configurez mes façades de cuisine — 15 min
Choisissez une date
