aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/wwwroot/scripts
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2022-12-30 20:22:55 +0100
committerivarlovlie <git@ivarlovlie.no>2022-12-30 20:22:55 +0100
commit3c188c2949af9d0e08db74a850f8a87dad52de49 (patch)
tree5dba85786aa9a5a72d91328092a017f16318b8c0 /code/api/wwwroot/scripts
parentf5374b0b3543b0bd7d280f71ed8bf5175bad3834 (diff)
downloadstorage-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.js24
-rw-r--r--code/api/wwwroot/scripts/helpers.js35
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);
}