web/admin: make message container bottom aligned for admin interface (#14816)

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
Jens L.
2025-06-06 01:09:46 +02:00
committed by GitHub
parent d14b480926
commit ef5d3580e8
3 changed files with 31 additions and 11 deletions

View File

@ -10,7 +10,7 @@
{% endblock %} {% endblock %}
{% block body %} {% block body %}
<ak-message-container></ak-message-container> <ak-message-container alignment="bottom"></ak-message-container>
<ak-interface-admin> <ak-interface-admin>
<ak-loading></ak-loading> <ak-loading></ak-loading>
</ak-interface-admin> </ak-interface-admin>

View File

@ -67,6 +67,17 @@ export class DebugPage extends AKElement {
> >
POST System POST System
</button> </button>
<button
class="pf-c-button pf-m-primary"
@click=${() => {
showMessage({
level: MessageLevel.info,
message: `lorem ipsum ${Date.now()}`,
});
}}
>
Message
</button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -80,6 +80,9 @@ export class MessageContainer extends AKElement {
@property({ attribute: false }) @property({ attribute: false })
messages: APIMessage[] = []; messages: APIMessage[] = [];
@property()
alignment: "top" | "bottom" = "top";
static get styles(): CSSResult[] { static get styles(): CSSResult[] {
return [ return [
PFBase, PFBase,
@ -89,6 +92,10 @@ export class MessageContainer extends AKElement {
ak-message { ak-message {
display: block; display: block;
} }
:host([alignment="bottom"]) .pf-c-alert-group.pf-m-toast {
bottom: var(--pf-c-alert-group--m-toast--Top);
top: unset;
}
`, `,
]; ];
} }
@ -120,16 +127,18 @@ export class MessageContainer extends AKElement {
render(): TemplateResult { render(): TemplateResult {
return html`<ul class="pf-c-alert-group pf-m-toast"> return html`<ul class="pf-c-alert-group pf-m-toast">
${this.messages.map((message) => { ${Array.from(this.messages)
return html`<ak-message .reverse()
.message=${message} .map((message) => {
.onRemove=${(m: APIMessage) => { return html`<ak-message
this.messages = this.messages.filter((v) => v !== m); .message=${message}
this.requestUpdate(); .onRemove=${(m: APIMessage) => {
}} this.messages = this.messages.filter((v) => v !== m);
> this.requestUpdate();
</ak-message>`; }}
})} >
</ak-message>`;
})}
</ul>`; </ul>`;
} }
} }