web/admin: replace flow selections with ak-search-select
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
		| @ -1,4 +1,5 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import { KeyUnknown } from "@goauthentik/elements/forms/Form"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { WizardFormPage } from "@goauthentik/elements/wizard/WizardFormPage"; | ||||
| @ -8,13 +9,13 @@ import { t } from "@lingui/macro"; | ||||
|  | ||||
| import { customElement } from "@lit/reactive-element/decorators/custom-element.js"; | ||||
| import { TemplateResult, html } from "lit"; | ||||
| import { ifDefined } from "lit/directives/if-defined.js"; | ||||
| import { until } from "lit/directives/until.js"; | ||||
|  | ||||
| import { | ||||
|     ClientTypeEnum, | ||||
|     Flow, | ||||
|     FlowsApi, | ||||
|     FlowsInstancesListDesignationEnum, | ||||
|     FlowsInstancesListRequest, | ||||
|     OAuth2ProviderRequest, | ||||
|     ProvidersApi, | ||||
| } from "@goauthentik/api"; | ||||
| @ -46,23 +47,29 @@ export class TypeOAuthCodeApplicationWizardPage extends WizardFormPage { | ||||
|                 ?required=${true} | ||||
|                 name="authorizationFlow" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     ${until( | ||||
|                         new FlowsApi(DEFAULT_CONFIG) | ||||
|                             .flowsInstancesList({ | ||||
|                                 ordering: "slug", | ||||
|                                 designation: FlowsInstancesListDesignationEnum.Authorization, | ||||
|                             }) | ||||
|                             .then((flows) => { | ||||
|                                 return flows.results.map((flow) => { | ||||
|                                     return html`<option value=${ifDefined(flow.pk)}> | ||||
|                                         ${flow.name} (${flow.slug}) | ||||
|                                     </option>`; | ||||
|                                 }); | ||||
|                             }), | ||||
|                         html`<option>${t`Loading...`}</option>`, | ||||
|                     )} | ||||
|                 </select> | ||||
|                 <ak-search-select | ||||
|                     .fetchObjects=${async (query?: string): Promise<Flow[]> => { | ||||
|                         const args: FlowsInstancesListRequest = { | ||||
|                             ordering: "name", | ||||
|                             designation: FlowsInstancesListDesignationEnum.Authorization, | ||||
|                         }; | ||||
|                         if (query !== undefined) { | ||||
|                             args.search = query; | ||||
|                         } | ||||
|                         const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); | ||||
|                         return flows.results; | ||||
|                     }} | ||||
|                     .renderElement=${(flow: Flow): string => { | ||||
|                         return flow.name; | ||||
|                     }} | ||||
|                     .renderDescription=${(flow: Flow): string => { | ||||
|                         return flow.slug; | ||||
|                     }} | ||||
|                     .value=${(flow: Flow | undefined): string | undefined => { | ||||
|                         return flow?.pk; | ||||
|                     }} | ||||
|                 > | ||||
|                 </ak-search-select> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Flow used when users access this application.`} | ||||
|                 </p> | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first, randomString } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/FormGroup"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| @ -15,8 +16,10 @@ import { until } from "lit/directives/until.js"; | ||||
| import { | ||||
|     ClientTypeEnum, | ||||
|     CryptoApi, | ||||
|     Flow, | ||||
|     FlowsApi, | ||||
|     FlowsInstancesListDesignationEnum, | ||||
|     FlowsInstancesListRequest, | ||||
|     IssuerModeEnum, | ||||
|     OAuth2Provider, | ||||
|     PropertymappingsApi, | ||||
| @ -77,26 +80,29 @@ export class OAuth2ProviderFormPage extends ModelForm<OAuth2Provider, number> { | ||||
|                 ?required=${true} | ||||
|                 name="authorizationFlow" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     ${until( | ||||
|                         new FlowsApi(DEFAULT_CONFIG) | ||||
|                             .flowsInstancesList({ | ||||
|                                 ordering: "slug", | ||||
|                                 designation: FlowsInstancesListDesignationEnum.Authorization, | ||||
|                             }) | ||||
|                             .then((flows) => { | ||||
|                                 return flows.results.map((flow) => { | ||||
|                                     return html`<option | ||||
|                                         value=${ifDefined(flow.pk)} | ||||
|                                         ?selected=${this.instance?.authorizationFlow === flow.pk} | ||||
|                                     > | ||||
|                                         ${flow.name} (${flow.slug}) | ||||
|                                     </option>`; | ||||
|                                 }); | ||||
|                             }), | ||||
|                         html`<option>${t`Loading...`}</option>`, | ||||
|                     )} | ||||
|                 </select> | ||||
|                 <ak-search-select | ||||
|                     .fetchObjects=${async (query?: string): Promise<Flow[]> => { | ||||
|                         const args: FlowsInstancesListRequest = { | ||||
|                             ordering: "name", | ||||
|                             designation: FlowsInstancesListDesignationEnum.Authorization, | ||||
|                         }; | ||||
|                         if (query !== undefined) { | ||||
|                             args.search = query; | ||||
|                         } | ||||
|                         const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); | ||||
|                         return flows.results; | ||||
|                     }} | ||||
|                     .renderElement=${(flow: Flow): string => { | ||||
|                         return flow.name; | ||||
|                     }} | ||||
|                     .renderDescription=${(flow: Flow): string => { | ||||
|                         return flow.slug; | ||||
|                     }} | ||||
|                     .value=${(flow: Flow | undefined): string | undefined => { | ||||
|                         return flow?.pk; | ||||
|                     }} | ||||
|                 > | ||||
|                 </ak-search-select> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Flow used when authorizing this provider.`} | ||||
|                 </p> | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/FormGroup"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| @ -20,8 +21,10 @@ import PFSpacing from "@patternfly/patternfly/utilities/Spacing/spacing.css"; | ||||
|  | ||||
| import { | ||||
|     CryptoApi, | ||||
|     Flow, | ||||
|     FlowsApi, | ||||
|     FlowsInstancesListDesignationEnum, | ||||
|     FlowsInstancesListRequest, | ||||
|     PropertymappingsApi, | ||||
|     ProvidersApi, | ||||
|     ProxyMode, | ||||
| @ -292,26 +295,32 @@ export class ProxyProviderFormPage extends ModelForm<ProxyProvider, number> { | ||||
|                 ?required=${true} | ||||
|                 name="authorizationFlow" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     ${until( | ||||
|                         new FlowsApi(DEFAULT_CONFIG) | ||||
|                             .flowsInstancesList({ | ||||
|                                 ordering: "slug", | ||||
|                                 designation: FlowsInstancesListDesignationEnum.Authorization, | ||||
|                             }) | ||||
|                             .then((flows) => { | ||||
|                                 return flows.results.map((flow) => { | ||||
|                                     return html`<option | ||||
|                                         value=${ifDefined(flow.pk)} | ||||
|                                         ?selected=${this.instance?.authorizationFlow === flow.pk} | ||||
|                                     > | ||||
|                                         ${flow.name} (${flow.slug}) | ||||
|                                     </option>`; | ||||
|                                 }); | ||||
|                             }), | ||||
|                         html`<option>${t`Loading...`}</option>`, | ||||
|                     )} | ||||
|                 </select> | ||||
|                 <ak-search-select | ||||
|                     .fetchObjects=${async (query?: string): Promise<Flow[]> => { | ||||
|                         const args: FlowsInstancesListRequest = { | ||||
|                             ordering: "name", | ||||
|                             designation: FlowsInstancesListDesignationEnum.Authorization, | ||||
|                         }; | ||||
|                         if (query !== undefined) { | ||||
|                             args.search = query; | ||||
|                         } | ||||
|                         const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); | ||||
|                         return flows.results; | ||||
|                     }} | ||||
|                     .renderElement=${(flow: Flow): string => { | ||||
|                         return flow.name; | ||||
|                     }} | ||||
|                     .renderDescription=${(flow: Flow): string => { | ||||
|                         return flow.slug; | ||||
|                     }} | ||||
|                     .value=${(flow: Flow | undefined): string | undefined => { | ||||
|                         return flow?.pk; | ||||
|                     }} | ||||
|                     .selected=${(flow: Flow): boolean => { | ||||
|                         return flow.pk === this.instance?.authorizationFlow; | ||||
|                     }} | ||||
|                 > | ||||
|                 </ak-search-select> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Flow used when authorizing this provider.`} | ||||
|                 </p> | ||||
|  | ||||
| @ -1,4 +1,5 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/FormGroup"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| @ -14,8 +15,10 @@ import { until } from "lit/directives/until.js"; | ||||
| import { | ||||
|     CryptoApi, | ||||
|     DigestAlgorithmEnum, | ||||
|     Flow, | ||||
|     FlowsApi, | ||||
|     FlowsInstancesListDesignationEnum, | ||||
|     FlowsInstancesListRequest, | ||||
|     PropertymappingsApi, | ||||
|     ProvidersApi, | ||||
|     SAMLProvider, | ||||
| @ -67,26 +70,32 @@ export class SAMLProviderFormPage extends ModelForm<SAMLProvider, number> { | ||||
|                 ?required=${true} | ||||
|                 name="authorizationFlow" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     ${until( | ||||
|                         new FlowsApi(DEFAULT_CONFIG) | ||||
|                             .flowsInstancesList({ | ||||
|                                 ordering: "slug", | ||||
|                                 designation: FlowsInstancesListDesignationEnum.Authorization, | ||||
|                             }) | ||||
|                             .then((flows) => { | ||||
|                                 return flows.results.map((flow) => { | ||||
|                                     return html`<option | ||||
|                                         value=${ifDefined(flow.pk)} | ||||
|                                         ?selected=${this.instance?.authorizationFlow === flow.pk} | ||||
|                                     > | ||||
|                                         ${flow.name} (${flow.slug}) | ||||
|                                     </option>`; | ||||
|                                 }); | ||||
|                             }), | ||||
|                         html`<option>${t`Loading...`}</option>`, | ||||
|                     )} | ||||
|                 </select> | ||||
|                 <ak-search-select | ||||
|                     .fetchObjects=${async (query?: string): Promise<Flow[]> => { | ||||
|                         const args: FlowsInstancesListRequest = { | ||||
|                             ordering: "name", | ||||
|                             designation: FlowsInstancesListDesignationEnum.Authorization, | ||||
|                         }; | ||||
|                         if (query !== undefined) { | ||||
|                             args.search = query; | ||||
|                         } | ||||
|                         const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); | ||||
|                         return flows.results; | ||||
|                     }} | ||||
|                     .renderElement=${(flow: Flow): string => { | ||||
|                         return flow.name; | ||||
|                     }} | ||||
|                     .renderDescription=${(flow: Flow): string => { | ||||
|                         return flow.slug; | ||||
|                     }} | ||||
|                     .value=${(flow: Flow | undefined): string | undefined => { | ||||
|                         return flow?.pk; | ||||
|                     }} | ||||
|                     .selected=${(flow: Flow): boolean => { | ||||
|                         return flow.pk === this.instance?.authorizationFlow; | ||||
|                     }} | ||||
|                 > | ||||
|                 </ak-search-select> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Flow used when authorizing this provider.`} | ||||
|                 </p> | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { SentryIgnoredError } from "@goauthentik/common/errors"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import { Form } from "@goauthentik/elements/forms/Form"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
|  | ||||
| @ -7,11 +8,12 @@ import { t } from "@lingui/macro"; | ||||
|  | ||||
| import { TemplateResult, html } from "lit"; | ||||
| import { customElement } from "lit/decorators.js"; | ||||
| import { until } from "lit/directives/until.js"; | ||||
|  | ||||
| import { | ||||
|     Flow, | ||||
|     FlowsApi, | ||||
|     FlowsInstancesListDesignationEnum, | ||||
|     FlowsInstancesListRequest, | ||||
|     ProvidersApi, | ||||
|     SAMLProvider, | ||||
| } from "@goauthentik/api"; | ||||
| @ -45,23 +47,29 @@ export class SAMLProviderImportForm extends Form<SAMLProvider> { | ||||
|                 ?required=${true} | ||||
|                 name="authorizationFlow" | ||||
|             > | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     ${until( | ||||
|                         new FlowsApi(DEFAULT_CONFIG) | ||||
|                             .flowsInstancesList({ | ||||
|                                 ordering: "slug", | ||||
|                                 designation: FlowsInstancesListDesignationEnum.Authorization, | ||||
|                             }) | ||||
|                             .then((flows) => { | ||||
|                                 return flows.results.map((flow) => { | ||||
|                                     return html`<option value=${flow.slug}> | ||||
|                                         ${flow.name} (${flow.slug}) | ||||
|                                     </option>`; | ||||
|                                 }); | ||||
|                             }), | ||||
|                         html`<option>${t`Loading...`}</option>`, | ||||
|                     )} | ||||
|                 </select> | ||||
|                 <ak-search-select | ||||
|                     .fetchObjects=${async (query?: string): Promise<Flow[]> => { | ||||
|                         const args: FlowsInstancesListRequest = { | ||||
|                             ordering: "name", | ||||
|                             designation: FlowsInstancesListDesignationEnum.Authorization, | ||||
|                         }; | ||||
|                         if (query !== undefined) { | ||||
|                             args.search = query; | ||||
|                         } | ||||
|                         const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); | ||||
|                         return flows.results; | ||||
|                     }} | ||||
|                     .renderElement=${(flow: Flow): string => { | ||||
|                         return flow.name; | ||||
|                     }} | ||||
|                     .renderDescription=${(flow: Flow): string => { | ||||
|                         return flow.slug; | ||||
|                     }} | ||||
|                     .value=${(flow: Flow | undefined): string | undefined => { | ||||
|                         return flow?.pk; | ||||
|                     }} | ||||
|                 > | ||||
|                 </ak-search-select> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`Flow used when authorizing this provider.`} | ||||
|                 </p> | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||
| import { dateTimeLocal, first } from "@goauthentik/common/utils"; | ||||
| import "@goauthentik/elements/CodeMirror"; | ||||
| import "@goauthentik/elements/SearchSelect"; | ||||
| import "@goauthentik/elements/forms/HorizontalFormElement"; | ||||
| import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; | ||||
| import YAML from "yaml"; | ||||
| @ -9,12 +10,12 @@ import { t } from "@lingui/macro"; | ||||
|  | ||||
| import { TemplateResult, html } from "lit"; | ||||
| import { customElement } from "lit/decorators.js"; | ||||
| import { ifDefined } from "lit/directives/if-defined.js"; | ||||
| import { until } from "lit/directives/until.js"; | ||||
|  | ||||
| import { | ||||
|     Flow, | ||||
|     FlowsApi, | ||||
|     FlowsInstancesListDesignationEnum, | ||||
|     FlowsInstancesListRequest, | ||||
|     Invitation, | ||||
|     StagesApi, | ||||
| } from "@goauthentik/api"; | ||||
| @ -74,29 +75,33 @@ export class InvitationForm extends ModelForm<Invitation, string> { | ||||
|                 /> | ||||
|             </ak-form-element-horizontal> | ||||
|             <ak-form-element-horizontal label=${t`Flow`} ?required=${true} name="flow"> | ||||
|                 <select class="pf-c-form-control"> | ||||
|                     <option value="" ?selected=${this.instance?.flow === undefined}> | ||||
|                         --------- | ||||
|                     </option> | ||||
|                     ${until( | ||||
|                         new FlowsApi(DEFAULT_CONFIG) | ||||
|                             .flowsInstancesList({ | ||||
|                                 ordering: "slug", | ||||
|                                 designation: FlowsInstancesListDesignationEnum.Enrollment, | ||||
|                             }) | ||||
|                             .then((flows) => { | ||||
|                                 return flows.results.map((flow) => { | ||||
|                                     return html`<option | ||||
|                                         value=${ifDefined(flow.pk)} | ||||
|                                         ?selected=${this.instance?.flow === flow.pk} | ||||
|                                     > | ||||
|                                         ${flow.name} (${flow.slug}) | ||||
|                                     </option>`; | ||||
|                                 }); | ||||
|                             }), | ||||
|                         html`<option>${t`Loading...`}</option>`, | ||||
|                     )} | ||||
|                 </select> | ||||
|                 <ak-search-select | ||||
|                     .fetchObjects=${async (query?: string): Promise<Flow[]> => { | ||||
|                         const args: FlowsInstancesListRequest = { | ||||
|                             ordering: "name", | ||||
|                             designation: FlowsInstancesListDesignationEnum.Enrollment, | ||||
|                         }; | ||||
|                         if (query !== undefined) { | ||||
|                             args.search = query; | ||||
|                         } | ||||
|                         const flows = await new FlowsApi(DEFAULT_CONFIG).flowsInstancesList(args); | ||||
|                         return flows.results; | ||||
|                     }} | ||||
|                     .renderElement=${(flow: Flow): string => { | ||||
|                         return flow.name; | ||||
|                     }} | ||||
|                     .renderDescription=${(flow: Flow): string => { | ||||
|                         return flow.slug; | ||||
|                     }} | ||||
|                     .value=${(flow: Flow | undefined): string | undefined => { | ||||
|                         return flow?.pk; | ||||
|                     }} | ||||
|                     .selected=${(flow: Flow): boolean => { | ||||
|                         return flow.pk === this.instance?.flow; | ||||
|                     }} | ||||
|                     ?blankable=${true} | ||||
|                 > | ||||
|                 </ak-search-select> | ||||
|                 <p class="pf-c-form__helper-text"> | ||||
|                     ${t`When selected, the invite will only be usable with the flow. By default the invite is accepted on all flows with invitation stages.`} | ||||
|                 </p> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Jens Langhammer
					Jens Langhammer