import { CSSResult, LitElement, TemplateResult, html } from "lit"; import { customElement, property } from "lit/decorators.js"; import PFAlert from "@patternfly/patternfly/components/Alert/alert.css"; import PFAlertGroup from "@patternfly/patternfly/components/AlertGroup/alert-group.css"; import PFButton from "@patternfly/patternfly/components/Button/button.css"; import PFBase from "@patternfly/patternfly/patternfly-base.css"; export enum MessageLevel { error = "error", warning = "warning", success = "success", info = "info", } export interface APIMessage { level: MessageLevel; tags?: string; message: string; description?: string; } const LEVEL_ICON_MAP: { [key: string]: string } = { error: "fas fa-exclamation-circle", warning: "fas fa-exclamation-triangle", success: "fas fa-check-circle", info: "fas fa-info", }; @customElement("ak-message") export class Message extends LitElement { @property({ attribute: false }) message?: APIMessage; @property({ type: Number }) removeAfter = 8000; @property({ attribute: false }) onRemove?: (m: APIMessage) => void; static get styles(): CSSResult[] { return [PFBase, PFButton, PFAlert, PFAlertGroup]; } firstUpdated(): void { setTimeout(() => { if (!this.message) return; if (!this.onRemove) return; this.onRemove(this.message); }, this.removeAfter); } render(): TemplateResult { return html`
  • ${this.message?.message}

    ${this.message?.description && html`

    ${this.message.description}

    `}
  • `; } }