
* web: Add InvalidationFlow to Radius Provider dialogues
## What
- Bugfix: adds the InvalidationFlow to the Radius Provider dialogues
- Repairs: `{"invalidation_flow":["This field is required."]}` message, which was *not* propagated
to the Notification.
- Nitpick: Pretties `?foo=${true}` expressions: `s/\?([^=]+)=\$\{true\}/\1/`
## Note
Yes, I know I'm going to have to do more magic when we harmonize the forms, and no, I didn't add the
Property Mappings to the wizard, and yes, I know I'm going to have pain with the *new* version of
the wizard. But this is a serious bug; you can't make Radius servers with *either* of the current
dialogues at the moment.
* This (temporary) change is needed to prevent the unit tests from failing.
\# What
\# Why
\# How
\# Designs
\# Test Steps
\# Other Notes
* Revert "This (temporary) change is needed to prevent the unit tests from failing."
This reverts commit dddde09be5
.
* web: fix error handling bug in ui
# What
When I converted all of the Provider forms over to a unified structure, the RAC form
stood out as one that couldn't be directly converted, so two copies were retained.
The error handling was updated to a new format, but this one bit of older handling
was missed.
For now, we're going back to using `Record<string, string>` for errors, to stay as
close to the `./admin/providers/` style of handling.
# Testing
This error prevented the RAC Provider form from loading in the wizard. Seeing that it works in the
wizard should be sufficient.
63 lines
2.1 KiB
TypeScript
63 lines
2.1 KiB
TypeScript
import { camelToSnake } from "@goauthentik/common/utils.js";
|
|
import "@goauthentik/components/ak-number-input";
|
|
import "@goauthentik/components/ak-radio-input";
|
|
import "@goauthentik/components/ak-switch-input";
|
|
import "@goauthentik/components/ak-text-input";
|
|
import { AKElement } from "@goauthentik/elements/Base.js";
|
|
import { KeyUnknown, serializeForm } from "@goauthentik/elements/forms/Form";
|
|
import "@goauthentik/elements/forms/FormGroup";
|
|
import "@goauthentik/elements/forms/HorizontalFormElement";
|
|
import { HorizontalFormElement } from "@goauthentik/elements/forms/HorizontalFormElement";
|
|
|
|
import { property, query } from "lit/decorators.js";
|
|
|
|
import { styles as AwadStyles } from "../../ApplicationWizardFormStepStyles.css.js";
|
|
import { type ApplicationWizardState, type OneOfProvider } from "../../types";
|
|
|
|
export class ApplicationWizardProviderForm<T extends OneOfProvider> extends AKElement {
|
|
static get styles() {
|
|
return AwadStyles;
|
|
}
|
|
|
|
label = "";
|
|
|
|
@property({ type: Object, attribute: false })
|
|
wizard!: ApplicationWizardState;
|
|
|
|
@property({ type: Object, attribute: false })
|
|
errors: Record<string | number | symbol, string> = {};
|
|
|
|
@query("form#providerform")
|
|
form!: HTMLFormElement;
|
|
|
|
get formValues(): KeyUnknown | undefined {
|
|
const elements = [
|
|
...Array.from(
|
|
this.form.querySelectorAll<HorizontalFormElement>("ak-form-element-horizontal"),
|
|
),
|
|
...Array.from(this.form.querySelectorAll<HTMLElement>("[data-ak-control=true]")),
|
|
];
|
|
return serializeForm(elements as unknown as NodeListOf<HorizontalFormElement>);
|
|
}
|
|
|
|
get valid() {
|
|
this.errors = {};
|
|
return this.form.checkValidity();
|
|
}
|
|
|
|
errorMessages(name: string) {
|
|
return name in this.errors
|
|
? [this.errors[name]]
|
|
: (this.wizard.errors?.provider?.[name] ??
|
|
this.wizard.errors?.provider?.[camelToSnake(name)] ??
|
|
[]);
|
|
}
|
|
|
|
isValid(name: keyof T) {
|
|
return !(
|
|
(this.wizard.errors?.provider?.[name as string] ?? []).length > 0 ||
|
|
this.errors?.[name] !== undefined
|
|
);
|
|
}
|
|
}
|