class DocumentsModule { documentRow() { return ` `; } addDocument(documentKey, modelClass, modelId) { const tbody = document.querySelector('.docs-table tbody'), tr = document.createElement('tr') tr.innerHTML = this.documentRow() this.generateRows(); this.postRequest('/file/document-add/', {documentKey, modelClass, modelId}, r => { console.log(r) if (r.document_id) tr.setAttribute('data-document-id', r.document_id) }) if (tbody.querySelector('tr.empty')) { tbody.innerHTML = '' tbody.appendChild(tr) } else { const first = tbody.querySelector('tr:first-child'); tbody.insertBefore(tr, first) } } postRequest(url, data, done) { const xhr = new XMLHttpRequest(); xhr.responseType = 'json' xhr.open('post', url) xhr.onload = () => { done(xhr.response) } xhr.send(JSON.stringify(data)); } getRequest(url, data, done) { data = data || {} let query = []; Object.keys(data).forEach(d => { query.push(d + '=' + data[d]) }) if (query.length > 0) url = `${url}?${query.join('&')}` const xhr = new XMLHttpRequest(); xhr.responseType = 'json' xhr.open('get', url) xhr.onload = () => { done(xhr.response) } xhr.send(); } uploadFile(url, data, done) { data = data || {} const formData = new FormData(); Object.keys(data).forEach(d => { formData.append(d, data[d]); }) const xhr = new XMLHttpRequest(); xhr.responseType = 'json' xhr.open('post', url) xhr.onload = () => { done(xhr.response) } xhr.send(formData); } generateRows() { document.querySelectorAll('[data-input]').forEach(e => { this.updateInput(e) }) } updateInput(e) { if (e.tagName === 'SELECT') { e.addEventListener('change', () => { let id = e.parentNode.parentNode.dataset.documentId; this.postRequest('/file/document-update/', {id: id, key: e.dataset.input, value: e.value}, done => { }) }) } if (e.tagName === 'INPUT') { e.addEventListener('keypress', () => { let id = e.parentNode.parentNode.dataset.documentId; this.postRequest('/file/document-update/', {id: id, key: e.dataset.input, value: e.value}, done => { }) }) } } } const documentObject = new DocumentsModule(); function addDocument(e) { documentObject.addDocument(e.dataset.documentKey, e.dataset.modelClass, e.dataset.modelId) } function updateInput(e) { documentObject.updateInput(e) } function attachAndUploadFile(e) { const fileInput = document.createElement('input') fileInput.setAttribute('type', 'file') fileInput.addEventListener('change', () => { let id = e.parentNode.parentNode.dataset.documentId; let update = e.dataset.uploadField; let file = fileInput.files[0]; let tdContainer = e.parentNode; documentObject.uploadFile('/file/document-file-upload/', { id, update, file }, data => { console.log(data); if(data.id && data.file_path) { if (update === 'file_name') { tdContainer.innerHTML = ` ${data.extension} сваляне изтриване`; } else if (update === 'file_name_en') { tdContainer.innerHTML = ` ${data.extension} сваляне изтриване`; } flash.success('Файлът е качен'); } else { flash.error('Грешка при качване на файла'); } }) }) fileInput.click() } function deleteUploadedFile(e) { let td = e.parentNode; let id = e.dataset.documentId; let deleteField = e.dataset.deleteField; modal.confirm('Сигурни ли сте, че искате да изтриете този файл?', function () { documentObject.postRequest('/file/document-file-delete/', {id, deleteField}, done => { td.innerHTML = `` flash.success('Файлът е изтрит'); }) }) } function deleteDocument(e) { let id = e.parentNode.parentNode.dataset.documentId; console.log(id); if(id) { modal.confirm('Сигурни ли сте, че искате да изтриете този документ?', function () { let tr = e.parentNode.parentNode; documentObject.postRequest('/file/document-delete/', {id}, done => { tr.remove(); flash.success('Документът е изтрит'); let rows = document.querySelectorAll('.docs-table tbody tr'); if(rows.length === 0) { let tbody = document.querySelector('.docs-table tbody'); tbody.innerHTML = ` Няма добавени документи `; } }) }) } } document.addEventListener('DOMContentLoaded', () => { documentObject.generateRows() })