Attribute errors with field property to the correct property
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
parent
3c294b33a8
commit
45ce7d52b0
16
js/src/types/errors.model.ts
Normal file
16
js/src/types/errors.model.ts
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
import { Operation, NextLink } from "@apollo/client/core";
|
||||||
|
import { NetworkError } from "@apollo/client/errors";
|
||||||
|
import { ExecutionResult, GraphQLError } from "graphql";
|
||||||
|
|
||||||
|
export declare class AbsintheGraphQLError extends GraphQLError {
|
||||||
|
field?: string;
|
||||||
|
}
|
||||||
|
export declare type AbsintheGraphQLErrors = ReadonlyArray<AbsintheGraphQLError>;
|
||||||
|
|
||||||
|
export interface ErrorResponse {
|
||||||
|
graphQLErrors?: AbsintheGraphQLErrors;
|
||||||
|
networkError?: NetworkError;
|
||||||
|
response?: ExecutionResult;
|
||||||
|
operation: Operation;
|
||||||
|
forward: NextLink;
|
||||||
|
}
|
|
@ -60,7 +60,12 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<b-field :label="$t('Description')" label-for="group-summary">
|
<b-field
|
||||||
|
:label="$t('Description')"
|
||||||
|
label-for="group-summary"
|
||||||
|
:message="fieldErrors.summary"
|
||||||
|
:type="fieldErrors.summary ? 'is-danger' : undefined"
|
||||||
|
>
|
||||||
<b-input v-model="group.summary" type="textarea" id="group-summary" />
|
<b-input v-model="group.summary" type="textarea" id="group-summary" />
|
||||||
</b-field>
|
</b-field>
|
||||||
|
|
||||||
|
@ -102,7 +107,7 @@ import { convertToUsername } from "../../utils/username";
|
||||||
import PictureUpload from "../../components/PictureUpload.vue";
|
import PictureUpload from "../../components/PictureUpload.vue";
|
||||||
import { CONFIG } from "@/graphql/config";
|
import { CONFIG } from "@/graphql/config";
|
||||||
import { IConfig } from "@/types/config.model";
|
import { IConfig } from "@/types/config.model";
|
||||||
import { ErrorResponse } from "@apollo/client/link/error";
|
import { ErrorResponse } from "@/types/errors.model";
|
||||||
import { ServerParseError } from "@apollo/client/link/http";
|
import { ServerParseError } from "@apollo/client/link/http";
|
||||||
import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core";
|
import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core";
|
||||||
|
|
||||||
|
@ -135,6 +140,8 @@ export default class CreateGroup extends mixins(IdentityEditionMixin) {
|
||||||
|
|
||||||
errors: string[] = [];
|
errors: string[] = [];
|
||||||
|
|
||||||
|
fieldErrors: Record<string, string> = {};
|
||||||
|
|
||||||
usernameWithDomain = usernameWithDomain;
|
usernameWithDomain = usernameWithDomain;
|
||||||
|
|
||||||
async createGroup(): Promise<void> {
|
async createGroup(): Promise<void> {
|
||||||
|
@ -244,11 +251,17 @@ export default class CreateGroup extends mixins(IdentityEditionMixin) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.errors.push(
|
err.graphQLErrors?.forEach((error) => {
|
||||||
...(err.graphQLErrors || []).map(
|
if (error.field) {
|
||||||
({ message }: { message: string }) => message
|
if (Array.isArray(error.message)) {
|
||||||
)
|
this.fieldErrors[error.field] = error.message[0];
|
||||||
);
|
} else {
|
||||||
|
this.fieldErrors[error.field] = error.message;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.errors.push(error.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in a new issue