const reviewButton = document.getElementById('form-modal') const modalForm = document.getElementById('modal-container') const starsSelect = document.getElementsByClassName('score-select-stars')[0] const upload = document.getElementById('upload') const uploadWrapper = document.getElementsByClassName('file-overlay')[0] const form = document.getElementById('form-container') const formError = document.querySelector('.form-error') const formWrapper = document.querySelector('.form-container__wrapper') const thankyou = document.querySelector('.thank-you') const submitButton = document.querySelector('#form-submit') const bodyWrapper = document.querySelector('body') reviewButton.addEventListener('click', () => { formWrapper.style.display = 'block' thankyou.classList.remove('thank-you--active') submitButton.setAttribute('loading', false) modalForm.setAttribute('visible', true) bodyWrapper.classList.add('body-overflow') form.reset() innerStars.forEach((item) => { item.src = item.src.replace('filled-star', 'empty-star') item.src = item.src.replace('error-star', 'empty-star') }) }) // outside click/close button click modalForm.addEventListener('click', (e) => { e.preventDefault if ( e.target.classList.contains('modal-container') || e.target.classList.contains('form-button--close') ) { modalForm.setAttribute('visible', false) bodyWrapper.classList.remove('body-overflow') } }) const innerStars = Array.from(starsSelect.children) // stars toggler; let clicked = -1 function resetStars() { innerStars.forEach((s, i) => { s.src = s.src.replace('error-star', 'empty-star') }) clicked = -1 } innerStars.forEach((star, index) => { star.addEventListener('click', () => { resetStars() clicked = index innerStars.forEach((s, i) => { s.src = i <= index ? s.src.replace('empty-star', 'filled-star') : s.src.replace('filled-star', 'empty-star') }) }) }) upload.addEventListener('change', (e) => { uploadWrapper.setAttribute('uploaded', true) const uploadSrc = URL.createObjectURL(e.target.files[0]) const image = createThumbnail(uploadSrc) uploadWrapper.prepend(image) }) function createThumbnail(src) { const imageWrapper = document.createElement('div') uploadWrapper.addEventListener('click', (e) => { if (e.target.classList.contains('thumb-button')) { const closestImg = e.target closestImg.parentElement.style.display = 'none' } }) imageWrapper.classList.add('thumb-wrapper') const button = document.createElement('button') button.setAttribute('type', 'button') button.classList.add('thumb-button') button.innerHTML = ` ` const image = document.createElement('img') image.classList.add('upload-thumb') image.src = src imageWrapper.append(button) imageWrapper.append(image) return imageWrapper } form.addEventListener('submit', (e) => { e.preventDefault() const inputsToValidate = [] inputsToValidate.push(e.target.elements.name) inputsToValidate.push(e.target.elements.title) inputsToValidate.push(e.target.elements.comment) const starsArray = Array.from(starsSelect.children) const starsState = starsArray.some((item) => { return item.src.includes('filled-star') }) if (!starsState) { starsArray.forEach((item) => { item.src = item.src.replace('empty-star', 'error-star') formError.classList.add('form-error--active') }) } inputsToValidate.forEach((input) => { input.addEventListener('input', (e) => { if (e.target.value.length > 0) { e.target.setAttribute('error', false) } else { e.target.setAttribute('error', true) } }) }) const error = inputsToValidate.some((item) => { return item.value.length == 0 }) if (error | !starsState) { formError.classList.add('form-error--active') inputsToValidate .filter((item) => { return item.value.length == 0 }) .forEach((error) => { console.log(error) error.setAttribute('error', true) }) } else { formError.classList.remove('form-error--active') submitButton.setAttribute('loading', true) setTimeout(() => { formWrapper.style.display = 'none' thankyou.classList.add('thank-you--active') }, 1500) setTimeout(() => { modalForm.setAttribute('visible', false) bodyWrapper.classList.remove('body-overflow') }, 5000) } })