diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2022-12-30 20:22:55 +0100 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2022-12-30 20:22:55 +0100 |
| commit | 3c188c2949af9d0e08db74a850f8a87dad52de49 (patch) | |
| tree | 5dba85786aa9a5a72d91328092a017f16318b8c0 /code/api/wwwroot/scripts | |
| parent | f5374b0b3543b0bd7d280f71ed8bf5175bad3834 (diff) | |
| download | storage-3c188c2949af9d0e08db74a850f8a87dad52de49.tar.xz storage-3c188c2949af9d0e08db74a850f8a87dad52de49.zip | |
feat: Yes
Diffstat (limited to 'code/api/wwwroot/scripts')
| -rw-r--r-- | code/api/wwwroot/scripts/components/profile-modal.js | 24 | ||||
| -rw-r--r-- | code/api/wwwroot/scripts/helpers.js | 35 |
2 files changed, 48 insertions, 11 deletions
diff --git a/code/api/wwwroot/scripts/components/profile-modal.js b/code/api/wwwroot/scripts/components/profile-modal.js index 91d4ed3..f4e90d5 100644 --- a/code/api/wwwroot/scripts/components/profile-modal.js +++ b/code/api/wwwroot/scripts/components/profile-modal.js @@ -1,17 +1,19 @@ class ProfileModal extends HTMLElement { constructor() { super(); - const sessionData = session.get(); - const root = create_element("div", { - style: { - padding: "5px", - display: "" - } - }, [ - create_element("h4", {innerText: sessionData.username, style: {margin:0}}), - create_element("p", {innerText: sessionData.role}) - ]); - this.innerHTML = root.innerHTML; + retry(session.get, res => (res?.username?.length > 0 ?? false), 0).then(sessionData => { + const root = create_element("div", { + style: { + padding: "5px", + display: "" + } + }, [ + create_element("h4", {innerText: sessionData.username, style: {margin: 0}}), + create_element("p", {innerText: sessionData.role}), + create_element("button", {innerText: "Log out", classList: ["do-logout"]}) + ]); + this.innerHTML = root.innerHTML; + }); } } diff --git a/code/api/wwwroot/scripts/helpers.js b/code/api/wwwroot/scripts/helpers.js index 411e55c..f215863 100644 --- a/code/api/wwwroot/scripts/helpers.js +++ b/code/api/wwwroot/scripts/helpers.js @@ -13,6 +13,41 @@ function move_focus(element) { } } +function is_promise(p) { + if (typeof p === 'object' && typeof p.then === 'function') { + return true; + } + + return false; +} + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +async function retry(action, predicateOrRetryCount = 4, cooldown = 250) { + let result = undefined; + const maxTries = 1000; + if (typeof predicateOrRetryCount === "number") { + let tries = 0; + if (predicateOrRetryCount > maxTries) throw new Error("Retry count is larger than limit: " + maxTries); + while (!result && tries < predicateOrRetryCount) { + await sleep(cooldown); + result = is_promise(action) ? await action() : action(); + tries++; + } + } + if (typeof predicateOrRetryCount === "function") { + let tries = 0; + while (predicateOrRetryCount(result) === false && tries < maxTries) { + await sleep(cooldown); + result = is_promise(action) ? await action() : action(); + tries++; + } + } + return result; +} + function create_element_from_object(elementOptions) { return create_element(elementOptions.name, elementOptions.properties, elementOptions.children); } |
