diff --git a/tests/e2e/test_flows_enroll.py b/tests/e2e/test_flows_enroll.py index 5b5c9480c1..95ae6a8396 100644 --- a/tests/e2e/test_flows_enroll.py +++ b/tests/e2e/test_flows_enroll.py @@ -129,6 +129,7 @@ class TestFlowsEnroll(SeleniumTestCase): prompt_stage.find_element(By.CSS_SELECTOR, ".pf-c-button").click() # Second prompt stage + sleep(1) flow_executor = self.get_shadow_root("ak-flow-executor") prompt_stage = self.get_shadow_root("ak-stage-prompt", flow_executor) wait = WebDriverWait(prompt_stage, self.wait_timeout) diff --git a/web/src/flow/FlowExecutor.ts b/web/src/flow/FlowExecutor.ts index 638e0c3bdb..bde3616b52 100644 --- a/web/src/flow/FlowExecutor.ts +++ b/web/src/flow/FlowExecutor.ts @@ -440,13 +440,14 @@ export class FlowExecutor extends Interface implements StageHost { const logo = html`
authentik Logo
`; + const fallbackLoadSpinner = html` + `; if (!this.challenge) { - return html`${logo} - `; + return html`${logo}${fallbackLoadSpinner}`; } return html` ${this.loading ? html`` : nothing} ${logo} - ${until(this.renderChallenge())} + ${until(this.renderChallenge(), fallbackLoadSpinner)} `; } diff --git a/web/src/flow/stages/access_denied/AccessDeniedStage.ts b/web/src/flow/stages/access_denied/AccessDeniedStage.ts index 5a2429c816..885442d718 100644 --- a/web/src/flow/stages/access_denied/AccessDeniedStage.ts +++ b/web/src/flow/stages/access_denied/AccessDeniedStage.ts @@ -1,72 +1,26 @@ -import { AKElement } from "@goauthentik/elements/Base"; import "@goauthentik/elements/EmptyState"; import "@goauthentik/flow/FormStatic"; import { BaseStage } from "@goauthentik/flow/stages/base"; import { msg } from "@lit/localize"; -import { CSSResult, TemplateResult, css, html } from "lit"; -import { customElement, property } from "lit/decorators.js"; +import { CSSResult, TemplateResult, html, nothing } from "lit"; +import { customElement } from "lit/decorators.js"; import { ifDefined } from "lit/directives/if-defined.js"; -import PFDivider from "@patternfly/patternfly/components/Divider/divider.css"; import PFForm from "@patternfly/patternfly/components/Form/form.css"; import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css"; -import PFList from "@patternfly/patternfly/components/List/list.css"; import PFLogin from "@patternfly/patternfly/components/Login/login.css"; -import PFTitle from "@patternfly/patternfly/components/Title/title.css"; import PFBase from "@patternfly/patternfly/patternfly-base.css"; import { AccessDeniedChallenge, FlowChallengeResponseRequest } from "@goauthentik/api"; -@customElement("ak-stage-access-denied-icon") -export class AccessDeniedIcon extends AKElement { - @property() - errorMessage?: string; - - static get styles(): CSSResult[] { - return [ - PFBase, - PFTitle, - PFDivider, - css` - .big-icon { - display: flex; - width: 100%; - justify-content: center; - height: 5rem; - } - .big-icon i { - font-size: 3rem; - } - .reason { - margin-bottom: 1rem; - text-align: center; - } - `, - ]; - } - - render(): TemplateResult { - return html`
-

- -

-

${msg("Request has been denied.")}

- ${this.errorMessage - ? html`
-

${this.errorMessage}

` - : html``} -
`; - } -} - @customElement("ak-stage-access-denied") export class AccessDeniedStage extends BaseStage< AccessDeniedChallenge, FlowChallengeResponseRequest > { static get styles(): CSSResult[] { - return [PFBase, PFLogin, PFForm, PFList, PFFormControl, PFTitle]; + return [PFBase, PFLogin, PFForm, PFFormControl]; } render(): TemplateResult { @@ -90,10 +44,15 @@ export class AccessDeniedStage extends BaseStage< > - - + + ${this.challenge.errorMessage + ? html` +
+

${this.challenge.errorMessage}

+
+ ` + : nothing} +