{"version":3,"file":"medvigie.min.js","sources":["medvigie.min.js"],"sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(factory) :\n factory();\n}((function () { 'use strict';\n\n var utils = {\n /**\n * Get parent element matching selector\n * \n * @param {Element} $el \n * @param {string} selector\n */\n getParent: function getParent($el, selector) {\n for ( ; $el && $el !== document; $el = $el.parentNode) {\n if ($el.matches(selector)) {\n return $el;\n }\n }\n\n return null;\n },\n\n /**\n * Add leading zero to number\n * \n * @param {int|string} number \n * @param {int} length \n */\n pad: function pad(number, length) {\n var str = '' + number;\n while (str.length < length) {\n str = '0' + str;\n }\n\n return str;\n },\n\n /**\n * Replace line break by HTML break\n * \n * @param {string} str \n */\n nl2br: function nl2br(str) {\n return (str + '').replace(/([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g, '$1
');\n },\n\n /**\n * Get the transition duration of element\n * \n * @param {Element} $el \n * @param {boolean} inMS default: true\n */\n getElementTransitionDurationEnd: function getElementTransitionDurationEnd($el, inMS) {\n if (typeof inMS === 'undefined') {\n inMS = true;\n }\n\n var computedStyles = window.getComputedStyle($el);\n\n var duration = computedStyles.transitionDuration.split(',').map(function (n) { return parseFloat(n); }).filter(function (a, b) { return b > a; }).shift();\n\n return duration * (inMS ? 1000 : 1);\n },\n\n /**\n * Execute function at transition end\n * \n * @param {Element} $el \n * @param {CallableFunction} fn \n */\n onTransitionEnd: function onTransitionEnd($el, fn) {\n var computedStyles = window.getComputedStyle($el);\n\n var duration = 0;\n\n if (computedStyles.transitionDuration !== '0s') {\n duration = computedStyles.transitionDuration.split(',').map(function (n) { return parseFloat(n); });\n duration = Math.max.apply(Math, duration);\n }\n\n if (duration) {\n setTimeout(function () {\n fn($el);\n }, (duration * 1000) + 1);\n } else {\n fn($el);\n }\n },\n\n /**\n * Convert string to Element\n * \n * @param {String} html HTML representing a single element\n * \n * @return {Element}\n */\n htmlToElement: function htmlToElement(html) {\n var template = document.createElement('template');\n html = html.trim();\n template.innerHTML = html;\n return template.content.firstChild;\n },\n\n /**\n * Get dimensions of non-existent element in the DOM\n * \n * @param {Element} $el Non-existent element in the DOM\n * @param {Element} $ref The reference after which $el will be added\n * \n * @return {DOMRect}\n */\n getDimensionsOfFutureElement: function getDimensionsOfFutureElement($el, $ref) {\n var boundingClientRect = $ref.getBoundingClientRect();\n \n $el.setAttribute('aria-hidden', false);\n $el.style.position = 'fixed';\n $el.style.zIndex = '-1';\n $el.style.width = boundingClientRect.width + 'px';\n $el.style.opacity = '0';\n $el.style.visibility = 'hidden';\n\n $el = $ref.parentNode.insertBefore($el, $ref.nextElementSibling);\n\n var elementBoudingClientRect = $el.getBoundingClientRect();\n $el.remove();\n\n return elementBoudingClientRect;\n },\n\n /**\n * Fetch url\n * \n * @param {string} url \n * @param {string} method POST or GET\n * @param {Object} params \n * \n * @return {Object} Object with promise and xhr\n */\n sendHTTPRequest: function sendHTTPRequest(obj) {\n var this$1 = this;\n\n var xhr = new XMLHttpRequest();\n\n var promise = new Promise(function (resolve, reject) {\n xhr.open(obj.method || 'GET', obj.url);\n if (obj.headers) {\n Object.keys(obj.headers).forEach(function (key) {\n xhr.setRequestHeader(key, obj.headers[key]);\n });\n }\n xhr.onload = function () {\n if (xhr.status >= 200 && xhr.status < 300) {\n resolve(JSON.parse(xhr.response));\n } else {\n reject(xhr.statusText);\n }\n };\n xhr.onerror = function () { return reject(xhr.statusText); };\n\n var params = obj.body || {};\n var formData = new FormData();\n\n this$1.buildFormData(formData, params);\n\n xhr.send(formData);\n });\n\n return {\n promise: promise,\n xhr: xhr,\n };\n },\n\n /**\n * Convert Object to FormData\n * \n * @param {FormData} formData \n * @param {Object} data \n * @param {string} parentKey \n */\n buildFormData: function buildFormData(formData, data, parentKey) {\n var this$1 = this;\n\n if (data && typeof data === 'object' && !(data instanceof Date) && !(data instanceof File)) {\n Object.keys(data).forEach(function (key) {\n this$1.buildFormData(formData, data[key], parentKey ? (parentKey + \"[\" + key + \"]\") : key);\n });\n } else {\n var value = data === null ? '' : data;\n \n formData.append(parentKey, value);\n }\n },\n\n /**\n * Add CSS classes to hide and show element with animation\n * CSS classes: animation-hide, animation-show, hide\n * Options:\n * hide {boolean} Enable/disable the hidding class (default: false)\n * show {boolean} Enable/disable the showing class (default: false)\n * attr {Object} Attribute to pass to callbacks\n * afterHide {CallableFunction} Function fired after element disappear\n * afterShow {CallableFunction} Function fired after element appear\n * \n * @param {Element} $el Element to change\n * @param {Object} options Object of options\n */\n changeWithCSSAnimation: function changeWithCSSAnimation($el, options) {\n options.hide = typeof options.hide === 'undefined' || (typeof options.hide === 'boolean' && options.hide === true);\n options.show = typeof options.show === 'undefined' || (typeof options.show === 'boolean' && options.show === true);\n options.attr = typeof options.attr === 'object' ? options.attr : {};\n\n if (options.hide) {\n $el.classList.add('animation-hide');\n }\n\n utils.onTransitionEnd($el, function ($el) {\n if (options.hide) {\n $el.classList.add('hide');\n $el.classList.remove('animation-hide');\n\n if (typeof options.afterHide === 'function') {\n options.afterHide($el, options.attr);\n }\n }\n\n if (options.show) {\n $el.classList.add('animation-show');\n\n utils.onTransitionEnd($el, function () {\n $el.classList.remove('hide', 'animation-show');\n\n if (typeof options.afterShow === 'function') {\n options.afterShow($el, options.attr);\n }\n });\n }\n });\n }\n };\n\n var Registration = {\n els: {\n form: {\n $wrapper: null,\n rpps_error: null,\n rpps: null,\n first_name: null,\n last_name: null,\n postal_code: null,\n department: null,\n phone_label: null,\n password: null,\n show_button: null\n },\n },\n view_password_str: 'Voir le mot de passe',\n hide_password_str: 'Masquer le mot de passe',\n init: function init() {\n this.els.form.$wrapper = document.querySelector('#registration_form');\n if (this.els.form.$wrapper) {\n\n // Add HTML to form\n var target = document.querySelector('.elementor-field-group-password');\n\n target.insertAdjacentHTML('afterend', this.getPasswordVerificationHtmlContent());\n target.insertAdjacentHTML('afterend', this.getShowPasswordButtonHtmlContent());\n\n this.els.form.rpps = document.getElementById('form-field-rpps');\n this.els.form.rpps_error = document.getElementById('rpps-error-message').querySelector('p');\n this.els.form.rpps_error.style.display = 'none';\n this.els.form.first_name = document.getElementById('form-field-firstname');\n this.els.form.last_name = document.getElementById('form-field-lastname');\n\n this.els.form.password = document.getElementById('form-field-password');\n this.els.form.show_button = document.getElementById('togglePW');\n\n this.els.form.postal_code = document.getElementById('form-field-postal_code');\n this.els.form.department = document.getElementById('form-field-department');\n\n this.els.form.phone_label = document.querySelector('.elementor-field-group-phone label');\n\n this.initEvents();\n }\n },\n initEvents: function initEvents() {\n var this$1 = this;\n\n this.els.form.password.addEventListener(\"keyup\", function (e) {\n this$1.getPassword();\n });\n this.els.form.show_button.addEventListener(\"click\", function (e) {\n this$1.togglePassword();\n });\n\n // Auto-select department based on postal code input\n this.els.form.postal_code.addEventListener('keyup', function (e) {\n this$1.autoSelectDepartment(e.target.value);\n });\n\n // Add tooltip on phone label\n var phoneDescription = 'Il peut être nécessaire pour vous envoyer un code de sécurité ou vous contacter personnellement afin de vérifier votre identité à l\\'issue de votre inscription';\n var labelPhone = this.els.form.phone_label.innerHTML;\n this.els.form.phone_label.innerHTML = labelPhone + '
' + phoneDescription + '
';\n\n // RPPS check\n this.els.form.rpps.addEventListener(\"focusout\", function (e) {\n var rpps = e.target.value;\n if(rpps) {\n this$1.getRPPSData(rpps);\n }\n });\n },\n getPasswordVerificationHtmlContent: function getPasswordVerificationHtmlContent() {\n return '
\\n' +\n '

Votre mot de passe contient :

\\n' +\n ' \\n' +\n '
';\n },\n getShowPasswordButtonHtmlContent: function getShowPasswordButtonHtmlContent() {\n return '
\\n' +\n ' ' + this.view_password_str + '\\n' +\n '
';\n },\n getPassword: function getPassword() {\n var text = this.els.form.password.value;\n var length = document.getElementById('password-length');\n var uppercase = document.getElementById('password-uppercase');\n var number = document.getElementById('password-number');\n var special = document.getElementById('password-special');\n\n this.checkIfEightChar(text) ? length.classList.add('list-group-item-success') : length.classList.remove('list-group-item-success');\n this.checkIfOneUppercase(text) ? uppercase.classList.add('list-group-item-success') : uppercase.classList.remove('list-group-item-success');\n this.checkIfOneDigit(text) ? number.classList.add('list-group-item-success') : number.classList.remove('list-group-item-success');\n this.checkIfOneSpecialChar(text) ? special.classList.add('list-group-item-success') : special.classList.remove('list-group-item-success');\n },\n checkIfEightChar: function checkIfEightChar(text) {\n return text.length >= 8;\n },\n checkIfOneUppercase: function checkIfOneUppercase(text) {\n return /[A-Z]/.test(text);\n },\n checkIfOneDigit: function checkIfOneDigit(text) {\n return /[0-9]/.test(text);\n },\n checkIfOneSpecialChar: function checkIfOneSpecialChar(text) {\n return /[~`!#$%@\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g.test(text);\n },\n togglePassword: function togglePassword() {\n var passInput = this.els.form.password;\n var togglePW = document.getElementById('togglePW');\n\n passInput.type === \"password\" ? passInput.type = \"text\" : passInput.type = \"password\";\n togglePW.textContent === this.view_password_str ? togglePW.textContent = this.hide_password_str : togglePW.textContent = this.view_password_str;\n },\n autoSelectDepartment: function autoSelectDepartment(postal_code) {\n for(var i = 0, elems = this.els.form.department, l = elems.length; i < l; i++) {\n elems[i].selected = elems[i].value == postal_code.substring(0,2);\n }\n },\n getRPPSData: function getRPPSData(rpps) {\n var this$1 = this;\n\n var ajaxActionName = 'get_rpps_data';\n this.getRequest = utils.sendHTTPRequest({\n url: ajaxurl + '?action=' + ajaxActionName + '&rpps=' + rpps,\n });\n\n this.getRequest.promise.then(function (response) {\n if (!response.success) {\n console.error(response.errorMessage);\n this$1.els.form.rpps_error.innerHTML = response.errorMessage;\n this$1.els.form.rpps_error.style.display = 'block';\n this$1.els.form.rpps.value = ''; // Empty RPPS field\n } else {\n // Auto fill fields with data\n this$1.els.form.first_name.value = response.first_name;\n this$1.els.form.last_name.value = response.last_name;\n this$1.els.form.postal_code.value = response.postal_code;\n this$1.autoSelectDepartment(this$1.els.form.postal_code.value);\n this$1.els.form.rpps_error.style.display = 'none';\n }\n this$1.getRequest = null;\n }).catch(function (error) {\n console.error(error);\n this$1.getRequest = null;\n });\n }\n };\n\n var Settings = {\n els: {\n $wrapper: null,\n\n form: {\n $wrapper: null,\n entry_mode_choice: {\n $daily: null,\n $weekly: null,\n },\n },\n\n modale: {\n $validate: null,\n },\n },\n loading: 0,\n userId: null,\n entry_mode: null,\n dashboard_url: null,\n history: {\n entry_mode: null,\n },\n saveRequest: null,\n\n init: function init() {\n if (typeof settings_options !== 'undefined') {\n this.els.$wrapper = document.querySelector('.js-settings');\n\n if (this.els.$wrapper) {\n // Datas\n this.userId = settings_options.user_id;\n this.entry_mode = settings_options.entry_mode;\n this.history.entry_mode = settings_options.entry_mode;\n this.dashboard_url = settings_options.dashboard_url;\n\n // Form\n this.els.form.$wrapper = this.els.$wrapper.querySelector('#settingsData');\n\n // Choice radio\n this.els.form.entry_mode_choice.$daily = this.els.$wrapper.querySelector('.js-settings-input-entry-mode-choice-daily');\n this.els.form.entry_mode_choice.$weekly = this.els.$wrapper.querySelector('.js-settings-input-entry-mode-choice-weekly');\n\n // Modale\n this.els.modale.$validate = this.els.$wrapper.querySelector('.js-settings-validation-modale');\n\n this.initEvents();\n }\n }\n },\n\n initEvents: function initEvents() {\n this.inputEvents();\n this.formEvent();\n },\n\n inputEvents: function inputEvents () {\n var this$1 = this;\n\n this.els.form.entry_mode_choice.$daily.addEventListener('click', function (e) {\n if (this$1.els.form.entry_mode_choice.$daily.checked) {\n this$1.entry_mode = 'daily';\n }\n });\n this.els.form.entry_mode_choice.$weekly.addEventListener('click', function (e) {\n if (this$1.els.form.entry_mode_choice.$weekly.checked) {\n this$1.entry_mode = 'weekly';\n }\n });\n },\n\n formEvent: function formEvent() {\n var this$1 = this;\n\n this.els.form.$wrapper.addEventListener('submit', function (e) {\n e.preventDefault();\n if (!this$1.history.entry_mode) { // Registration process : entry mode still empty\n this$1.saveData();\n } else if (this$1.entry_mode == this$1.history.entry_mode) {\n this$1.setLoading(true);\n window.location = this$1.dashboard_url;\n } else { // Entry mode change\n this$1.displayValidationModale();\n }\n });\n },\n\n /**\n * Save data with ajax call\n *\n * @param {number} change_mode 0 or 1\n */\n saveData: function saveData(change_mode) {\n var this$1 = this;\n if ( change_mode === void 0 ) change_mode = 0;\n\n this.setLoading(true);\n\n if (this.els.form.entry_mode_choice.$daily.checked) {\n this.entry_mode = 'daily';\n } else {\n this.entry_mode = 'weekly';\n }\n\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'save_settings_data',\n params: JSON.stringify({\n user_id: this.userId,\n entry_mode: this.entry_mode,\n change_mode: change_mode\n }),\n },\n });\n\n this.saveRequest.promise.then(function (response) {\n if (!response.success) {\n console.error(response.errorMessage);\n }\n this$1.saveRequest = null;\n window.location = this$1.dashboard_url;\n }).catch(function (error) {\n console.error(error);\n this$1.setLoading(false);\n this$1.saveRequest = null;\n });\n },\n\n /**\n * Increment or decrement loading\n *\n * @param {boolean} increment\n */\n setLoading: function setLoading(increment) {\n this.loading = increment ? this.loading + 1 : this.loading - 1;\n\n if (this.loading > 0 && !this.els.$wrapper.classList.contains('loading')) {\n this.els.$wrapper.classList.add('loading');\n } else if (this.loading === 0) {\n this.els.$wrapper.classList.remove('loading');\n }\n },\n\n /**\n * Display a modale asking if user wants to validate his data\n */\n displayValidationModale: function displayValidationModale() {\n var this$1 = this;\n\n this.els.modale.$validate.setAttribute('aria-hidden', false);\n\n utils.changeWithCSSAnimation(this.els.modale.$validate, {\n hide: false,\n });\n\n var $closeModaleBtns = this.els.modale.$validate.querySelectorAll('.js-modale-close');\n var closeCallback = null;\n Array.prototype.forEach.call($closeModaleBtns, function ($closeModaleBtn) {\n closeCallback = function () {\n utils.changeWithCSSAnimation(this$1.els.modale.$validate, {\n show: false,\n afterHide: function ($el) {\n $el.setAttribute('aria-hidden', true);\n\n $closeModaleBtn.removeEventListener('click', closeCallback);\n },\n });\n };\n\n $closeModaleBtn.addEventListener('click', closeCallback);\n });\n\n var $validateBtn = this.els.modale.$validate.querySelector('.js-settings-validation-btn');\n var validateCallback = function () {\n closeCallback();\n this$1.saveData(1);\n };\n $validateBtn.addEventListener('click', validateCallback);\n },\n };\n\n var MissingData = {\n els: {\n $wrapper: null,\n\n form: {\n $wrapper: null,\n $missing_days: null,\n $message: null\n },\n\n $suspected_patients_wrappers: [],\n $suspected_patients_inputs: [],\n $patients_wrappers: [],\n $patients_inputs: [],\n $no_consultation_inputs: [],\n\n $no_consultation_values: [],\n\n modale: {\n $validate: null,\n },\n },\n loading: 0,\n userId: null,\n saveRequest: null,\n\n init: function init() {\n if (typeof missing_data_options !== 'undefined') {\n this.els.$wrapper = document.querySelector('.js-missing-data');\n\n if (this.els.$wrapper) {\n // Datas\n this.userId = missing_data_options.user_id;\n\n // Form\n this.els.form.$wrapper = this.els.$wrapper.querySelector('#missingData');\n this.els.form.$message = this.els.$wrapper.querySelector('.missing-data-center-block-form-message');\n\n // Missing days\n this.els.form.$missing_days = this.els.$wrapper.querySelectorAll('.missing-day');\n\n // Modale\n this.els.modale.$validate = this.els.$wrapper.querySelector('.js-missing-data-validation-modale');\n\n this.initEvents();\n }\n }\n },\n\n initEvents: function initEvents() {\n var this$1 = this;\n\n this.inputEvents();\n\n this.els.form.$wrapper.addEventListener('submit', function (e) {\n e.preventDefault();\n this$1.displayValidationModale();\n });\n },\n\n inputEvents: function inputEvents () {\n var this$1 = this;\n\n this.els.form.$missing_days.forEach(function ($missingDay) {\n var index = $missingDay.getAttribute('data-missing-day-index');\n\n this$1.els.$suspected_patients_wrappers[index] = $missingDay.querySelector('.group-suspected-patients');\n this$1.els.$suspected_patients_inputs[index] = $missingDay.querySelector('.suspected-patients');\n this$1.els.$patients_wrappers[index] = $missingDay.querySelector('.group-patients');\n this$1.els.$patients_inputs[index] = $missingDay.querySelector('.patients');\n this$1.els.$no_consultation_inputs[index] = $missingDay.querySelector('.js-missing-data-input-no-consultation');\n this$1.els.$no_consultation_values[index] = this$1.els.$no_consultation_inputs[index].checked ? 1 : 0;\n\n this$1.els.$suspected_patients_inputs[index].addEventListener('change', function (e) {\n this$1.changeInput(index);\n });\n this$1.els.$patients_inputs[index].addEventListener('change', function (e) {\n this$1.changeInput(index);\n });\n\n this$1.els.$no_consultation_inputs[index].addEventListener('click', function (e) {\n if (this$1.els.$no_consultation_inputs[index].checked && !this$1.els.$no_consultation_values[index]) {\n this$1.els.$suspected_patients_inputs[index].value = 0;\n this$1.els.$patients_inputs[index].value = 0;\n this$1.els.$suspected_patients_inputs[index].readOnly = true;\n this$1.els.$patients_inputs[index].readOnly = true;\n this$1.els.$suspected_patients_wrappers[index].classList.add('disabled');\n this$1.els.$patients_wrappers[index].classList.add('disabled');\n this$1.els.$no_consultation_values[index] = true;\n } else if (this$1.els.$no_consultation_values[index]) {\n this$1.els.$suspected_patients_inputs[index].readOnly = false;\n this$1.els.$patients_inputs[index].readOnly = false;\n this$1.els.$suspected_patients_wrappers[index].classList.remove('disabled');\n this$1.els.$patients_wrappers[index].classList.remove('disabled');\n this$1.els.$no_consultation_values[index] = false;\n }\n });\n });\n },\n\n changeInput: function changeInput(index) {\n if(this.els.$patients_inputs[index].value == \"\") {\n this.els.$patients_inputs[index].value = 0;\n }\n if(this.els.$suspected_patients_inputs[index].value == \"\") {\n this.els.$suspected_patients_inputs[index].value = 0;\n }\n // If suspected patients > patients : update patient number\n if(parseInt(this.els.$suspected_patients_inputs[index].value) > parseInt(this.els.$patients_inputs[index].value)) {\n this.els.$patients_inputs[index].value = this.els.$suspected_patients_inputs[index].value;\n }\n },\n\n validateForm: function validateForm() {\n\n },\n\n /**\n * Save data with ajax call\n *\n */\n saveData: function saveData() {\n var this$1 = this;\n\n this.setLoading(true);\n\n var missing_days_data = [];\n\n this.els.form.$missing_days.forEach(function ($missingDay) {\n var index = $missingDay.getAttribute('data-missing-day-index');\n var date_str = $missingDay.getAttribute('data-missing-day-date');\n\n var missing_days_item = {\n number_of_suspected_patients: parseInt(this$1.els.$suspected_patients_inputs[index].value),\n number_of_patients: parseInt(this$1.els.$patients_inputs[index].value),\n entry_date: date_str\n };\n\n missing_days_data.push(missing_days_item);\n });\n\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'save_missing_days_data',\n params: JSON.stringify({\n user_id: this.userId,\n missing_days_data: missing_days_data\n }),\n },\n });\n\n this.saveRequest.promise.then(function (response) {\n if (!response.success) {\n console.error(response.errorMessage);\n this$1.els.form.$message.classList.add('error');\n this$1.els.form.$message.innerHTML = response.errorMessage;\n } else {\n this$1.els.form.$message.classList.add('success');\n this$1.els.form.$message.innerHTML = response.successMessage;\n this$1.els.form.$missing_days.forEach(function ($missingDay) {\n $missingDay.style.display = 'none';\n });\n this$1.els.$wrapper.querySelector('button').style.display = 'none';\n }\n\n this$1.setLoading(false);\n this$1.saveRequest = null;\n }).catch(function (error) {\n console.error(error);\n this$1.setLoading(false);\n this$1.saveRequest = null;\n });\n },\n\n /**\n * Increment or decrement loading\n *\n * @param {boolean} increment\n */\n setLoading: function setLoading(increment) {\n this.loading = increment ? this.loading + 1 : this.loading - 1;\n\n if (this.loading > 0 && !this.els.$wrapper.classList.contains('loading')) {\n this.els.$wrapper.classList.add('loading');\n } else if (this.loading === 0) {\n this.els.$wrapper.classList.remove('loading');\n }\n },\n\n /**\n * Display a modale asking if user wants to validate his data\n */\n displayValidationModale: function displayValidationModale() {\n var this$1 = this;\n\n this.els.modale.$validate.setAttribute('aria-hidden', false);\n\n utils.changeWithCSSAnimation(this.els.modale.$validate, {\n hide: false,\n });\n\n var $closeModaleBtns = this.els.modale.$validate.querySelectorAll('.js-modale-close');\n var closeCallback = null;\n Array.prototype.forEach.call($closeModaleBtns, function ($closeModaleBtn) {\n closeCallback = function () {\n utils.changeWithCSSAnimation(this$1.els.modale.$validate, {\n show: false,\n afterHide: function ($el) {\n $el.setAttribute('aria-hidden', true);\n\n $closeModaleBtn.removeEventListener('click', closeCallback);\n },\n });\n };\n\n $closeModaleBtn.addEventListener('click', closeCallback);\n });\n\n var $validateBtn = this.els.modale.$validate.querySelector('.js-missing-data-validation-btn');\n var validateCallback = function () {\n closeCallback();\n this$1.saveData(1);\n };\n $validateBtn.addEventListener('click', validateCallback);\n },\n };\n\n var Charts = {\n els: {\n $wrapper: null,\n $container_indicators: null,\n $chart_ira_fra: null,\n $chart_gastro_fra: null,\n $chart_varicelle_fra: null,\n $chart_bronchio_fra: null,\n $chart_ira_naq: null,\n $chart_gastro_naq: null,\n $chart_varicelle_naq: null,\n $chart_bronchio_naq: null,\n },\n\n dataUrls: {\n 'ira-fra': 'https://www.sentiweb.fr/upload/medvigie/hist-ira-fra.json',\n 'gastro-fra': 'https://www.sentiweb.fr/upload/medvigie/hist-gastro-fra.json',\n 'varicelle-fra': 'https://www.sentiweb.fr/upload/medvigie/hist-varicelle-fra.json',\n 'bronchio-fra': 'https://www.sentiweb.fr/upload/medvigie/hist-bronchio-fra.json',\n 'ira-naq': 'https://www.sentiweb.fr/upload/medvigie/hist-ira-naq.json',\n 'gastro-naq': 'https://www.sentiweb.fr/upload/medvigie/hist-gastro-naq.json',\n 'varicelle-naq': 'https://www.sentiweb.fr/upload/medvigie/hist-varicelle-naq.json',\n },\n\n init: function init() {\n this.els.$wrapper = document.querySelector('#container-indicators');\n this.els.$container_indicators = this.els.$wrapper;\n\n this.els.$chart_ira_fra = document.getElementById('chart-ira-fra');\n this.els.$chart_gastro_fra = document.getElementById('chart-gastro-fra');\n this.els.$chart_varicelle_fra = document.getElementById('chart-varicelle-fra');\n this.els.$chart_bronchio_fra = document.getElementById('chart-bronchio-fra');\n this.els.$chart_ira_naq = document.getElementById('chart-ira-naq');\n this.els.$chart_gastro_naq = document.getElementById('chart-gastro-naq');\n this.els.$chart_varicelle_naq = document.getElementById('chart-varicelle-naq');\n\n this.initCharts();\n },\n\n initCharts: function initCharts() {\n if (this.els.$container_indicators) {\n this.initChartIndicators();\n }\n\n\n this.initMultipleCharts([\n {key: 'ira-fra', container: this.els.$chart_ira_fra},\n {key: 'gastro-fra', container: this.els.$chart_gastro_fra},\n {key: 'varicelle-fra', container: this.els.$chart_varicelle_fra},\n {key: 'bronchio-fra', container: this.els.$chart_bronchio_fra},\n {key: 'ira-naq', container: this.els.$chart_ira_naq},\n {key: 'gastro-naq', container: this.els.$chart_gastro_naq},\n {key: 'varicelle-naq', container: this.els.$chart_varicelle_naq},\n {key: 'bronchio-naq', container: this.els.$chart_bronchio_naq} ]);\n },\n\n initMultipleCharts: function initMultipleCharts(charts) {\n var this$1 = this;\n\n charts.forEach(function (chart) {\n if (chart.container) {\n this$1.initChartFromUrl(chart.key, chart.container);\n }\n });\n },\n\n initChartFromUrl: function initChartFromUrl(key, container) {\n var this$1 = this;\n\n var url = this.dataUrls[key];\n if (!url) {\n console.error((\"URL non définie pour la clé: \" + key));\n return;\n }\n\n fetch(url)\n .then(function (response) {\n if (!response.ok) {\n throw new Error((\"Erreur de chargement des données pour \" + key));\n }\n return response.json();\n })\n .then(function (data) {\n var title = this$1.getChartTitle(key);\n var subtitle = this$1.getChartSubtitle(key);\n this$1.createHighcharts(container.id, title, subtitle, data);\n })\n .catch(function (error) {\n console.error(error);\n if (container) {\n container.innerHTML = \"

Erreur de chargement des données pour \" + key + \".

\";\n }\n });\n },\n\n getChartTitle: function getChartTitle(key) {\n var ref = key.split('-');\n var type = ref[0];\n var typeLabel = \"\";\n switch (type) {\n case 'ira':\n typeLabel = \"Infection respiratoire aiguë (IRA)\";\n break;\n case 'gastro':\n typeLabel = \"Gastro\";\n break;\n case 'varicelle':\n typeLabel = \"Varicelle\";\n break;\n case 'bronchio':\n typeLabel = \"Bronchiolite, chez les enfants de moins de 2 ans\";\n break;\n default:\n typeLabel = \"Taux d'incidence\";\n }\n\n return typeLabel;\n },\n\n getChartSubtitle: function getChartSubtitle(key) {\n var ref = key.split('-');\n var type = ref[0];\n var subtitleLabel = \"\";\n switch (type) {\n case 'ira':\n subtitleLabel = 'Source : Sentinelles et IQVIA (EMR)';\n break;\n case 'gastro':\n subtitleLabel = 'Source : Sentinelles et IQVIA (EMR)';\n break;\n case 'varicelle':\n subtitleLabel = 'Source : Sentinelles et IQVIA (EMR)';\n break;\n case 'bronchio':\n subtitleLabel = \"Source : IQVIA (EMR)\";\n break;\n default:\n subtitleLabel = \"\";\n }\n\n return subtitleLabel;\n },\n\n createHighcharts: function createHighcharts(containerId, titleText, subtitleText, data) {\n Highcharts.chart(containerId, {\n exporting: {\n buttons: {\n contextButton: {\n symbolStroke: '#343434',\n menuItems: [\n 'downloadPNG',\n 'downloadJPEG',\n 'downloadPDF',\n 'downloadSVG',\n 'separator',\n 'printChart'\n ],\n symbol: 'menu',\n theme: {\n fill: 'transparent',\n }\n }\n },\n },\n title: {\n text: titleText,\n align: 'left',\n style: {color: '#343434', fontWeight: '600', fontSize: '21px'},\n margin: 20\n },\n subtitle: {\n text: subtitleText,\n style: {color: 'red st', fontWeight: '300', fontSize: '12px'},\n align: 'left',\n margin: 40\n },\n chart: {\n backgroundColor: 'transparent',\n height: 400\n },\n xAxis: {\n title: {\n text: \"Semaine de l'année\",\n style: {color: '#343434'},\n },\n crosshair: true,\n type: 'category',\n labels: {\n style: {color: '#343434'},\n }\n },\n yAxis: {\n title: {\n text: \"Cas pour 100 000 habitants\",\n style: {color: '#343434'},\n },\n labels: {\n style: {color: '#343434'},\n }\n },\n tooltip: {\n crosshairs: true,\n shared: true,\n },\n data: {\n rows: data,\n seriesMapping: [\n {x: 0, low: 2, high: 3},\n {x: 0, low: 4, high: 5},\n {x: 0, y: 1}\n ],\n complete: function (options) {\n options.series[0].name = 'Min/MAX';\n options.series[1].name = 'Q1/Q3';\n options.series[2].name = 'Saison en cours';\n }\n },\n plotOptions: {\n series: {\n label: {\n connectorAllowed: false\n },\n marker: {\n enabled: false\n }\n }\n },\n series: [\n {\n type: 'arearange',\n color: '#FF0000',\n fillOpacity: 0.3\n },\n {\n type: 'arearange',\n color: '#FFA500',\n fillOpacity: 0.3\n },\n {\n type: 'spline',\n lineWidth: 3,\n color: 'steelblue'\n }\n ],\n responsive: {\n rules: [{\n condition: {\n maxWidth: 800\n },\n chartOptions: {\n legend: {\n enabled: true\n }\n }\n }]\n }\n });\n },\n\n initChartIndicators: function initChartIndicators() {\n var this$1 = this;\n\n fetch(ajaxurl, {\n method: \"POST\",\n body: new URLSearchParams({action: \"get_indicators_graph\"})\n })\n .then(function (response) { return response.json(); })\n .then(function (jsonData) {\n\n Highcharts.chart(this$1.els.$container_indicators.id, {\n exporting: {\n buttons: {\n contextButton: {\n symbolStroke: '#FFFFFF',\n menuItems: [\n 'downloadPNG',\n 'downloadJPEG',\n 'downloadPDF',\n 'downloadSVG',\n 'separator',\n 'printChart'\n ],\n symbol: 'menu',\n theme: {\n fill: 'transparent',\n }\n }\n },\n },\n chart: {\n height: 350,\n type: 'areaspline',\n backgroundColor: 'transparent'\n },\n title: {\n text: 'Suivi des contributions médecins vigies à la surveillance épidémiologique',\n align: 'left',\n style: {color: '#FFFFFF', fontWeight: '600', fontSize: '21px'},\n margin: 50\n },\n subtitle: {\n text: ''\n },\n xAxis: {\n title: {\n text: \"Semaines\",\n style: {color: '#FFFFFF'},\n },\n categories: jsonData.weeks,\n labels: {\n style: {color: '#FFFFFF'},\n },\n crosshair: true\n },\n yAxis: {\n title: {\n text: 'Pourcentage (%)',\n style: {color: '#FFFFFF'},\n },\n labels: {\n format: '{value} %',\n style: {color: '#FFFFFF'},\n },\n max: 100\n },\n tooltip: {\n shared: true,\n valueSuffix: ' %'\n },\n series: jsonData.series,\n colors: ['#e65f10', '#1167a8', '#16b8be', '#F24F13'],\n legend: {\n itemStyle: {\n color: '#FFFFFF',\n fontSize: '12px',\n fontWeight: '300',\n }\n },\n });\n\n })\n .catch(function (error) {\n console.error('Erreur AJAX get_indicators_graph:', error);\n });\n }\n };\n\n var Login = {\n els: {\n $wrapper: null,\n login_container: null,\n password_container: null,\n cms_container: null,\n login_form: {\n $wrapper: null,\n rpps: null,\n rpps_error: null,\n },\n password_form: {\n $wrapper: null,\n password: null,\n password_error: null,\n },\n user_email: null\n },\n init: function init() {\n this.els.$wrapper = document.querySelector('.js-login');\n if (this.els.$wrapper) {\n this.els.login_container = this.els.$wrapper.querySelector('.container-login');\n this.els.password_container = this.els.$wrapper.querySelector('.container-password');\n this.els.cms_container = this.els.$wrapper.querySelector('.container-cms');\n this.els.previous_step = this.els.$wrapper.querySelector('.previous-step');\n this.els.login_form.$wrapper = this.els.$wrapper.querySelector('#loginForm');\n this.els.login_form.rpps = this.els.login_form.$wrapper.querySelector('[name=\"login\"]');\n this.els.login_form.rpps_error = document.getElementById('rpps-error-message').querySelector('p');\n this.els.login_form.rpps_error.style.display = 'none';\n\n this.els.password_form.$wrapper = this.els.$wrapper.querySelector('#passwordForm');\n this.els.password_form.password = this.els.password_form.$wrapper.querySelector('[name=\"password\"]');\n this.els.password_form.password_error = document.getElementById('password-error-message').querySelector('p');\n this.els.password_form.password_error.style.display = 'none';\n\n this.initEvents();\n }\n },\n initEvents: function initEvents() {\n var this$1 = this;\n\n this.els.login_form.$wrapper.addEventListener('submit', function (e) {\n e.preventDefault();\n this$1.loginRPPS();\n });\n\n this.els.previous_step.addEventListener('click', function (e) {\n this$1.els.login_container.classList.remove('hidden');\n this$1.els.cms_container.classList.remove('hidden');\n this$1.els.password_container.classList.add('hidden');\n this$1.els.previous_step.classList.add('hidden');\n });\n\n this.els.password_form.$wrapper.addEventListener('submit', function (e) {\n e.preventDefault();\n this$1.loginPassword();\n });\n\n document.getElementById('toggle-password').addEventListener('click', function () {\n var passwordField = document.getElementById('password');\n var passwordToggleIcon = this.querySelector('img');\n\n var openEyeIcon = passwordToggleIcon.getAttribute('data-open');\n var closeEyeIcon = passwordToggleIcon.getAttribute('data-close');\n\n if (passwordField.type === 'password') {\n passwordField.type = 'text';\n passwordToggleIcon.src = closeEyeIcon;\n passwordToggleIcon.alt = \"Hide Password\";\n } else {\n passwordField.type = 'password';\n passwordToggleIcon.src = openEyeIcon;\n passwordToggleIcon.alt = \"Show Password\";\n }\n });\n\n this.els.password_form.password.addEventListener('input', function () {\n var password = this$1.els.password_form.password.value;\n var strength = this$1.getPasswordStrength(password);\n this$1.updatePasswordFeedback(strength);\n });\n },\n\n /**\n * Increment or decrement loading\n *\n * @param {boolean} increment\n */\n setLoading: function setLoading(increment) {\n this.loading = increment ? this.loading + 1 : this.loading - 1;\n\n if (this.loading > 0 && !this.els.$wrapper.classList.contains('loading')) {\n this.els.$wrapper.classList.add('loading');\n } else if (this.loading === 0) {\n this.els.$wrapper.classList.remove('loading');\n }\n },\n\n loginRPPS: function loginRPPS() {\n var this$1 = this;\n\n this.setLoading(true);\n\n var rppsValue = this.els.login_form.rpps.value;\n var hasError = false;\n var errorMessage = \"\";\n if (!rppsValue) {\n hasError = true;\n errorMessage = \"Veuillez saisir votre identifiant RPPS\";\n } else if (!Number.isInteger(parseInt(rppsValue))) {\n hasError = true;\n errorMessage = \"Identifiant RPPS invalide\";\n }\n if (hasError) {\n this.displayLoginError(errorMessage);\n } else {\n // Try login\n this.els.login_form.rpps_error.style.display = 'none';\n this.els.login_form.rpps_error.innerHTML = \"\";\n this.els.login_form.rpps.classList.remove('error');\n\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'login_with_rpps',\n params: JSON.stringify({\n rpps: rppsValue\n }),\n },\n });\n\n this.saveRequest.promise.then(function (data) {\n if (!data.response.success) {\n this$1.displayLoginError(data.response.errorMessage);\n } else {\n // Get use case\n var useCase = data.response.use_case;\n if (useCase === 'password') {\n this$1.els.login_container.classList.add('hidden');\n this$1.els.cms_container.classList.add('hidden');\n this$1.els.password_container.classList.remove('hidden');\n this$1.els.previous_step.classList.remove('hidden');\n this$1.els.user_email = data.response.user_email;\n } else if (useCase === 'inscription') {\n window.localStorage.setItem(\"userData\", JSON.stringify(data.response.user_data));\n window.location.href = \"/inscription/\";\n }\n }\n this$1.setLoading(false);\n this$1.saveRequest = null;\n }).catch(function (error) {\n this$1.displayLoginError(error);\n this$1.setLoading(false);\n this$1.saveRequest = null;\n });\n }\n },\n\n loginPassword: function loginPassword() {\n var this$1 = this;\n\n this.setLoading(true);\n\n var passwordValue = this.els.password_form.password.value;\n if (!passwordValue) {\n this.displayPasswordError(\"Veuillez saisir votre mot de pasee\");\n } else {\n // Try login with RPPS and password\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'login_with_email_and_password',\n params: JSON.stringify({\n email: this.els.user_email,\n password: passwordValue,\n }),\n },\n });\n\n this.saveRequest.promise.then(function (response) {\n if (!response.success) {\n this$1.displayPasswordError(response.errorMessage);\n } else {\n window.location.href = \"/dashboard\";\n }\n this$1.setLoading(false);\n this$1.saveRequest = null;\n }).catch(function (error) {\n this$1.displayPasswordError(error);\n this$1.setLoading(false);\n this$1.saveRequest = null;\n });\n }\n },\n\n displayLoginError: function displayLoginError(message) {\n this.els.login_form.rpps_error.innerHTML = message;\n this.els.login_form.rpps_error.style.display = 'block';\n this.els.login_form.rpps.classList.add('error');\n this.setLoading(false);\n },\n\n displayPasswordError: function displayPasswordError(message) {\n this.els.password_form.password_error.innerHTML = message;\n this.els.password_form.password_error.style.display = 'block';\n this.els.password_form.password.classList.add('error');\n this.setLoading(false);\n },\n\n getPasswordStrength: function getPasswordStrength(password) {\n var strength = 0;\n\n if (password.length < 8) {\n return strength;\n }\n\n if (/[A-Z]/.test(password)) { strength++; }\n if (/\\d/.test(password)) { strength++; }\n if (/[@$!%*?&#]/.test(password)) { strength++; }\n\n return strength;\n },\n updatePasswordFeedback: function updatePasswordFeedback(strength) {\n // Réinitialisation du message et des classes\n this.els.password_form.password_error.classList.remove('error', 'success');\n this.els.password_form.password_error.textContent = '';\n this.els.password_form.password.classList.remove('input-error', 'input-success'); // Réinitialisation des bordures\n this.els.passwordStrengthBar.className = 'password-strength-bar'; // Réinitialiser la barre de progression\n this.els.passwordStrengthBar.style.width = '0%'; // Réinitialiser la largeur de la barre\n\n // Sélection des icônes d'erreur et de succès\n var errorIcon = this.els.passwordValidationIcon.querySelector('img[alt=\"Error\"]');\n var successIcon = this.els.passwordValidationIcon.querySelector('img[alt=\"Success\"]');\n\n // Cache les icônes par défaut\n errorIcon.style.display = 'none';\n successIcon.style.display = 'none';\n\n // Mot de passe trop court ou Aucun critère validé\n if (this.els.password_form.password.value.length < 8 || strength === 0) {\n this.els.password_form.password_error.textContent = \"Le mot de passe doit comporter au moins 8 caractères, une majuscule, un chiffre, et un caractère spécial.\";\n this.els.password_form.password_error.classList.add('error');\n this.els.passwordStrengthBar.style.width = '0%'; // Barre vide\n this.els.password_form.password.classList.add('input-error'); // Ajouter la bordure rouge\n errorIcon.style.display = 'block'; // Afficher l'icône rouge\n }\n\n // Mot de passe valide mais niveau faible\n if (strength === 1) {\n this.els.password_form.password_error.innerHTML = \"Niveau de sécurité : FAIBLE\";\n this.els.password_form.password_error.classList.add('error');\n this.els.passwordStrengthBar.classList.add('low'); // Ajouter la classe \"low\"\n this.els.passwordStrengthBar.style.width = '33%'; // Remplir la barre à 33%\n this.els.password_form.password.classList.add('input-error'); // Ajouter la bordure rouge\n errorIcon.style.display = 'block'; // Afficher l'icône rouge\n } else if (strength === 2) {\n // Niveau moyen\n this.els.password_form.password_error.innerHTML = \"Niveau de sécurité : BIEN\";\n this.els.password_form.password_error.classList.add('success');\n this.els.passwordStrengthBar.classList.add('medium'); // Ajouter la classe \"medium\"\n this.els.passwordStrengthBar.style.width = '66%'; // Remplir la barre à 66%\n this.els.password_form.password.classList.add('input-success'); // Ajouter la bordure verte\n successIcon.style.display = 'block'; // Afficher l'icône verte\n } else if (strength >= 3) {\n // Niveau fort\n this.els.password_form.password_error.innerHTML = \"Niveau de sécurité : TRÈS BIEN\";\n this.els.password_form.password_error.classList.add('success');\n this.els.passwordStrengthBar.classList.add('high'); // Ajouter la classe \"high\"\n this.els.passwordStrengthBar.style.width = '100%'; // Remplir la barre à 100%\n this.els.password_form.password.classList.add('input-success'); // Ajouter la bordure verte\n successIcon.style.display = 'block'; // Afficher l'icône verte\n }\n }\n };\n\n var modal = {\n modalTitle: '',\n modalText: '',\n modalConfirmText: '',\n modalCancelText: '',\n modalType: '',\n onConfirm: null,\n onCancel: null,\n\n showModal: function (modalText, modalConfirmText, modalCancelText, onConfirm, onCancel) {\n this.modalText = modalText;\n this.modalConfirmText = modalConfirmText;\n this.modalCancelText = modalCancelText;\n this.onConfirm = onConfirm;\n this.onCancel = onCancel;\n this.renderModal();\n },\n renderModal: function () {\n var this$1 = this;\n\n var modal = document.createElement('div');\n modal.classList.add('modale');\n modal.innerHTML = \"\\n
\\n \\n \\n \\n \\n \\n \\n
\\n

\" + (this.modalText) + \"

\\n
\\n \\n \\n
\\n
\\n
\\n \";\n document.body.appendChild(modal);\n\n modal.querySelector('.modale--buttons-confirm').addEventListener('click', function () {\n this$1.closeModal();\n if (this$1.onConfirm) { this$1.onConfirm(); }\n });\n modal.querySelector('.modale--buttons-cancel').addEventListener('click', function () {\n this$1.closeModal();\n if (this$1.onCancel) { this$1.onCancel(); }\n });\n modal.querySelector('.modale-close').addEventListener('click', function () {\n this$1.closeModal();\n });\n },\n showInformationModal: function (modalTitle, modalText, modalConfirmText, modalType, onConfirm) {\n this.modalTitle = modalTitle;\n this.modalText = modalText;\n this.modalConfirmText = modalConfirmText;\n this.onConfirm = onConfirm;\n this.modalType = modalType;\n this.renderInformationModal();\n },\n renderInformationModal: function () {\n var this$1 = this;\n\n var modal = document.createElement('div');\n modal.classList.add('modale');\n modal.innerHTML = \"\\n
\\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n

\" + (this.modalTitle) + \"

\\n
\\n

\" + (this.modalText) + \"

\\n
\\n \\n
\\n
\\n
\\n \";\n document.body.appendChild(modal);\n\n modal.querySelector('.modale--buttons-confirm').addEventListener('click', function () {\n this$1.closeModal();\n if (this$1.onConfirm) { this$1.onConfirm(); }\n });\n modal.querySelector('.modale-close').addEventListener('click', function () {\n this$1.closeModal();\n });\n },\n closeModal: function () {\n var modale = document.querySelector('.modale');\n if (modale) {\n modale.remove();\n }\n }\n };\n\n var Register = {\n els: {\n $wrapper: null,\n inscription_form: {\n $wrapper: null,\n error: null,\n },\n addAddressButton: null,\n addAddressForm: null,\n cancelAddressButton: null,\n confirmAddressButton: null,\n addressesList: null,\n allFormElements: null,\n inputFields: null,\n rppsNumber: null,\n cptsNative: null,\n lastnameInput: null,\n firstnameInput: null,\n emailInput: null,\n phoneInput: null,\n passwordInput: null,\n passwordError: null,\n addressError: null,\n indexSaver: null,\n passwordStrengthBar: null,\n userSpecialty: null\n },\n addresses: [],\n allCpts: [],\n init: function init() {\n var this$1 = this;\n\n this.els.$wrapper = document.querySelector(\".js-register\");\n if (this.els.$wrapper) {\n this.setupElements();\n this.bindEvents();\n\n Promise.all([this.getAllCpts()])\n .then(function () {\n this$1.fillFormData();\n this$1.calculatePercentage();\n })\n .catch(function (error) {\n console.error(\"Erreur lors de l'initialisation :\", error);\n });\n\n this.updateProgress(0);\n }\n },\n setupElements: function setupElements() {\n var this$1 = this;\n\n this.els.addAddressButton = document.querySelector(\".add__address__btn\");\n this.els.addAddressForm = document.querySelector(\".add__address__form\");\n this.els.addAddressContainer = document.querySelector(\n \".add__address__container\"\n );\n this.els.addressListButton = document.querySelector(\n \".address__list__button\"\n );\n this.els.confirmAddressButton = document.querySelector(\".confirm-address\");\n this.els.addressesList = document.getElementById(\"addresses-list\");\n this.els.allFormElements = document.querySelectorAll(\n \"#password, #register button, .register__header, .label__container input, .label__container select, #terms, .label, .rgpd__title, .terms__label, .progress-container\"\n );\n this.els.inputFields = document.querySelectorAll(\".label__container input, .label__container select, .label__container textarea\");\n this.els.terms = document.querySelector(\"#terms\");\n this.els.rppsNumber = document.getElementById(\"rpps-number\");\n this.els.lastnameInput = document.querySelector('[name=\"lastname\"]');\n this.els.firstnameInput = document.querySelector('[name=\"firstname\"]');\n this.els.emailInput = document.querySelector('[name=\"email\"]');\n this.els.passwordInput = document.querySelector('[name=\"password\"]');\n this.els.passwordError = document\n .getElementById(\"password-error\")\n .querySelector(\"p\");\n this.els.passwordValidationIcon = document.getElementById(\n \"password-validation-icon\"\n );\n this.els.passwordStrengthBar = document.getElementById(\n \"password-strength-bar\"\n );\n this.els.togglePasswordButton = document.getElementById(\"toggle-password\");\n this.els.cancelAddressButton = document.querySelector(\".cancel-button\");\n this.els.phoneInput = document.querySelector('[name=\"phone\"]');\n this.els.inscription_form.$wrapper =\n document.getElementById(\"registerForm\");\n this.els.addressError = document\n .getElementById(\"address-error\")\n .querySelector(\"p\");\n this.els.addressError.style.display = \"none\";\n this.els.inscription_form_error = document\n .getElementById(\"register-error\");\n this.els.inscription_form_error.style.display = \"none\";\n this.els.passwordError.style.display = \"none\";\n this.els.addAddressButton = document.querySelector(\".add__address__btn\");\n document.addEventListener(\"click\", function (event) {\n if (event.target.closest(\".address__list__button\")) {\n this$1.showAddAddressForm();\n }\n });\n this.els.cptsInput = document.querySelector(\"#cptsInput\");\n this.els.userSpecialty = document.querySelector(\"#user__specialty\");\n },\n bindEvents: function bindEvents() {\n var this$1 = this;\n\n this.els.addAddressButton.addEventListener(\n \"click\",\n this.showAddAddressForm.bind(this)\n );\n this.els.terms.addEventListener(\"change\", function () {\n this$1.calculatePercentage();\n });\n if (this.els.cancelAddressButton) {\n this.els.cancelAddressButton.addEventListener(\n \"click\", function (event) {\n event.preventDefault();\n this$1.handleAddressChange(event);\n }\n );\n }\n this.els.confirmAddressButton.addEventListener(\"click\", function (event) {\n event.preventDefault();\n var addressInput =\n this$1.els.addAddressForm.querySelector(\"#addressInput\").value;\n var postalCodeInput =\n this$1.els.addAddressForm.querySelector(\"#postalCodeInput\").value;\n var cityInput =\n this$1.els.addAddressForm.querySelector(\"#cityInput\").value;\n\n if (addressInput && postalCodeInput && cityInput) {\n this$1.confirmAddress(event);\n } else {\n var buttonEffect = this$1.els.$wrapper.querySelector(\".confirm-address\");\n buttonEffect.classList.add(\"vibrate\");\n setTimeout(function () {\n buttonEffect.classList.remove(\"vibrate\");\n }, 500);\n console.error(\"Address, postal code, and city are required.\");\n }\n });\n\n this.els.inscription_form.$wrapper.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n this$1.inscription();\n });\n\n this.els.emailInput.addEventListener(\"change\", function () {\n this$1.calculatePercentage();\n });\n this.els.firstnameInput.addEventListener(\"change\", function () {\n this$1.calculatePercentage();\n });\n this.els.lastnameInput.addEventListener(\"change\", function () {\n this$1.calculatePercentage();\n });\n this.els.phoneInput.addEventListener(\"change\", function () {\n this$1.calculatePercentage();\n });\n this.els.passwordInput.addEventListener(\"change\", function () {\n this$1.calculatePercentage();\n });\n\n if (this.els.togglePasswordButton) {\n this.els.togglePasswordButton.addEventListener(\"click\", function () {\n var passwordField = this$1.els.passwordInput;\n var passwordToggleIcon =\n this$1.els.togglePasswordButton.querySelector(\"img\");\n\n var openEyeIcon = passwordToggleIcon.getAttribute(\"data-open\");\n var closeEyeIcon = passwordToggleIcon.getAttribute(\"data-close\");\n\n if (passwordField.type === \"password\") {\n passwordField.type = \"text\";\n passwordToggleIcon.src = closeEyeIcon;\n passwordToggleIcon.alt = \"Hide Password\";\n } else {\n passwordField.type = \"password\";\n passwordToggleIcon.src = openEyeIcon;\n passwordToggleIcon.alt = \"Show Password\";\n }\n });\n }\n\n this.els.passwordInput.addEventListener(\"input\", function () {\n var password = this$1.els.passwordInput.value;\n var strength = this$1.getPasswordStrength(password);\n this$1.updatePasswordFeedback(strength);\n });\n this.els.inputFields.forEach(function (input) {\n input.addEventListener(\"input\", function () { return this$1.checkInputContent(input); });\n input.addEventListener(\"focus\", function () { return this$1.checkInputContent(input); });\n input.addEventListener(\"blur\", function () { return this$1.checkInputContent(input); });\n });\n },\n showAddAddressForm: function showAddAddressForm(isNew) {\n var this$1 = this;\n if ( isNew === void 0 ) isNew = true;\n\n var inputs = [\n this.els.addAddressForm.querySelector(\"#addressInput\"),\n this.els.addAddressForm.querySelector(\"#postalCodeInput\"),\n this.els.addAddressForm.querySelector(\"#cityInput\"),\n this.els.addAddressForm.querySelector(\"#cptsInput\") ];\n this.els.addAddressForm.querySelector(\"#cptsInput\").classList.add(\"has-content\");\n\n if (isNew) {\n inputs.forEach(function (input) {\n input.value = \"\";\n });\n }\n\n inputs.forEach(function (input) {\n this$1.checkInputContent(input);\n });\n\n this.els.addAddressContainer.style.display = \"none\";\n this.els.addAddressForm.style.display = \"flex\";\n this.disableFormElements();\n },\n handleAddressChange: function handleAddressChange(e) {\n e.preventDefault();\n this.els.addAddressForm.style.display = \"none\";\n this.els.addAddressButton.style.display = \"flex\";\n this.els.addAddressContainer.style.display = \"flex\";\n this.enableFormElements();\n this.currentEditingIndex = undefined;\n },\n confirmAddress: function confirmAddress(e) {\n e.preventDefault();\n var updatedAddress = {\n address: this.els.addAddressForm.querySelector(\"#addressInput\").value,\n postalCode: this.els.addAddressForm.querySelector(\"#postalCodeInput\").value,\n city: this.els.addAddressForm.querySelector(\"#cityInput\").value,\n cpts: this.els.addAddressForm.querySelector(\"#cptsInput\").value,\n main: false,\n };\n\n if (this.currentEditingIndex !== undefined) {\n this.addresses[this.currentEditingIndex] = updatedAddress;\n } else {\n this.addresses.push(updatedAddress);\n this.els.addAddressButton.style.display = \"flex\";\n }\n this.updateAddressesList();\n this.handleAddressChange(e);\n this.primaryAddress(this.els.indexSaver);\n },\n updateAddressesList: function updateAddressesList() {\n var this$1 = this;\n\n if (this.addresses.length === 1) {\n this.addresses[0].main = true;\n this.els.indexSaver = 0;\n }\n\n this.els.addressesList.innerHTML = \"\";\n this.addresses.forEach(function (address, index) {\n var addressHTML = this$1.addAddressToList(address, index);\n this$1.els.addressesList.insertAdjacentHTML(\"beforeend\", addressHTML);\n });\n\n this.attachButtonEvents();\n this.attachRadioEvents();\n\n this.els.addressesList.insertAdjacentHTML(\n \"beforeend\",\n this.els.addAddressButton.outerHTML\n );\n this.els.addressListButton = document.querySelector(\".add__address__btn\");\n this.els.addressListButton.addEventListener(\"click\", function () {\n this$1.showAddAddressForm();\n });\n\n if (this.els.indexSaver === null) {\n this.els.indexSaver = 0;\n }\n\n this.primaryAddress(this.els.indexSaver);\n this.updateSelectedClass();\n },\n attachButtonEvents: function attachButtonEvents() {\n var this$1 = this;\n\n var deleteButtons = document.querySelectorAll(\".delete-button\");\n deleteButtons.forEach(function (button, index) {\n button.addEventListener(\"click\", function (event) {\n event.preventDefault();\n this$1.showConfirmationModal(index);\n });\n });\n var editButtons = document.querySelectorAll(\".edit-button\");\n editButtons.forEach(function (button, index) {\n button.addEventListener(\"click\", function (event) {\n event.preventDefault();\n this$1.editAddress(index);\n });\n });\n var primaryRadioButtons = document.querySelectorAll(\n \".primary-address-button\"\n );\n primaryRadioButtons.forEach(function (button, index) {\n button.addEventListener(\"click\", function () {\n this$1.primaryAddress(index);\n });\n });\n },\n addAddressToList: function addAddressToList(address, index) {\n // Trouver le nom du cpts à partir de l'ID\n var cptsName = '';\n if (this.allCpts && address.cpts) {\n var matchingCpt = this.allCpts.find(function (cpt) { return cpt.id == address.cpts; });\n if (matchingCpt) {\n cptsName = matchingCpt.title;\n } else {\n cptsName = 'CPTS non trouvé'; // Ou gérez cela comme vous le souhaitez\n }\n }\n\n return (\"\\n
\\n
\\n \\n
\\n
\\n\");\n },\n disableFormElements: function disableFormElements() {\n var this$1 = this;\n\n this.els.allFormElements.forEach(function (element) {\n if (!this$1.els.addAddressForm.contains(element)) {\n element.disabled = true;\n element.style.filter = \"grayscale(1)\";\n element.style.opacity = \".2\";\n }\n });\n },\n enableFormElements: function enableFormElements() {\n this.els.allFormElements.forEach(function (element) {\n element.disabled = false;\n element.style.filter = \"grayscale(0)\";\n element.style.opacity = \"1\";\n });\n },\n checkInputContent: function checkInputContent(input) {\n if (input.value.trim() !== \"\") {\n input.classList.add(\"has-content\");\n } else if (!input.classList.contains(\"cpts__field\")) {\n input.classList.remove(\"has-content\");\n }\n },\n deleteAddress: function deleteAddress(index) {\n if (this.els.indexSaver > index && this.els.indexSaver !== 0) {\n this.els.indexSaver -= 1;\n }\n if (this.els.indexSaver === index) {\n this.els.indexSaver = null;\n }\n this.addresses.splice(index, 1);\n this.updateAddressesList();\n },\n primaryAddress: function primaryAddress(index) {\n var this$1 = this;\n\n this.addresses.forEach(function (item, loopIndex) {\n item.main = loopIndex === index;\n if (loopIndex === index) {\n document.getElementById((\"addressRadio-\" + loopIndex)).checked = true;\n this$1.els.addressError.innerHTML = \"\";\n }\n });\n\n this.els.indexSaver = index;\n this.calculatePercentage();\n this.updateSelectedClass();\n },\n editAddress: function editAddress(index) {\n var address = this.addresses[index];\n if (this.els.addAddressForm.querySelector(\"#addressInput\")) {\n this.els.addAddressForm.querySelector(\"#addressInput\").value =\n address.address;\n }\n if (this.els.addAddressForm.querySelector(\"#postalCodeInput\")) {\n this.els.addAddressForm.querySelector(\"#postalCodeInput\").value =\n address.postalCode;\n }\n if (this.els.addAddressForm.querySelector(\"#cityInput\")) {\n this.els.addAddressForm.querySelector(\"#cityInput\").value = address.city;\n }\n if (this.els.addAddressForm.querySelector(\"#cptsInput\")) {\n this.els.addAddressForm.querySelector(\"#cptsInput\").value = address.cpts;\n }\n this.currentEditingIndex = index;\n this.showAddAddressForm(false);\n },\n attachRadioEvents: function attachRadioEvents() {\n var this$1 = this;\n\n var radios = this.els.addressesList.querySelectorAll(\".primary-address-button\");\n radios.forEach(function (radio, index) {\n radio.addEventListener(\"change\", function () {\n this$1.primaryAddress(index);\n this$1.updateSelectedClass();\n });\n });\n },\n fillFormData: function fillFormData() {\n var this$1 = this;\n\n var userData = JSON.parse(window.localStorage.getItem(\"userData\"));\n\n if (!userData) {\n return;\n }\n\n var rpps,\n lastname,\n cptsTitle,\n cptsId,\n specialty,\n firstname = \"\";\n\n userData.forEach(function (item) {\n rpps = item[\"rpps\"];\n lastname = item[\"lastname\"];\n firstname = item[\"firstname\"];\n cptsTitle = this$1.normalizeQuotes(item[\"cpts\"]);\n\n var matchingCpt = this$1.allCpts.find(function (cpt) { return cpt.title === cptsTitle; });\n if (matchingCpt) {\n cptsId = matchingCpt.id;\n } else {\n console.warn((\"La valeur \\\"\" + cptsTitle + \"\\\" n'existe pas dans les cpts disponibles.\"));\n cptsId = \"\";\n }\n\n specialty = item[\"specialty\"];\n\n var updatedAddress = {\n address: item[\"street\"],\n postalCode: item[\"postal_code\"],\n city: item[\"city\"],\n cpts: cptsId,\n };\n\n this$1.addresses.push(updatedAddress);\n });\n\n this.updateAddressesList();\n\n var firstInput = this.els.addressesList.querySelector('input');\n var firstItem = this.els.addressesList.querySelector('.address-item');\n\n if (firstInput) {\n firstInput.checked = true;\n firstItem.classList.add(\"address-item--selected\");\n }\n\n this.els.rppsNumber.innerHTML = rpps;\n this.els.lastnameInput.value = lastname;\n this.els.lastnameInput.focus();\n this.els.firstnameInput.value = firstname;\n this.els.firstnameInput.focus();\n this.els.cptsInput.value = cptsId;\n\n this.els.userSpecialty.innerHTML = specialty;\n\n this.checkInputContent(this.els.lastnameInput);\n this.checkInputContent(this.els.firstnameInput);\n },\n inscription: function inscription() {\n var this$1 = this;\n\n var registerButton = this.els.$wrapper.querySelector(\".js-register-btn\");\n var loader = registerButton.querySelector(\".loader\");\n loader.style.display = \"inline-block\";\n\n var password = this.els.passwordInput.value;\n if (this.getPasswordStrength(password) < 1) {\n loader.style.display = \"none\";\n return;\n }\n\n var addressError = false;\n var addressErrorMessage = \"\";\n if (this.addresses.length === 0) {\n addressError = true;\n addressErrorMessage = \"Veuillez indiquer un lieu d'exercice.\";\n } else {\n var radios = this.els.addressesList.querySelectorAll(\".primary-address-button\");\n var primarySelected = Array.from(radios).some(function (radio) { return radio.checked; });\n\n if (!primarySelected) {\n addressError = true;\n addressErrorMessage = \"Veuillez choisir un lieu d'exercice principal.\";\n }\n }\n\n if (addressError) {\n this.els.addressError.innerHTML = addressErrorMessage;\n this.els.addressError.style.display = \"block\";\n loader.style.display = \"none\";\n return;\n }\n\n var formData = {\n email: this.els.emailInput.value,\n password: this.els.passwordInput.value,\n firstname: this.els.firstnameInput.value,\n lastname: this.els.lastnameInput.value,\n phone: this.els.phoneInput.value,\n rpps: this.els.rppsNumber.innerHTML,\n specialty: this.els.userSpecialty.innerHTML,\n addresses: this.addresses,\n };\n\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"inscription\",\n params: JSON.stringify({\n userData: formData,\n }),\n },\n });\n\n this.saveRequest.promise\n .then(function (response) {\n if (!response.success) {\n this$1.displayError(response.errorMessage);\n loader.style.display = \"none\";\n } else {\n window.location.href = \"/dashboard\";\n }\n })\n .catch(function (error) {\n this$1.displayError(error);\n loader.style.display = \"none\";\n });\n\n this.calculatePercentage();\n },\n displayError: function displayError(message) {\n this.els.inscription_form_error.innerHTML = message;\n this.els.inscription_form_error.style.display = \"block\";\n },\n showConfirmationModal: function showConfirmationModal(index) {\n var this$1 = this;\n\n var message = \"Êtes-vous sûr de vouloir supprimer cette adresse ?\";\n var confirmText = \"Confirmer\";\n var cancelText = \"Annuler\";\n modal.showModal(\n message,\n confirmText,\n cancelText,\n function () {\n this$1.deleteAddress(index);\n },\n function () {\n }\n );\n },\n getPasswordStrength: function getPasswordStrength(password) {\n var strength = 0;\n\n if (password.length < 8) {\n return strength;\n }\n\n if (/[A-Z]/.test(password)) { strength++; }\n if (/\\d/.test(password)) { strength++; }\n if (/[@$!%*?&#]/.test(password)) { strength++; }\n\n return strength;\n },\n updatePasswordFeedback: function updatePasswordFeedback(strength) {\n this.els.passwordError.classList.remove(\"error\", \"success\");\n this.els.passwordError.textContent = \"\";\n this.els.passwordInput.classList.remove(\"input-error\", \"input-success\");\n this.els.passwordStrengthBar.className = \"password-strength-bar\";\n this.els.passwordStrengthBar.style.width = \"0%\";\n\n var errorIcon =\n this.els.passwordValidationIcon.querySelector('img[alt=\"Error\"]');\n var successIcon =\n this.els.passwordValidationIcon.querySelector('img[alt=\"Success\"]');\n\n errorIcon.style.display = \"none\";\n successIcon.style.display = \"none\";\n\n var passwordError = this.els.passwordError;\n\n if (this.els.passwordInput.value.length < 8 || strength === 0) {\n this.els.passwordError.textContent =\n \"Le mot de passe doit comporter au moins 8 caractères, une majuscule, un chiffre, et un caractère spécial.\";\n this.els.passwordError.classList.add(\"error\");\n this.els.passwordStrengthBar.style.width = \"0%\";\n this.els.passwordInput.classList.add(\"input-error\");\n errorIcon.style.display = \"block\";\n passwordError.style.display = \"block\";\n }\n\n if (strength === 1) {\n this.els.passwordError.innerHTML = \"Niveau de sécurité : FAIBLE\";\n this.els.passwordError.classList.add(\"error\");\n this.els.passwordStrengthBar.classList.add(\"low\");\n this.els.passwordStrengthBar.style.width = \"33%\";\n this.els.passwordInput.classList.add(\"input-error\");\n errorIcon.style.display = \"block\";\n passwordError.style.display = \"block\";\n } else if (strength === 2) {\n this.els.passwordError.innerHTML = \"Niveau de sécurité : BIEN\";\n this.els.passwordError.classList.add(\"success\");\n this.els.passwordStrengthBar.classList.add(\"medium\");\n this.els.passwordStrengthBar.style.width = \"66%\";\n this.els.passwordInput.classList.add(\"input-success\");\n successIcon.style.display = \"block\";\n passwordError.style.display = \"block\";\n } else if (strength >= 3) {\n this.els.passwordError.innerHTML = \"Niveau de sécurité : TRÈS BIEN\";\n this.els.passwordError.classList.add(\"success\");\n this.els.passwordStrengthBar.classList.add(\"high\");\n this.els.passwordStrengthBar.style.width = \"100%\";\n this.els.passwordInput.classList.add(\"input-success\");\n successIcon.style.display = \"block\";\n passwordError.style.display = \"block\";\n }\n },\n updateProgress: function updateProgress(percentage) {\n var progressElement = document.querySelector(\".progress\");\n var percentageDisplay = document.querySelector(\".percentage-display\");\n\n progressElement.style.width = percentage + \"%\";\n percentageDisplay.textContent = percentage + \"%\";\n percentageDisplay.style.width = percentage + \"%\";\n },\n calculatePercentage: function calculatePercentage() {\n var addressSelect = false;\n var a = Array.from(\n this.els.$wrapper.querySelectorAll(\".primary-address-button\")\n );\n if (a.length === 0) {\n addressSelect = false;\n } else {\n for (var i = 0; i < a.length; i++) {\n if (a[i].checked) {\n addressSelect = true;\n }\n }\n }\n var termsChecked = this.els.$wrapper.querySelector(\"#terms\").checked;\n var percentage = 0;\n var formData = {\n email: this.els.emailInput.value,\n password: this.els.passwordInput.value,\n firstname: this.els.firstnameInput.value,\n lastname: this.els.lastnameInput.value,\n phone: this.els.phoneInput.value,\n address: addressSelect,\n cgu: termsChecked,\n };\n var part = 50 / Object.keys(formData).length;\n for (var key in formData) {\n if (formData[key]) {\n if (key === \"password\") {\n var strength = this.getPasswordStrength(formData[key]);\n if (strength >= 1) {\n percentage += part;\n }\n } else {\n percentage += part;\n }\n }\n }\n percentage = Math.round(percentage, 1);\n this.updateProgress(percentage);\n },\n getAllCpts: function getAllCpts() {\n var this$1 = this;\n\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"get_all_cpts\",\n },\n });\n return this.saveRequest.promise\n .then(function (response) {\n if (response.success) {\n var cptsInput = this$1.els.$wrapper.querySelector(\"#cptsInput\");\n\n var defaultOption = document.createElement(\"option\");\n defaultOption.value = \"\";\n defaultOption.text = \"Sélectionner une CPTS\";\n defaultOption.selected = true;\n defaultOption.disabled = false;\n cptsInput.appendChild(defaultOption);\n\n this$1.allCpts = response.data;\n this$1.allCpts.forEach(function (cpt) {\n var option = document.createElement(\"option\");\n var decodedTitle = this$1.decodeHTMLEntities(cpt.title);\n option.value = cpt.id;\n option.text = decodedTitle;\n cptsInput.appendChild(option);\n });\n } else {\n console.error(\"Erreur lors de la récupération des CPTs :\", response.data);\n }\n })\n .catch(function (error) {\n console.error(\"Erreur lors de la récupération des CPTs :\", error);\n });\n },\n decodeHTMLEntities: function decodeHTMLEntities(text) {\n var textarea = document.createElement(\"textarea\");\n textarea.innerHTML = text;\n return textarea.value;\n },\n normalizeQuotes: function normalizeQuotes(str) {\n return str.replace(/'/g, '’').replace(/`/g, '’').replace(/“/g, '”').replace(/”/g, '”').trimEnd();\n },\n updateSelectedClass: function updateSelectedClass() {\n var radios = this.els.addressesList.querySelectorAll(\".primary-address-button\");\n radios.forEach(function (radio) {\n var item = radio.closest(\".address-item\");\n if (radio.checked) {\n item.classList.add(\"address-item--selected\");\n } else {\n item.classList.remove(\"address-item--selected\");\n }\n });\n }\n };\n\n var MissingPassword = {\n els: {\n $wrapper: null,\n form: {\n $wrapper: null,\n rpps: null,\n rpps_error: null,\n },\n email_sent_message: null,\n },\n init: function init() {\n this.els.$wrapper = document.querySelector('.js-missing-pwd');\n if (this.els.$wrapper) {\n this.els.form.$wrapper = this.els.$wrapper.querySelector('#missingPwdForm');\n this.els.form.rpps = this.els.form.$wrapper.querySelector('[name=\"rpps\"]');\n this.els.form.rpps_error = document.getElementById('rpps-error-message').querySelector('p');\n this.els.email_sent_message = document.getElementById('email-sent-message');\n this.els.previous_step = this.els.$wrapper.querySelector('.previous-step');\n this.els.form.rpps_error.style.display = 'none';\n if (this.els.email_sent_message) {\n this.els.email_sent_message.style.display = 'none';\n }\n\n this.initEvents();\n }\n },\n initEvents: function initEvents() {\n var this$1 = this;\n\n this.els.previous_step.addEventListener('click', function (e) {\n window.location.href = '/login';\n });\n this.els.form.$wrapper.addEventListener('submit', function (e) {\n\n e.preventDefault();\n this$1.checkRPPS();\n });\n },\n\n /**\n * Validation et envoi du RPPS\n */\n checkRPPS: function checkRPPS() {\n var rppsValue = this.els.form.rpps.value;\n var hasError = false;\n var errorMessage = \"\";\n\n\n if (!rppsValue) {\n hasError = true;\n errorMessage = \"Veuillez saisir votre identifiant RPPS\";\n } else if (!Number.isInteger(parseInt(rppsValue))) {\n hasError = true;\n errorMessage = \"Identifiant RPPS invalide\";\n } else if (rppsValue.length !== 11) {\n hasError = true;\n errorMessage = \"Le numéro RPPS doit contenir exactement 11 caractères\";\n }\n\n if (hasError) {\n this.displayRPPSValidationError(errorMessage);\n } else {\n this.els.form.rpps_error.style.display = 'none';\n this.sendRPPSRequest(rppsValue);\n }\n },\n\n\n sendRPPSRequest: function sendRPPSRequest(rppsValue) {\n var this$1 = this;\n\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'check_rpps_and_send_email',\n params: JSON.stringify({\n rpps: rppsValue\n })\n },\n });\n\n this.saveRequest.promise.then(function (response) {\n if (!response.success) {\n this$1.displayRPPSValidationError(response.data || response.errorMessage || 'Aucun RPPS trouvé.');\n } else {\n this$1.displaySuccessMessage();\n }\n this$1.saveRequest = null;\n }).catch(function (error) {\n var messageError = __('An error has occurred, please try again.', 'medvigie');\n this$1.displayRPPSValidationError(messageError);\n console.error(error);\n this$1.saveRequest = null;\n });\n },\n\n /**\n * Afficher un message d'erreur de validation pour le RPPS\n */\n displayRPPSValidationError: function displayRPPSValidationError(message) {\n this.els.form.rpps_error.innerHTML = message;\n this.els.form.rpps_error.style.display = 'block';\n this.els.form.rpps.classList.add('error');\n },\n\n /**\n * Afficher un message de succès après l'envoi de l'email\n */\n displaySuccessMessage: function displaySuccessMessage() {\n this.els.form.rpps_error.style.display = 'none';\n this.els.form.rpps.classList.remove('error');\n\n if (this.els.email_sent_message) {\n this.els.email_sent_message.style.display = 'block';\n } else {\n this.displayPopupMessage();\n }\n },\n\n displayPopupMessage: function displayPopupMessage() {\n var title = \"Mail envoyé\";\n var message = \"Un email a été envoyé à l'adresse associée à ce RPPS.\";\n var confirmText = \"Ok\";\n modal.showInformationModal(title, message, confirmText, function () {});\n },\n };\n\n var ProfileCompletion = {\n percentage: 0,\n els: {\n progressBar: null,\n progressText: null,\n actionsProfile: null,\n userActions: null,\n userPolygon: null,\n },\n init: function init() {\n var this$1 = this;\n\n var isProfileComplete = localStorage.getItem('profileComplete') === 'true';\n this.setupElements();\n if (!isProfileComplete) {\n this.showProgressBar();\n }\n\n this.updateProgressBar(0);\n\n return this.fetchProfileCompletionPercentage()\n .then(function (percentage) {\n this$1.percentage = percentage;\n this$1.updateProgressBar();\n if (this$1.percentage === 100) {\n localStorage.setItem('profileComplete', 'true');\n if (!localStorage.getItem('profileFireworks')) {\n var page = document.querySelector('#page');\n page.classList.add('fireworks');\n var interval = setInterval(this$1.createFirework, 200);\n setTimeout(function () {\n clearInterval(interval);\n document.querySelectorAll('.particle').forEach(function (particle) { return particle.remove(); });\n }, 5000);\n }\n localStorage.setItem('profileFireworks', 'true');\n this$1.hideProgressBar();\n } else {\n localStorage.removeItem('profileComplete');\n localStorage.removeItem('profileFireworks');\n this$1.showProgressBar();\n }\n this$1.bindEvents();\n })\n .catch(function (error) {\n console.error('Erreur lors de la récupération du pourcentage de complétion du profil:', error);\n throw error;\n });\n },\n setupElements: function setupElements() {\n this.els.progressBar = document.querySelector('.progress__bar');\n this.els.progressText = document.querySelector('.progress__text');\n this.els.actionsProfile = document.querySelector('.actions__profile');\n this.els.userActions = document.querySelector('.user__actions');\n this.els.userPolygon = document.querySelector('.user__polygon');\n },\n fetchProfileCompletionPercentage: function fetchProfileCompletionPercentage() {\n return utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'get_profile_completion_percentage',\n },\n }).promise.then(function (response) {\n if (response.success) {\n return response.data.percentage;\n } else {\n console.error('Erreur lors de la récupération du pourcentage de complétion.');\n return 0;\n }\n });\n },\n updateProgressBar: function updateProgressBar() {\n if (this.els.progressBar) {\n this.els.progressBar.style.width = (this.percentage) + \"%\";\n }\n if (this.els.progressText) {\n this.els.progressText.textContent = (this.percentage) + \"%\";\n }\n },\n showProgressBar: function showProgressBar() {\n var progressBarContainer = document.querySelector('.actions__progress');\n if (progressBarContainer) {\n progressBarContainer.style.display = 'flex';\n }\n },\n hideProgressBar: function hideProgressBar() {\n var progressBarContainer = document.querySelector('.actions__progress');\n if (progressBarContainer) {\n progressBarContainer.style.display = 'none';\n }\n this.els.userActions.style.top = '3.5rem';\n this.els.userPolygon.style.top = '2.5rem';\n },\n bindEvents: function bindEvents() {\n var this$1 = this;\n\n var profileFields = document.querySelectorAll('.profile-field');\n profileFields.forEach(function (field) {\n field.addEventListener('input', function () {\n this$1.onFieldChange();\n });\n });\n },\n updateProgressInElement: function updateProgressInElement(element) {\n this.fetchProfileCompletionPercentage().then(function (percentage) {\n var progressBar = element.querySelector('.progress__bar');\n var progressText = element.querySelector('.progress__text');\n if (progressBar) {\n progressBar.style.width = percentage + \"%\";\n }\n if (progressText) {\n progressText.textContent = percentage + \"%\";\n }\n });\n },\n onFieldChange: function onFieldChange() {\n var this$1 = this;\n\n this.fetchProfileCompletionPercentage().then(function (percentage) {\n this$1.percentage = percentage;\n this$1.updateProgressBar();\n\n if (this$1.percentage === 100) {\n localStorage.setItem('profileComplete', 'true');\n this$1.hideProgressBar();\n if (!localStorage.getItem('profileFireworks')) {\n var page = document.querySelector('#page');\n page.classList.add('fireworks');\n var interval = setInterval(this$1.createFirework, 200);\n setTimeout(function () {\n clearInterval(interval);\n document.querySelectorAll('.particle').forEach(function (particle) { return particle.remove(); });\n }, 5000);\n }\n localStorage.setItem('profileFireworks', 'true');\n } else {\n localStorage.removeItem('profileComplete');\n var progressBarContainer = document.querySelector('.progress__bar__container');\n if (progressBarContainer) {\n progressBarContainer.style.display = 'flex';\n }\n }\n });\n },\n createFirework: function createFirework() {\n var fireworksContainer = document.querySelector('.fireworks');\n var firework = document.createElement('div');\n firework.classList.add('firework');\n\n for (var i = 0; i < 8; i++) {\n var explosion = document.createElement('div');\n explosion.classList.add('explosion');\n\n var spark = document.createElement('div');\n var colors = ['green', 'blue', 'red', 'yellow', 'purple'];\n var randomColor = colors[Math.floor(Math.random() * colors.length)];\n spark.classList.add('spark', randomColor);\n\n explosion.appendChild(spark);\n firework.appendChild(explosion);\n }\n\n firework.style.left = (Math.random() * 100) + \"vw\";\n firework.style.top = (Math.random() * 100) + \"vh\";\n\n fireworksContainer.appendChild(firework);\n\n setTimeout(function () {\n firework.remove();\n }, 2000);\n }\n };\n\n var EntryModeModal = {\n els: {\n modal: null,\n indicatorValidateBtn: null,\n skipStepLink: null,\n radioButtons: null,\n selectionLabels: null,\n entryModeEmpty: null,\n },\n entryMode: null,\n onModalClose: null,\n\n init: function init() {\n this.showEntryModeModal();\n },\n\n setupElements: function setupElements() {\n this.els.modal = document.querySelector('.indicator-modal');\n this.els.indicatorValidateBtn = this.els.modal.querySelector('#indicator-validate-btn');\n this.els.skipStepLink = this.els.modal.querySelector('.skip-step');\n this.els.radioButtons = this.els.modal.querySelectorAll('input[name=\"frequency\"]');\n this.els.selectionLabels = this.els.modal.querySelectorAll('.selection-btn');\n this.els.entryModeEmpty = this.els.modal.querySelector('.indicator-modal-required');\n },\n\n bindEvents: function bindEvents() {\n var this$1 = this;\n\n this.els.indicatorValidateBtn.addEventListener('click', function () {\n if (!this$1.entryMode) {\n this$1.els.entryModeEmpty.style.display = 'flex';\n return;\n }\n this$1.saveEntryMode();\n this$1.closeEntryModeModal();\n });\n\n this.els.skipStepLink.addEventListener('click', function (event) {\n event.preventDefault();\n this$1.closeEntryModeModal();\n });\n\n this.els.radioButtons.forEach(function (radio) {\n radio.addEventListener('change', function () {\n this$1.els.selectionLabels.forEach(function (label) {\n label.classList.remove('selected');\n });\n radio.closest('label').classList.add('selected');\n\n this$1.entryMode = radio.value;\n\n this$1.els.entryModeEmpty.style.display = 'none';\n });\n });\n },\n\n showEntryModeModal: function showEntryModeModal() {\n var this$1 = this;\n\n this.loadUserEntryMode(function () {\n var modalHtml = \"\\n
\\n
\\n
\\n

À quelle fréquence souhaitez-vous renseigner vos saisies ?

\\n
\\n \\n \\n
\\n
\\n

Vous devez choisir une fréquence

\\n
\\n
\\n \\n Passer cette étape\\n
\\n 0%\\n
\\n
\\n
\\n
\\n
\\n
\\n \";\n document.body.insertAdjacentHTML('beforeend', modalHtml);\n this$1.setupElements();\n this$1.bindEvents();\n this$1.updateProgressInModal();\n });\n },\n\n loadUserEntryMode: function loadUserEntryMode(callback) {\n var this$1 = this;\n\n fetch(ajaxurl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({ 'action': 'get_entry_mode' })\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n this$1.entryMode = data.data.entryMode;\n callback();\n })\n .catch(function (error) {\n console.error(\"Erreur lors de la récupération du mode de saisie :\", error);\n callback();\n });\n },\n\n saveEntryMode: function saveEntryMode() {\n utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'save_entry_mode',\n params: JSON.stringify({ entryMode: this.entryMode }),\n },\n }).promise.then(function (response) {\n if (response.success) {\n setTimeout(function () {\n ProfileCompletion.hideProgressBar();\n ProfileCompletion.init();\n ProfileCompletion.els.actionsProfile.style.margin = '21px 0 20px 0';\n }, 500);\n\n } else {\n console.error(\"Erreur lors de l'enregistrement du mode de saisie.\");\n }\n }).catch(function (error) {\n console.error(\"Erreur AJAX :\", error);\n });\n },\n\n closeEntryModeModal: function closeEntryModeModal() {\n this.els.modal.remove();\n if (typeof this.onModalClose === 'function') {\n this.onModalClose();\n }\n },\n\n updateProgressInModal: function updateProgressInModal() {\n if (this.els.modal) {\n ProfileCompletion.updateProgressInElement(this.els.modal);\n }\n },\n };\n\n var indicatorModal = {\n els: {\n indicatorModal: null,\n selectAllBtn: null,\n selectCustomBtn: null,\n indicatorBtns: null,\n indicatorValidateBtn: null,\n skipStepLink: null,\n indicatorEmpty: null,\n confirmEmpty: null,\n cancelEmpty: null,\n },\n isSelectAllActive: false,\n selectedDiseases: [],\n userIndicators: [],\n onModalClose: null,\n\n init: function init() {\n this.showIndicatorModal();\n },\n\n setupElements: function setupElements() {\n this.els.indicatorModal = document.querySelector(\".indicator-modal\");\n this.els.selectAllBtn =\n this.els.indicatorModal.querySelector(\".select-all\");\n this.els.selectCustomBtn =\n this.els.indicatorModal.querySelector(\".select-custom\");\n this.els.indicatorBtns =\n this.els.indicatorModal.querySelectorAll(\".indicator-btn\");\n this.els.indicatorValidateBtn = this.els.indicatorModal.querySelector(\n \"#indicator-validate-btn\"\n );\n this.els.skipStepLink =\n this.els.indicatorModal.querySelector(\".skip-step\");\n this.els.indicatorEmpty = this.els.indicatorModal.querySelector(\n \".indicator-modal-empty\"\n );\n this.els.confirmEmpty =\n this.els.indicatorModal.querySelector(\"#confirmEmpty\");\n this.els.cancelEmpty =\n this.els.indicatorModal.querySelector(\"#cancelEmpty\");\n },\n\n bindEvents: function bindEvents() {\n var this$1 = this;\n\n this.els.selectAllBtn.addEventListener(\n \"click\",\n this.selectAllDiseases.bind(this)\n );\n this.els.selectCustomBtn.addEventListener(\n \"click\",\n this.deselectAllDiseases.bind(this)\n );\n this.els.indicatorBtns.forEach(function (button) {\n button.addEventListener(\n \"click\",\n this$1.toggleDiseaseSelection.bind(this$1)\n );\n });\n this.els.indicatorValidateBtn.addEventListener(\"click\", function () {\n this$1.saveIndicatorSelection();\n if (this$1.selectedDiseases.length === 0) {\n this$1.els.indicatorEmpty.style.display = \"flex\";\n return;\n }\n this$1.closeIndicatorModal();\n if (typeof this$1.onModalClose === \"function\") {\n this$1.onModalClose();\n }\n EntryModeModal.showEntryModeModal();\n });\n this.els.skipStepLink.addEventListener(\"click\", function () {\n this$1.updateUserModalMeta();\n this$1.closeIndicatorModal();\n if (typeof this$1.onModalClose === \"function\") {\n this$1.onModalClose();\n }\n });\n this.els.confirmEmpty.addEventListener(\"click\", function () {\n fetch(ajaxurl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: 'action=set_user_indicator_empty',\n credentials: 'same-origin',\n })\n .then(function (response) { return response.json(); })\n .catch(function (error) {\n console.error('Erreur réseau ou de serveur :', error);\n });\n this$1.updateUserModalMeta();\n this$1.closeIndicatorModal();\n\n setTimeout(function () {\n ProfileCompletion.init();\n }, 500);\n\n if (typeof this$1.onModalClose === \"function\") {\n this$1.onModalClose();\n }\n });\n this.els.cancelEmpty.addEventListener(\"click\", function () {\n this$1.els.indicatorEmpty.style.display = \"none\";\n });\n },\n\n showIndicatorModal: function showIndicatorModal() {\n var this$1 = this;\n\n this.loadUserIndicators()\n .then(function () {\n this$1.selectedDiseases = [];\n var indicatorButtons = \"\";\n var activeIndicators = indicatorsFromCPT.filter(\n function (indicator) { return indicator.state === \"1\"; }\n );\n\n if (activeIndicators.length === 0) {\n indicatorButtons += \"

Il n'existe aucun indicateur de renseigné.

\";\n } else {\n activeIndicators.forEach(function (indicator) {\n var isSelected = this$1.userIndicators.some(\n function (userIndicator) { return userIndicator.id &&\n parseInt(userIndicator.id) ===\n parseInt(indicator.id); }\n );\n var selectedClass = isSelected ? \"selected\" : \"\";\n indicatorButtons += \"\";\n\n if (isSelected) {\n this$1.selectedDiseases.push(parseInt(indicator.id));\n }\n });\n }\n\n var isAllSelected =\n this$1.selectedDiseases.length === activeIndicators.length;\n\n var modalHtml = \"\\n
\\n
\\n
\\n

À quels indicateurs souhaitez-vous vous abonner ? \\n ?\\n
Via MedVigie, participez en deux clics à la surveillance épidémiologique autour de votre lieu d'exercice.
\\n

\\n
\\n \\n \\n
\\n
\\n \" + indicatorButtons + \"\\n
\\n
\\n \\n Passer cette étape\\n
\\n 0%\\n
\\n
\\n
\\n
\\n
\\n

Vous n’avez sélectionné aucun indicateur, êtes-vous sûr de ne pas vouloir contribuer ?

\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \";\n document.body.insertAdjacentHTML(\"beforeend\", modalHtml);\n this$1.setupElements();\n this$1.bindEvents();\n this$1.updateProgressInModal();\n })\n .catch(function (error) {\n console.error(\n \"Erreur lors de la configuration du modal :\",\n error\n );\n });\n },\n\n loadUserIndicators: function loadUserIndicators() {\n var this$1 = this;\n\n return fetch(ajaxurl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams({\n action: \"get_user_indicators\",\n }),\n })\n .then(function (response) { return response.json(); })\n .then(function (response) {\n if (response.success) {\n this$1.userIndicators = response.data;\n }\n })\n .catch(function (error) {\n console.error(\n \"Erreur AJAX lors de la récupération des abonnements :\",\n error\n );\n });\n },\n\n selectAllDiseases: function selectAllDiseases() {\n if (this.isSelectAllActive) {\n this.selectedDiseases = [];\n this.els.indicatorBtns.forEach(function (button) {\n button.classList.remove(\"selected\");\n });\n\n this.els.selectAllBtn.checked = false;\n this.els.selectAllBtn.parentElement.classList.remove(\"selected\");\n this.els.selectCustomBtn.parentElement.classList.remove(\"selected\");\n\n this.isSelectAllActive = false;\n } else {\n this.selectedDiseases = indicatorsFromCPT.map(function (indicator) { return parseInt(indicator.id); }\n );\n this.els.indicatorBtns.forEach(function (button) {\n button.classList.add(\"selected\");\n });\n\n this.els.selectAllBtn.checked = true;\n this.els.selectAllBtn.parentElement.classList.add(\"selected\");\n this.els.selectCustomBtn.parentElement.classList.remove(\"selected\");\n\n this.isSelectAllActive = true;\n }\n },\n\n deselectAllDiseases: function deselectAllDiseases() {\n this.selectedDiseases = [];\n this.els.indicatorBtns.forEach(function (button) {\n button.classList.remove(\"selected\");\n });\n\n this.els.selectCustomBtn.checked = true;\n this.els.selectCustomBtn.parentElement.classList.add(\"selected\");\n this.els.selectAllBtn.parentElement.classList.remove(\"selected\");\n },\n\n toggleDiseaseSelection: function toggleDiseaseSelection(event) {\n var indicatorId = parseInt(\n event.target.getAttribute(\"data-indicator-id\"),\n 10\n );\n var isSelected = this.selectedDiseases.includes(indicatorId);\n\n if (isSelected) {\n this.selectedDiseases = this.selectedDiseases.filter(\n function (id) { return id !== indicatorId; }\n );\n event.target.classList.remove(\"selected\");\n } else {\n this.selectedDiseases.push(indicatorId);\n event.target.classList.add(\"selected\");\n }\n\n if (this.selectedDiseases.length === indicatorsFromCPT.length) {\n this.els.selectAllBtn.checked = true;\n this.els.selectAllBtn.parentElement.classList.add(\"selected\");\n this.els.selectCustomBtn.parentElement.classList.remove(\"selected\");\n } else {\n this.els.selectCustomBtn.checked = true;\n this.els.selectCustomBtn.parentElement.classList.add(\"selected\");\n this.els.selectAllBtn.parentElement.classList.remove(\"selected\");\n }\n },\n\n saveIndicatorSelection: function saveIndicatorSelection() {\n var this$1 = this;\n\n var uniqueSelectedIndicators = Array.from(\n new Set(this.selectedDiseases)\n );\n\n var formData = new FormData();\n formData.append(\"action\", \"save_user_indicator_selection\");\n\n uniqueSelectedIndicators.forEach(function (indicatorId) {\n formData.append(\n \"indicator_subscription_0_indicator[]\",\n indicatorId\n );\n });\n\n fetch(ajaxurl, {\n method: \"POST\",\n body: formData,\n })\n .then(function (response) { return response.json(); })\n .then(function (response) {\n if (response.success) {\n this$1.loadUserIndicators();\n } else {\n console.error(\n \"Erreur lors de la sauvegarde :\",\n response.data\n );\n }\n })\n .catch(function (error) {\n console.error(\"Erreur AJAX :\", error);\n });\n },\n\n closeIndicatorModal: function closeIndicatorModal() {\n this.els.indicatorModal.remove();\n },\n\n updateProgressInModal: function updateProgressInModal() {\n if (this.els.indicatorModal) {\n ProfileCompletion.updateProgressInElement(this.els.indicatorModal);\n }\n },\n\n updateUserModalMeta: function updateUserModalMeta() {\n utils\n .sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"update_user_modal_meta\",\n _wpnonce: modalNonce,\n },\n })\n .promise.then(function (response) {\n if (!response.success) {\n console.error(\n \"Erreur lors de la mise à jour de la métadonnée.\"\n );\n }\n })\n .catch(function (error) {\n console.error(\"Erreur AJAX :\", error);\n });\n },\n };\n\n var IndicatorCalendar = {\n els: {},\n currentMonth: null,\n currentYear: null,\n missingDay: null,\n threeWeeksAgo: null,\n registrationDate: null,\n\n init: function init() {\n if (document.body.classList.contains('page-template-page-login') ||\n document.body.classList.contains('page-template-page-inscription')\n ) {\n return;\n }\n this.els.$wrapper = document.querySelector('.indicator__calendar');\n if (this.els.$wrapper) {\n this.setupInitialDate();\n this.setupElements();\n this.getUserRegistrationDate();\n }\n },\n\n setupInitialDate: function setupInitialDate() {\n var today = new Date();\n this.currentMonth = today.getMonth();\n this.currentYear = today.getFullYear();\n },\n\n getStartMonthYear: function getStartMonthYear(monthsToShow) {\n var month = this.currentMonth;\n var year = this.currentYear;\n\n var startMonth = month - (monthsToShow - 1);\n var startYear = year;\n while (startMonth < 0) {\n startMonth += 12;\n startYear -= 1;\n }\n\n return {startMonth: startMonth, startYear: startYear};\n },\n\n setupElements: function setupElements() {\n var this$1 = this;\n\n var monthNames = [\n 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',\n 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'\n ];\n\n var monthsToShow = 3;\n var ref = this.getStartMonthYear(monthsToShow);\n var startMonth = ref.startMonth;\n var startYear = ref.startYear;\n\n var endMonth = this.currentMonth;\n var endYear = this.currentYear;\n\n var todayDate = new Date();\n this.threeWeeksAgo = new Date();\n this.threeWeeksAgo.setDate(todayDate.getDate() - 21);\n\n var startDate = new Date(startYear, startMonth, 1);\n var endDateObj = new Date(endYear, endMonth + 1, 0);\n var endDate = new Date(endDateObj.getFullYear(), endDateObj.getMonth(), endDateObj.getDate());\n\n var startDateStr = this.formatDate(startDate);\n var endDateStr = this.formatDate(endDate);\n\n EntryModeModal.loadUserEntryMode(function () {\n Promise.all([\n this$1.getUserIndicatorData(startYear, startMonth, endYear, endMonth),\n this$1.fetchMissingCount(EntryModeModal.entryMode, startDateStr, endDateStr)\n ])\n .then(function (ref) {\n var validatedDates = ref[0];\n var missingCount = ref[1];\n\n this$1.generateMonths(monthNames, todayDate, validatedDates);\n\n if (missingCount === 0) {\n this$1.els.missingDay.style.display = 'none';\n } else {\n this$1.els.missingDay.textContent = \"\" + missingCount;\n }\n })\n .catch(function (error) {\n console.error('Error when fetching data:', error);\n this$1.generateMonths(monthNames, todayDate, []);\n });\n });\n\n this.els.missingDay = document.querySelector('.date__missing');\n },\n\n /**\n * AJAX call to your PHP endpoint to retrieve the number of missing days/weeks.\n *\n * @param {String} entryMode 'daily' or 'weekly'\n * @param {String} startDate in 'YYYY-mm-dd' format\n * @param {String} endDate in 'YYYY-mm-dd' format\n * @returns {Promise} The number of missing days/weeks\n */\n fetchMissingCount: function fetchMissingCount(entryMode, startDate, endDate) {\n var userId = 0;\n return fetch(ajaxurl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'\n },\n body: new URLSearchParams({\n 'action': 'get_missing_count',\n 'user_id': userId,\n 'entry_mode': entryMode,\n 'start_date': startDate,\n 'end_date': endDate\n })\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n if (data.success) {\n return data.data.missing_count;\n } else {\n throw new Error(data.data);\n }\n });\n },\n\n /**\n * Fetches (via AJAX) the daily data indicating if a day is validated, pending, etc.\n * This is used to color the calendar cells.\n */\n getUserIndicatorData: function getUserIndicatorData(startYear, startMonth, endYear, endMonth) {\n var startDate = new Date(startYear, startMonth, 1);\n var endDateObj = new Date(endYear, endMonth + 1, 0);\n var endDate = new Date(endDateObj.getFullYear(), endDateObj.getMonth(), endDateObj.getDate());\n\n var startDateStr = this.formatDate(startDate);\n var endDateStr = this.formatDate(endDate);\n\n return fetch(ajaxurl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'\n },\n body: new URLSearchParams({\n 'action': 'user_indicator_data_range',\n 'start_date': startDateStr,\n 'end_date': endDateStr\n })\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n if (data.success) {\n return data.data;\n } else {\n console.error('Error :', data.data);\n return [];\n }\n });\n },\n\n generateMonths: function generateMonths(monthNames, today, indicatorData) {\n if ( indicatorData === void 0 ) indicatorData = [];\n\n var $monthsContainer = this.els.$wrapper.querySelector('.months-container');\n\n var monthsToShow = 3;\n var ref = this.getStartMonthYear(monthsToShow);\n var startMonth = ref.startMonth;\n var startYear = ref.startYear;\n\n var month = startMonth;\n var year = startYear;\n\n $monthsContainer.innerHTML = '';\n\n for (var i = 0; i < monthsToShow; i++) {\n this.createMonthElement(monthNames, month, year, indicatorData, $monthsContainer);\n month++;\n if (month > 11) {\n month = 0;\n year++;\n }\n }\n },\n\n createMonthElement: function createMonthElement(monthNames, month, year, indicatorData, container) {\n var monthWrapper = document.createElement('div');\n monthWrapper.classList.add('month-wrapper');\n\n var monthTitle = document.createElement('h3');\n monthTitle.classList.add('month');\n monthTitle.textContent = (monthNames[month]) + \" \" + year;\n monthWrapper.appendChild(monthTitle);\n\n var calendar = document.createElement('div');\n calendar.classList.add('calendar');\n monthWrapper.appendChild(calendar);\n\n this.generateCalendar(monthNames, month, year, calendar, indicatorData);\n\n container.appendChild(monthWrapper);\n },\n\n generateCalendar: function generateCalendar(monthNames, month, year, $calendar, indicatorData) {\n var this$1 = this;\n if ( indicatorData === void 0 ) indicatorData = [];\n\n this.clearCalendar($calendar);\n this.addEmptyCells($calendar, year, month);\n\n var today = new Date();\n var todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());\n var daysInMonth = new Date(year, month + 1, 0).getDate();\n\n var loop = function ( day ) {\n var dateObj = new Date(year, month, day);\n var dayOfWeek = dateObj.getDay();\n var dateStr = this$1.formatDate(dateObj);\n var indicator = indicatorData.find(function (item) { return item.entry_date === dateStr; });\n var dayCell = this$1.createDayCell(day, dateObj, dayOfWeek, indicator, todayDate);\n $calendar.appendChild(dayCell);\n };\n\n for (var day = 1; day <= daysInMonth; day++) loop( day );\n },\n\n clearCalendar: function clearCalendar($calendar) {\n while ($calendar.firstChild) {\n $calendar.removeChild($calendar.firstChild);\n }\n },\n\n addEmptyCells: function addEmptyCells($calendar, year, month) {\n var firstDay = new Date(year, month, 1).getDay();\n for (var i = 0; i < firstDay; i++) {\n var emptyCell = document.createElement('div');\n emptyCell.classList.add('empty');\n $calendar.appendChild(emptyCell);\n }\n },\n\n createDayCell: function createDayCell(day, dateObj, dayOfWeek, indicator, todayDate) {\n var dayCell = document.createElement('div');\n dayCell.classList.add('day');\n dayCell.textContent = day < 10 ? (\"0\" + day) : day;\n\n this.assignClasses(dayCell, dateObj, dayOfWeek, indicator, todayDate);\n this.addClickListener(dayCell, dateObj);\n\n return dayCell;\n },\n\n assignClasses: function assignClasses(dayCell, dateObj, dayOfWeek, indicator, todayDate) {\n if (EntryModeModal.entryMode === 'weekly' && dayOfWeek !== 1) {\n dayCell.classList.add('disabled');\n }\n\n if (this.isSameDate(dateObj, todayDate)) {\n dayCell.classList.add('today');\n }\n\n if (indicator && dateObj <= todayDate) {\n if (indicator.is_validated === 1) {\n dayCell.classList.add('completed');\n } else if (indicator.is_validated === 0) {\n dayCell.classList.add('pending');\n }\n } else if (\n dateObj <= todayDate &&\n dateObj >= this.threeWeeksAgo &&\n dayOfWeek !== 0 &&\n dayOfWeek !== 6 &&\n (!this.registrationDate || dateObj >= this.registrationDate)\n ) {\n dayCell.classList.add('missing');\n }\n\n if (dayOfWeek === 0 || dayOfWeek === 6) {\n dayCell.classList.add('weekend');\n }\n },\n\n addClickListener: function addClickListener(dayCell, dateObj) {\n var this$1 = this;\n\n if (!dayCell.classList.contains('empty') && !dayCell.classList.contains('disabled')) {\n dayCell.addEventListener('click', function () {\n DataForm.currentDate = dateObj;\n DataForm.updateDateDisplay(EntryModeModal.entryMode);\n DataForm.getUserData();\n this$1.els.$wrapper.style.display = 'none';\n });\n }\n },\n\n navigateMonth: function navigateMonth(delta) {\n var newMonth = this.currentMonth + delta;\n var newYear = this.currentYear;\n\n var today = new Date();\n\n if (newMonth < 0) {\n newMonth = 11;\n newYear -= 1;\n } else if (newMonth > 11) {\n newMonth = 0;\n newYear += 1;\n }\n\n if (newYear > today.getFullYear() || (newYear === today.getFullYear() && newMonth > today.getMonth())) {\n return;\n }\n\n this.currentMonth = newMonth;\n this.currentYear = newYear;\n\n this.refreshMonths();\n this.updateNavButtons();\n },\n\n refreshMonths: function refreshMonths() {\n var this$1 = this;\n\n var monthNames = [\n 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',\n 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'\n ];\n\n var $monthsContainer = this.els.$wrapper.querySelector('.months-container');\n $monthsContainer.innerHTML = '';\n\n var monthsToShow = 3;\n var ref = this.getStartMonthYear(monthsToShow);\n var startMonth = ref.startMonth;\n var startYear = ref.startYear;\n var endMonth = this.currentMonth;\n var endYear = this.currentYear;\n\n var today = new Date();\n this.threeWeeksAgo = new Date();\n this.threeWeeksAgo.setDate(today.getDate() - 21);\n\n var startDate = new Date(startYear, startMonth, 1);\n var endDateObj = new Date(endYear, endMonth + 1, 0);\n var endDate = new Date(endDateObj.getFullYear(), endDateObj.getMonth(), endDateObj.getDate());\n var startDateStr = this.formatDate(startDate);\n var endDateStr = this.formatDate(endDate);\n\n EntryModeModal.loadUserEntryMode(function () {\n Promise.all([\n this$1.getUserIndicatorData(startYear, startMonth, endYear, endMonth),\n this$1.fetchMissingCount(EntryModeModal.entryMode, startDateStr, endDateStr)\n ])\n .then(function (ref) {\n var validatedDates = ref[0];\n var missingCount = ref[1];\n\n this$1.generateMonths(monthNames, today, validatedDates);\n\n if (missingCount === 0) {\n this$1.els.missingDay.style.display = 'none';\n } else {\n this$1.els.missingDay.textContent = \"\" + missingCount;\n }\n })\n .catch(function (error) {\n console.error('Error when fetching data:', error);\n this$1.generateMonths(monthNames, today, []);\n });\n });\n },\n\n updateNavButtons: function updateNavButtons() {\n var today = new Date();\n this.els.$nextButton.disabled = (\n this.currentYear === today.getFullYear() &&\n this.currentMonth === today.getMonth()\n );\n },\n\n toggleCalendarVisibility: function toggleCalendarVisibility() {\n var this$1 = this;\n\n var display = this.els.$wrapper.style.display;\n var newDisplay = (display === 'none' || display === '') ? 'flex' : 'none';\n this.els.$wrapper.style.display = newDisplay;\n\n if (newDisplay === 'flex') {\n requestAnimationFrame(function () {\n this$1.els.$wrapper.scrollTop = this$1.els.$wrapper.scrollHeight;\n });\n }\n },\n\n formatDate: function formatDate(dateObj) {\n var year = dateObj.getFullYear();\n var month = (dateObj.getMonth() + 1).toString().padStart(2, '0');\n var day = dateObj.getDate().toString().padStart(2, '0');\n return (year + \"-\" + month + \"-\" + day);\n },\n\n isSameDate: function isSameDate(date1, date2) {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n );\n },\n\n getUserRegistrationDate: function getUserRegistrationDate() {\n var this$1 = this;\n\n return fetch(ajaxurl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'\n },\n body: new URLSearchParams({\n 'action': 'user_registration_date'\n })\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n if (data.success) {\n this$1.registrationDate = new Date(data.data);\n return data.data;\n } else {\n console.error('Error :', data.data);\n return null;\n }\n });\n }\n };\n\n var DataForm = {\n currentDate: new Date(),\n els: {\n hadVisits: null,\n tableList: null,\n tableCase: null,\n dataActions: null,\n tableFade: null,\n tableItems: null,\n dataDelete: null,\n inputs: null,\n tableInputs: null,\n tableCaseInput: null,\n dataCloseBtn: null,\n dataPopin: null,\n dataPreferences: null,\n dataPreferencesOverlay: null,\n dataPreferencesPolygon: null,\n dataSaveBtn: null,\n dataUpdateBtn: null,\n diseaseInfo: null,\n minusBtns: null,\n plusBtns: null,\n dataContainer: null,\n dataDate: null,\n dataDateContainer: null,\n dataNoEntry: null,\n dataWeek: null,\n indicatorCalendar: null,\n },\n init: function init() {\n if (document.body.classList.contains('page-template-page-login') ||\n document.body.classList.contains('page-template-page-inscription')\n ) {\n return;\n }\n this.els.$wrapper = document.querySelector('.js-data-form');\n if (this.els.$wrapper) {\n this.setupElements();\n this.bindEvents();\n this.setupLateElements();\n this.bindLateEvents();\n this.setupClickOutsideHandler();\n }\n },\n // Setup the elements\n setupElements: function setupElements() {\n this.els.hadVisits = document.querySelector('#had-visits');\n this.els.tableList = document.querySelector('.table__list');\n this.els.tableCase = document.querySelector('.table__case');\n this.els.dataActions = document.querySelector('.data__actions');\n this.els.tableFade = document.querySelector('.table__fade');\n this.els.tableItems = document.querySelector('.table__items');\n this.els.dataDelete = document.querySelector('#data__delete');\n this.els.dataCloseBtn = document.querySelector('.data__close__btn');\n this.els.dataPopin = document.querySelector('.data__popin');\n this.els.dataPreferences = document.querySelector('.data__preferences');\n this.els.dataPreferencesOverlay = document.querySelector('.data__preferences__overlay');\n this.els.dataPreferencesPolygon = document.querySelector('.preferences__polygon');\n this.els.dataSaveBtn = document.querySelector('#data__save');\n this.els.dataUpdate = document.querySelector('.data__update__container');\n this.els.dataContainer = document.querySelector('.data__container');\n this.els.dataDate = document.querySelector('.data__date');\n this.els.dataDateContainer = document.querySelector('.data__data__info');\n this.els.prevArrow = document.querySelector('.table__date img:first-child');\n this.els.nextArrow = document.querySelector('.table__date img:last-child');\n this.els.dataNoEntry = document.querySelector('.data__no__entry');\n this.els.dataWeek = document.querySelector('.data__week');\n this.els.dataUpdateBtn = document.querySelector('#data__update');\n this.els.indicatorCalendar = document.querySelector('.indicator__calendar');\n },\n // Setup the elements that are created after the initial setup\n setupLateElements: function setupLateElements() {\n this.els.inputs = document.querySelectorAll('input[type=\"number\"]');\n this.els.tableInputs = document.querySelectorAll('.table__list input[type=\"number\"]');\n this.els.tableCaseInput = document.querySelector('.table__case input[type=\"number\"]');\n this.els.diseaseInfo = document.querySelectorAll('.disease__info');\n this.els.minusBtns = document.querySelectorAll('.item__case__minus, .item__visit__minus');\n this.els.plusBtns = document.querySelectorAll('.item__case__plus, .item__visit__plus');\n },\n // Bind events to the elements\n bindEvents: function bindEvents() {\n var this$1 = this;\n\n this.els.hadVisits.addEventListener('change', this.toggleVisits.bind(this));\n this.els.dataDelete.addEventListener('click', this.deleteData.bind(this));\n document.addEventListener('click', function (event) {\n if (event.target.classList.contains('item__case__plus') || event.target.classList.contains('item__visit__plus')) {\n var input = event.target.previousElementSibling;\n var currentValue = parseInt(input.value, 10);\n input.value = isNaN(currentValue) ? 1 : currentValue + 1;\n input.dispatchEvent(new Event('input'));\n } else if (event.target.classList.contains('item__case__minus') || event.target.classList.contains('item__visit__minus')) {\n var input$1 = event.target.nextElementSibling;\n var currentValue$1 = parseInt(input$1.value, 10);\n input$1.value = isNaN(currentValue$1) || currentValue$1 <= 0 ? 0 : currentValue$1 - 1;\n input$1.dispatchEvent(new Event('input'));\n }\n });\n this.els.dataCloseBtn.addEventListener('click', this.closeDataPopin.bind(this));\n this.els.dataPreferences.addEventListener('click', this.showPreferencesOverlay.bind(this));\n this.els.dataSaveBtn.addEventListener('click', this.saveData.bind(this));\n this.els.dataUpdateBtn.addEventListener('click', this.updateData.bind(this));\n document.addEventListener('DOMContentLoaded', this.updateDateDisplay.bind(this));\n\n this.els.prevArrow.addEventListener('click', this.changeDate.bind(this, -1));\n this.els.nextArrow.addEventListener('click', this.changeDate.bind(this, 1));\n\n this.els.dataDateContainer.addEventListener('click', function () {\n var isCalendarVisible = this$1.els.indicatorCalendar.style.display === 'flex';\n this$1.els.indicatorCalendar.style.display = isCalendarVisible ? 'none' : 'flex';\n });\n\n ProfileCompletion.init();\n },\n // Bind events to the elements that are created after the initial setup\n bindLateEvents: function bindLateEvents() {\n var this$1 = this;\n\n this.els.inputs.forEach(function (input) {\n input.addEventListener('input', this$1.limitInput.bind(this$1));\n input.addEventListener('focus', this$1.hideNumberPlaceholder.bind(this$1));\n input.addEventListener('blur', this$1.restorePlaceholder.bind(this$1));\n });\n this.els.tableInputs.forEach(function (input) {\n input.addEventListener('input', this$1.handleInputChange.bind(this$1));\n });\n\n document.querySelectorAll('.disease__info').forEach(function (icon) {\n icon.addEventListener('mouseenter', function (event) {\n var tooltipText = event.target.getAttribute('data-tooltip');\n if (!tooltipText) { return; }\n var tooltip = document.createElement('div');\n tooltip.className = 'disease__tooltip';\n tooltip.innerText = tooltipText;\n document.body.appendChild(tooltip);\n var rect = event.target.getBoundingClientRect();\n tooltip.style.top = (rect.top + window.scrollY - tooltip.offsetHeight - 12) + \"px\";\n tooltip.style.left = (rect.left + rect.width / 2) + \"px\";\n tooltip.style.transform = 'translateX(-50%)';\n requestAnimationFrame(function () { return tooltip.classList.add('show'); });\n event.target.tooltipElement = tooltip;\n });\n icon.addEventListener('mouseleave', function (event) {\n var tooltip = event.target.tooltipElement;\n if (tooltip) {\n tooltip.remove();\n event.target.tooltipElement = null;\n }\n });\n });\n\n this.els.dataDateContainer.addEventListener('click', function () {\n IndicatorCalendar.toggleCalendarVisibility();\n });\n },\n // Show or hide the data list based on the hadVisits checkbox\n toggleVisits: function toggleVisits() {\n var displayStyle = this.els.hadVisits.checked ? 'none' : 'block';\n this.els.inputs.forEach(function (input) {\n input.value = '';\n input.placeholder = '0';\n });\n this.els.tableList.style.display = displayStyle;\n this.els.tableCase.style.display = this.els.hadVisits.checked ? 'none' : 'flex';\n this.els.dataDelete.style.display = displayStyle;\n this.els.tableFade.style.display = displayStyle;\n },\n // Update the diseases list with the data fetched from the database\n updateDiseasesList: function updateDiseasesList() {\n var this$1 = this;\n\n return new Promise(function (resolve) {\n this$1.request = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'get_user_indicators',\n }\n });\n\n this$1.request.promise.then(function (data) {\n this$1.els.tableItems.innerHTML = '';\n if (data.message) {\n this$1.els.tableItems.insertAdjacentHTML('beforeend', (\"

\" + (data.message) + \"

\"));\n resolve(false);\n return;\n }\n\n var categories = {};\n data.data.forEach(function (disease) {\n if (!categories[disease.category_index]) {\n categories[disease.category_index] = {\n name: disease.category,\n items: []\n };\n }\n categories[disease.category_index].items.push(disease);\n });\n\n var sortedCategories = Object.values(categories).sort(function (a, b) { return a.category_index - b.category_index; });\n var categoryTitleContainer = document.getElementById('categoryTitleContainer');\n if (categoryTitleContainer && sortedCategories.length > 0) {\n var firstCategory = sortedCategories[0];\n categoryTitleContainer.innerHTML = \"\" + (firstCategory.name);\n }\n\n sortedCategories.forEach(function (category, index) {\n if (index !== 0) {\n var header = \"

\" + (category.name) + \"

\";\n this$1.els.tableItems.insertAdjacentHTML('beforeend', header);\n }\n category.items.forEach(function (disease) {\n var itemHTML = this$1.createItem(disease, category.name);\n this$1.els.tableItems.insertAdjacentHTML('beforeend', itemHTML);\n });\n });\n\n this$1.setupLateElements();\n this$1.bindLateEvents();\n\n EntryModeModal.loadUserEntryMode(function () {\n if (!EntryModeModal.entryMode || EntryModeModal.entryMode === 'no_subscription') {\n var modalTitle = \"Mode de saisie\";\n var modalText = \"Vous n'avez pas sélectionné de mode de saisie (journalier / hebdomadaire). Veuillez choisir le mode de saisie depuis la page Mon compte.\";\n var modalConfirmText = \"OK\";\n var modalType = \"error\";\n modal.showInformationModal(modalTitle, modalText, modalConfirmText, modalType, function () {\n modal.closeModal();\n });\n resolve(false);\n this$1.updateDateDisplay(EntryModeModal.entryMode);\n } else {\n this$1.updateDateDisplay(EntryModeModal.entryMode);\n this$1.getUserData();\n resolve(true);\n }\n });\n }).catch(function (error) {\n console.error('Error updating diseases list:', error);\n var modalTitle = \"Aucun indicateur\";\n var modalText = \"Vous n'êtes abonné à aucun indicateur. Vous pouvez vous abonner depuis la page Mon compte.\";\n var modalConfirmText = \"OK\";\n var modalType = \"error\";\n modal.showInformationModal(modalTitle, modalText, modalConfirmText, modalType, function () {\n modal.closeModal();\n });\n resolve(false);\n });\n });\n },\n createItem: function createItem(disease, categoryName) {\n return (\"\\n
\\n

\" + (disease.title) + (disease.description ? (\"?\") : '') + \"

\\n
\\n -\\n \\n +\\n
\\n
\\n \");\n },\n // Delete the data when the delete button is clicked\n deleteData: function deleteData() {\n var this$1 = this;\n\n var message = \"Êtes-vous sûr de vouloir supprimer ces données ?\";\n var confirmText = \"Confirmer\";\n var cancelText = \"Annuler\";\n modal.showModal(message, confirmText, cancelText, function () {\n this$1.els.inputs.forEach(function (input) {\n input.value = '';\n input.placeholder = '0';\n });\n }, function () {\n modal.closeModal();\n });\n },\n // Close the data popin\n closeDataPopin: function closeDataPopin() {\n this.els.dataPopin.style.display = 'none';\n document.body.style.overflow = 'auto';\n },\n // Show or hide the data preferences overlay\n showPreferencesOverlay: function showPreferencesOverlay() {\n var isVisible = this.els.dataPreferencesOverlay.style.display === 'flex';\n this.els.dataPreferencesOverlay.style.display = isVisible ? 'none' : 'flex';\n this.els.dataPreferencesPolygon.style.display = isVisible ? 'none' : 'block';\n document.body.style.overflow = isVisible ? 'auto' : 'hidden';\n },\n // Limit the input to 3 characters\n limitInput: function limitInput(event) {\n var input = event.target;\n if (input.value.length > 3) {\n input.value = input.value.slice(0, 3);\n }\n },\n // Hide the placeholder when the input is focused\n hideNumberPlaceholder: function hideNumberPlaceholder(event) {\n event.target.placeholder = '';\n },\n // Restore the placeholder if the input is empty\n restorePlaceholder: function restorePlaceholder(event) {\n if (event.target.value === '') {\n event.target.placeholder = '0';\n }\n },\n // Save the data when the save button is clicked\n saveData: function saveData() {\n var this$1 = this;\n\n var confirmationMessage = \"Êtes-vous sûr de vouloir valider ces données ?\";\n var confirmText = \"Confirmer\";\n var cancelText = \"Annuler\";\n var countedCategory = '';\n\n fetch(ajaxurl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'\n },\n body: new URLSearchParams({\n 'action': 'indicator_category',\n })\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n if (data.success) {\n countedCategory = data.data;\n var inputsArray = Array.from(this$1.els.tableInputs);\n\n var countedInputs = inputsArray.filter(function (input) { return input.dataset.title === countedCategory; });\n var otherInputs = inputsArray.filter(function (input) { return input.dataset.title !== countedCategory; });\n\n var soinsNonProgrammesInput = otherInputs[0];\n var soinsNonProgrammesValue = soinsNonProgrammesInput ? (parseInt(soinsNonProgrammesInput.value, 10) || 0) : 0;\n\n countedInputs.forEach(function (input) {\n input.indicatorValue = parseInt(input.value, 10) || 0;\n });\n var totalIndicatorPatients = countedInputs.reduce(function (acc, input) { return acc + input.indicatorValue; }, 0);\n var totalPatients = parseInt(this$1.els.tableCaseInput.value, 10) || 0;\n\n var entryDate = this$1.parseFrenchDate(this$1.els.dataDate.innerHTML);\n var currentDate = new Date();\n var enteredDate = new Date(entryDate);\n\n if (enteredDate > currentDate) {\n var modalTitle = \"Erreur\";\n var modalText = \"La date saisie ne peut pas être une date future.\";\n var modalConfirmText = \"OK\";\n var modalType = \"error\";\n modal.showInformationModal(modalTitle, modalText, modalConfirmText, modalType, function () {\n modal.closeModal();\n });\n return;\n }\n\n if (totalPatients < totalIndicatorPatients) {\n var modalTitle$1 = \"Erreur\";\n var modalText$1 = \"Le nombre total de consultations doit être supérieur ou égal au nombre total de cas par indicateur.\";\n var modalConfirmText$1 = \"OK\";\n var modalType$1 = \"error\";\n modal.showInformationModal(modalTitle$1, modalText$1, modalConfirmText$1, modalType$1, function () {\n modal.closeModal();\n });\n return;\n }\n\n if (soinsNonProgrammesValue > totalPatients) {\n var modalTitle$2 = \"Erreur\";\n var modalText$2 = \"Le nombre total de soins non programmés ne peut jamais dépasser le nombre total de consultations.\";\n var modalConfirmText$2 = \"OK\";\n var modalType$2 = \"error\";\n modal.showInformationModal(modalTitle$2, modalText$2, modalConfirmText$2, modalType$2, function () {\n modal.closeModal();\n });\n return;\n }\n\n modal.showModal(confirmationMessage, confirmText, cancelText, function () {\n var saveRequests = inputsArray.map(function (input) {\n var entryDate = this$1.parseFrenchDate(this$1.els.dataDate.innerHTML);\n\n return utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'save_dashboard_data',\n params: JSON.stringify({\n indicator_id: input.name,\n indicator_patients: input.value,\n total_patients: totalPatients,\n entry_date: entryDate,\n entry_mode: EntryModeModal.entryMode,\n is_validated: true\n }),\n },\n }).promise;\n });\n\n Promise.all(saveRequests).then(function () {\n this$1.disabledInputs();\n modal.closeModal();\n IndicatorCalendar.refreshMonths();\n }).catch(function (error) {\n console.error('Erreur lors de la sauvegarde des données:', error);\n modal.closeModal();\n });\n }, function () {\n modal.closeModal();\n });\n } else {\n var modalTitle$3 = \"Erreur de paramétrage back-office\";\n var modalText$3 = \"Vous devez définir la catégorie d'indicateurs épidémiologiques.\";\n var modalConfirmText$3 = \"OK\";\n var modalType$3 = \"error\";\n modal.showInformationModal(modalTitle$3, modalText$3, modalConfirmText$3, modalType$3, function () {\n modal.closeModal();\n });\n }\n })\n .catch(function (error) {\n console.error('Error during fetch:', error);\n });\n },\n // Parse a French date string to a valid ISO date string\n parseFrenchDate: function parseFrenchDate(frenchDateString) {\n var months = {\n janvier: 0, février: 1, mars: 2, avril: 3, mai: 4, juin: 5,\n juillet: 6, août: 7, septembre: 8, octobre: 9, novembre: 10, décembre: 11\n };\n\n var parts = frenchDateString.split(' ');\n if (parts.length < 4) {\n console.error(\"Date format incorrect:\", frenchDateString);\n return null;\n }\n\n var day = parseInt(parts[1], 10);\n var month = months[parts[2].toLowerCase()];\n var year = parseInt(parts[3], 10);\n\n if (isNaN(day) || isNaN(month) || isNaN(year)) {\n console.error(\"Erreur de parsing des parties de la date:\", parts);\n return null;\n }\n var date = new Date(Date.UTC(year, month, day));\n\n return date.toISOString().slice(0, 10);\n },\n // Enable all inputs and show the data actions\n updateData: function updateData() {\n this.els.hadVisits.checked = false;\n this.els.dataActions.style.display = 'flex';\n this.els.tableList.style.display = 'block';\n this.els.tableCase.style.display = 'flex';\n this.els.dataDelete.style.display = 'flex';\n this.els.tableFade.style.display = 'flex';\n this.els.dataUpdate.style.display = 'none';\n this.els.inputs.forEach(function (input) {\n input.disabled = false;\n }, this);\n this.els.tableItems.style.filter = 'grayscale(0)';\n this.els.tableCase.style.filter = 'grayscale(0)';\n this.els.diseaseInfo.forEach(function (info) {\n info.style.display = 'unset';\n });\n this.els.plusBtns.forEach(function (button) { return button.style.pointerEvents = 'auto'; });\n this.els.minusBtns.forEach(function (button) { return button.style.pointerEvents = 'auto'; });\n },\n // Save the data when an input is changed\n handleInputChange: function handleInputChange() {\n var input = event.target;\n var totalPatients = parseInt(this.els.tableCaseInput.value, 10) || 0;\n var entryDate = this.parseFrenchDate(this.els.dataDate.innerHTML);\n\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'save_dashboard_data',\n params: JSON.stringify({\n indicator_id: input.name,\n indicator_patients: input.value,\n total_patients: totalPatients,\n entry_date: entryDate,\n is_validated: false\n }),\n },\n });\n },\n // Change the date displayed in the data form\n changeDate: function changeDate(direction) {\n var dayIncrement = EntryModeModal.entryMode === 'weekly' ? 7 : 1;\n var newDate = new Date(this.currentDate);\n newDate.setDate(this.currentDate.getDate() + direction * dayIncrement);\n newDate.setHours(0, 0, 0, 0);\n\n var today = new Date();\n today.setHours(0, 0, 0, 0);\n\n if (newDate > today) {\n this.els.nextArrow.style.filter = 'grayscale(1)';\n this.els.nextArrow.style.pointerEvents = 'none';\n return;\n }\n\n this.els.prevArrow.style.filter = 'grayscale(0)';\n this.els.nextArrow.style.filter = 'grayscale(0)';\n\n this.currentDate = newDate;\n\n this.updateDateDisplay(EntryModeModal.entryMode);\n this.getUserData();\n },\n // Update the date display based on the current date and the entry mode\n updateDateDisplay: function updateDateDisplay(entryMode) {\n var today = new Date();\n today.setHours(0, 0, 0, 0);\n\n if (this.currentDate >= today) {\n this.els.nextArrow.style.filter = 'grayscale(1)';\n this.els.nextArrow.style.pointerEvents = 'none';\n } else {\n this.els.nextArrow.style.filter = 'grayscale(0)';\n this.els.nextArrow.style.pointerEvents = 'auto';\n }\n\n var dailyOptions = {weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'};\n var weeklyOptions = {year: 'numeric', month: 'long', day: 'numeric'};\n var formattedDate = this.currentDate.toLocaleDateString('fr-FR', dailyOptions);\n\n if (entryMode === 'daily') {\n if (this.els.dataDate) {\n this.els.dataDate.textContent = formattedDate;\n }\n if (this.els.dataNoEntry) {\n this.els.dataNoEntry.textContent = \"Pas de consultation aujourd’hui\";\n }\n } else if (entryMode === 'weekly') {\n var weekStart = new Date(this.currentDate);\n weekStart.setDate(this.currentDate.getDate() - this.currentDate.getDay() + 1);\n\n var weekEnd = new Date(weekStart);\n weekEnd.setDate(weekStart.getDate() + 6);\n\n var formattedWeekStart = weekStart.toLocaleDateString('fr-FR', weeklyOptions);\n var formattedWeekEnd = weekEnd.toLocaleDateString('fr-FR', weeklyOptions);\n var weekNumber = this.getWeekNumber(weekStart);\n\n if (this.els.dataDate) {\n this.els.dataDate.textContent = \"Du \" + formattedWeekStart + \" au \" + formattedWeekEnd;\n this.els.dataWeek.textContent = \"Semaine \" + weekNumber;\n this.els.dataDate.style.fontSize = '12px';\n this.els.dataDate.style.fontWeight = '400';\n }\n if (this.els.dataNoEntry) {\n this.els.dataNoEntry.textContent = \"Pas de consultation cette semaine\";\n }\n }\n },\n // Get the week number for a given date\n getWeekNumber: function getWeekNumber(date) {\n var tempDate = new Date(date);\n tempDate.setHours(0, 0, 0, 0);\n tempDate.setDate(tempDate.getDate() + 3 - (tempDate.getDay() || 7));\n\n var yearStart = new Date(tempDate.getFullYear(), 0, 1);\n var weekNumber = Math.ceil(((tempDate - yearStart) / 86400000 + 1) / 7);\n\n return weekNumber;\n },\n // Fetch the data for the current date\n getUserData: function getUserData() {\n var this$1 = this;\n\n if (!this.currentDate) {\n this.currentDate = new Date();\n }\n var entryMode = EntryModeModal.entryMode;\n\n this.currentDate.setHours(12, 0, 0, 0);\n var dateString = this.currentDate.toISOString().slice(0, 10);\n\n fetch(ajaxurl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'\n },\n body: new URLSearchParams({\n 'action': 'fetch_daily_data',\n 'date': dateString,\n 'entry_mode': entryMode\n })\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n if (data.success) {\n this$1.updateInputs(data.data);\n } else {\n this$1.clearInputs();\n }\n })\n .catch(function (error) {\n console.error('Error during fetch:', error);\n });\n },\n // Update the inputs with the data fetched from the database\n updateInputs: function updateInputs(data) {\n var this$1 = this;\n\n data.forEach(function (item) {\n var input = document.querySelector((\"input[name=\\\"\" + (item.indicator_id) + \"\\\"]\"));\n if (input) {\n input.value = item.indicator_patients;\n }\n\n var totalPatients = document.querySelector('.table__case input[type=\"number\"]');\n if (totalPatients) {\n totalPatients.value = item.total_patients;\n }\n\n if (item.is_validated === '1') {\n this$1.disabledInputs();\n this$1.els.hadVisits.checked = item.total_patients === '0';\n var displayStyle = this$1.els.hadVisits.checked ? 'none' : 'block';\n\n this$1.els.tableList.style.display = displayStyle;\n this$1.els.tableCase.style.display = this$1.els.hadVisits.checked ? 'none' : 'flex';\n this$1.els.dataDelete.style.display = displayStyle;\n this$1.els.tableFade.style.display = displayStyle;\n }\n });\n },\n // Disable all inputs and hide the data actions\n disabledInputs: function disabledInputs() {\n this.els.dataActions.style.setProperty('display', 'none', 'important');\n this.els.dataUpdate.style.display = 'flex';\n this.els.inputs.forEach(function (input) {\n input.disabled = true;\n }, this);\n this.els.tableItems.style.filter = 'grayscale(1)';\n this.els.tableCase.style.filter = 'grayscale(1)';\n this.els.diseaseInfo.forEach(function (info) {\n info.style.display = 'none';\n });\n this.els.plusBtns.forEach(function (button) { return button.style.pointerEvents = 'none'; });\n this.els.minusBtns.forEach(function (button) { return button.style.pointerEvents = 'none'; });\n },\n // Clear all inputs and set them to 0\n clearInputs: function clearInputs() {\n this.els.hadVisits.checked = false;\n this.toggleVisits();\n this.updateData();\n var inputs = document.querySelectorAll('.table__items input[type=\"number\"]');\n inputs.forEach(function (input) {\n input.value = '';\n input.placeholder = '0';\n });\n\n var totalPatientsInput = document.querySelector('.table__case input[type=\"number\"]');\n if (totalPatientsInput) {\n totalPatientsInput.value = '';\n totalPatientsInput.placeholder = '0';\n }\n },\n // Set up a click outside handler to hide the indicator\n setupClickOutsideHandler: function setupClickOutsideHandler() {\n var this$1 = this;\n\n document.addEventListener('click', function (event) {\n var isClickInsideCalendar = IndicatorCalendar.els.$wrapper.contains(event.target);\n var isClickOnOpener = this$1.els.dataDateContainer.contains(event.target);\n\n if (!isClickInsideCalendar && !isClickOnOpener) {\n IndicatorCalendar.els.$wrapper.style.display = 'none';\n }\n });\n },\n };\n\n var Dashboard = {\n els: {\n surveyList: null,\n alertsList: null,\n progressBar: null,\n surveysBtn: null,\n alertsBtn: null,\n openEntries: null,\n },\n init: function init() {\n var this$1 = this;\n\n this.els.$wrapper = document.querySelector('.js-dashboard');\n if (this.els.$wrapper) {\n ProfileCompletion.init()\n .then(function () {\n this$1.setupElements();\n this$1.updateSurveyList();\n this$1.updateAlertsList();\n this$1.updateProgressInModal();\n\n if (typeof showDashboardModal !== 'undefined' && showDashboardModal === true) {\n this$1.showDashboardModal();\n }\n })\n .catch(function (error) {\n console.error('Erreur lors de l\\'initialisation de progressBar:', error);\n });\n }\n },\n setupElements: function setupElements() {\n this.els.surveyList = document.querySelector('.survey__list');\n this.els.alertsList = document.querySelector('.alerts__list');\n this.els.userPolygon = document.querySelector('.user__polygon');\n this.els.progressBar = document.querySelector('.progress__bar');\n this.els.surveysBtn = document.querySelector('.surveys__btn');\n this.els.alertsBtn = document.querySelector('#alerts__btn');\n this.els.surveysBtn = document.querySelector('.surveys__btn');\n this.els.openEntries = document.querySelectorAll('.open__entries');\n },\n\n updateSurveyList: function updateSurveyList() {\n var this$1 = this;\n\n this.request = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'fetch_surveys',\n }\n });\n\n this.request.promise.then(function (data) {\n this$1.els.surveyList.innerHTML = '';\n if (data.message) {\n this$1.els.surveyList.insertAdjacentHTML('beforeend', (\"

\" + (data.message) + \"

\"));\n return;\n }\n data.surveys.forEach(function (survey, index) {\n if (index < 3) {\n this$1.els.surveyList.insertAdjacentHTML('beforeend', this$1.createSurveyItem(survey, index));\n }\n this$1.els.surveysBtn.style.display = 'flex';\n });\n }).catch(function (error) {\n console.error(\"error\", error);\n });\n },\n\n createSurveyItem: function createSurveyItem(survey) {\n var date = new Date(survey.date_published);\n var formattedMonth = (\"\" + (date.getMonth() + 1)).padStart(2, '0');\n var formattedDay = (\"\" + (date.getDate())).padStart(2, '0');\n var formattedDate = formattedDay + \".\" + formattedMonth;\n\n return (\"\\n \\n

\" + formattedDate + \"

\\n

\" + (survey.title) + \"

\\n
\\n \");\n },\n\n updateAlertsList: function updateAlertsList() {\n var this$1 = this;\n\n this.request = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'fetch_alerts',\n }\n });\n\n this.request.promise.then(function (data) {\n this$1.els.alertsList.innerHTML = '';\n if (data.message) {\n this$1.els.alertsList.insertAdjacentHTML('beforeend', (\"

\" + (data.message) + \"

\"));\n return;\n }\n data.alerts.forEach(function (alert, index) {\n if (index < 3) {\n this$1.els.alertsList.insertAdjacentHTML('beforeend', this$1.createAlertItem(alert, index));\n }\n this$1.els.alertsBtn.style.display = 'flex';\n });\n }).catch(function (error) {\n console.error(\"error\", error);\n });\n },\n\n createAlertItem: function createAlertItem(alert) {\n var date = new Date(alert.date_published);\n var formattedMonth = (\"\" + (date.getMonth() + 1)).padStart(2, '0');\n var formattedDay = (\"\" + (date.getDate())).padStart(2, '0');\n var formattedDate = formattedDay + \".\" + formattedMonth;\n\n var categoryColor = alert.category && alert.category.color ? alert.category.color : '#1267a8';\n var categoryName = alert.category ? alert.category.name : 'General';\n\n return (\"\\n \\n \" + categoryName + \"\\n
\\n

\" + formattedDate + \"

\\n

\" + (alert.title) + \"

\\n
\\n
\\n \");\n },\n\n updateProgressInModal: function () {\n var modalElement = document.querySelector('.dashboard__actions');\n if (modalElement) {\n ProfileCompletion.updateProgressInElement(modalElement);\n }\n },\n\n showDashboardModal: function showDashboardModal() {\n var this$1 = this;\n\n indicatorModal.showIndicatorModal();\n\n indicatorModal.onModalClose = function () {\n EntryModeModal.onModalClose = function () {\n this$1.updateUserModalMeta();\n this$1.updateProgressInModal();\n };\n this$1.updateProgressInModal();\n };\n },\n\n updateUserModalMeta: function updateUserModalMeta() {\n var this$1 = this;\n\n utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'update_user_modal_meta',\n _wpnonce: modalNonce,\n },\n }).promise.then(function (response) {\n if (response.success) {\n this$1.updateProgressInModal();\n } else {\n console.error('Erreur lors de la mise à jour de la métadonnée.');\n }\n }).catch(function (error) {\n console.error('Erreur AJAX :', error);\n });\n },\n };\n\n var Alerts = {\n els: {\n alertsTable: null,\n paginationContainer: null,\n currentPage: 1,\n totalPages: 1,\n alertTableHeader: null,\n },\n init: function init() {\n this.els.$wrapper = document.querySelector('.alerts');\n if (this.els.$wrapper) {\n this.setupElements();\n this.updateAlertsList();\n }\n },\n setupElements: function setupElements() {\n this.els.alertsTable = document.querySelector('.alerts__table__items');\n this.els.paginationContainer = document.querySelector('.alerts__pagination');\n this.els.alertTableHeader = document.querySelector('.alerts__table__header');\n },\n updateAlertsList: function updateAlertsList(page, itemsPerPage) {\n var this$1 = this;\n if ( page === void 0 ) page = 1;\n if ( itemsPerPage === void 0 ) itemsPerPage = 6;\n\n this.els.currentPage = page;\n\n this.request = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'fetch_alerts',\n page: page,\n items_per_page: itemsPerPage,\n }\n });\n\n this.request.promise.then(function (response) {\n var data = response;\n\n this$1.els.alertsTable.innerHTML = '';\n\n if (data.message) {\n this$1.els.alertsTable.insertAdjacentHTML('beforeend', (\"

\" + (data.message) + \"

\"));\n this$1.els.alertTableHeader.style.display = 'none';\n return;\n }\n\n data.alerts.forEach(function (alert, index) {\n this$1.els.alertsTable.insertAdjacentHTML('beforeend', this$1.createAlertItem(alert, index));\n });\n\n this$1.els.totalPages = data.total_pages;\n this$1.renderPagination();\n\n }).catch(function (error) {\n console.error(\"error\", error);\n });\n },\n renderPagination: function renderPagination() {\n var this$1 = this;\n\n this.els.paginationContainer.innerHTML = '';\n\n if (this.els.totalPages <= 1) {\n return;\n }\n\n var paginationHTML = '';\n\n if (this.els.currentPage > 1) {\n paginationHTML +=\n \"\";\n }\n\n for (var i = 1; i <= this.els.totalPages; i++) {\n if (i === this.els.currentPage) {\n paginationHTML += \"\" + i + \"\";\n } else {\n paginationHTML += \"\";\n }\n }\n\n if (this.els.currentPage < this.els.totalPages) {\n paginationHTML +=\n \"\";\n }\n\n this.els.paginationContainer.innerHTML = paginationHTML;\n\n var paginationButtons = this.els.paginationContainer.querySelectorAll('.pagination-btn');\n paginationButtons.forEach(function (button) {\n button.addEventListener('click', function (event) {\n var page = parseInt(event.currentTarget.getAttribute('data-page'), 10);\n if (page !== this$1.els.currentPage) {\n this$1.updateAlertsList(page);\n }\n });\n });\n },\n createAlertItem: function createAlertItem(alert) {\n var date = new Date(alert.date_published);\n var formattedMonth = (\"\" + (date.getMonth() + 1)).padStart(2, '0');\n var formattedDay = (\"\" + (date.getDate())).padStart(2, '0');\n var formattedYear = \"\" + (date.getFullYear());\n var formattedDate = formattedDay + \"/\" + formattedMonth + \"/\" + formattedYear;\n\n var formattedcriticality = '';\n if (alert.criticality) {\n formattedcriticality = alert.criticality.slug\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '');\n }\n\n function getImageElement(formattedcriticality) {\n return formattedcriticality ? (\"\\\"criticality\") : '';\n }\n\n var highestTerritory = '';\n var hasMoreLevels = false;\n\n if (alert.zone.region && alert.zone.region.length > 0) {\n highestTerritory = alert.zone.region[0].post_title;\n hasMoreLevels = alert.zone.region.length > 1 || (alert.zone.department && alert.zone.department.length > 0) || (alert.zone.cpts && alert.zone.cpts.length > 0);\n } else if (alert.zone.department && alert.zone.department.length > 0) {\n highestTerritory = alert.zone.department[0].post_title;\n hasMoreLevels = alert.zone.department.length > 1 || (alert.zone.cpts && alert.zone.cpts.length > 0);\n } else if (alert.zone.cpts && alert.zone.cpts.length > 0) {\n highestTerritory = alert.zone.cpts[0].post_title;\n hasMoreLevels = alert.zone.cpts.length > 1;\n }\n\n var categoryColor = alert.category && alert.category.color ? alert.category.color : '#1267a8';\n var categoryName = alert.category ? alert.category.name : 'General';\n\n return (\"\\n \\n

\" + (alert.title) + \"

\\n

\" + formattedDate + \"

\\n

\" + highestTerritory + (hasMoreLevels ? '...' : '') + \"

\\n

\\n \" + (getImageElement(formattedcriticality)) + \" \\n \" + (alert.criticality.name) + \"\\n

\\n

\" + categoryName + \"

\\n
\\n \");\n },\n };\n\n var Surveys = {\n els: {\n surveysTable: null,\n paginationContainer: null,\n currentPage: 1,\n totalPages: 1,\n surveyTableHeader: null,\n singleSurvey: null,\n surveyCompleted: null,\n surveyLink: null,\n },\n init: function init() {\n this.els.$wrapper = document.querySelector('.surveys');\n if (this.els.$wrapper) {\n this.setupElements();\n this.updateSurveysList();\n }\n this.els.$singleWrapper = document.querySelector('.single-survey');\n if (this.els.$singleWrapper) {\n this.checkIfCompleted();\n this.setupSingleElements();\n }\n },\n setupElements: function setupElements() {\n this.els.surveysTable = document.querySelector('.surveys__table__items');\n this.els.paginationContainer = document.querySelector('.surveys__pagination');\n this.els.surveyTableHeader = document.querySelector('.surveys__table__header');\n },\n setupSingleElements: function setupSingleElements() {\n this.els.surveyLink = document.getElementById('surveyLink');\n this.els.surveyCompleted = document.querySelector('.survey-completed');\n },\n updateSurveysList: function updateSurveysList(page, itemsPerPage) {\n var this$1 = this;\n if ( page === void 0 ) page = 1;\n if ( itemsPerPage === void 0 ) itemsPerPage = 6;\n\n this.els.currentPage = page;\n\n this.request = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'fetch_surveys',\n page: page,\n items_per_page: itemsPerPage,\n }\n });\n\n this.request.promise.then(function (response) {\n var data = response;\n\n this$1.els.surveysTable.innerHTML = '';\n\n if (data.message) {\n this$1.els.surveysTable.insertAdjacentHTML('beforeend', (\"

\" + (data.message) + \"

\"));\n this$1.els.surveyTableHeader.style.display = 'none';\n return;\n }\n\n data.surveys.forEach(function (survey, index) {\n this$1.els.surveysTable.insertAdjacentHTML('beforeend', this$1.createSurveyItem(survey, index));\n });\n\n this$1.els.totalPages = data.total_pages;\n this$1.renderPagination();\n\n }).catch(function (error) {\n console.error(\"error\", error);\n });\n },\n renderPagination: function renderPagination() {\n var this$1 = this;\n\n this.els.paginationContainer.innerHTML = '';\n\n if (this.els.totalPages <= 1) {\n return;\n }\n\n var paginationHTML = '';\n\n // Bouton \"Précédent\"\n\n if (this.els.currentPage > 1) {\n paginationHTML +=\n \"\";\n }\n\n for (var i = 1; i <= this.els.totalPages; i++) {\n if (i === this.els.currentPage) {\n paginationHTML += \"\" + i + \"\";\n } else {\n paginationHTML += \"\";\n }\n }\n\n if (this.els.currentPage < this.els.totalPages) {\n paginationHTML +=\n \"\";\n }\n\n this.els.paginationContainer.innerHTML = paginationHTML;\n\n var paginationButtons = this.els.paginationContainer.querySelectorAll('.pagination-btn');\n paginationButtons.forEach(function (button) {\n button.addEventListener('click', function (event) {\n var page = parseInt(event.currentTarget.getAttribute('data-page'), 10);\n if (page !== this$1.els.currentPage) {\n this$1.updateSurveysList(page); // Naviguer vers la page choisie\n }\n });\n });\n },\n createSurveyItem: function createSurveyItem(survey, index) {\n var date = new Date(survey.date_published);\n var formattedMonth = (\"\" + (date.getMonth() + 1)).padStart(2, '0');\n var formattedDay = (\"\" + (date.getDate())).padStart(2, '0');\n var formattedYear = \"\" + (date.getFullYear());\n var formattedDate = formattedDay + \"/\" + formattedMonth + \"/\" + formattedYear;\n\n var state = '';\n var formattedState = '';\n\n fetch(ajaxurl, {\n method: 'POST',\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n 'action': 'gw_check_survey_status',\n 'form_id': survey.form_id,\n })\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n if (data.success) {\n state = data.data.status;\n formattedState = state.replace(/\\s+/g, '').toLowerCase();\n } else {\n console.error('Failed to check completion status', data);\n }\n document.querySelector((\"#survey-item-\" + index + \" .survey__item__state\")).textContent = state;\n document.querySelector((\"#survey-item-\" + index)).classList.add((\"survey__item__state--\" + formattedState));\n })\n .catch(function (error) {\n console.error(\"Error\", error);\n });\n return (\"\\n
\\n

\" + (survey.title) + \"

\\n

\" + formattedDate + \"

\\n \\n

\\n
\\n \");\n },\n checkIfCompleted: function checkIfCompleted() {\n var this$1 = this;\n\n var state = '';\n var surveyID = document.querySelector('.dashboard__content').getAttribute('data-survey-id');\n\n fetch(ajaxurl, {\n method: 'POST',\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n 'action': 'gw_check_survey_status',\n 'form_id': surveyID,\n })\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n if (data.success) {\n state = data.data.status;\n console.log('state', state);\n if (state === 'Finalisée') {\n this$1.els.surveyLink.style.display = 'none';\n this$1.els.surveyCompleted.style.display = 'block';\n } else {\n this$1.els.surveyLink.style.display = 'flex';\n }\n } else {\n console.error('Failed to check completion status', data);\n }\n })\n .catch(function (error) {\n console.error(\"Error\", error);\n });\n }\n };\n\n var Header = {\n els: {\n userActionsBtn: null,\n userActions: null,\n userPolygon: null,\n openEntries: null,\n mobileHeaderBtn: null,\n sidebar: null,\n sidebarCloseBtn: null,\n sidebarBackground: null,\n },\n\n init: function init() {\n this.els.$wrapper = document.querySelector('.dashboard__actions');\n if (this.els.$wrapper) {\n this.setupElements();\n this.bindEvents();\n this.bindOutsideClicks();\n }\n },\n\n setupElements: function setupElements() {\n this.els.userActionsBtn = document.querySelector('.user__actions__btn');\n this.els.userActions = document.querySelector('.user__actions');\n this.els.userPolygon = document.querySelector('.user__polygon');\n this.els.openEntries = document.querySelectorAll('.open__entries');\n this.els.mobileHeaderBtn = document.querySelector('.button__sidebar__mobile');\n this.els.sidebar = document.querySelector('.dashboard__sidebar');\n this.els.sidebarCloseBtn = document.querySelector('.sidebar__close__btn');\n this.els.sidebarBackground = document.querySelector('.sidebar__background');\n },\n\n bindEvents: function bindEvents() {\n var this$1 = this;\n\n if (this.els.userActionsBtn) {\n this.els.userActionsBtn.addEventListener('click', function (e) {\n this$1.toggleUserActions(this$1.els.userActions, this$1.els.userPolygon);\n e.stopPropagation();\n });\n }\n\n if (this.els.mobileHeaderBtn && window.innerWidth < 1024) {\n this.els.mobileHeaderBtn.addEventListener('click', function (e) {\n this$1.toggleSidebarMobile();\n e.stopPropagation();\n });\n }\n\n if (this.els.sidebarCloseBtn) {\n this.els.sidebarCloseBtn.addEventListener('click', function () {\n this$1.closeSidebarMobile();\n });\n }\n\n if (this.els.openEntries) {\n this.els.openEntries.forEach(function (entry) {\n entry.addEventListener('click', function () { return this$1.showEntriesPopin(entry); });\n });\n }\n\n document.addEventListener(\"DOMContentLoaded\", function () {\n var urlParams = new URLSearchParams(window.location.search);\n\n if (urlParams.has('login_success') && urlParams.get('source') === 'email_notification') {\n Header.showEntriesPopin();\n window.history.replaceState(null, \"\", window.location.pathname);\n }\n });\n },\n\n bindOutsideClicks: function bindOutsideClicks() {\n var this$1 = this;\n\n document.addEventListener('click', function (e) {\n if (\n this$1.isSidebarOpen() &&\n !this$1.els.sidebar.contains(e.target) &&\n !this$1.els.mobileHeaderBtn.contains(e.target)\n ) {\n this$1.closeSidebarMobile();\n }\n\n if (\n this$1.els.userActions &&\n !this$1.els.userActions.contains(e.target) &&\n !this$1.els.userActionsBtn.contains(e.target) &&\n this$1.els.userActions.style.display === 'flex'\n ) {\n this$1.toggleUserActions(this$1.els.userActions, this$1.els.userPolygon);\n }\n });\n\n this.els.sidebar.querySelectorAll('a, button').forEach(function (el) {\n el.addEventListener('click', function () {\n if (this$1.isSidebarOpen()) {\n this$1.closeSidebarMobile();\n }\n });\n });\n },\n\n isSidebarOpen: function isSidebarOpen() {\n return this.els.sidebar.classList.contains('dashboard__sidebar--mobile');\n },\n\n toggleUserActions: function toggleUserActions(actionsElement, polygonElement) {\n var isCurrentlyVisible = actionsElement.style.display === 'flex';\n actionsElement.style.display = isCurrentlyVisible ? 'none' : 'flex';\n polygonElement.style.display = isCurrentlyVisible ? 'none' : 'block';\n },\n\n toggleSidebarMobile: function toggleSidebarMobile() {\n this.els.sidebar.classList.toggle('dashboard__sidebar--mobile');\n this.els.sidebarBackground.style.display = this.isSidebarOpen() ? 'block' : 'none';\n },\n\n closeSidebarMobile: function closeSidebarMobile() {\n this.els.sidebar.classList.remove('dashboard__sidebar--mobile');\n this.els.sidebarBackground.style.display = 'none';\n },\n\n showEntriesPopin: function showEntriesPopin() {\n DataForm.updateDiseasesList().then(function (updateSuccess) {\n if (updateSuccess) {\n document.querySelector('.data__popin').style.display = 'flex';\n document.querySelector('.data__container').style.animation = 'slideDown 0.2s ease-out forwards';\n document.body.style.overflow = 'hidden';\n }\n });\n },\n };\n\n var MyAccount = {\n entryMode: null,\n allEpidemy: null,\n selectedDiseases: [],\n currentEditingIndex: null,\n alreadyAllselected: false,\n allCpts: null,\n els: {\n $wrapper: null,\n $userName: null,\n $userFirstName: null,\n $userLastName: null,\n $userEmail: null,\n $userPhone: null,\n $userAddress: [],\n $userEpidemy: null,\n $userEpidemyJson: null,\n $userEpidemyAfterSave: false,\n $userSpecialty: null,\n $userAlerts: null,\n $userRpps: null,\n $userNameHtml: null,\n $userEmailHtml: null,\n $userPhoneHtml: null,\n $userAddressHtml: null,\n $userRppsHtml: null,\n $userEpidemyHtml: null,\n $userSpecialtyHtml: null,\n $accountFormFrequency: null,\n },\n init: function init() {\n var this$1 = this;\n\n this.els.$wrapper = document.querySelector(\".js-my-account\");\n if (!this.els.$wrapper) {\n return;\n }\n if (this.els.$wrapper) {\n window.addEventListener(\"loadeddata\", function () {\n var page = document.querySelector(\"#page\");\n page.style.height = \"fit-content !important\";\n });\n this.els.$userNameHtml =\n this.els.$wrapper.querySelector(\"#name .form__data\");\n this.els.$userEmailHtml =\n this.els.$wrapper.querySelector(\"#mail .form__data\");\n this.els.$userPhoneHtml =\n this.els.$wrapper.querySelector(\"#phone .form__data\");\n this.els.$userAddressHtml = this.els.$wrapper.querySelector(\n \"#address .form__data\"\n );\n this.els.$userSpecialtyHtml = this.els.$wrapper.querySelector(\"#specialty .form__data\");\n this.els.$userRppsHtml = this.els.$wrapper.querySelector(\"#rrps__text\");\n this.els.$allInput = this.els.$wrapper.querySelectorAll(\n \".account__update__data input, .account__update__data select\"\n );\n this.els.$userEpidemyHtml = this.els.$wrapper.querySelector(\n \"#epidemy .form__data\"\n );\n Promise.all([\n this.loadData(),\n this.initEvents() ]).then(function () {\n setTimeout(function () {\n this$1.calculatePercentage();\n if (this$1.els.$userEpidemyHtml.innerHTML === \"\") {\n this$1.updateIndicatorButtons();\n }\n }, 2400);\n });\n }\n },\n initEvents: function initEvents() {\n var this$1 = this;\n\n //Check all input content for effect css label\n if (this.els.$allInput) {\n this.els.$allInput.forEach(function (input) {\n input.addEventListener(\"input\", function () {\n this$1.checkInputContent(input);\n });\n });\n }\n\n //Open name update\n this.els.$wrapper\n .querySelector(\"#name .update__button\")\n .addEventListener(\"click\", function (e) {\n e.preventDefault();\n this$1.greyOutSection(\"name\");\n this$1.els.$wrapper.querySelector(\"#update_name .firstname\").value =\n this$1.els.$userFirstName;\n this$1.els.$wrapper.querySelector(\"#update_name .lastname\").value =\n this$1.els.$userLastName;\n this$1.els.$wrapper.querySelector(\n \"#name .account__actual__data\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#name .account__actual__data\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\"#name .update__button\").style.display =\n \"none\";\n this$1.els.$wrapper.querySelector(\n \"#name .update__button\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\n \"#name .account__update__data\"\n ).style.display = \"flex\";\n this$1.els.$wrapper\n .querySelector(\"#update_name .lastname\")\n .classList.add(\"has-content\");\n this$1.els.$wrapper\n .querySelector(\"#update_name .firstname\")\n .classList.add(\"has-content\");\n });\n //Close name update\n this.els.$wrapper\n .querySelector(\"#name .skip__button\")\n .addEventListener(\"click\", function () {\n this$1.clearSection();\n this$1.els.$wrapper.querySelector(\n \"#name .account__actual__data\"\n ).style.display = \"flex\";\n this$1.els.$wrapper.querySelector(\n \"#name .account__actual__data\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\"#name .update__button\").style.display =\n \"block\";\n this$1.els.$wrapper.querySelector(\n \"#name .update__button\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\n \"#name .account__update__data\"\n ).style.display = \"none\";\n });\n //Open mail update\n this.els.$wrapper\n .querySelector(\"#mail .update__button\")\n .addEventListener(\"click\", function (e) {\n e.preventDefault();\n this$1.greyOutSection(\"mail\");\n this$1.els.$wrapper.querySelector(\"#mail .input-field \").value =\n this$1.els.$userEmail;\n this$1.els.$wrapper.querySelector(\n \"#mail .account__actual__data\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#mail .account__actual__data\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\"#mail .update__button\").style.display =\n \"none\";\n this$1.els.$wrapper.querySelector(\n \"#mail .update__button\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\n \"#mail .account__update__data\"\n ).style.display = \"flex\";\n this$1.els.$wrapper\n .querySelector(\"#mail .input-field\")\n .classList.add(\"has-content\");\n });\n //Close mail update\n this.els.$wrapper\n .querySelector(\"#mail .skip__button\")\n .addEventListener(\"click\", function () {\n this$1.clearSection();\n this$1.els.$wrapper.querySelector(\n \"#mail .account__actual__data\"\n ).style.display = \"flex\";\n this$1.els.$wrapper.querySelector(\n \"#mail .account__actual__data\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\"#mail .update__button\").style.display =\n \"block\";\n this$1.els.$wrapper.querySelector(\n \"#mail .update__button\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\n \"#mail .account__update__data\"\n ).style.display = \"none\";\n });\n //open phone update\n this.els.$wrapper\n .querySelector(\"#phone .update__button\")\n .addEventListener(\"click\", function (e) {\n e.preventDefault();\n this$1.greyOutSection(\"phone\");\n this$1.els.$wrapper.querySelector(\"#phone .input-field \").value =\n this$1.els.$userPhone;\n this$1.els.$wrapper.querySelector(\n \"#phone .account__actual__data\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#phone .account__actual__data\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\n \"#phone .update__button\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#phone .update__button\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\n \"#phone .account__update__data\"\n ).style.display = \"flex\";\n this$1.els.$wrapper\n .querySelector(\"#phone .input-field\")\n .classList.add(\"has-content\");\n });\n //Close phone update\n this.els.$wrapper\n .querySelector(\"#phone .skip__button\")\n .addEventListener(\"click\", function () {\n this$1.clearSection();\n this$1.els.$wrapper.querySelector(\n \"#phone .account__actual__data\"\n ).style.display = \"flex\";\n this$1.els.$wrapper.querySelector(\n \"#phone .account__actual__data\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\n \"#phone .update__button\"\n ).style.display = \"block\";\n this$1.els.$wrapper.querySelector(\n \"#phone .update__button\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\n \"#phone .account__update__data\"\n ).style.display = \"none\";\n });\n //Open address update\n this.els.$wrapper\n .querySelector(\"#address .update__button\")\n .addEventListener(\"click\", function (e) {\n e.preventDefault();\n this$1.greyOutSection(\"address\");\n this$1.els.$wrapper.querySelector(\n \"#address .account__actual__data\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#address .account__actual__data\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\n \"#address .update__button\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#address .update__button\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\n \"#address .account__update__data\"\n ).style.display = \"block\";\n this$1.updateAddressesList();\n this$1.els.$wrapper\n .querySelector(\"#add__address__btn\")\n .addEventListener(\"click\", function () {\n this$1.currentEditingIndex = null;\n this$1.showAddAddressForm();\n });\n this$1.els.$wrapper\n .querySelector(\"#update_address .update__new__data\")\n .addEventListener(\"click\", function (e) {\n e.preventDefault();\n this$1.updateAddressInDatabase();\n this$1.els.$wrapper.querySelector(\"#address .skip__button\").click();\n });\n });\n //Close address update\n this.els.$wrapper\n .querySelector(\"#address .skip__button\")\n .addEventListener(\"click\", function () {\n this$1.clearSection();\n this$1.els.$wrapper.querySelector(\n \"#address .account__actual__data\"\n ).style.display = \"flex\";\n this$1.els.$wrapper.querySelector(\n \"#address .account__actual__data\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\n \"#address .update__button\"\n ).style.display = \"block\";\n this$1.els.$wrapper.querySelector(\n \"#address .update__button\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\n \"#address .account__update__data\"\n ).style.display = \"none\";\n this$1.loadUserAddress();\n });\n\n //open password update\n this.els.$wrapper\n .querySelector(\"#password .update__button\")\n .addEventListener(\"click\", function (e) {\n e.preventDefault();\n this$1.greyOutSection(\"password\");\n this$1.els.$wrapper.querySelector(\n \"#password .account__actual__data\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#password .account__actual__data\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\n \"#password .update__button\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#password .update__button\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\n \"#password .account__update__data\"\n ).style.display = \"flex\";\n });\n //Close password update\n this.els.$wrapper\n .querySelector(\"#password .skip__button\")\n .addEventListener(\"click\", function () {\n this$1.clearSection();\n this$1.els.$wrapper.querySelector(\n \"#password .account__actual__data\"\n ).style.display = \"flex\";\n this$1.els.$wrapper.querySelector(\n \"#password .account__actual__data\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\n \"#password .update__button\"\n ).style.display = \"block\";\n this$1.els.$wrapper.querySelector(\n \"#password .update__button\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\n \"#password .account__update__data\"\n ).style.display = \"none\";\n });\n\n //open epidemy update\n this.els.$wrapper\n .querySelector(\"#epidemy .update__button\")\n .addEventListener(\"click\", function (e) {\n e.preventDefault();\n this$1.fetchAllEpidemy();\n this$1.greyOutSection(\"epidemy\");\n this$1.els.$wrapper.querySelector(\n \"#epidemy .account__actual__data\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#epidemy .account__actual__data\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\n \"#epidemy .update__button\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#epidemy .update__button\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\n \"#epidemy .account__update__data\"\n ).style.display = \"flex\";\n this$1.els.$wrapper\n .querySelectorAll(\" #epidemy.indicator-options input\")\n .forEach(function (input) {\n input.checked = false;\n });\n this$1.toogleEpidemySelection();\n this$1.els.$wrapper.querySelectorAll(\".indicator-btn\").forEach(function (button) {\n button.addEventListener(\"click\", function (event) {\n var id = parseInt(event.target.getAttribute('data-indicator-id'));\n var index = this$1.selectedDiseases.indexOf(id);\n if (index > -1) {\n this$1.selectedDiseases.splice(index, 1);\n } else {\n this$1.selectedDiseases.push(id);\n }\n this$1.setupRadioListeners();\n this$1.updateIndicatorButtons();\n });\n });\n });\n //Close epidemy update\n this.els.$wrapper\n .querySelector(\"#epidemy .skip__button\")\n .addEventListener(\"click\", function () {\n this$1.clearSection();\n this$1.els.$wrapper.querySelector(\n \"#epidemy .account__actual__data\"\n ).style.display = \"flex\";\n this$1.els.$wrapper.querySelector(\n \"#epidemy .account__actual__data\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\n \"#epidemy .update__button\"\n ).style.display = \"block\";\n this$1.els.$wrapper.querySelector(\n \"#epidemy .update__button\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\n \"#epidemy .account__update__data\"\n ).style.display = \"none\";\n });\n //Open frequency update\n this.els.$wrapper\n .querySelector(\"#frequency .update__button\")\n .addEventListener(\"click\", function (e) {\n e.preventDefault();\n this$1.greyOutSection(\"frequency\");\n this$1.els.$wrapper.querySelector(\n \"#frequency .account__actual__data\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#frequency .account__actual__data\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\n \"#frequency .update__button\"\n ).style.display = \"none\";\n this$1.els.$wrapper.querySelector(\n \"#frequency .update__button\"\n ).style.visibility = \"hidden\";\n this$1.els.$wrapper.querySelector(\"#update_frequency\").style.display =\n \"flex\";\n this$1.els.$wrapper.querySelector(\n \"#frequency .skip__button\"\n ).style.display = \"block\";\n });\n //Close frequency\n this.els.$wrapper\n .querySelector(\"#frequency .skip__button\")\n .addEventListener(\"click\", function () {\n this$1.clearSection();\n this$1.els.$wrapper.querySelector(\n \"#frequency .account__actual__data\"\n ).style.display = \"flex\";\n this$1.els.$wrapper.querySelector(\n \"#frequency .account__actual__data\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\n \"#frequency .update__button\"\n ).style.display = \"block\";\n this$1.els.$wrapper.querySelector(\n \"#frequency .update__button\"\n ).style.visibility = \"visible\";\n this$1.els.$wrapper.querySelector(\"#update_frequency\").style.display =\n \"none\";\n this$1.els.$wrapper.querySelector(\n \"#frequency .skip__button\"\n ).style.display = \"none\";\n });\n //Epidemy (indicator manage)\n this.els.$wrapper\n .querySelector(\".select-all\")\n .addEventListener(\"click\", this.selectAllDiseases.bind(this));\n this.els.$wrapper\n .querySelector(\".select-custom\")\n .addEventListener(\"click\", this.deselectAllDiseases.bind(this));\n //Epidemy Save button (indicator manage)\n this.els.$wrapper\n .querySelector(\"#update_epidemy .update__new__data\")\n .addEventListener(\"click\", function () {\n this$1.saveEpidemySelection();\n this$1.els.$wrapper\n .querySelector(\"#update_epidemy .skip__button\")\n .click();\n });\n //Save passeword\n this.els.$wrapper\n .querySelector(\"#password .update__new__data\")\n .addEventListener(\"click\", function () {\n this$1.updatePassword(\n this$1.els.$wrapper.querySelector(\"#password .input-field\").value\n );\n this$1.els.$wrapper.querySelector(\"#password .skip__button\").click();\n this$1.els.$wrapper.querySelector(\"#password .input-field\").value = \"\";\n this$1.calculatePercentage();\n });\n //Save firstname and lastname\n this.els.$wrapper\n .querySelector(\"#update_name .update__new__data\")\n .addEventListener(\"click\", function () {\n this$1.updateName(\n this$1.els.$wrapper.querySelector(\"#update_name .firstname\").value,\n this$1.els.$wrapper.querySelector(\"#update_name .lastname\").value\n );\n\n this$1.els.$wrapper.querySelector(\"#update_name .skip__button\").click();\n this$1.els.$wrapper.querySelector(\"#update_name .firstname\").value = \"\";\n this$1.els.$wrapper.querySelector(\"#update_name .lastname\").value = \"\";\n this$1.calculatePercentage();\n });\n //Save email\n this.els.$wrapper\n .querySelector(\"#mail .update__new__data\")\n .addEventListener(\"click\", function () {\n this$1.updateEmail(\n this$1.els.$wrapper.querySelector(\"#mail .input-field\").value\n );\n this$1.els.$wrapper.querySelector(\"#mail .skip__button\").click();\n this$1.els.$wrapper.querySelector(\"#mail .input-field\").value = \"\";\n this$1.calculatePercentage();\n });\n //Save phone\n this.els.$wrapper\n .querySelector(\"#phone .update__new__data\")\n .addEventListener(\"click\", function () {\n this$1.updatePhone(\n this$1.els.$wrapper.querySelector(\"#phone .input-field\").value\n );\n this$1.els.$wrapper.querySelector(\"#phone .skip__button\").click();\n this$1.els.$wrapper.querySelector(\"#phone .input-field\").value = \"\";\n this$1.calculatePercentage();\n });\n\n //Save frequency\n this.els.$wrapper\n .querySelector(\"#frequency .update__new__data\")\n .addEventListener(\"click\", function () {\n this$1.saveEntryMode();\n this$1.els.$wrapper.querySelector(\"#frequency .skip__button\").click();\n });\n this.calculatePercentage();\n\n },\n loadData: function loadData() {\n var this$1 = this;\n\n this.loadUserEntryMode();\n this.fetchAllEpidemy();\n this.getAllCpts();\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"get_all_user_data\",\n },\n });\n this.saveRequest.promise\n .then(function (response) {\n if (!response.success) ; else {\n this$1.els.$userAddress = response.data.address;\n if (!Array.isArray(this$1.els.$userAddress)) {\n this$1.els.$userAddress = [];\n }\n this$1.els.$userEmail = response.data.email;\n this$1.els.$userPhone = response.data.cellphone;\n this$1.els.$userName =\n response.data.firstname + \" \" + response.data.lastname;\n this$1.els.$userRpps = response.data.rpps;\n this$1.els.$userFirstName = response.data.firstname;\n this$1.els.$userLastName = response.data.lastname;\n this$1.els.$userSpecialty = response.data.specialty ? response.data.specialty : response.data.specialty.post_title;\n\n this$1.dataIntoHtml();\n }\n this$1.saveRequest = null;\n })\n .catch(function () {\n var messageError = \"An error has occurred, please try again.\";\n console.error(messageError);\n this$1.saveRequest = null;\n });\n },\n dataIntoHtml: function dataIntoHtml() {\n this.els.$userNameHtml.innerHTML = this.els.$userName;\n this.els.$userEmailHtml.innerHTML = this.els.$userEmail;\n this.els.$userPhoneHtml.innerHTML = this.els.$userPhone;\n this.els.$userRppsHtml.innerHTML = this.els.$userRpps;\n this.els.$userEpidemyHtml.innerHTML = this.els.$userEpidemy;\n\n if (this.els.$userSpecialtyHtml) {\n this.els.$userSpecialtyHtml.innerHTML = this.els.$userSpecialty;\n } else {\n this.els.$userSpecialtyHtml.innerHTML = 'Aucune spécialité';\n }\n //foreach the adress to add into html\n var listAdress = \"\";\n listAdress = \"\";\n }\n },\n checkInputContent: function checkInputContent(input) {\n if (input.value.trim() !== \"\") {\n input.classList.add(\"has-content\");\n } else if (!input.classList.contains(\"cpts__field\")) {\n input.classList.remove(\"has-content\");\n }\n },\n getUserEpidemy: function getUserEpidemy() {\n var this$1 = this;\n\n this.request = utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"get_user_indicators\",\n },\n });\n\n this.request.promise\n .then(function (data) {\n this$1.els.$userEpidemyJson = Array.isArray(data.data) ? data.data : [];\n this$1.selectedDiseases = this$1.els.$userEpidemyJson.map(function (indicator) { return indicator.id; });\n\n var indicatorText = this$1.els.$userEpidemyJson.length > 0\n ? this$1.els.$userEpidemyJson.map(function (e) { return e.title; }).join(\", \")\n : \"Aucun abonnement aux indicateurs\";\n\n this$1.els.$userEpidemyHtml.innerHTML = \"

\" + indicatorText + \"

\";\n this$1.els.$accountFormFrequency = this$1.els.$wrapper.querySelector(\".account__form__frequency\");\n if (this$1.selectedDiseases.length === 0) {\n this$1.els.$accountFormFrequency.style.display = \"none\";\n } else {\n this$1.els.$accountFormFrequency.style.display = \"block\";\n }\n\n this$1.updateIndicatorButtons();\n\n })\n .catch(function (error) {\n console.error(\"Erreur lors de la récupération des indicateurs :\", error);\n this$1.els.$userEpidemyHtml.innerHTML = \"

Erreur lors du chargement des épidémies.

\";\n });\n },\n selectAllDiseases: function selectAllDiseases() {\n if (this.selectedDiseases.length === this.allEpidemy.length) {\n this.selectedDiseases = [];\n this.els.$wrapper.querySelector(\".select-all\").checked = false;\n } else {\n this.selectedDiseases = this.allEpidemy.map(function (indicator) { return indicator.id; });\n this.els.$wrapper.querySelector(\".select-all\").checked = true;\n }\n this.updateIndicatorButtons();\n },\n deselectAllDiseases: function deselectAllDiseases() {\n this.selectedDiseases = [];\n this.els.$wrapper.querySelector(\".select-custom\").checked = true;\n this.updateIndicatorButtons();\n },\n updateIndicatorButtons: function updateIndicatorButtons() {\n var this$1 = this;\n\n var indicatorListDiv = this.els.$wrapper.querySelector(\".indicator-list\");\n\n indicatorListDiv.innerHTML = \"\";\n\n if (this.allEpidemy.length === 0) {\n this.updateSelectionState();\n }\n\n this.allEpidemy.forEach(function (indicator) {\n var isSelected = this$1.selectedDiseases.includes(indicator.id);\n var button = document.createElement(\"button\");\n button.className = \"indicator-btn \" + (isSelected ? \"selected\" : \"\");\n button.textContent = indicator.title;\n button.dataset.indicatorId = indicator.id;\n\n button.addEventListener(\"click\", function (e) {\n var id = parseInt(e.target.dataset.indicatorId);\n var index = this$1.selectedDiseases.indexOf(id);\n if (index > -1) {\n this$1.selectedDiseases.splice(index, 1);\n e.target.classList.remove(\"selected\");\n } else {\n this$1.selectedDiseases.push(id);\n e.target.classList.add(\"selected\");\n }\n this$1.updateSelectionState();\n });\n\n indicatorListDiv.appendChild(button);\n });\n this.updateSelectionState();\n },\n updateSelectionState: function updateSelectionState() {\n var allSelectedRadio = this.els.$wrapper.querySelector(\".select-all\");\n var allSelectedBtn = this.els.$wrapper.querySelector(\".all-selected\");\n var customSelectedBtn = this.els.$wrapper.querySelector(\".custom-selected\");\n var customSelectedRadio = this.els.$wrapper.querySelector(\".select-custom\");\n\n if (this.selectedDiseases.length === this.allEpidemy.length) {\n allSelectedRadio.checked = true;\n allSelectedBtn.classList.add(\"selected\");\n customSelectedBtn.classList.remove(\"selected\");\n } else {\n allSelectedRadio.checked = false;\n allSelectedBtn.classList.remove(\"selected\");\n customSelectedBtn.classList.add(\"selected\");\n customSelectedRadio.checked = true;\n }\n },\n saveEpidemySelection: function saveEpidemySelection() {\n var this$1 = this;\n\n var formData = new FormData();\n formData.append(\"action\", \"save_user_indicator_selection\");\n var tabOfIndicators = [];\n this.selectedDiseases.forEach(function (indicatorId) {\n formData.append(\"indicator_subscription_0_indicator[]\", indicatorId);\n tabOfIndicators.push(indicatorId);\n });\n\n if (this.selectedDiseases.length === 0) {\n var confirmationMessage = \"Vous n’avez sélectionné aucun indicateur, êtes-vous sûr de ne pas vouloir contribuer ?\";\n var confirmText = \"Oui\";\n var cancelText = \"Non\";\n modal.showModal(confirmationMessage, confirmText, cancelText, function () {\n fetch(ajaxurl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: 'action=set_user_indicator_empty',\n credentials: 'same-origin',\n })\n .then(function (response) { return response.json(); })\n .catch(function (error) {\n console.error('Erreur réseau ou de serveur :', error);\n });\n\n location.reload();\n }, function () {\n modal.closeModal();\n });\n }\n\n fetch(ajaxurl, {\n method: \"POST\",\n body: formData,\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n if (data.success) {\n this$1.getUserEpidemy();\n //find id into allEpidemy and add selected\n this$1.els.$userEpidemy = \"\";\n this$1.allEpidemy.forEach(function (indicator) {\n tabOfIndicators.forEach(function (userIndicator) {\n if (indicator.id === userIndicator) {\n if (this$1.els.$userEpidemy.length > 0) {\n this$1.els.$userEpidemy += \", \";\n }\n this$1.els.$userEpidemy += indicator.title;\n }\n });\n });\n //For no reload with ajax request\n this$1.els.$userEpidemyAfterSave = true;\n this$1.els.$userEpidemyHtml.innerHTML = this$1.els.$userEpidemy;\n if (this$1.els.$userEpidemyHtml.innerHTML === \"\") {\n this$1.els.$userEpidemyHtml.innerHTML =\n \"Aucun abonnement aux indicateurs\";\n }\n\n this$1.calculatePercentage();\n } else {\n console.error(\n \"Erreur lors de la sauvegarde des indicateurs:\",\n data.data\n );\n }\n })\n .catch(function (error) {\n console.error(\"Erreur AJAX lors de la sauvegarde:\", error);\n });\n\n //Close part\n this.els.$wrapper.querySelector(\"#update_epidemy .skip__button\").click();\n this.loadData();\n },\n updatePassword: function updatePassword(newPassword) {\n if (newPassword) {\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"update_password\",\n params: JSON.stringify({\n newPassword: newPassword,\n }),\n },\n });\n }\n },\n updateName: function updateName(newFirstname, newLastName) {\n var this$1 = this;\n\n if (newFirstname && newLastName) {\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"update_name\",\n params: JSON.stringify({\n newFirstname: newFirstname,\n newLastname: newLastName,\n }),\n },\n });\n\n this.saveRequest.promise.then(function (response) {\n if (response.success) {\n this$1.els.$userNameHtml.innerHTML = newFirstname + \" \" + newLastName;\n this$1.els.$userFirstName = newFirstname;\n this$1.els.$userLastName = newLastName;\n } else {\n console.error(\"error\", response.data);\n }\n });\n }\n },\n updateEmail: function updateEmail(newEmail) {\n var this$1 = this;\n\n if (newEmail) {\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"update_email\",\n params: JSON.stringify({\n newEmail: newEmail,\n }),\n },\n });\n this.saveRequest.promise.then(function (response) {\n if (response.success) {\n this$1.els.$userEmailHtml.innerHTML = newEmail;\n this$1.els.$userEmail = newEmail;\n } else {\n console.error(\"error when update mail\");\n }\n });\n }\n },\n updatePhone: function updatePhone(newPhone) {\n var this$1 = this;\n\n if (newPhone) {\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"update_cellphone\",\n params: JSON.stringify({\n newCellphone: newPhone,\n }),\n },\n });\n this.saveRequest.promise.then(function (response) {\n if (response.success) {\n this$1.els.$userPhoneHtml.innerHTML = newPhone;\n this$1.els.$userPhone = newPhone;\n } else {\n console.error(\"error when update phone\");\n }\n });\n }\n },\n loadUserEntryMode: function loadUserEntryMode() {\n var this$1 = this;\n\n fetch(ajaxurl, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams({\n action: \"get_entry_mode\",\n }),\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n this$1.entryMode = data.data.entryMode;\n\n if (this$1.entryMode) {\n if (this$1.entryMode.toLowerCase() === \"weekly\") {\n this$1.els.$wrapper.querySelector(\"#frequency .form__data\").innerHTML = \"Une fois par semaine\";\n } else if (this$1.entryMode.toLowerCase() === \"daily\") {\n this$1.els.$wrapper.querySelector(\"#frequency .form__data\").innerHTML = \"Une fois par jour\";\n } else {\n this$1.els.$wrapper.querySelector(\"#frequency .form__data\").innerHTML = \"Aucun mode de saisie défini\";\n }\n }\n\n if (this$1.els.$wrapper.querySelector(\"#frequency .indicator-options\")) {\n this$1.els.$wrapper.querySelector(\"#frequency .indicator-options\").remove();\n }\n if (this$1.els.$wrapper.querySelector(\"#update_frequency .title__data\")) {\n this$1.els.$wrapper.querySelector(\"#update_frequency .title__data\").remove();\n }\n\n var frequencyHtml = \"\\n
\\n

Fréquence de saisie des indicateurs

\\n
\\n
\\n \\n \\n
\\n \";\n this$1.els.$wrapper.querySelector(\"#update_frequency .update__zone \").insertAdjacentHTML(\"afterbegin\", frequencyHtml);\n\n this$1.attachFrequencyEventListeners();\n })\n .catch(function (error) {\n console.error(\"Erreur\", error);\n });\n },\n attachFrequencyEventListeners: function attachFrequencyEventListeners() {\n var this$1 = this;\n\n var frequencyOptions = this.els.$wrapper.querySelectorAll('input[name=\"frequency\"]');\n\n frequencyOptions.forEach(function (radio) {\n radio.addEventListener('change', function (event) {\n this$1.updateFrequencySelection(event.target);\n });\n\n if (radio.checked) {\n this$1.updateFrequencySelection(radio);\n }\n });\n },\n updateFrequencySelection: function updateFrequencySelection(selectedRadio) {\n var frequencyOptions = this.els.$wrapper.querySelectorAll('input[name=\"frequency\"]');\n\n frequencyOptions.forEach(function (radio) {\n var label = radio.closest('.selection-btn');\n if (radio === selectedRadio) {\n label.classList.add('selected');\n } else {\n label.classList.remove('selected');\n }\n });\n },\n saveEntryMode: function saveEntryMode() {\n var this$1 = this;\n\n var frequencyInputs = this.els.$wrapper.querySelectorAll('input[name=\"frequency\"]');\n\n frequencyInputs.forEach(function (input) {\n if (input.checked) {\n this$1.entryMode = input.value;\n }\n });\n\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"save_entry_mode\",\n params: JSON.stringify({\n entryMode: this.entryMode,\n }),\n },\n });\n\n this.saveRequest.promise.then(function (response) {\n if (response.success) {\n if (this$1.entryMode.toLowerCase() === \"weekly\") {\n this$1.els.$wrapper.querySelector(\"#frequency .form__data\").innerHTML = \"Une fois par semaine\";\n } else {\n this$1.els.$wrapper.querySelector(\"#frequency .form__data\").innerHTML = \"Une fois par jour\";\n }\n\n this$1.attachFrequencyEventListeners();\n\n this$1.calculatePercentage();\n } else {\n console.error(\"Erreur lors de la sauvegarde du mode de saisie :\", response.data);\n }\n }).catch(function (error) {\n console.error(\"Erreur AJAX lors de la sauvegarde du mode de saisie :\", error);\n });\n },\n setupRadioListeners: function setupRadioListeners() {\n var allSelectedRadio = this.els.$wrapper.querySelector(\".select-all\");\n var customSelectedRadio = this.els.$wrapper.querySelector(\".select-custom\");\n\n allSelectedRadio.removeEventListener(\"change\", this.handleAllSelectedBound);\n customSelectedRadio.removeEventListener(\"change\", this.handleCustomSelectedBound);\n\n this.handleAllSelectedBound = this.handleAllSelected.bind(this);\n this.handleCustomSelectedBound = this.handleCustomSelected.bind(this);\n\n allSelectedRadio.addEventListener(\"change\", this.handleAllSelectedBound);\n customSelectedRadio.addEventListener(\"change\", this.handleCustomSelectedBound);\n },\n\n handleAllSelected: function handleAllSelected(event) {\n if (event.target.checked) {\n this.selectedDiseases = this.allEpidemy.map(function (indicator) { return indicator.id; });\n this.updateIndicatorButtons();\n }\n },\n\n handleCustomSelected: function handleCustomSelected(event) {\n if (event.target.checked) {\n this.selectedDiseases = [];\n this.updateIndicatorButtons();\n }\n },\n fetchAllEpidemy: function fetchAllEpidemy() {\n var this$1 = this;\n\n utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"get_all_indicator\",\n },\n }).promise.then(function (response) {\n if (response.success) {\n this$1.allEpidemy = response.data;\n this$1.getUserEpidemy();\n } else {\n console.error(\"Erreur lors de la récupération des indicateurs :\", response.data);\n }\n }).catch(function (error) {\n console.error(\"Erreur AJAX lors de la récupération des indicateurs :\", error);\n });\n },\n toogleEpidemySelection: function toogleEpidemySelection() {\n var wrapper = this.els.$wrapper;\n var isAllSelected = this.allEpidemy.length === this.els.$userEpidemyJson.length;\n var hasSelected = this.els.$userEpidemyJson.length > 0;\n\n var handleRadioClick = function (event) {\n wrapper.querySelectorAll(\"#update_epidemy .selection-btn\").forEach(function (btn) { return btn.classList.remove(\"selected\"); });\n var target = event.currentTarget;\n if (target.checked) {\n target.closest(\"#update_epidemy .selection-btn\").classList.add(\"selected\");\n }\n };\n\n wrapper.querySelectorAll('#update_epidemy input[type=\"radio\"][name=\"selection\"]').forEach(function (radio) {\n radio.removeEventListener(\"click\", handleRadioClick);\n radio.addEventListener(\"click\", handleRadioClick);\n });\n\n if (isAllSelected) {\n this.els.$wrapper.querySelector(\"#update_epidemy .all-selected input\").checked = true;\n this.els.$wrapper.querySelector(\"#update_epidemy .all-selected .select-all\").click();\n this.els.$wrapper.querySelector(\"#update_epidemy .all-selected\").classList.add(\"selected\");\n this.els.$wrapper.querySelector(\"#update_epidemy .custom-selected\").classList.remove(\"selected\");\n }\n if (hasSelected && !isAllSelected) {\n this.els.$wrapper.querySelector(\"#update_epidemy .custom-selected .select-custom\").click();\n this.els.$wrapper.querySelector(\"#update_epidemy .custom-selected\").classList.add(\"selected\");\n this.els.$wrapper.querySelector(\"#update_epidemy .all-selected\").classList.remove(\"selected\");\n }\n var allSelectedEl = wrapper.querySelector(\"#update_epidemy .all-selected\");\n var customSelectedEl = wrapper.querySelector(\"#update_epidemy .custom-selected\");\n\n if (isAllSelected) {\n allSelectedEl.classList.add(\"selected\");\n customSelectedEl.classList.remove(\"selected\");\n } else if (hasSelected) {\n allSelectedEl.classList.remove(\"selected\");\n customSelectedEl.classList.add(\"selected\");\n } else {\n allSelectedEl.classList.remove(\"selected\");\n customSelectedEl.classList.remove(\"selected\");\n }\n },\n //Address part\n showAddAddressForm: function showAddAddressForm() {\n var this$1 = this;\n\n var $updateAddress = this.els.$wrapper.querySelector(\"#update_address\");\n this.els.$wrapper.querySelector(\"#addressInput\").value = \"\";\n this.els.$wrapper.querySelector(\"#postalCodeInput\").value = \"\";\n this.els.$wrapper.querySelector(\"#cityInput\").value = \"\";\n this.els.$wrapper.querySelector(\"#cptsInput\");\n $updateAddress.querySelector(\"#cptsInput\").classList.add(\"has-content\");\n\n this.els.$wrapper.querySelector(\n \" #update_address .save_address__container\"\n ).style.display = \"none\";\n $updateAddress.querySelector(\".add__address__form\").style.display = \"block\";\n $updateAddress.querySelector(\"#add__address__btn\").style.display = \"none\";\n $updateAddress.querySelector(\"#addresses-list\").style.display = \"none\";\n\n this.checkInputContent(this.els.$wrapper.querySelector(\"#addressInput\"));\n this.checkInputContent(this.els.$wrapper.querySelector(\"#postalCodeInput\"));\n this.checkInputContent(this.els.$wrapper.querySelector(\"#cityInput\"));\n\n this.els.$wrapper\n .querySelector(\"#update_address .button-cancel\")\n .addEventListener(\"click\", function () {\n this$1.hideAddAddressForm();\n });\n //add address button\n this.els.$wrapper\n .querySelector(\"#update_address .confirm-address\")\n .addEventListener(\"click\", function () {\n this$1.addAddress();\n });\n },\n\n hideAddAddressForm: function hideAddAddressForm() {\n var $updateAddress = this.els.$wrapper.querySelector(\"#update_address\");\n $updateAddress.querySelector(\".add__address__form\").style.display = \"none\";\n $updateAddress.querySelector(\"#add__address__btn\").style.display = \"flex\";\n $updateAddress.querySelector(\"#addresses-list\").style.display = \"flex\";\n this.els.$wrapper.querySelector(\n \" #update_address .save_address__container\"\n ).style.display = \"block\";\n $updateAddress.querySelector(\"#cptsInput\").value = '';\n },\n\n addAddress: function addAddress() {\n var $updateAddress = this.els.$wrapper.querySelector(\"#update_address\");\n var addressInput = $updateAddress.querySelector(\"#addressInput\").value;\n var postalCodeInput = $updateAddress.querySelector(\"#postalCodeInput\").value;\n var cityInput = $updateAddress.querySelector(\"#cityInput\").value;\n var cpts = $updateAddress.querySelector(\"#cptsInput\").value;\n\n if (addressInput && postalCodeInput && cityInput) {\n if (!Array.isArray(this.els.$userAddress)) {\n this.els.$userAddress = [];\n }\n\n var addressAlreadyExist = false;\n this.els.$userAddress.forEach(function (address) {\n if (\n address.street === addressInput &&\n address.postal_code === postalCodeInput &&\n address.city === cityInput\n ) {\n addressAlreadyExist = true;\n }\n });\n if (!addressAlreadyExist) {\n var isFirstAddress = this.els.$userAddress.length === 0;\n this.els.$userAddress.push({\n street: addressInput,\n postal_code: postalCodeInput,\n city: cityInput,\n main_address: isFirstAddress,\n cpts: cpts,\n });\n this.updateAddressesList();\n this.hideAddAddressForm();\n } else {\n var buttonEffect = this.els.$wrapper.querySelector(\".confirm-address\");\n buttonEffect.classList.add(\"vibrate\");\n setTimeout(function () {\n buttonEffect.classList.remove(\"vibrate\");\n }, 500);\n }\n }\n },\n updateAddressesList: function updateAddressesList() {\n var this$1 = this;\n\n var $updateAddress = this.els.$wrapper.querySelector(\"#update_address\");\n var addressesList = $updateAddress.querySelector(\"#addresses-list\");\n addressesList.innerHTML = \"\";\n\n if (this.els.$userAddress) {\n this.els.$userAddress.forEach(function (address, index) {\n var cptsName = '';\n\n if (address.cpts && address.cpts[0] && address.cpts[0].post_title) {\n cptsName = address.cpts[0].post_title;\n } else if (address.cpts) {\n var cpt = this$1.allCpts.find(function (cpt) { return cpt.id === address.cpts; });\n if (cpt) {\n cptsName = cpt.title;\n } else {\n cptsName = '';\n }\n }\n\n var listItem = document.createElement(\"div\");\n listItem.innerHTML = \"\\n
\\n
\\n \\n
\\n
\\n \";\n addressesList.appendChild(listItem);\n });\n }\n\n this.els.$wrapper\n .querySelectorAll(\"#update_address .edit-button\")\n .forEach(function (button) {\n button.addEventListener(\"click\", function (event) {\n var index = event.target.getAttribute(\"data-index\");\n this$1.editAddress(index);\n });\n });\n\n this.els.$wrapper\n .querySelectorAll(\"#update_address .delete-button\")\n .forEach(function (button) {\n button.addEventListener(\"click\", function () {\n var index = button.getAttribute(\"data-index\");\n\n this$1.showConfirmationModal(index);\n });\n });\n\n this.els.$wrapper\n .querySelectorAll(\"#update_address .primary-address-button\")\n .forEach(function (button) {\n button.addEventListener(\"click\", function (event) {\n var index = button.getAttribute(\"data-index\");\n\n this$1.updateMainAddress(index);\n this$1.updateAddressItemSelectedClass();\n });\n });\n },\n updateAddressItemSelectedClass: function updateAddressItemSelectedClass() {\n var this$1 = this;\n\n var addressItems = this.els.$wrapper.querySelectorAll(\"#update_address .address-item\");\n addressItems.forEach(function (item) {\n var index = item.getAttribute(\"data-index\");\n var address = this$1.els.$userAddress[index];\n if (address.main_address) {\n item.classList.add(\"address-item--selected\");\n } else {\n item.classList.remove(\"address-item--selected\");\n }\n });\n },\n deleteAddress: function deleteAddress(index) {\n var wasMain = this.els.$userAddress[index].main_address;\n this.els.$userAddress.splice(index, 1);\n\n if (wasMain && this.els.$userAddress.length > 0) {\n this.els.$userAddress[0].main_address = true;\n }\n\n this.updateAddressesList();\n },\n loadUserAddresses: function loadUserAddresses() {\n if (this.els.$userAddress && this.els.$userAddress.length > 0) {\n this.updateAddressesList();\n }\n },\n editAddress: function editAddress(index) {\n var this$1 = this;\n\n var $updateAddress = this.els.$wrapper.querySelector(\"#update_address\");\n var address = this.els.$userAddress[index];\n\n $updateAddress.querySelector(\"#addressInput\").value = address.street;\n $updateAddress.querySelector(\"#addressInput\").classList.add(\"has-content\");\n $updateAddress.querySelector(\"#postalCodeInput\").value =\n address.postal_code;\n $updateAddress\n .querySelector(\"#postalCodeInput\")\n .classList.add(\"has-content\");\n $updateAddress.querySelector(\"#cptsInput\").classList.add(\"has-content\");\n\n if (address.cpts) {\n $updateAddress.querySelector(\"#cptsInput\").value = address.cpts[0].ID;\n } else {\n $updateAddress.querySelector(\"#cptsInput\").value = '';\n }\n\n $updateAddress.querySelector(\"#cityInput\").value = address.city;\n $updateAddress.querySelector(\"#cityInput\").classList.add(\"has-content\");\n this.els.$wrapper.querySelector(\n \" #update_address .save_address__container\"\n ).style.display = \"none\";\n $updateAddress.querySelector(\".add__address__form\").style.display = \"block\";\n $updateAddress.querySelector(\"#add__address__btn\").style.display = \"none\";\n $updateAddress.querySelector(\"#addresses-list\").style.display = \"none\";\n\n this.currentEditingIndex = index;\n\n this.els.$wrapper\n .querySelector(\"#update_address .button-cancel\")\n .addEventListener(\"click\", function () {\n this$1.hideAddAddressForm();\n });\n\n this.els.$wrapper\n .querySelector(\"#update_address .confirm-address\")\n .addEventListener(\"click\", function () {\n this$1.saveEditedAddress();\n this$1.currentEditingIndex = null;\n });\n },\n\n saveEditedAddress: function saveEditedAddress() {\n var $updateAddress = this.els.$wrapper.querySelector(\"#update_address\");\n var addressInput = $updateAddress.querySelector(\"#addressInput\").value;\n var postalCodeInput =\n $updateAddress.querySelector(\"#postalCodeInput\").value;\n var cityInput = $updateAddress.querySelector(\"#cityInput\").value;\n var cpts = $updateAddress.querySelector(\"#cptsInput\").value;\n if (\n addressInput &&\n postalCodeInput &&\n cityInput &&\n this.currentEditingIndex !== null\n ) {\n this.els.$userAddress[this.currentEditingIndex].street = addressInput;\n this.els.$userAddress[this.currentEditingIndex].postal_code =\n postalCodeInput;\n this.els.$userAddress[this.currentEditingIndex].city = cityInput;\n this.els.$userAddress[this.currentEditingIndex].cpts = cpts;\n\n this.updateAddressesList();\n this.hideAddAddressForm();\n } else {\n var buttonEffect = this.els.$wrapper.querySelector(\".confirm-address\");\n buttonEffect.classList.add(\"vibrate\");\n setTimeout(function () {\n buttonEffect.classList.remove(\"vibrate\");\n }, 500);\n }\n },\n updateAddressInDatabase: function updateAddressInDatabase() {\n var this$1 = this;\n\n if (!Array.isArray(this.els.$userAddress)) {\n this.els.$userAddress = [];\n }\n\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"update_address\",\n params: JSON.stringify({\n newAddress: this.els.$userAddress,\n }),\n },\n });\n this.saveRequest.promise\n .then(function (response) {\n if (response.success) {\n this$1.updateAddressesList();\n } else {\n console.error(\"Error updating address:\", response.data || response);\n }\n this$1.saveRequest = null;\n })\n .catch(function (error) {\n console.error(\"AJAX error updating address:\", error);\n this$1.saveRequest = null;\n });\n\n // Attendez 300ms pour que les données soient mises à jour\n setTimeout(function () {\n this$1.loadData();\n this$1.dataIntoHtml();\n }, 300);\n },\n updateMainAddress: function updateMainAddress(index) {\n index = parseInt(index, 10);\n this.els.$userAddress.forEach(function (address, i) {\n address.main_address = i === index;\n });\n this.updateAddressesList();\n },\n greyOutSection: function greyOutSection(name) {\n var section = this.els.$wrapper.querySelectorAll(\".account__form__field\");\n var fixedSection = this.els.$wrapper.querySelector(\".account__form__field__specialty\");\n section.forEach(function (section) {\n section.classList.add(\"greyOut\");\n section.querySelector(\".update__button\").disabled = true;\n });\n fixedSection.classList.add(\"greyOut\");\n this.els.$wrapper.querySelector((\"#\" + name + \" \")).classList.remove(\"greyOut\");\n\n if (name === \"address\") {\n this.els.$wrapper\n .querySelector((\"#\" + name + \" .account__form__field\"))\n .classList.remove(\"greyOut\");\n }\n },\n clearSection: function clearSection() {\n var section = this.els.$wrapper.querySelectorAll(\".account__form__field\");\n var fixedSection = this.els.$wrapper.querySelector(\".account__form__field__specialty\");\n section.forEach(function (section) {\n section.classList.remove(\"greyOut\");\n section.querySelector(\".update__button\").disabled = false;\n });\n fixedSection.classList.remove(\"greyOut\");\n },\n calculatePercentage: function calculatePercentage() {\n fetch(ajaxurl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: 'action=get_profile_completion_percentage',\n credentials: 'same-origin',\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n if (data.success) {\n var total = data.data.percentage;\n\n document.querySelector(\".progress__bar__container .progress__bar\").style.width = total + \"%\";\n document.querySelector(\".progress__text\").innerText = total + \"%\";\n if (total !== 100) {\n localStorage.removeItem('profileComplete');\n localStorage.removeItem('profileFireworks');\n } else {\n localStorage.setItem('profileComplete', true);\n if (!localStorage.getItem('profileFireworks')) {\n var page = document.querySelector('#page');\n page.classList.add('fireworks');\n var interval = setInterval(ProfileCompletion.createFirework, 200);\n setTimeout(function () {\n clearInterval(interval);\n document.querySelectorAll('.particle').forEach(function (particle) { return particle.remove(); });\n page.classList.remove('fireworks');\n }, 5000);\n\n }\n localStorage.setItem('profileFireworks', true);\n\n }\n } else {\n console.error('Erreur lors de la récupération du pourcentage :', data.data);\n }\n })\n .catch(function (error) {\n console.error('Erreur réseau ou de serveur :', error);\n });\n },\n getAllCpts: function getAllCpts() {\n var this$1 = this;\n\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: \"POST\",\n body: {\n action: \"get_all_cpts\",\n },\n });\n return this.saveRequest.promise\n .then(function (response) {\n if (response.success) {\n var cptsInput = this$1.els.$wrapper.querySelector(\"#cptsInput\");\n var defaultOption = document.createElement(\"option\");\n defaultOption.value = \"\";\n defaultOption.text = \"Sélectionner une CPTS\";\n defaultOption.selected = true;\n defaultOption.disabled = false;\n cptsInput.appendChild(defaultOption);\n\n this$1.allCpts = response.data;\n\n this$1.allCpts.forEach(function (cpt) {\n var option = document.createElement(\"option\");\n option.value = cpt.id;\n option.text = cpt.title;\n cptsInput.appendChild(option);\n });\n } else {\n console.error(\"Erreur lors de la récupération des CPTs :\", response.data);\n }\n })\n .catch(function (error) {\n console.error(\"Erreur lors de la récupération des CPTs :\", error);\n });\n },\n showConfirmationModal: function showConfirmationModal(index) {\n var this$1 = this;\n\n var message = \"Êtes-vous sûr de vouloir supprimer cette adresse ?\";\n var confirmText = \"Confirmer\";\n var cancelText = \"Annuler\";\n modal.showModal(\n message,\n confirmText,\n cancelText,\n function () {\n this$1.deleteAddress(index);\n modal.closeModal();\n },\n function () {\n modal.closeModal();\n }\n );\n },\n loadUserAddress: function loadUserAddress() {\n var this$1 = this;\n\n fetch(ajaxurl, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: new URLSearchParams({\n action: \"get_user_address\",\n }),\n })\n .then(function (response) { return response.json(); })\n .then(function (data) {\n this$1.els.$userAddress = data.data.address;\n })\n .catch(function (error) {\n console.error(\"Erreur\", error);\n });\n }\n };\n\n var SuportForm = {\n els: {\n assistanceBtn: null,\n modalCloseBtn: null,\n cancelBtn: null,\n sendBtn: null,\n objectInput: null,\n requestInput: null,\n inputFields: null,\n formContainer: null,\n supportFormSuccess: null,\n supportFormError: null,\n closeSupportForm: null,\n retryForm: null,\n },\n init: function init() {\n this.els.$wrapper = document.getElementById('support-form');\n if (this.els.$wrapper) {\n this.setupElements();\n this.bindEvents();\n }\n },\n setupElements: function setupElements() {\n this.els.assistanceBtn = document.getElementById('assistance');\n this.els.modalCloseBtn = document.getElementById('support-close');\n this.els.cancelBtn = document.getElementById('cancelBtn');\n this.els.sendBtn = document.getElementById('sendBtn');\n this.els.objectInput = document.getElementById('objectInput');\n this.els.requestInput = document.getElementById('requestInput');\n this.els.inputFields = document.querySelectorAll(\".label__container input, .label__container textarea\");\n this.els.formContainer = document.querySelector('.form__container');\n this.els.supportFormSuccess = document.getElementById('support-form-success');\n this.els.supportFormError = document.getElementById('support-form-error');\n this.els.closeSupportForm = document.getElementById('closeSupportForm');\n this.els.retryForm = document.getElementById('retryForm');\n },\n bindEvents: function bindEvents() {\n var this$1 = this;\n\n this.els.assistanceBtn.addEventListener('click', this.toggleForm.bind(this));\n this.els.modalCloseBtn.addEventListener('click', this.hideForm.bind(this));\n this.els.cancelBtn.addEventListener('click', this.hideForm.bind(this));\n this.els.sendBtn.addEventListener('click', this.sendForm.bind(this));\n this.els.closeSupportForm.addEventListener('click', this.hideForm.bind(this));\n this.els.retryForm.addEventListener('click', this.retrySupportForm.bind(this));\n\n this.els.inputFields.forEach(function (input) {\n input.addEventListener(\"input\", function () { return this$1.checkInputContent(input); });\n input.addEventListener(\"focus\", function () { return this$1.checkInputContent(input); });\n input.addEventListener(\"blur\", function () { return this$1.checkInputContent(input); });\n });\n },\n toggleForm: function toggleForm() {\n this.els.$wrapper.classList.toggle('active');\n this.els.formContainer.style.display = \"flex\";\n },\n hideForm: function hideForm(event) {\n var this$1 = this;\n\n event.stopImmediatePropagation();\n this.els.$wrapper.classList.remove('active');\n\n setTimeout(function () {\n this$1.resetForm();\n }, 300);\n\n this.els.supportFormSuccess.style.display = \"none\";\n this.els.supportFormError.style.display = \"none\";\n },\n sendForm: function sendForm() {\n var this$1 = this;\n\n if (!this.els.formContainer.checkValidity()) {\n return;\n }\n\n event.preventDefault();\n\n this.saveRequest = utils.sendHTTPRequest({\n url: ajaxurl,\n method: 'POST',\n body: {\n action: 'support_form_email',\n params: JSON.stringify({\n object: this.els.objectInput.value,\n request: this.els.requestInput.value,\n })\n },\n });\n\n this.saveRequest.promise.then(function (response) {\n if (response.success) {\n this$1.displaySuccessMessage();\n } else {\n this$1.displayErrorMessage(response.data);\n this$1.resetForm();\n }\n }).catch(function (error) {\n this$1.displayErrorMessage();\n this$1.resetForm();\n console.error(error);\n });\n },\n checkInputContent: function checkInputContent(input) {\n if (input.value.trim() !== \"\") {\n input.classList.add(\"has-content\");\n } else {\n input.classList.remove(\"has-content\");\n }\n },\n displaySuccessMessage: function displaySuccessMessage() {\n this.els.formContainer.style.display = \"none\";\n this.els.supportFormSuccess.style.display = \"block\";\n },\n displayErrorMessage: function displayErrorMessage() {\n this.els.formContainer.style.display = \"none\";\n this.els.supportFormError.style.display = \"block\";\n },\n retrySupportForm: function retrySupportForm() {\n this.els.formContainer.style.display = \"flex\";\n this.els.supportFormError.style.display = \"none\";\n },\n resetForm: function resetForm() {\n this.els.objectInput.value = \"\";\n this.els.requestInput.value = \"\";\n this.els.inputFields.forEach(function (input) {\n input.classList.remove(\"has-content\");\n }, this);\n }\n };\n\n (function () {\n Registration.init();\n Settings.init();\n MissingData.init();\n Charts.init();\n MissingPassword.init();\n Register.init();\n Dashboard.init();\n Login.init();\n DataForm.init();\n Alerts.init();\n Surveys.init();\n Header.init();\n SuportForm.init();\n MyAccount.init();\n IndicatorCalendar.init();\n })();\n\n})));\n//# sourceMappingURL=medvigie.min.js.map\n"],"names":["factory","define","amd","utils","getParent","$el","selector","document","parentNode","matches","pad","number","length","str","nl2br","replace","getElementTransitionDurationEnd","inMS","window","getComputedStyle","transitionDuration","split","map","n","parseFloat","filter","a","b","shift","onTransitionEnd","fn","computedStyles","duration","Math","max","apply","setTimeout","htmlToElement","html","template","createElement","trim","innerHTML","content","firstChild","getDimensionsOfFutureElement","$ref","boundingClientRect","getBoundingClientRect","setAttribute","style","position","zIndex","width","opacity","visibility","elementBoudingClientRect","insertBefore","nextElementSibling","remove","sendHTTPRequest","obj","this$1","this","xhr","XMLHttpRequest","promise","Promise","resolve","reject","open","method","url","headers","Object","keys","forEach","key","setRequestHeader","onload","status","JSON","parse","response","statusText","onerror","params","body","formData","FormData","buildFormData","send","data","parentKey","value","Date","File","append","changeWithCSSAnimation","options","hide","show","attr","classList","add","afterHide","afterShow","Registration","els","form","$wrapper","rpps_error","rpps","first_name","last_name","postal_code","department","phone_label","password","show_button","view_password_str","hide_password_str","init","target","querySelector","insertAdjacentHTML","getPasswordVerificationHtmlContent","getShowPasswordButtonHtmlContent","getElementById","display","initEvents","addEventListener","e","getPassword","togglePassword","autoSelectDepartment","labelPhone","getRPPSData","text","uppercase","special","checkIfEightChar","checkIfOneUppercase","checkIfOneDigit","checkIfOneSpecialChar","test","passInput","togglePW","type","textContent","i","elems","l","selected","substring","getRequest","ajaxurl","then","success","console","error","errorMessage","catch","Settings","entry_mode_choice","$daily","$weekly","modale","$validate","loading","userId","entry_mode","dashboard_url","history","saveRequest","settings_options","user_id","inputEvents","formEvent","checked","preventDefault","setLoading","location","displayValidationModale","saveData","change_mode","action","stringify","increment","contains","$closeModaleBtns","querySelectorAll","closeCallback","Array","prototype","call","$closeModaleBtn","removeEventListener","MissingData","$missing_days","$message","$suspected_patients_wrappers","$suspected_patients_inputs","$patients_wrappers","$patients_inputs","$no_consultation_inputs","$no_consultation_values","missing_data_options","$missingDay","index","getAttribute","changeInput","readOnly","parseInt","validateForm","missing_days_data","date_str","missing_days_item","number_of_suspected_patients","number_of_patients","entry_date","push","successMessage","Charts","$container_indicators","$chart_ira_fra","$chart_gastro_fra","$chart_varicelle_fra","$chart_bronchio_fra","$chart_ira_naq","$chart_gastro_naq","$chart_varicelle_naq","$chart_bronchio_naq","dataUrls","ira-fra","gastro-fra","varicelle-fra","bronchio-fra","ira-naq","gastro-naq","varicelle-naq","initCharts","initChartIndicators","initMultipleCharts","container","charts","chart","initChartFromUrl","fetch","ok","Error","json","title","getChartTitle","subtitle","getChartSubtitle","createHighcharts","id","typeLabel","subtitleLabel","containerId","titleText","subtitleText","Highcharts","exporting","buttons","contextButton","symbolStroke","menuItems","symbol","theme","fill","align","color","fontWeight","fontSize","margin","backgroundColor","height","xAxis","crosshair","labels","yAxis","tooltip","crosshairs","shared","rows","seriesMapping","x","low","high","y","complete","series","name","plotOptions","label","connectorAllowed","marker","enabled","fillOpacity","lineWidth","responsive","rules","condition","maxWidth","chartOptions","legend","URLSearchParams","jsonData","categories","weeks","format","valueSuffix","colors","itemStyle","Login","login_container","password_container","cms_container","login_form","password_form","password_error","user_email","previous_step","loginRPPS","loginPassword","passwordField","passwordToggleIcon","openEyeIcon","closeEyeIcon","src","alt","strength","getPasswordStrength","updatePasswordFeedback","rppsValue","hasError","Number","isInteger","displayLoginError","useCase","use_case","localStorage","setItem","user_data","href","passwordValue","email","displayPasswordError","message","passwordStrengthBar","className","errorIcon","passwordValidationIcon","successIcon","modal","modalTitle","modalText","modalConfirmText","modalCancelText","modalType","onConfirm","onCancel","showModal","renderModal","appendChild","closeModal","showInformationModal","renderInformationModal","Register","inscription_form","addAddressButton","addAddressForm","cancelAddressButton","confirmAddressButton","addressesList","allFormElements","inputFields","rppsNumber","cptsNative","lastnameInput","firstnameInput","emailInput","phoneInput","passwordInput","passwordError","addressError","indexSaver","userSpecialty","addresses","allCpts","setupElements","bindEvents","all","getAllCpts","fillFormData","calculatePercentage","updateProgress","addAddressContainer","addressListButton","terms","togglePasswordButton","inscription_form_error","event","closest","showAddAddressForm","cptsInput","bind","handleAddressChange","buttonEffect","addressInput","postalCodeInput","cityInput","confirmAddress","inscription","input","checkInputContent","isNew","inputs","disableFormElements","enableFormElements","currentEditingIndex","undefined","updatedAddress","address","postalCode","city","cpts","main","updateAddressesList","primaryAddress","addressHTML","addAddressToList","attachButtonEvents","attachRadioEvents","outerHTML","updateSelectedClass","button","showConfirmationModal","editAddress","matchingCpt","cptsName","find","cpt","element","disabled","deleteAddress","splice","item","loopIndex","radio","lastname","cptsTitle","cptsId","specialty","firstname","firstInput","userData","getItem","normalizeQuotes","warn","firstItem","focus","loader","addressErrorMessage","radios","from","some","phone","displayError","percentage","progressElement","percentageDisplay","addressSelect","termsChecked","cgu","part","round","defaultOption","option","decodedTitle","decodeHTMLEntities","textarea","trimEnd","MissingPassword","email_sent_message","checkRPPS","displayRPPSValidationError","sendRPPSRequest","displaySuccessMessage","messageError","__","displayPopupMessage","ProfileCompletion","progressBar","progressText","actionsProfile","userActions","userPolygon","isProfileComplete","showProgressBar","updateProgressBar","fetchProfileCompletionPercentage","interval","setInterval","createFirework","clearInterval","particle","hideProgressBar","removeItem","progressBarContainer","top","field","onFieldChange","updateProgressInElement","fireworksContainer","firework","explosion","spark","randomColor","floor","random","left","EntryModeModal","indicatorValidateBtn","skipStepLink","radioButtons","selectionLabels","entryModeEmpty","entryMode","onModalClose","showEntryModeModal","saveEntryMode","closeEntryModeModal","loadUserEntryMode","modalHtml","updateProgressInModal","callback","Content-Type","indicatorModal","selectAllBtn","selectCustomBtn","indicatorBtns","indicatorEmpty","confirmEmpty","cancelEmpty","isSelectAllActive","selectedDiseases","userIndicators","showIndicatorModal","selectAllDiseases","deselectAllDiseases","toggleDiseaseSelection","saveIndicatorSelection","closeIndicatorModal","updateUserModalMeta","credentials","loadUserIndicators","indicatorButtons","activeIndicators","indicatorsFromCPT","indicator","state","isSelected","userIndicator","isAllSelected","parentElement","indicatorId","includes","uniqueSelectedIndicators","Set","_wpnonce","modalNonce","IndicatorCalendar","currentMonth","currentYear","missingDay","threeWeeksAgo","registrationDate","setupInitialDate","getUserRegistrationDate","today","getMonth","getFullYear","getStartMonthYear","monthsToShow","startMonth","startYear","monthNames","ref","endMonth","endYear","todayDate","setDate","getDate","startDate","endDateObj","endDate","startDateStr","formatDate","endDateStr","getUserIndicatorData","fetchMissingCount","validatedDates","missingCount","generateMonths","start_date","end_date","missing_count","indicatorData","$monthsContainer","month","year","createMonthElement","monthWrapper","monthTitle","calendar","generateCalendar","$calendar","clearCalendar","addEmptyCells","daysInMonth","day","dateObj","dayOfWeek","getDay","dateStr","dayCell","createDayCell","loop","removeChild","firstDay","emptyCell","assignClasses","addClickListener","isSameDate","is_validated","DataForm","currentDate","updateDateDisplay","getUserData","navigateMonth","delta","newMonth","newYear","refreshMonths","updateNavButtons","$nextButton","toggleCalendarVisibility","newDisplay","requestAnimationFrame","scrollTop","scrollHeight","toString","padStart","date1","date2","hadVisits","tableList","tableCase","dataActions","tableFade","tableItems","dataDelete","tableInputs","tableCaseInput","dataCloseBtn","dataPopin","dataPreferences","dataPreferencesOverlay","dataPreferencesPolygon","dataSaveBtn","dataUpdateBtn","diseaseInfo","minusBtns","plusBtns","dataContainer","dataDate","dataDateContainer","dataNoEntry","dataWeek","indicatorCalendar","setupLateElements","bindLateEvents","setupClickOutsideHandler","dataUpdate","prevArrow","nextArrow","toggleVisits","deleteData","currentValue","input$1","previousElementSibling","isNaN","dispatchEvent","Event","currentValue$1","closeDataPopin","showPreferencesOverlay","updateData","changeDate","isCalendarVisible","limitInput","hideNumberPlaceholder","restorePlaceholder","handleInputChange","icon","tooltipText","innerText","rect","scrollY","offsetHeight","transform","tooltipElement","displayStyle","placeholder","updateDiseasesList","request","disease","category_index","category","items","sortedCategories","values","sort","categoryTitleContainer","firstCategory","header","itemHTML","createItem","categoryName","description","overflow","isVisible","slice","countedCategory","inputsArray","totalIndicatorPatients","totalPatients","entryDate","countedInputs","dataset","soinsNonProgrammesValue","soinsNonProgrammesInput","indicatorValue","reduce","acc","parseFrenchDate","saveRequests","indicator_id","indicator_patients","total_patients","disabledInputs","frenchDateString","parts","janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre","toLowerCase","UTC","toISOString","info","pointerEvents","direction","dayIncrement","newDate","setHours","weeklyOptions","formattedDate","toLocaleDateString","weekday","weekStart","weekEnd","formattedWeekStart","formattedWeekEnd","weekNumber","getWeekNumber","date","tempDate","yearStart","ceil","dateString","updateInputs","clearInputs","setProperty","totalPatientsInput","isClickInsideCalendar","isClickOnOpener","Dashboard","surveyList","alertsList","surveysBtn","alertsBtn","openEntries","updateSurveyList","updateAlertsList","showDashboardModal","surveys","survey","createSurveyItem","date_published","formattedMonth","alerts","alert","createAlertItem","categoryColor","modalElement","Alerts","alertsTable","paginationContainer","currentPage","totalPages","alertTableHeader","page","itemsPerPage","items_per_page","total_pages","renderPagination","paginationHTML","currentTarget","formattedcriticality","criticality","slug","normalize","highestTerritory","hasMoreLevels","zone","region","post_title","Surveys","surveysTable","surveyTableHeader","singleSurvey","surveyCompleted","surveyLink","updateSurveysList","$singleWrapper","checkIfCompleted","setupSingleElements","formattedState","form_id","surveyID","log","Header","userActionsBtn","mobileHeaderBtn","sidebar","sidebarCloseBtn","sidebarBackground","bindOutsideClicks","toggleUserActions","stopPropagation","innerWidth","toggleSidebarMobile","closeSidebarMobile","entry","showEntriesPopin","urlParams","search","has","get","replaceState","pathname","isSidebarOpen","el","actionsElement","polygonElement","isCurrentlyVisible","toggle","updateSuccess","animation","MyAccount","allEpidemy","alreadyAllselected","$userName","$userFirstName","$userLastName","$userEmail","$userPhone","$userAddress","$userEpidemy","$userEpidemyJson","$userEpidemyAfterSave","$userSpecialty","$userAlerts","$userRpps","$userNameHtml","$userEmailHtml","$userPhoneHtml","$userAddressHtml","$userRppsHtml","$userEpidemyHtml","$userSpecialtyHtml","$accountFormFrequency","$allInput","loadData","updateIndicatorButtons","greyOutSection","clearSection","updateAddressInDatabase","click","loadUserAddress","fetchAllEpidemy","toogleEpidemySelection","indexOf","setupRadioListeners","saveEpidemySelection","updatePassword","updateName","updateEmail","updatePhone","isArray","cellphone","dataIntoHtml","listAdress","street","main_address","getUserEpidemy","indicatorText","join","indicatorListDiv","updateSelectionState","allSelectedRadio","allSelectedBtn","customSelectedBtn","customSelectedRadio","tabOfIndicators","reload","newPassword","newFirstname","newLastName","newLastname","newEmail","newPhone","newCellphone","frequencyHtml","attachFrequencyEventListeners","updateFrequencySelection","selectedRadio","handleAllSelectedBound","handleCustomSelectedBound","handleAllSelected","handleCustomSelected","handleRadioClick","wrapper","btn","hasSelected","allSelectedEl","customSelectedEl","$updateAddress","hideAddAddressForm","addAddress","addressAlreadyExist","isFirstAddress","listItem","updateMainAddress","updateAddressItemSelectedClass","wasMain","loadUserAddresses","ID","saveEditedAddress","newAddress","section","fixedSection","total","SuportForm","assistanceBtn","modalCloseBtn","cancelBtn","sendBtn","objectInput","requestInput","formContainer","supportFormSuccess","supportFormError","closeSupportForm","retryForm","toggleForm","hideForm","sendForm","retrySupportForm","stopImmediatePropagation","resetForm","checkValidity","object","displayErrorMessage"],"mappings":"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"}