import { css, CSSResult, customElement, html, LitElement, property, TemplateResult, } from "lit-element"; import PFBase from "@patternfly/patternfly/patternfly-base.css"; import PFButton from "@patternfly/patternfly/components/Button/button.css"; import PFModalBox from "@patternfly/patternfly/components/ModalBox/modal-box.css"; import PFForm from "@patternfly/patternfly/components/Form/form.css"; import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css"; import PFBullseye from "@patternfly/patternfly/layouts/Bullseye/bullseye.css"; import PFBackdrop from "@patternfly/patternfly/components/Backdrop/backdrop.css"; import PFPage from "@patternfly/patternfly/components/Page/page.css"; import PFCard from "@patternfly/patternfly/components/Card/card.css"; import PFTitle from "@patternfly/patternfly/components/Title/title.css"; import PFContent from "@patternfly/patternfly/components/Content/content.css"; import AKGlobal from "../../authentik.css"; import { PFSize } from "../Spinner"; export const MODAL_BUTTON_STYLES = css` :host { text-align: left; font-size: var(--pf-global--FontSize--md); } .pf-c-modal-box.pf-m-lg { overflow-y: auto; } .pf-c-modal-box > .pf-c-button + * { margin-right: 0; } /* fix multiple selects height */ select[multiple] { height: 15em; } `; @customElement("ak-modal-button") export class ModalButton extends LitElement { @property() size: PFSize = PFSize.Large; @property({ type: Boolean }) open = false; handlerBound = false; static get styles(): CSSResult[] { return [ PFBase, PFButton, PFModalBox, PFForm, PFTitle, PFFormControl, PFBullseye, PFBackdrop, PFPage, PFCard, PFContent, AKGlobal, MODAL_BUTTON_STYLES, ]; } connectedCallback(): void { if (this.handlerBound) return; window.addEventListener("keyup", this.keyUpHandler); this.handlerBound = true; } keyUpHandler = (e: KeyboardEvent): void => { if (e.code === "Escape") { this.resetForms(); this.open = false; } }; disconnectedCallback(): void { super.disconnectedCallback(); window.removeEventListener("keyup", this.keyUpHandler); } resetForms(): void { this.querySelectorAll("[slot=form]").forEach((form) => { if ("resetForm" in form) { form?.resetForm(); } }); } onClick(): void { this.open = true; this.querySelectorAll("*").forEach((child) => { if ("requestUpdate" in child) { (child as LitElement).requestUpdate(); } }); } renderModalInner(): TemplateResult { return html``; } renderModal(): TemplateResult { return html`
`; } render(): TemplateResult { return html` this.onClick()}> ${this.open ? this.renderModal() : ""}`; } }