@@ -4,6 +4,7 @@ import { EVENT_REFRESH } from "@goauthentik/common/constants";
4
4
import { parseAPIResponseError } from "@goauthentik/common/errors/network" ;
5
5
import { WizardNavigationEvent } from "@goauthentik/components/ak-wizard/events.js" ;
6
6
import { type WizardButton } from "@goauthentik/components/ak-wizard/types" ;
7
+ import { showAPIErrorMessage } from "@goauthentik/elements/messages/MessageContainer" ;
7
8
import { CustomEmitterElement } from "@goauthentik/elements/utils/eventEmitter" ;
8
9
import { P , match } from "ts-pattern" ;
9
10
@@ -30,10 +31,15 @@ import {
30
31
type TransactionApplicationRequest ,
31
32
type TransactionApplicationResponse ,
32
33
type TransactionPolicyBindingRequest ,
34
+ instanceOfValidationError ,
33
35
} from "@goauthentik/api" ;
34
36
35
37
import { ApplicationWizardStep } from "../ApplicationWizardStep.js" ;
36
- import { ApplicationTransactionValidationError , OneOfProvider } from "../types.js" ;
38
+ import {
39
+ ApplicationTransactionValidationError ,
40
+ OneOfProvider ,
41
+ isApplicationTransactionValidationError ,
42
+ } from "../types.js" ;
37
43
import { providerRenderers } from "./SubmitStepOverviewRenderers.js" ;
38
44
39
45
const _submitStates = [ "reviewing" , "running" , "submitted" ] as const ;
@@ -140,25 +146,35 @@ export class ApplicationWizardSubmitStep extends CustomEmitterElement(Applicatio
140
146
this . state = "submitted" ;
141
147
} )
142
148
143
- . catch ( async ( resolution ) => {
144
- const errors =
145
- await parseAPIResponseError < ApplicationTransactionValidationError > ( resolution ) ;
149
+ . catch ( async ( error ) => {
150
+ const parsedError = await parseAPIResponseError ( error ) ;
151
+
152
+ if ( ! instanceOfValidationError ( parsedError ) ) {
153
+ showAPIErrorMessage ( parsedError ) ;
154
+
155
+ return ;
156
+ }
157
+
158
+ if ( isApplicationTransactionValidationError ( parsedError ) ) {
159
+ // THIS is a really gross special case; if the user is duplicating the name of an existing provider, the error appears on the `app` (!) error object.
160
+ // We have to move that to the `provider.name` error field so it shows up in the right place.
161
+ if ( Array . isArray ( parsedError . app ?. provider ) ) {
162
+ const providerError = parsedError . app . provider ;
146
163
147
- // THIS is a really gross special case; if the user is duplicating the name of an existing provider, the error appears on the `app` (!) error object.
148
- // We have to move that to the `provider.name` error field so it shows up in the right place.
149
- if ( Array . isArray ( errors ?. app ?. provider ) ) {
150
- const providerError = errors . app . provider ;
151
- errors . provider = errors . provider ?? { } ;
152
- errors . provider . name = providerError ;
164
+ parsedError . provider = {
165
+ ...parsedError . provider ,
166
+ name : providerError ,
167
+ } ;
153
168
154
- delete errors . app . provider ;
169
+ delete parsedError . app . provider ;
155
170
156
- if ( Object . keys ( errors . app ) . length === 0 ) {
157
- delete errors . app ;
171
+ if ( Object . keys ( parsedError . app ) . length === 0 ) {
172
+ delete parsedError . app ;
173
+ }
158
174
}
159
175
}
160
176
161
- this . handleUpdate ( { errors } ) ;
177
+ this . handleUpdate ( { errors : parsedError } ) ;
162
178
this . state = "reviewing" ;
163
179
} ) ;
164
180
}
0 commit comments