import { CoreApi, Group, User } from "authentik-api"; import { t } from "@lingui/macro"; import { customElement } from "lit-element"; import { html, TemplateResult } from "lit-html"; import { DEFAULT_CONFIG } from "../../api/Config"; import { until } from "lit-html/directives/until"; import { ifDefined } from "lit-html/directives/if-defined"; import "../../elements/forms/HorizontalFormElement"; import "../../elements/CodeMirror"; import "../../elements/chips/ChipGroup"; import "../../elements/chips/Chip"; import "./MemberSelectModal"; import YAML from "yaml"; import { first } from "../../utils"; import { ModelForm } from "../../elements/forms/ModelForm"; @customElement("ak-group-form") export class GroupForm extends ModelForm { loadInstance(pk: string): Promise { return new CoreApi(DEFAULT_CONFIG).coreGroupsRetrieve({ groupUuid: pk }); } getSuccessMessage(): string { if (this.instance) { return t`Successfully updated group.`; } else { return t`Successfully created group.`; } } send = (data: Group): Promise => { if (this.instance?.pk) { return new CoreApi(DEFAULT_CONFIG).coreGroupsUpdate({ groupUuid: this.instance.pk || "", groupRequest: data }); } else { data.users = Array.from(this.instance?.users || []) as unknown as Set; return new CoreApi(DEFAULT_CONFIG).coreGroupsCreate({ groupRequest: data }); } }; renderForm(): TemplateResult { return html`

${t`Users added to this group will be superusers.`}

{ // Because the model only has the IDs, map the user list to IDs const ids = items.map(u => u.pk || 0); if (!this.instance) this.instance = {} as Group; this.instance.users = new Set(Array.from(this.instance?.users || []).concat(ids)); this.requestUpdate(); return Promise.resolve(); }}>
${until(new CoreApi(DEFAULT_CONFIG).coreUsersList({ ordering: "username", }).then(users => { return users.results.map(user => { const selected = Array.from(this.instance?.users || []).some(su => { return su == user.pk; }); if (!selected) return; return html` { if (!this.instance) return; const users = Array.from(this.instance?.users || []); const idx = users.indexOf(user.pk || 0); users.splice(idx, 1); this.instance.users = new Set(users); this.requestUpdate(); }}> ${user.username} `; }); }), html``)}

${t`Hold control/command to select multiple items.`}

${t`Set custom attributes using YAML or JSON.`}

`; } }