From ed9af2e321ced0fc88db531342b7bb1b7d73e2f7 Mon Sep 17 00:00:00 2001 From: Harsh Shrikant Bhat <90265455+harshsbhat@users.noreply.github.com> Date: Mon, 7 Oct 2024 20:47:19 +0530 Subject: [PATCH] fix: Add error toasts in every mutation to handle errors better on client side --- .../authorization/permissions/[permissionId]/client.tsx | 3 +++ .../permissions/[permissionId]/delete-permission.tsx | 3 +++ .../authorization/permissions/create-new-permission.tsx | 3 +++ .../(app)/authorization/roles/[roleId]/delete-role.tsx | 3 +++ .../(app)/authorization/roles/[roleId]/update-role.tsx | 3 +++ .../[namespaceId]/overrides/[overrideId]/settings.tsx | 3 +++ .../[namespaceId]/overrides/create-new-override.tsx | 3 +++ .../[namespaceId]/settings/delete-namespace.tsx | 3 +++ .../[namespaceId]/settings/update-namespace-name.tsx | 3 +++ .../app/(app)/ratelimits/create-namespace-button.tsx | 3 +++ .../app/(app)/settings/general/update-workspace-name.tsx | 3 +++ apps/dashboard/components/opt-in.tsx | 3 +++ .../lib/trpc/routers/ratelimit/deleteNamespace.ts | 8 +++++++- .../lib/trpc/routers/ratelimit/updateNamespaceName.ts | 6 ++++++ .../lib/trpc/routers/ratelimit/updateOverride.ts | 6 ++++++ apps/dashboard/lib/trpc/routers/rbac/deleteRole.ts | 7 +++++++ 16 files changed, 62 insertions(+), 1 deletion(-) diff --git a/apps/dashboard/app/(app)/authorization/permissions/[permissionId]/client.tsx b/apps/dashboard/app/(app)/authorization/permissions/[permissionId]/client.tsx index 725971d8ef..943a973d97 100644 --- a/apps/dashboard/app/(app)/authorization/permissions/[permissionId]/client.tsx +++ b/apps/dashboard/app/(app)/authorization/permissions/[permissionId]/client.tsx @@ -49,6 +49,9 @@ export const Client: React.FC = ({ permission }) => { toast.success("Permission updated"); router.refresh(); }, + onError(err) { + toast.error(err.message); + }, }); async function onSubmit(values: z.infer) { diff --git a/apps/dashboard/app/(app)/authorization/permissions/[permissionId]/delete-permission.tsx b/apps/dashboard/app/(app)/authorization/permissions/[permissionId]/delete-permission.tsx index 691c130acd..c76bde974d 100644 --- a/apps/dashboard/app/(app)/authorization/permissions/[permissionId]/delete-permission.tsx +++ b/apps/dashboard/app/(app)/authorization/permissions/[permissionId]/delete-permission.tsx @@ -59,6 +59,9 @@ export const DeletePermission: React.FC = ({ trigger, permission }) => { revalidate("/authorization/permissions"); router.push("/authorization/permissions"); }, + onError(err) { + toast.error(err.message); + }, }); async function onSubmit() { diff --git a/apps/dashboard/app/(app)/authorization/permissions/create-new-permission.tsx b/apps/dashboard/app/(app)/authorization/permissions/create-new-permission.tsx index 95865b7f51..54d1ee7793 100644 --- a/apps/dashboard/app/(app)/authorization/permissions/create-new-permission.tsx +++ b/apps/dashboard/app/(app)/authorization/permissions/create-new-permission.tsx @@ -67,6 +67,9 @@ export const CreateNewPermission: React.FC = ({ trigger }) => { }); setOpen(false); }, + onError(err) { + toast.error(err.message); + }, }); async function onSubmit(values: z.infer) { diff --git a/apps/dashboard/app/(app)/authorization/roles/[roleId]/delete-role.tsx b/apps/dashboard/app/(app)/authorization/roles/[roleId]/delete-role.tsx index a82b265810..880953e73a 100644 --- a/apps/dashboard/app/(app)/authorization/roles/[roleId]/delete-role.tsx +++ b/apps/dashboard/app/(app)/authorization/roles/[roleId]/delete-role.tsx @@ -60,6 +60,9 @@ export const DeleteRole: React.FC = ({ trigger, role }) => { toast.success("Role deleted successfully"); router.push("/authorization/roles"); }, + onError(err) { + toast.error(err.message); + }, }); async function onSubmit() { diff --git a/apps/dashboard/app/(app)/authorization/roles/[roleId]/update-role.tsx b/apps/dashboard/app/(app)/authorization/roles/[roleId]/update-role.tsx index 2ea3a2a6bf..21b6c80a54 100644 --- a/apps/dashboard/app/(app)/authorization/roles/[roleId]/update-role.tsx +++ b/apps/dashboard/app/(app)/authorization/roles/[roleId]/update-role.tsx @@ -62,6 +62,9 @@ export const UpdateRole: React.FC = ({ trigger, role }) => { router.refresh(); setOpen(false); }, + onError(err) { + toast.error(err.message); + }, }); async function onSubmit(values: z.infer) { diff --git a/apps/dashboard/app/(app)/ratelimits/[namespaceId]/overrides/[overrideId]/settings.tsx b/apps/dashboard/app/(app)/ratelimits/[namespaceId]/overrides/[overrideId]/settings.tsx index fad55095a1..4766a16653 100644 --- a/apps/dashboard/app/(app)/ratelimits/[namespaceId]/overrides/[overrideId]/settings.tsx +++ b/apps/dashboard/app/(app)/ratelimits/[namespaceId]/overrides/[overrideId]/settings.tsx @@ -79,6 +79,9 @@ export const UpdateCard: React.FC = ({ overrideId, defaultValues }) => { }); router.refresh(); }, + onError(err) { + toast.error(err.message); + }, }); const deleteOverride = trpc.ratelimit.override.delete.useMutation({ diff --git a/apps/dashboard/app/(app)/ratelimits/[namespaceId]/overrides/create-new-override.tsx b/apps/dashboard/app/(app)/ratelimits/[namespaceId]/overrides/create-new-override.tsx index 5d21514709..21c79900bb 100644 --- a/apps/dashboard/app/(app)/ratelimits/[namespaceId]/overrides/create-new-override.tsx +++ b/apps/dashboard/app/(app)/ratelimits/[namespaceId]/overrides/create-new-override.tsx @@ -63,6 +63,9 @@ export const CreateNewOverride: React.FC = ({ namespaceId }) => { }); router.refresh(); }, + onError(err) { + toast.error(err.message); + }, }); async function onSubmit(values: z.infer) { create.mutate({ diff --git a/apps/dashboard/app/(app)/ratelimits/[namespaceId]/settings/delete-namespace.tsx b/apps/dashboard/app/(app)/ratelimits/[namespaceId]/settings/delete-namespace.tsx index b38cc79501..2fd3ab462e 100644 --- a/apps/dashboard/app/(app)/ratelimits/[namespaceId]/settings/delete-namespace.tsx +++ b/apps/dashboard/app/(app)/ratelimits/[namespaceId]/settings/delete-namespace.tsx @@ -65,6 +65,9 @@ export const DeleteNamespace: React.FC = ({ namespace }) => { router.push("/ratelimits"); }, + onError(err) { + toast.error(err.message); + }, }); const isValid = form.watch("intent") === intent && form.watch("name") === namespace.name; diff --git a/apps/dashboard/app/(app)/ratelimits/[namespaceId]/settings/update-namespace-name.tsx b/apps/dashboard/app/(app)/ratelimits/[namespaceId]/settings/update-namespace-name.tsx index abbdddc3b1..dd63adc1a0 100644 --- a/apps/dashboard/app/(app)/ratelimits/[namespaceId]/settings/update-namespace-name.tsx +++ b/apps/dashboard/app/(app)/ratelimits/[namespaceId]/settings/update-namespace-name.tsx @@ -47,6 +47,9 @@ export const UpdateNamespaceName: React.FC = ({ namespace }) => { toast.success("Your namespace name has been renamed!"); router.refresh(); }, + onError(err) { + toast.error(err.message); + }, }); async function onSubmit(values: z.infer) { if (values.name === namespace.name || !values.name) { diff --git a/apps/dashboard/app/(app)/ratelimits/create-namespace-button.tsx b/apps/dashboard/app/(app)/ratelimits/create-namespace-button.tsx index 32b8367c51..3764a52a30 100644 --- a/apps/dashboard/app/(app)/ratelimits/create-namespace-button.tsx +++ b/apps/dashboard/app/(app)/ratelimits/create-namespace-button.tsx @@ -38,6 +38,9 @@ export const CreateNamespaceButton = ({ router.refresh(); router.push(`/ratelimits/${res.id}`); }, + onError(err) { + toast.error(err.message); + }, }); async function onSubmit(values: z.infer) { create.mutate(values); diff --git a/apps/dashboard/app/(app)/settings/general/update-workspace-name.tsx b/apps/dashboard/app/(app)/settings/general/update-workspace-name.tsx index a2a2b82f54..deb77f19ac 100644 --- a/apps/dashboard/app/(app)/settings/general/update-workspace-name.tsx +++ b/apps/dashboard/app/(app)/settings/general/update-workspace-name.tsx @@ -45,6 +45,9 @@ export const UpdateWorkspaceName: React.FC = ({ workspace }) => { user?.reload(); router.refresh(); }, + onError(err) { + toast.error(err.message); + }, }); async function onSubmit(values: z.infer) { diff --git a/apps/dashboard/components/opt-in.tsx b/apps/dashboard/components/opt-in.tsx index c2ffa67afe..baf088aab9 100644 --- a/apps/dashboard/components/opt-in.tsx +++ b/apps/dashboard/components/opt-in.tsx @@ -35,6 +35,9 @@ export const OptIn: React.FC = ({ title, description, feature }) => { toast.success("Successfully opted in"); router.refresh(); }, + onError(err) { + toast.error(err.message); + }, }); return ( diff --git a/apps/dashboard/lib/trpc/routers/ratelimit/deleteNamespace.ts b/apps/dashboard/lib/trpc/routers/ratelimit/deleteNamespace.ts index dcdbed62bb..2a0d8e15d9 100644 --- a/apps/dashboard/lib/trpc/routers/ratelimit/deleteNamespace.ts +++ b/apps/dashboard/lib/trpc/routers/ratelimit/deleteNamespace.ts @@ -109,7 +109,13 @@ export const deleteNamespace = rateLimitedProcedure(ratelimit.delete) userAgent: ctx.audit.userAgent, }, })), - ); + ).catch((_err) => { + throw new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: + "We are unable to delete the namespaces. Please contact support using support@unkey.dev", + }); + }); } }); }); diff --git a/apps/dashboard/lib/trpc/routers/ratelimit/updateNamespaceName.ts b/apps/dashboard/lib/trpc/routers/ratelimit/updateNamespaceName.ts index 8a147a9f95..c0ebf77418 100644 --- a/apps/dashboard/lib/trpc/routers/ratelimit/updateNamespaceName.ts +++ b/apps/dashboard/lib/trpc/routers/ratelimit/updateNamespaceName.ts @@ -81,6 +81,12 @@ export const updateNamespaceName = rateLimitedProcedure(ratelimit.update) location: ctx.audit.location, userAgent: ctx.audit.userAgent, }, + }).catch((_err) => { + throw new TRPCError({ + message: + "We are unable to update the namespace name. Please contact support using support@unkey.dev", + code: "INTERNAL_SERVER_ERROR", + }); }); }); }); diff --git a/apps/dashboard/lib/trpc/routers/ratelimit/updateOverride.ts b/apps/dashboard/lib/trpc/routers/ratelimit/updateOverride.ts index a2ce58f007..a404348a03 100644 --- a/apps/dashboard/lib/trpc/routers/ratelimit/updateOverride.ts +++ b/apps/dashboard/lib/trpc/routers/ratelimit/updateOverride.ts @@ -89,6 +89,12 @@ export const updateOverride = rateLimitedProcedure(ratelimit.update) location: ctx.audit.location, userAgent: ctx.audit.userAgent, }, + }).catch((_err) => { + throw new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: + "We are unable to update the override. Please contact support using support@unkey.dev", + }); }); }); }); diff --git a/apps/dashboard/lib/trpc/routers/rbac/deleteRole.ts b/apps/dashboard/lib/trpc/routers/rbac/deleteRole.ts index 8fff0110a4..2d93b984eb 100644 --- a/apps/dashboard/lib/trpc/routers/rbac/deleteRole.ts +++ b/apps/dashboard/lib/trpc/routers/rbac/deleteRole.ts @@ -68,6 +68,13 @@ export const deleteRole = rateLimitedProcedure(ratelimit.delete) location: ctx.audit.location, userAgent: ctx.audit.userAgent, }, + }).catch((err) => { + console.error(err); + throw new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: + "We are unable to delete the role. Please contact support using support@unkey.dev.", + }); }); }); });