diff --git a/web/src/elements/messages/Message.ts b/web/src/elements/messages/Message.ts index 50d3e3b78..55adf7ea9 100644 --- a/web/src/elements/messages/Message.ts +++ b/web/src/elements/messages/Message.ts @@ -46,6 +46,15 @@ export class Message extends LitElement {

${this.message?.message}

+
+ +
`; } diff --git a/web/src/elements/messages/MessageContainer.ts b/web/src/elements/messages/MessageContainer.ts index 394219dc7..3ed15286a 100644 --- a/web/src/elements/messages/MessageContainer.ts +++ b/web/src/elements/messages/MessageContainer.ts @@ -8,7 +8,7 @@ export function showMessage(message: APIMessage): void { if (!container) { throw new Error("failed to find message container"); } - container.messages.push(message); + container.addMessage(message); container.requestUpdate(); } @@ -34,6 +34,14 @@ export class MessageContainer extends LitElement { } } + // add a new message, but only if the message isn't currently shown. + addMessage(message: APIMessage): void { + const matchingMessages = this.messages.filter(m => m.message == message.message); + if (matchingMessages.length < 1) { + this.messages.push(message); + } + } + connect(): void { if (navigator.webdriver) return; const wsUrl = `${window.location.protocol.replace("http", "ws")}//${ @@ -60,7 +68,7 @@ export class MessageContainer extends LitElement { }); this.messageSocket.addEventListener("message", (e) => { const data = JSON.parse(e.data); - this.messages.push(data); + this.addMessage(data); this.requestUpdate(); }); this.messageSocket.addEventListener("error", (e) => { @@ -76,8 +84,8 @@ export class MessageContainer extends LitElement { .message=${m} .onRemove=${(m: APIMessage) => { this.messages = this.messages.filter((v) => v !== m); - this.requestUpdate(); - }}> + this.requestUpdate(); + }}> `; })} `; diff --git a/web/src/elements/router/RouterOutlet.ts b/web/src/elements/router/RouterOutlet.ts index 796511c34..6aae6046e 100644 --- a/web/src/elements/router/RouterOutlet.ts +++ b/web/src/elements/router/RouterOutlet.ts @@ -50,18 +50,17 @@ export class RouterOutlet extends LitElement { if (activeUrl === "") { activeUrl = this.defaultUrl || "/"; window.location.hash = `#${activeUrl}`; - console.debug(`authentik/router: set to ${window.location.hash}`); + console.debug(`authentik/router: defaulted URL to ${window.location.hash}`); return; } let matchedRoute: RouteMatch | null = null; ROUTES.some((route) => { - console.debug(`authentik/router: matching ${activeUrl} against ${route.url}`); const match = route.url.exec(activeUrl); if (match != null) { matchedRoute = new RouteMatch(route); matchedRoute.arguments = match.groups || {}; matchedRoute.fullUrl = activeUrl; - console.debug(`authentik/router: found match ${matchedRoute}`); + console.debug("authentik/router: found match ", matchedRoute); return true; } });