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`
`;
+ 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` `;
- }
-}
-
@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}
+