{"id":564,"date":"2026-02-12T15:08:25","date_gmt":"2026-02-12T14:08:25","guid":{"rendered":"https:\/\/www.kollektiv.paris\/reserva\/"},"modified":"2026-04-21T09:54:38","modified_gmt":"2026-04-21T07:54:38","slug":"reserva","status":"publish","type":"page","link":"https:\/\/www.kollektiv.paris\/es\/reserva\/","title":{"rendered":"Reserva"},"content":{"rendered":"<div class=\"et_pb_section_0 et_pb_section et_section_regular et_block_section preset--module--divi-section--default\">\n<div class=\"et_pb_row_0 et_pb_row et_block_row preset--module--divi-row--default\">\n<div class=\"et_pb_column_0 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough\">\n<div class=\"et_pb_code_0 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><script>(function(){\n\n  function initAll() {\n\n    const wrapper = document.querySelector(\"#devis-wizard\");\n    if (!wrapper) return false;\n\n    const form = wrapper.querySelector(\"form#yith-ywraq-default-form\");\n    if (!form) return false;\n\n    \/\/ \u00e9viter double init\n    if (form.classList.contains(\"wizard-ready\")) return true;\n    form.classList.add(\"wizard-ready\");\n\n    const elements = Array.from(form.children);\n\n    let steps = [];\n    let currentFields = [];\n    let currentTitle = null;\n\n    elements.forEach(el => {\n      if (el.tagName === \"H3\" && el.classList.contains(\"form-row\")) {\n\n        if (currentFields.length > 0) {\n          steps.push({ title: currentTitle, fields: currentFields });\n        }\n\n        currentTitle = el.innerText.trim();\n        currentFields = [];\n\n      } else {\n        currentFields.push(el);\n      }\n    });\n\n    if (currentFields.length > 0) {\n      steps.push({ title: currentTitle, fields: currentFields });\n    }\n\n    if (steps.length < 2) return true;\n\n    let currentStep = 0;\n\n    \/\/ wrapper wizard\n    const wizard = document.createElement(\"div\");\n    wizard.classList.add(\"ywraq-wizard\");\n\n    \/\/ progress bar\n    const progress = document.createElement(\"div\");\n    progress.classList.add(\"ywraq-progress\");\n    progress.innerHTML = `<div class=\"ywraq-progress-bar\"><\/div>`;\n    wizard.appendChild(progress);\n\n    const stepContainer = document.createElement(\"div\");\n    wizard.appendChild(stepContainer);\n\n    form.insertBefore(wizard, form.firstChild);\n\n    \/\/ cr\u00e9ation des steps\n    steps.forEach((step, index) => {\n      const stepDiv = document.createElement(\"div\");\n      stepDiv.classList.add(\"ywraq-step\");\n      stepDiv.dataset.step = index;\n\n      const title = document.createElement(\"h3\");\n      title.textContent = step.title;\n      stepDiv.appendChild(title);\n\n      step.fields.forEach(field => stepDiv.appendChild(field));\n\n      stepContainer.appendChild(stepDiv);\n    });\n\n    \/\/ navigation\n    const nav = document.createElement(\"div\");\n    nav.classList.add(\"ywraq-nav\");\n\n    nav.innerHTML = `\n      <button type=\"button\" class=\"ywraq-prev\">Previous<\/button><button type=\"button\" class=\"ywraq-next\">Next<\/button>`;\n\n    form.appendChild(nav);\n\n    const btnPrev = nav.querySelector(\".ywraq-prev\");\n    const btnNext = nav.querySelector(\".ywraq-next\");\n\n    const submitBtn = form.querySelector(\"button[type='submit'], input[type='submit']\");\n    if (submitBtn) submitBtn.style.display = \"none\";\n\n    function updateWizard() {\n\n      const stepDivs = form.querySelectorAll(\".ywraq-step\");\n\n      stepDivs.forEach((div, idx) => {\n        div.style.display = idx === currentStep ? \"block\" : \"none\";\n      });\n\n      btnPrev.style.display = currentStep === 0 ? \"none\" : \"inline-block\";\n\n      btnNext.textContent = (currentStep === steps.length - 1)\n        ? \"Send my request\"\n        : \"Next\";\n\n      const bar = form.querySelector(\".ywraq-progress-bar\");\n      if (bar) {\n        bar.style.width = ((currentStep + 1) \/ steps.length) * 100 + \"%\";\n      }\n    }\n\n    function validateStep() {\n      const stepDiv = form.querySelector(`.ywraq-step[data-step=\"${currentStep}\"]`);\n      if (!stepDiv) return true;\n\n      const requiredFields = stepDiv.querySelectorAll(\"input[required], select[required], textarea[required]\");\n\n      for (let field of requiredFields) {\n        if (!field.checkValidity()) {\n          field.reportValidity();\n          return false;\n        }\n      }\n      return true;\n    }\n\n    btnNext.addEventListener(\"click\", function() {\n\n      if (!validateStep()) return;\n\n      if (currentStep < steps.length - 1) {\n        currentStep++;\n        updateWizard();\n      } else {\n        submitBtn?.click();\n      }\n    });\n\n    btnPrev.addEventListener(\"click\", function() {\n      if (currentStep > 0) {\n        currentStep--;\n        updateWizard();\n      }\n    });\n\n    updateWizard();\n\n    \/\/ ===== CHECKLIST (multiselect -> checkbox) =====\n    if (window.jQuery) {\n      const $ = window.jQuery;\n\n      function buildChecklist($select) {\n\n        if ($select.data('kol-init')) return;\n        $select.data('kol-init', true);\n\n        const $wrapper = $('<div class=\"kol-checklist-wrapper\"><\/div>');\n\n        $select.find('option').each(function(){\n\n          if (!this.value) return;\n\n          const $item = $('<label class=\"kol-checklist-item\"><\/label>');\n          const $checkbox = $('<input type=\"checkbox\">');\n          const $text = $('<span><\/span>').text($(this).text());\n\n          $checkbox.prop('checked', this.selected);\n\n          $checkbox.on('change', () => {\n            this.selected = $checkbox.is(':checked');\n            $select.trigger('change');\n          });\n\n          $item.append($checkbox).append($text);\n          $wrapper.append($item);\n\n        });\n\n        $select.after($wrapper);\n        $select.hide();\n      }\n\n      function initChecklist() {\n        $('#devis-wizard select#equipment[multiple], #devis-wizard select#team[multiple]').each(function(){\n          buildChecklist($(this));\n        });\n      }\n\n      initChecklist();\n\n      $(document).on('click', '.ywraq-next, .ywraq-prev', function(){\n        setTimeout(initChecklist, 300);\n      });\n\n      \/\/ ===== DATEPICKER FIX =====\n      $(document).on(\"focus\", \"#devis-wizard input.hasDatepicker\", function(){\n\n        const $input = $(this);\n\n        setTimeout(function(){\n\n          const offset = $input.offset();\n\n          if (offset) {\n            $(\"#ui-datepicker-div\").css({\n              top: offset.top + $input.outerHeight(),\n              left: offset.left\n            });\n          }\n\n        }, 80);\n\n      });\n\n    }\n\n    return true;\n  }\n\n  \/\/ retry pour Divi + YITH\n  let tries = 0;\n  const interval = setInterval(() => {\n    if (initAll() || tries > 25) {\n      clearInterval(interval);\n    }\n    tries++;\n  }, 300);\n\n})();\n<\/script><\/div><\/div>\n\n<div class=\"et_pb_text_0 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--default\" id=\"devis-wizard\"><div class=\"et_pb_text_inner\">\n<div class=\"woocommerce ywraq-wrapper ywraq-empty\">\n\t\t\t<div id=\"yith-ywraq-message\"><div class=\"ywraq-question-message\">\n\t<\/div>\n<\/div>\n\t\t\n\t\t\t\t<div class=\"ywraq-form-table-wrapper vertical\">\n\t\t\t<div class=\"ywraq-before-form\">\n\t<p class=\"ywraq_list_empty_message\">Tu lista est\u00e1 vac\u00eda, a\u00f1ade productos a la lista para enviar una solicitud<p><p class=\"return-to-shop\"><a class=\"button wc-backward\" href=\"https:\/\/www.kollektiv.paris\/?page_id=457\">Retourner \u00e0 la boutique<\/a><\/p><\/div>\n\t\t\t\t\t<\/div>\n\t<\/div>\n\n<\/div><\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-564","page","type-page","status-publish","hentry"],"dsm_author":{"name":"team-graphisme","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/acb39907e382094653c7f0157c617e72cad621c2243db16352d8289e87c72525?s=96&d=mm&r=g","archive_link":"https:\/\/www.kollektiv.paris\/es\/author\/team-graphisme\/","biodata":""},"dsm_categories":[],"dsm_attachment_categories":[],"dsm_featured_image":null,"_links":{"self":[{"href":"https:\/\/www.kollektiv.paris\/es\/wp-json\/wp\/v2\/pages\/564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kollektiv.paris\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.kollektiv.paris\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.kollektiv.paris\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kollektiv.paris\/es\/wp-json\/wp\/v2\/comments?post=564"}],"version-history":[{"count":4,"href":"https:\/\/www.kollektiv.paris\/es\/wp-json\/wp\/v2\/pages\/564\/revisions"}],"predecessor-version":[{"id":853,"href":"https:\/\/www.kollektiv.paris\/es\/wp-json\/wp\/v2\/pages\/564\/revisions\/853"}],"wp:attachment":[{"href":"https:\/\/www.kollektiv.paris\/es\/wp-json\/wp\/v2\/media?parent=564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}