import { DEFAULT_CONFIG } from "@goauthentik/common/api/config.js"; import { severityToLabel } from "@goauthentik/common/labels.js"; import "@goauthentik/elements/ak-dual-select/ak-dual-select-dynamic-selected-provider.js"; import "@goauthentik/elements/forms/HorizontalFormElement"; import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; import "@goauthentik/elements/forms/Radio"; import "@goauthentik/elements/forms/SearchSelect"; import { msg } from "@lit/localize"; import { TemplateResult, html } from "lit"; import { customElement } from "lit/decorators.js"; import { ifDefined } from "lit/directives/if-defined.js"; import { CoreApi, CoreGroupsListRequest, EventsApi, Group, NotificationRule, PaginatedNotificationTransportList, SeverityEnum, } from "@goauthentik/api"; import { eventTransportsProvider, eventTransportsSelector } from "./RuleFormHelpers.js"; @customElement("ak-event-rule-form") export class RuleForm extends ModelForm { eventTransports?: PaginatedNotificationTransportList; loadInstance(pk: string): Promise { return new EventsApi(DEFAULT_CONFIG).eventsRulesRetrieve({ pbmUuid: pk, }); } async load(): Promise { this.eventTransports = await new EventsApi(DEFAULT_CONFIG).eventsTransportsList({ ordering: "name", }); } getSuccessMessage(): string { return this.instance ? msg("Successfully updated rule.") : msg("Successfully created rule."); } async send(data: NotificationRule): Promise { if (this.instance) { return new EventsApi(DEFAULT_CONFIG).eventsRulesUpdate({ pbmUuid: this.instance.pk || "", notificationRuleRequest: data, }); } else { return new EventsApi(DEFAULT_CONFIG).eventsRulesCreate({ notificationRuleRequest: data, }); } } renderForm(): TemplateResult { return html` => { const args: CoreGroupsListRequest = { ordering: "name", includeUsers: false, }; if (query !== undefined) { args.search = query; } const groups = await new CoreApi(DEFAULT_CONFIG).coreGroupsList(args); return groups.results; }} .renderElement=${(group: Group): string => { return group.name; }} .value=${(group: Group | undefined): string | undefined => { return group?.pk; }} .selected=${(group: Group): boolean => { return group.pk === this.instance?.group; }} ?blankable=${true} >

${msg( "Select the group of users which the alerts are sent to. If no group is selected the rule is disabled.", )}

${msg( "Select which transports should be used to notify the user. If none are selected, the notification will only be shown in the authentik UI.", )}

`; } } declare global { interface HTMLElementTagNameMap { "ak-event-rule-form": RuleForm; } }