feat: update permissions
This commit is contained in:
72
lib/utils/error-handler.ts
Normal file
72
lib/utils/error-handler.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
// ============================================================================
|
||||
// API Error Types & Utilities
|
||||
// ============================================================================
|
||||
|
||||
import { toast } from "sonner";
|
||||
import type { ApiError } from "@/lib/types/api";
|
||||
|
||||
export interface PermissionErrorInfo {
|
||||
isPermissionError: boolean;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export function isPermissionError(error: ApiError): boolean {
|
||||
return (
|
||||
error.detail?.includes("access denied") ||
|
||||
error.detail?.includes("доступ запрещён") ||
|
||||
error.detail?.includes("недостаточно прав") ||
|
||||
error.detail?.includes("403")
|
||||
);
|
||||
}
|
||||
|
||||
export function getPermissionErrorMessage(error: ApiError): string {
|
||||
if (isPermissionError(error)) {
|
||||
return "Недостаточно прав. Обратитесь к администратору.";
|
||||
}
|
||||
return error.detail || "Произошла ошибка";
|
||||
}
|
||||
|
||||
export function handleApiError(error: unknown, customMessage?: string): ApiError {
|
||||
const apiError = error as ApiError;
|
||||
|
||||
if (isPermissionError(apiError)) {
|
||||
toast.error("Недостаточно прав", {
|
||||
description: "Обратитесь к администратору workspace",
|
||||
});
|
||||
} else {
|
||||
toast.error(customMessage || "Ошибка", {
|
||||
description: apiError.detail || "Произошла ошибка при выполнении операции",
|
||||
});
|
||||
}
|
||||
|
||||
return apiError;
|
||||
}
|
||||
|
||||
export function showPermissionErrorToast(): void {
|
||||
toast.error("Недостаточно прав", {
|
||||
description: "Обратитесь к администратору workspace",
|
||||
duration: 5000,
|
||||
});
|
||||
}
|
||||
|
||||
export function showSuccessToast(message: string, description?: string): void {
|
||||
toast.success(message, {
|
||||
description,
|
||||
duration: 4000,
|
||||
});
|
||||
}
|
||||
|
||||
export function showErrorToast(message: string, description?: string): void {
|
||||
toast.error(message, {
|
||||
description,
|
||||
duration: 5000,
|
||||
});
|
||||
}
|
||||
|
||||
export function showLoadingToast(message: string): string | number {
|
||||
return toast.loading(message);
|
||||
}
|
||||
|
||||
export function dismissToast(id: string | number): void {
|
||||
toast.dismiss(id);
|
||||
}
|
||||
Reference in New Issue
Block a user