import "@goauthentik/admin/groups/GroupForm"; import "@goauthentik/admin/groups/GroupForm"; import "@goauthentik/admin/users/GroupSelectModal"; import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import "@goauthentik/components/ak-status-label"; import "@goauthentik/elements/buttons/SpinnerButton"; import "@goauthentik/elements/forms/DeleteBulkForm"; import { Form } from "@goauthentik/elements/forms/Form"; import "@goauthentik/elements/forms/HorizontalFormElement"; import "@goauthentik/elements/forms/ModalForm"; import { PaginatedResponse } from "@goauthentik/elements/table/Table"; import { Table, TableColumn } from "@goauthentik/elements/table/Table"; import "@patternfly/elements/pf-tooltip/pf-tooltip.js"; import { msg, str } from "@lit/localize"; import { TemplateResult, html } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { ifDefined } from "lit/directives/if-defined.js"; import { CoreApi, Group, User } from "@goauthentik/api"; @customElement("ak-group-related-add") export class RelatedGroupAdd extends Form<{ groups: string[] }> { @property({ attribute: false }) user?: User; @state() groupsToAdd: Group[] = []; getSuccessMessage(): string { return msg("Successfully added user to group(s)."); } async send(data: { groups: string[] }): Promise { await Promise.all( data.groups.map((group) => { return new CoreApi(DEFAULT_CONFIG).coreGroupsAddUserCreate({ groupUuid: group, userAccountRequest: { pk: this.user?.pk || 0, }, }); }), ); return data; } renderForm(): TemplateResult { return html`
{ this.groupsToAdd = items; this.requestUpdate(); return Promise.resolve(); }} >
${this.groupsToAdd.map((group) => { return html` { const idx = this.groupsToAdd.indexOf(group); this.groupsToAdd.splice(idx, 1); this.requestUpdate(); }} > ${group.name} `; })}
`; } } @customElement("ak-group-related-list") export class RelatedGroupList extends Table { checkbox = true; clearOnRefresh = true; searchEnabled(): boolean { return true; } @property() order = "name"; @property({ attribute: false }) targetUser?: User; async apiEndpoint(): Promise> { return new CoreApi(DEFAULT_CONFIG).coreGroupsList({ ...(await this.defaultEndpointConfig()), membersByPk: this.targetUser ? [this.targetUser.pk] : [], includeUsers: false, }); } columns(): TableColumn[] { return [ new TableColumn(msg("Name"), "name"), new TableColumn(msg("Parent"), "parent"), new TableColumn(msg("Superuser privileges?")), new TableColumn(msg("Actions")), ]; } renderToolbarSelected(): TemplateResult { const disabled = this.selectedElements.length < 1; return html` { if (!this.targetUser) return; return new CoreApi(DEFAULT_CONFIG).coreGroupsRemoveUserCreate({ groupUuid: item.pk, userAccountRequest: { pk: this.targetUser?.pk || 0, }, }); }} > `; } row(item: Group): TemplateResult[] { return [ html`${item.name}`, html`${item.parentName || msg("-")}`, html``, html` ${msg("Update")} ${msg("Update Group")} `, ]; } renderToolbar(): TemplateResult { return html` ${this.targetUser ? html` ${msg("Add")} ${msg("Add Group")} ` : html``} ${msg("Create")} ${msg("Create Group")} ${super.renderToolbar()} `; } } declare global { interface HTMLElementTagNameMap { "ak-group-related-list": RelatedGroupList; "ak-group-related-add": RelatedGroupAdd; } }