(function () { // TO TRIGGER TEH FILE UPLOADER WHEN CLICKING ON THE UPLOAD FILE SVG document.getElementById('svgFileUpload').addEventListener('click', function () { document.getElementById('fileupload').click(); }); document.getElementById('fileupload').addEventListener('change', function (event) { let files = event.target.files; for (let file of files) { let formData = new FormData(); formData.append('file', file); formData.append('filename', file.name); // Display the file during upload if (file.type.startsWith('image/')) { displayImageDuringUpload(file); } else { displayDocumentDuringUpload(file); } // Perform the upload fetch(`${protocol}://${domain}/chat-file-uploader/`, { method: 'POST', body: formData, }) .then(response => response.json()) .then(data => { if (data.data === 'Uploaded Successfully') { const fullPath = `${protocol}://${domain}/${data.existingPath}`; updateSelectTag(fullPath, file.name); if (file.type.startsWith('image/')) { osichatSocket.send(JSON.stringify({ 'event_type': 'uploaded_file', 'path': data.existingPath, 'file_type': 'image', 'file_name': file.name })); } else { osichatSocket.send(JSON.stringify({ 'event_type': 'uploaded_file', 'path': data.existingPath, 'file_type': 'document', 'file_name': file.name })); } } else { console.error('Upload failed'); } }) .catch(error => console.error('Error:', error)); } event.target.value = ''; }); function displayImageDuringUpload(file) { let reader = new FileReader(); reader.onload = function (event) { let mainDiv = document.createElement('div'); mainDiv.className = 'w-full flex items-end justify-end gap-2' let outerDiv = document.createElement('div'); outerDiv.id = 'uploading-' + file.name; outerDiv.className = 'max-w-[80%] p-4 rounded-l-3xl rounded-tr-3xl text-white shadow-md text-sm leading-6 bg-opacity-70 bg-osiblue'; let div = document.createElement('div'); let img = document.createElement('img'); img.src = event.target.result; img.style.opacity = '0.2'; div.appendChild(img); outerDiv.appendChild(div); mainDiv.appendChild(outerDiv); document.getElementById('messages').appendChild(mainDiv); scrollBottom(); }; reader.readAsDataURL(file); } function displayDocumentDuringUpload(file) { let mainDiv = document.createElement('div'); mainDiv.className = 'w-full flex items-end justify-end gap-2' let outerDiv = document.createElement('div'); outerDiv.id = 'uploading-' + file.name; outerDiv.className = 'max-w-[80%] p-4 rounded-l-3xl rounded-tr-3xl text-white shadow-md text-sm leading-6 bg-opacity-70 bg-osiblue'; let flexContainer = document.createElement('div'); flexContainer.className = 'w-full flex items-center gap-1'; let svg = ` `; let svgDiv = document.createElement('div'); svgDiv.innerHTML = svg; let textContainer = document.createElement('div'); textContainer.className = 'flex flex-col'; let uploadingText = document.createElement('span'); uploadingText.id = 'uploading-' + file.name; uploadingText.textContent = 'Uploading...'; let fileNameDiv = document.createElement('div'); fileNameDiv.className = 'file-name'; fileNameDiv.textContent = file.name; textContainer.appendChild(uploadingText); textContainer.appendChild(fileNameDiv); flexContainer.appendChild(svgDiv); flexContainer.appendChild(textContainer); outerDiv.appendChild(flexContainer); mainDiv.appendChild(outerDiv); document.getElementById('messages').appendChild(mainDiv); scrollBottom(); } function updateSelectTag(path, fileName) { let option = document.createElement('option'); option.value = path; option.textContent = fileName; option.selected = true; document.getElementById('filePathInput').appendChild(option); } })();