/* global axios, bootstrap */ const mainContainer = document.getElementById('offset-main') mainContainer.addEventListener('click', clickHandler) function clickHandler({ target }) { const createPortalBtn = target.closest('.create-portal-btn') const linkPortalBtn = target.closest('.link-portal-btn') const syncPortalBtn = target.closest('.sync-portal-btn') const portalEnableSwitch = target.closest('.portal-enable-switch') const deleteTaskBtn = target.closest('.delete-task') if (createPortalBtn) { const indexURLEl = document.getElementById('index-url') const indexURL = indexURLEl.value createPortal(indexURL) } if (linkPortalBtn) { const linkedPortalId = linkPortalBtn.getAttribute('data-link-id') const closestTask = linkPortalBtn.closest('.task-declined') linkPortal(linkedPortalId, closestTask) } if (syncPortalBtn) { const linkedPortalId = syncPortalBtn.getAttribute('data-link-id') syncPortal(linkedPortalId) } if (portalEnableSwitch) { const portalId = portalEnableSwitch.getAttribute('data-portal-id') const isEnabled = portalEnableSwitch.querySelector('.form-check-input').checked updatePortalStatus(portalId, isEnabled) } if (deleteTaskBtn) { const alertModal = new bootstrap.Modal( document.getElementById('alert-modal') ) alertModal.toggle() const taskId = deleteTaskBtn.getAttribute('data-link-id') const modalUseBtn = document.getElementById('modal-use-btn') modalUseBtn.addEventListener('click', deleteConnection(taskId)) } } async function createPortal(indexURL) { event.preventDefault() const form = document.getElementById('form-connection-new') const payload = new URLSearchParams(new FormData(form)) try { const id = await axios.post('/api/v1/portals/createPortal', payload) await linkPortal(id.data[0].id) } catch (error) { console.log(error) } finally { window.location.href = '../../../admin/povezave/seznam' } } async function deleteConnection(id) { try { await axios.delete(`/api/v1/portals/${id}/deleteLinkedDictionary`) alertModal.hide() } catch (error) { console.log(error) } } async function linkPortal(linkedPortalId, type) { try { const r = await axios.put(`/api/v1/portals/${linkedPortalId}/dictionaries`) // if (data.length) { // await insertPortalDictionaries(data, linkedPortalId) // if (type) { // changeContent(data, type) // } // } console.log(r) } catch (error) { console.log(error) } } async function insertPortalDictionaries(data, portalId) { data.forEach(el => (el.linkedPortalId = portalId)) try { // Ta enpoint je bil odstranjen, ker je itak nepotreben. Tudi ta funkcija je nepotrebna. // TODO Odstrani to funkcijo in prilagodi lokacije, kjer je sedaj klicana. // await axios.post('/api/v1/portals/insertDictionaries', { // params: { data } // }) } catch (error) { console.log(error) } } async function syncPortal(linkedPortalId) { event.preventDefault() const responseModal = new bootstrap.Modal( document.getElementById('response-modal') ) const responseModalText = document.getElementById('response-modal-text') try { axios .all([ axios.put(`/api/v1/portals/${linkedPortalId}/dictionaries`), axios.get('/api/v1/portals/getMyDictionaries', { params: { id: linkedPortalId } }) ]) .then( axios.spread((obj1, obj2) => { const theirDict = obj1.data const myDict = obj2.data const results = theirDict.filter( ({ id: id1 }) => !myDict.some(({ target_dictionary_id: id2 }) => id2 === id1) ) responseModalText.textContent = `Spremenjenih je bilo ${results.length} slovarjev.` if (results.length) { insertPortalDictionaries(results, linkedPortalId) responseModal.toggle() } else { responseModal.toggle() } }) ) } catch (error) { console.log(error) } } async function updatePortalStatus(portalId, isEnabled) { try { await axios.post('/api/v1/portals/updatePortalStatus', { params: { id: portalId, isEnabled: isEnabled } }) } catch (error) { console.log(error) } } function changeContent(data, type) { const nameEl = document.querySelector('.bold-weight-black') const name = nameEl.textContent const indexURLEl = document.querySelector('.link-url') const indexURL = indexURLEl.textContent const imageLinkEl = document.querySelector('.link-portal-btn') const id = imageLinkEl.getAttribute('data-link-id') const syncedDiv = document.getElementById('synced-terms-div') const contaner2 = document.createElement('div') contaner2.className = 'd-sm-flex justify-content-sm-between d-grid' const gridEl = document.createElement('div') gridEl.className = 'd-grid' const spanCode = document.createElement('span') spanCode.className = 'bold-weight-black' spanCode.textContent = name const spanURL = document.createElement('span') spanURL.className = 'normal-gray mt-2.mb-2' spanURL.textContent = indexURL const centerDiv = document.createElement('div') centerDiv.className = 'd-flex align-items-center justify-content-sm-end' const btnDict = document.createElement('button') btnDict.className = 'btn btn-secondary align-items-center d-flex' const imgDict = document.createElement('img') const spanDict = document.createElement('span') spanDict.className = 'ms-1' const hr = document.createElement('hr') hr.className = 'mt-2 mb-3' const betweenEl = document.createElement('div') betweenEl.className = 'd-sm-flex justify-content-between' const alignCntEl = document.createElement('div') const alertDiv = document.createElement('div') alertDiv.className = 'd-flex align-content-center mb-0 me-3 mt-2 mt-sm-0' const alertmargin = document.createElement('div') alertmargin.className = 'ms-3' const deleteBtn = document.createElement('button') deleteBtn.className = 'p-0 btn delete-task' const deleteImg = document.createElement('img') deleteImg.src = '/images/red-trash-icon.svg' const spanDelete = document.createElement('span') spanDelete.className = 'normal-gray ms-2' spanDelete.textContent = 'Odstrani' if (data.length) { const container = document.createElement('div') container.className = 'container-fluid task task-completed p-3 mb-4' const aDictEl = document.createElement('a') aDictEl.className = 'btn btn-secondary align-items-center d-flex' aDictEl.href = `/admin/povezave/seznam/${id}` imgDict.src = '/images/book-colorized.svg' spanDict.textContent = 'Slovarji' alignCntEl.className = 'd-sm-flex align-items-center mb-0 form-check form-switch' const switchEl = document.createElement('input') switchEl.className = 'form-check-input' switchEl.type = 'checkbox' switchEl.name = 'isEnabled' switchEl.id = 'checkbox' + id const spanSwitch = document.createElement('span') spanSwitch.className = 'normal-gray ms-1 mt-1' spanSwitch.textContent = 'Omogočeno' container.appendChild(contaner2) contaner2.appendChild(gridEl) gridEl.appendChild(spanCode) contaner2.appendChild(centerDiv) centerDiv.appendChild(aDictEl) aDictEl.appendChild(imgDict) aDictEl.appendChild(spanDict) container.appendChild(hr) container.appendChild(betweenEl) betweenEl.appendChild(alignCntEl) alignCntEl.appendChild(switchEl) alignCntEl.appendChild(spanSwitch) betweenEl.appendChild(alertDiv) alertDiv.appendChild(alertmargin) alertmargin.appendChild(deleteBtn) deleteBtn.appendChild(deleteImg) deleteBtn.appendChild(spanDelete) syncedDiv.appendChild(container) type.remove() } }