refactor(web): extract API error classes to api/errors.ts (#65)
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { HttpError, InUseError } from "./queries";
|
import { HttpError, InUseError } from "./errors";
|
||||||
|
|
||||||
/** Maps a caught mutation error to an i18n key (+ interpolation opts). The single
|
/** Maps a caught mutation error to an i18n key (+ interpolation opts). The single
|
||||||
* source of truth shared by the global toast fallback and every inline display. */
|
* source of truth shared by the global toast fallback and every inline display. */
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
export class HttpError extends Error {
|
||||||
|
constructor(public readonly status: number) {
|
||||||
|
super(`HTTP ${status}`);
|
||||||
|
this.name = "HttpError";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class FieldRejection extends Error {
|
||||||
|
constructor(public readonly field: string, public readonly code: string) {
|
||||||
|
super(`field rejected: ${field}`);
|
||||||
|
this.name = "FieldRejection";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class InUseError extends Error {
|
||||||
|
constructor(public readonly count: number) {
|
||||||
|
super(`in use: ${count}`);
|
||||||
|
this.name = "InUseError";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Error carrying the HTTP status so callers can branch 422-gate vs 409-illegal. */
|
||||||
|
export class VisibilityError extends Error {
|
||||||
|
constructor(public status: number) {
|
||||||
|
super(`visibility change failed (${status})`);
|
||||||
|
this.name = "VisibilityError";
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-28
@@ -2,27 +2,9 @@ import { keepPreviousData, useInfiniteQuery, useMutation, useQuery, useQueryClie
|
|||||||
|
|
||||||
import { api } from "./client";
|
import { api } from "./client";
|
||||||
import type { components } from "./schema";
|
import type { components } from "./schema";
|
||||||
|
import { HttpError, FieldRejection, InUseError, VisibilityError } from "./errors";
|
||||||
|
|
||||||
export class HttpError extends Error {
|
export { HttpError, FieldRejection, InUseError, VisibilityError } from "./errors";
|
||||||
constructor(public readonly status: number) {
|
|
||||||
super(`HTTP ${status}`);
|
|
||||||
this.name = "HttpError";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class FieldRejection extends Error {
|
|
||||||
constructor(public readonly field: string, public readonly code: string) {
|
|
||||||
super(`field rejected: ${field}`);
|
|
||||||
this.name = "FieldRejection";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class InUseError extends Error {
|
|
||||||
constructor(public readonly count: number) {
|
|
||||||
super(`in use: ${count}`);
|
|
||||||
this.name = "InUseError";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type UserView = components["schemas"]["UserView"];
|
type UserView = components["schemas"]["UserView"];
|
||||||
type LoginRequest = components["schemas"]["LoginRequest"];
|
type LoginRequest = components["schemas"]["LoginRequest"];
|
||||||
@@ -390,14 +372,6 @@ export function useCreateFieldDefinition() {
|
|||||||
|
|
||||||
type Visibility = "draft" | "internal" | "public";
|
type Visibility = "draft" | "internal" | "public";
|
||||||
|
|
||||||
/** Error carrying the HTTP status so callers can branch 422-gate vs 409-illegal. */
|
|
||||||
export class VisibilityError extends Error {
|
|
||||||
constructor(public status: number) {
|
|
||||||
super(`visibility change failed (${status})`);
|
|
||||||
this.name = "VisibilityError";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function useSetVisibility() {
|
export function useSetVisibility() {
|
||||||
const qc = useQueryClient();
|
const qc = useQueryClient();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user