From e08522a2a6c63e0e4b070673f321c4610277f993 Mon Sep 17 00:00:00 2001 From: Sergo Date: Sat, 29 Jul 2023 22:02:22 +0300 Subject: [PATCH] display aliases as table --- config/default.json | 3 +- public/index.js | 103 +++++++++++++++++++++++++++++++++----------- 2 files changed, 79 insertions(+), 27 deletions(-) diff --git a/config/default.json b/config/default.json index 0f33ad9..5680920 100644 --- a/config/default.json +++ b/config/default.json @@ -11,6 +11,7 @@ }, "wildDuck": { "url": "http://localhost", - "token": "aaaaa" + "token": "aaaaa", + "domain": "test-codemowers.eu" } } \ No newline at end of file diff --git a/public/index.js b/public/index.js index 4a45cec..f75eef0 100644 --- a/public/index.js +++ b/public/index.js @@ -1,9 +1,84 @@ +function renderAliases(aliases) { + const dataContainer = document.getElementById('container') + // Create table element ant populate with items + const table = document.createElement('table') + table.classList.add('table') + const thead = document.createElement('thead') + const tr = document.createElement('tr') + + for (const value of ['Address', 'Created']) { + const th = document.createElement('th') + th.setAttribute('scope', 'col') + th.innerText = value + tr.appendChild(th) + } + + thead.appendChild(tr) + table.appendChild(thead) + + const tbody = document.createElement('tbody') + // sort by field created + aliases + .sort((a, b) => new Date(a.created) - new Date(b.created)) + .forEach(alias => { + const tr = document.createElement('tr') + const tdAddress = document.createElement('td') + // On click copy to clipboard + tdAddress.addEventListener('click', () => { + navigator.clipboard.writeText(alias.address) + }) + tdAddress.innerText = alias.address + const tdCreated = document.createElement('td') + tdCreated.innerText = alias.created + const tdActions = document.createElement('td') + const aDelete = document.createElement('a') + aDelete.classList.add('btn') + aDelete.classList.add('btn-danger') + aDelete.innerText = 'Delete' + aDelete.setAttribute('href', `/aliases/${alias.id}`) + tdActions.appendChild(aDelete) + + tr.appendChild(tdAddress) + tr.appendChild(tdCreated) + tr.appendChild(tdActions) + tbody.appendChild(tr) + }) + table.appendChild(tbody) + + dataContainer.innerHTML = '' + dataContainer.appendChild(table) + + renderCreateButton(); +} + +function renderCreateButton() { + const dataContainer = document.getElementById('container') + const button = document.createElement('a') + button.classList.add('btn') + button.classList.add('btn-primary') + + button.addEventListener('click', async () => { + button.innerText = 'Creating, please wait...' + const res = await fetch('/aliases', { + method: 'POST' + }) + + if (res.ok) { + const data = await res.json() + renderAliases(data) + return + } + }) + + button.innerText = 'Create new alias' + dataContainer.appendChild(button) +} + fetch('/aliases').then(async res => { const data = await res.json() const dataContainer = document.getElementById('container') if (!res.ok) { - // Show message "Login to see your aliases" and create a div with a button to login, url is /auth-oidc dataContainer.innerHTML = `