carget
Version:
optimization js code for carget website
145 lines (122 loc) • 5.46 kB
JavaScript
// Показать или скрыть ДОП ОПЦИИ
const checkDopOtionShow = () => {
const displayValue = carState.options.runningBoards[1] ? 'flex' : 'none'
document.querySelectorAll(arrayWrappers[3]).forEach((e) => {
e.style.display = displayValue
})
}
// Обнуление после выбора другой модели
const removeShowDopOptions = () => {
const dopOptionsWrapper = document.querySelector(
'.dop-options-wrapper .elementor-widget-wrap'
)
const selectedModel = carState.model[1] // Получаем текущую модель
const children = dopOptionsWrapper.children
const childrenArray = Array.from(children)
carState.options.runningBoards[0].forEach((option, index) => {
const child = children[index]
const checkbox = document.getElementById(child.id)
const checkboxInput = checkbox.querySelector(`#${child.id}`)
// Установка состояния чекбокса в зависимости от условий
if (option.check) {
option.show = false
checkboxInput.checked = false
}
const modelsToShow = option.models // Список моделей, для которых опция должна быть показана
const showOption =
modelsToShow.includes(selectedModel) || modelsToShow.includes('All')
const displayValue = showOption ? 'flex' : 'none'
childrenArray.forEach((el) => {
if (el.id === child.id) {
el.style.display = displayValue
}
})
})
}
const updateDopOptions = () => {
const selectedModel = carState.model[1] // Получаем текущую модель
//ДОП ОПЦИИ
const dopOptionsWrapper = document.querySelector(
'.dop-options-wrapper .elementor-widget-wrap'
)
const children = dopOptionsWrapper.children
const childrenArray = Array.from(children)
carState.options.runningBoards[0].forEach((option, index) => {
const child = children[index]
const modelsToShow = option.models // Список моделей, для которых опция должна быть показана
const showOption =
modelsToShow.includes(selectedModel) || modelsToShow.includes('All')
const displayValue = showOption ? 'flex' : 'none'
childrenArray.forEach((el) => {
if (el.id === child.id) {
el.style.display = displayValue
}
})
const checkbox = document.getElementById(child.id)
const checkboxInput = checkbox.querySelector(`#${child.id}`)
const checkboxLabel2 = checkbox.querySelector('.custom-checkbox-label')
const checkboxLabel = checkbox.querySelector(`.dop-option-title`)
const checkboxDescription = checkbox.querySelector(
'.dop-option-description'
)
const checkboxSpan = checkbox.querySelector(`#span-${child.id}`)
// Устанавливаем заголовок и описание из option.title и option.description
// СКИДКА доп опции
checkboxLabel.textContent = option.title
checkboxDescription.textContent = option.description
checkboxSpan.innerHTML = `<div style="display:flex; gap:8px;">
<span style="font-weight:700;">${numberWithSpaces(
option.price
)} руб.</span>
${
option.sale !== 0 && option.sale
? `<del style="text-decoration-color:#D10000; font-weight:300; color: #000">${option.sale} руб.</del> `
: ''
}
</div>`
// Добавление слушателей событий для чекбоксов
const handleClick = () => {
if (option.check) {
checkboxInput.checked = !checkboxInput.checked
option.show = checkboxInput.checked
updateCheck()
}
}
checkboxLabel2.addEventListener('click', handleClick)
checkboxSpan.addEventListener('click', handleClick)
})
}
const checkDopOptions = () => {
// Получаем данные о дополнительных опциях, которые нужно отобразить
const dopOptionsToShow = carState.options.runningBoards[0].filter(
(option) => option.show
)
// Очищаем текстовое содержимое элементов dopOptionsElements и priceDopOptionsElements
dopOptionsElements.textContent = ''
priceDopOptionsElements.textContent = ''
// Если есть отображаемые опции, выводим информацию о них
if (dopOptionsToShow.length > 0 && carState.options.runningBoards[1]) {
dopOptionsToShow.forEach((option) => {
const title = option.title
const price = option.price
const titleElement = document.createElement('div')
titleElement.textContent = title
const priceElement = document.createElement('div')
priceElement.textContent = `${numberWithSpaces(price)} руб.`
dopOptionsElements.appendChild(titleElement)
priceDopOptionsElements.appendChild(priceElement)
})
} else {
// Если опций нет или показывать их не нужно, выводим информацию "Нет"
const noOptionsElement = document.createElement('div')
noOptionsElement.textContent = 'Нет'
dopOptionsElements.appendChild(noOptionsElement)
priceDopOptionsElements.appendChild(noOptionsElement)
}
}
export {
checkDopOtionShow,
removeShowDopOptions,
updateDopOptions,
checkDopOptions,
}