import { gettext } from "django"; import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element"; import PFCard from "@patternfly/patternfly/components/Card/card.css"; import AKGlobal from "../../authentik.css"; import PFButton from "@patternfly/patternfly/components/Button/button.css"; import PFBase from "@patternfly/patternfly/patternfly-base.css"; import PFForm from "@patternfly/patternfly/components/Form/form.css"; import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css"; import { CoreApi, User } from "authentik-api"; import { me } from "../../api/Users"; import "../../elements/forms/FormElement"; import "../../elements/EmptyState"; import { FlowURLManager } from "../../api/legacy"; import "@polymer/paper-input/paper-input"; import "@polymer/iron-form/iron-form"; import { DEFAULT_CONFIG } from "../../api/Config"; import { PaperInputElement } from "@polymer/paper-input/paper-input"; import { showMessage } from "../../elements/messages/MessageContainer"; export interface ErrorResponse { [key: string]: string[]; } @customElement("ak-form") export class Form extends LitElement { @property() successMessage = ""; @property() send!: (data: Record) => Promise; submit(ev: Event): void { ev.preventDefault(); const ironForm = this.shadowRoot?.querySelector("iron-form"); if (!ironForm) { return; } const data = ironForm.serializeForm(); this.send(data).then(() => { showMessage({ level_tag: "success", message: this.successMessage }); }).catch((ex: Response) => { if (ex.status > 399 && ex.status < 500) { return ex.json(); } return ex; }).then((errorMessage?: ErrorResponse) => { if (!errorMessage) return; const elements: PaperInputElement[] = ironForm._getSubmittableElements(); elements.forEach((element) => { const elementName = element.name; if (!elementName) return; if (elementName in errorMessage) { element.errorMessage = errorMessage[elementName].join(", "); element.invalid = true; } }); }); } render(): TemplateResult { return html` { this.submit(ev); }}> `; } } @customElement("ak-user-details") export class UserDetailsPage extends LitElement { static get styles(): CSSResult[] { return [PFBase, PFCard, PFForm, PFFormControl, PFButton, AKGlobal]; } @property({attribute: false}) user?: User; firstUpdated(): void { me().then((user) => { this.user = user.user; }); } render(): TemplateResult { if (!this.user) { return html` `; } return html`
${gettext("Update details")}
{ return new CoreApi(DEFAULT_CONFIG).coreUsersUpdate({ id: this.user?.pk || 0, data: data as User }); }}>

${gettext("Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.")}

${gettext("User's display name.")}

${gettext("Delete account")}
`; } }