223 lines
7.7 KiB
JavaScript
223 lines
7.7 KiB
JavaScript
/* 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()
|
|
}
|
|
}
|