web: cleanup message API, use enum for level
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
261583cb92
commit
e621eb7455
|
@ -25,7 +25,7 @@ class ChannelsStorage(FallbackStorage):
|
||||||
uid,
|
uid,
|
||||||
{
|
{
|
||||||
"type": "event.update",
|
"type": "event.update",
|
||||||
"level_tag": message.level_tag,
|
"level": message.level_tag,
|
||||||
"tags": message.tags,
|
"tags": message.tags,
|
||||||
"message": message.message,
|
"message": message.message,
|
||||||
},
|
},
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { customElement, property } from "lit-element";
|
||||||
import { ERROR_CLASS, SUCCESS_CLASS } from "../../constants";
|
import { ERROR_CLASS, SUCCESS_CLASS } from "../../constants";
|
||||||
import { SpinnerButton } from "./SpinnerButton";
|
import { SpinnerButton } from "./SpinnerButton";
|
||||||
import { showMessage } from "../messages/MessageContainer";
|
import { showMessage } from "../messages/MessageContainer";
|
||||||
|
import { MessageLevel } from "../messages/Message";
|
||||||
|
|
||||||
@customElement("ak-action-button")
|
@customElement("ak-action-button")
|
||||||
export class ActionButton extends SpinnerButton {
|
export class ActionButton extends SpinnerButton {
|
||||||
|
@ -26,13 +27,13 @@ export class ActionButton extends SpinnerButton {
|
||||||
.catch((e: Error | Response) => {
|
.catch((e: Error | Response) => {
|
||||||
if (e instanceof Error) {
|
if (e instanceof Error) {
|
||||||
showMessage({
|
showMessage({
|
||||||
level_tag: "error",
|
level: MessageLevel.error,
|
||||||
message: e.toString()
|
message: e.toString()
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
e.text().then(t => {
|
e.text().then(t => {
|
||||||
showMessage({
|
showMessage({
|
||||||
level_tag: "error",
|
level: MessageLevel.error,
|
||||||
message: t
|
message: t
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -19,6 +19,7 @@ import { convertToSlug } from "../../utils";
|
||||||
import { SpinnerButton } from "./SpinnerButton";
|
import { SpinnerButton } from "./SpinnerButton";
|
||||||
import { PRIMARY_CLASS, EVENT_REFRESH } from "../../constants";
|
import { PRIMARY_CLASS, EVENT_REFRESH } from "../../constants";
|
||||||
import { showMessage } from "../messages/MessageContainer";
|
import { showMessage } from "../messages/MessageContainer";
|
||||||
|
import { MessageLevel } from "../messages/Message";
|
||||||
|
|
||||||
@customElement("ak-modal-button")
|
@customElement("ak-modal-button")
|
||||||
export class ModalButton extends LitElement {
|
export class ModalButton extends LitElement {
|
||||||
|
@ -122,7 +123,7 @@ export class ModalButton extends LitElement {
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
showMessage({
|
showMessage({
|
||||||
level_tag: "error",
|
level: MessageLevel.error,
|
||||||
message: "Unexpected error"
|
message: "Unexpected error"
|
||||||
});
|
});
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
@ -150,7 +151,7 @@ export class ModalButton extends LitElement {
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
showMessage({
|
showMessage({
|
||||||
level_tag: "error",
|
level: MessageLevel.error,
|
||||||
message: "Unexpected error"
|
message: "Unexpected error"
|
||||||
});
|
});
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { gettext } from "django";
|
||||||
import { customElement, html, property, TemplateResult } from "lit-element";
|
import { customElement, html, property, TemplateResult } from "lit-element";
|
||||||
import { EVENT_REFRESH } from "../../constants";
|
import { EVENT_REFRESH } from "../../constants";
|
||||||
import { ModalButton } from "../buttons/ModalButton";
|
import { ModalButton } from "../buttons/ModalButton";
|
||||||
|
import { MessageLevel } from "../messages/Message";
|
||||||
import { showMessage } from "../messages/MessageContainer";
|
import { showMessage } from "../messages/MessageContainer";
|
||||||
|
|
||||||
@customElement("ak-forms-confirm")
|
@customElement("ak-forms-confirm")
|
||||||
|
@ -36,14 +37,14 @@ export class ConfirmationForm extends ModalButton {
|
||||||
onSuccess(): void {
|
onSuccess(): void {
|
||||||
showMessage({
|
showMessage({
|
||||||
message: gettext(this.successMessage),
|
message: gettext(this.successMessage),
|
||||||
level_tag: "success",
|
level: MessageLevel.success,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onError(e: Error): void {
|
onError(e: Error): void {
|
||||||
showMessage({
|
showMessage({
|
||||||
message: gettext(`${this.errorMessage}: ${e.toString()}`),
|
message: gettext(`${this.errorMessage}: ${e.toString()}`),
|
||||||
level_tag: "error",
|
level: MessageLevel.error,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { gettext } from "django";
|
||||||
import { customElement, html, property, TemplateResult } from "lit-element";
|
import { customElement, html, property, TemplateResult } from "lit-element";
|
||||||
import { EVENT_REFRESH } from "../../constants";
|
import { EVENT_REFRESH } from "../../constants";
|
||||||
import { ModalButton } from "../buttons/ModalButton";
|
import { ModalButton } from "../buttons/ModalButton";
|
||||||
|
import { MessageLevel } from "../messages/Message";
|
||||||
import { showMessage } from "../messages/MessageContainer";
|
import { showMessage } from "../messages/MessageContainer";
|
||||||
|
|
||||||
@customElement("ak-forms-delete")
|
@customElement("ak-forms-delete")
|
||||||
|
@ -34,14 +35,14 @@ export class DeleteForm extends ModalButton {
|
||||||
onSuccess(): void {
|
onSuccess(): void {
|
||||||
showMessage({
|
showMessage({
|
||||||
message: gettext(`Successfully deleted ${this.objectLabel} ${ this.obj?.name }`),
|
message: gettext(`Successfully deleted ${this.objectLabel} ${ this.obj?.name }`),
|
||||||
level_tag: "success",
|
level: MessageLevel.success,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onError(e: Error): void {
|
onError(e: Error): void {
|
||||||
showMessage({
|
showMessage({
|
||||||
message: gettext(`Failed to delete ${this.objectLabel}: ${e.toString()}`),
|
message: gettext(`Failed to delete ${this.objectLabel}: ${e.toString()}`),
|
||||||
level_tag: "error",
|
level: MessageLevel.error,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,14 @@ import PFAlert from "@patternfly/patternfly/components/Alert/alert.css";
|
||||||
import PFBase from "@patternfly/patternfly/patternfly-base.css";
|
import PFBase from "@patternfly/patternfly/patternfly-base.css";
|
||||||
import PFButton from "@patternfly/patternfly/components/Button/button.css";
|
import PFButton from "@patternfly/patternfly/components/Button/button.css";
|
||||||
|
|
||||||
|
export enum MessageLevel {
|
||||||
|
"error", "warning", "success", "info"
|
||||||
|
}
|
||||||
export interface APIMessage {
|
export interface APIMessage {
|
||||||
level_tag: string;
|
level: MessageLevel;
|
||||||
tags?: string;
|
tags?: string;
|
||||||
message: string;
|
message: string;
|
||||||
|
description?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const LEVEL_ICON_MAP: { [key: string]: string } = {
|
const LEVEL_ICON_MAP: { [key: string]: string } = {
|
||||||
|
@ -44,13 +48,16 @@ export class Message extends LitElement {
|
||||||
|
|
||||||
render(): TemplateResult {
|
render(): TemplateResult {
|
||||||
return html`<li class="pf-c-alert-group__item">
|
return html`<li class="pf-c-alert-group__item">
|
||||||
<div class="pf-c-alert pf-m-${this.message?.level_tag} ${this.message?.level_tag === "error" ? "pf-m-danger" : ""}">
|
<div class="pf-c-alert pf-m-${this.message?.level} ${this.message?.level === MessageLevel.error ? "pf-m-danger" : ""}">
|
||||||
<div class="pf-c-alert__icon">
|
<div class="pf-c-alert__icon">
|
||||||
<i class="${this.message ? LEVEL_ICON_MAP[this.message.level_tag] : ""}"></i>
|
<i class="${this.message ? LEVEL_ICON_MAP[this.message.level] : ""}"></i>
|
||||||
</div>
|
</div>
|
||||||
<p class="pf-c-alert__title">
|
<p class="pf-c-alert__title">
|
||||||
${this.message?.message}
|
${this.message?.message}
|
||||||
</p>
|
</p>
|
||||||
|
${this.message?.description && html`<div class="pf-c-alert__description">
|
||||||
|
<p>${this.message.description}</p>
|
||||||
|
</div>`}
|
||||||
<div class="pf-c-alert__action">
|
<div class="pf-c-alert__action">
|
||||||
<button class="pf-c-button pf-m-plain" type="button" @click=${() => {
|
<button class="pf-c-button pf-m-plain" type="button" @click=${() => {
|
||||||
if (!this.message) return;
|
if (!this.message) return;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { gettext } from "django";
|
import { gettext } from "django";
|
||||||
import { LitElement, html, customElement, TemplateResult, property, CSSResult, css } from "lit-element";
|
import { LitElement, html, customElement, TemplateResult, property, CSSResult, css } from "lit-element";
|
||||||
import "./Message";
|
import "./Message";
|
||||||
import { APIMessage } from "./Message";
|
import { APIMessage, MessageLevel } from "./Message";
|
||||||
import PFAlertGroup from "@patternfly/patternfly/components/AlertGroup/alert-group.css";
|
import PFAlertGroup from "@patternfly/patternfly/components/AlertGroup/alert-group.css";
|
||||||
import PFBase from "@patternfly/patternfly/patternfly-base.css";
|
import PFBase from "@patternfly/patternfly/patternfly-base.css";
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ export class MessageContainer extends LitElement {
|
||||||
console.debug(`authentik/messages: closed ws connection: ${e}`);
|
console.debug(`authentik/messages: closed ws connection: ${e}`);
|
||||||
if (this.retryDelay > 3000) {
|
if (this.retryDelay > 3000) {
|
||||||
showMessage({
|
showMessage({
|
||||||
level_tag: "error",
|
level: MessageLevel.error,
|
||||||
message: gettext("Connection error, reconnecting...")
|
message: gettext("Connection error, reconnecting...")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ import "../../../elements/forms/FormElement";
|
||||||
import { showMessage } from "../../../elements/messages/MessageContainer";
|
import { showMessage } from "../../../elements/messages/MessageContainer";
|
||||||
import "../../../elements/EmptyState";
|
import "../../../elements/EmptyState";
|
||||||
import "../../FormStatic";
|
import "../../FormStatic";
|
||||||
|
import { MessageLevel } from "../../../elements/messages/Message";
|
||||||
|
|
||||||
export interface AuthenticatorTOTPChallenge extends WithUserInfoChallenge {
|
export interface AuthenticatorTOTPChallenge extends WithUserInfoChallenge {
|
||||||
config_url: string;
|
config_url: string;
|
||||||
|
@ -60,7 +61,7 @@ export class AuthenticatorTOTPStage extends BaseStage {
|
||||||
if (!this.challenge?.config_url) return;
|
if (!this.challenge?.config_url) return;
|
||||||
navigator.clipboard.writeText(this.challenge?.config_url).then(() => {
|
navigator.clipboard.writeText(this.challenge?.config_url).then(() => {
|
||||||
showMessage({
|
showMessage({
|
||||||
level_tag: "success",
|
level: MessageLevel.success,
|
||||||
message: gettext("Successfully copied TOTP Config.")
|
message: gettext("Successfully copied TOTP Config.")
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -19,6 +19,7 @@ import AKGlobal from "../../authentik.css";
|
||||||
import CodeMirrorStyle from "codemirror/lib/codemirror.css";
|
import CodeMirrorStyle from "codemirror/lib/codemirror.css";
|
||||||
import CodeMirrorTheme from "codemirror/theme/monokai.css";
|
import CodeMirrorTheme from "codemirror/theme/monokai.css";
|
||||||
import { EVENT_REFRESH } from "../../constants";
|
import { EVENT_REFRESH } from "../../constants";
|
||||||
|
import { MessageLevel } from "../../elements/messages/Message";
|
||||||
|
|
||||||
@customElement("ak-site-shell")
|
@customElement("ak-site-shell")
|
||||||
export class SiteShell extends LitElement {
|
export class SiteShell extends LitElement {
|
||||||
|
@ -79,7 +80,7 @@ export class SiteShell extends LitElement {
|
||||||
}
|
}
|
||||||
console.debug(`authentik/site-shell: Request failed ${this._url}`);
|
console.debug(`authentik/site-shell: Request failed ${this._url}`);
|
||||||
showMessage({
|
showMessage({
|
||||||
level_tag: "error",
|
level: MessageLevel.error,
|
||||||
message: gettext(`Request failed: ${response.statusText}`),
|
message: gettext(`Request failed: ${response.statusText}`),
|
||||||
});
|
});
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
|
@ -148,7 +149,7 @@ export class SiteShell extends LitElement {
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
showMessage({
|
showMessage({
|
||||||
level_tag: "error",
|
level: MessageLevel.error,
|
||||||
message: "Unexpected error"
|
message: "Unexpected error"
|
||||||
});
|
});
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { gettext } from "django";
|
import { gettext } from "django";
|
||||||
import { customElement, html, TemplateResult } from "lit-element";
|
import { customElement, html, TemplateResult } from "lit-element";
|
||||||
import { DeleteForm } from "../../elements/forms/DeleteForm";
|
import { DeleteForm } from "../../elements/forms/DeleteForm";
|
||||||
|
import { MessageLevel } from "../../elements/messages/Message";
|
||||||
import { showMessage } from "../../elements/messages/MessageContainer";
|
import { showMessage } from "../../elements/messages/MessageContainer";
|
||||||
|
|
||||||
@customElement("ak-user-active-form")
|
@customElement("ak-user-active-form")
|
||||||
|
@ -9,14 +10,14 @@ export class UserActiveForm extends DeleteForm {
|
||||||
onSuccess(): void {
|
onSuccess(): void {
|
||||||
showMessage({
|
showMessage({
|
||||||
message: gettext(`Successfully updated ${this.objectLabel} ${this.obj?.name}`),
|
message: gettext(`Successfully updated ${this.objectLabel} ${this.obj?.name}`),
|
||||||
level_tag: "success",
|
level: MessageLevel.success,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onError(e: Error): void {
|
onError(e: Error): void {
|
||||||
showMessage({
|
showMessage({
|
||||||
message: gettext(`Failed to update ${this.objectLabel}: ${e.toString()}`),
|
message: gettext(`Failed to update ${this.objectLabel}: ${e.toString()}`),
|
||||||
level_tag: "error",
|
level: MessageLevel.error,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue