73733b20b6
* build(deps): bump @trivago/prettier-plugin-sort-imports in /web Bumps [@trivago/prettier-plugin-sort-imports](https://github.com/trivago/prettier-plugin-sort-imports) from 2.0.4 to 3.0.0. - [Release notes](https://github.com/trivago/prettier-plugin-sort-imports/releases) - [Changelog](https://github.com/trivago/prettier-plugin-sort-imports/blob/master/CHANGELOG.md) - [Commits](https://github.com/trivago/prettier-plugin-sort-imports/commits) --- updated-dependencies: - dependency-name: "@trivago/prettier-plugin-sort-imports" dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> * web: update prettier config Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jens Langhammer <jens.langhammer@beryju.org>
66 lines
2 KiB
TypeScript
66 lines
2 KiB
TypeScript
import { CSSResult, LitElement, TemplateResult, css, html } from "lit";
|
|
import { customElement, property } from "lit/decorators";
|
|
|
|
import PFAlertGroup from "@patternfly/patternfly/components/AlertGroup/alert-group.css";
|
|
import PFBase from "@patternfly/patternfly/patternfly-base.css";
|
|
|
|
import { WSMessage } from "../../common/ws";
|
|
import { EVENT_WS_MESSAGE, WS_MSG_TYPE_MESSAGE } from "../../constants";
|
|
import "./Message";
|
|
import { APIMessage } from "./Message";
|
|
|
|
export function showMessage(message: APIMessage): void {
|
|
const container = document.querySelector<MessageContainer>("ak-message-container");
|
|
if (!container) {
|
|
throw new Error("failed to find message container");
|
|
}
|
|
container.addMessage(message);
|
|
container.requestUpdate();
|
|
}
|
|
|
|
@customElement("ak-message-container")
|
|
export class MessageContainer extends LitElement {
|
|
@property({ attribute: false })
|
|
messages: APIMessage[] = [];
|
|
|
|
static get styles(): CSSResult[] {
|
|
return [
|
|
PFBase,
|
|
PFAlertGroup,
|
|
css`
|
|
/* Fix spacing between messages */
|
|
ak-message {
|
|
display: block;
|
|
}
|
|
`,
|
|
];
|
|
}
|
|
|
|
constructor() {
|
|
super();
|
|
this.addEventListener(EVENT_WS_MESSAGE, ((e: CustomEvent<WSMessage>) => {
|
|
if (e.detail.message_type !== WS_MSG_TYPE_MESSAGE) return;
|
|
this.addMessage(e.detail as unknown as APIMessage);
|
|
}) as EventListener);
|
|
}
|
|
|
|
addMessage(message: APIMessage): void {
|
|
this.messages.push(message);
|
|
}
|
|
|
|
render(): TemplateResult {
|
|
return html`<ul class="pf-c-alert-group pf-m-toast">
|
|
${this.messages.map((m) => {
|
|
return html`<ak-message
|
|
.message=${m}
|
|
.onRemove=${(m: APIMessage) => {
|
|
this.messages = this.messages.filter((v) => v !== m);
|
|
this.requestUpdate();
|
|
}}
|
|
>
|
|
</ak-message>`;
|
|
})}
|
|
</ul>`;
|
|
}
|
|
}
|