From b55494e9fb5d349573066971515508917281641a Mon Sep 17 00:00:00 2001 From: anshumancanrock Date: Mon, 14 Jul 2025 00:25:23 +0530 Subject: [PATCH 01/10] Added instant ui refresh in label adding function and added default color select --- apps/mail/components/labels/label-dialog.tsx | 16 +++++++--------- apps/mail/components/ui/nav-main.tsx | 15 ++++++++++----- apps/server/src/trpc/routes/label.ts | 10 +++------- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/apps/mail/components/labels/label-dialog.tsx b/apps/mail/components/labels/label-dialog.tsx index 1084ea4ed3..a9e380e1ee 100644 --- a/apps/mail/components/labels/label-dialog.tsx +++ b/apps/mail/components/labels/label-dialog.tsx @@ -50,26 +50,24 @@ export function LabelDialog({ defaultValues: { name: '', color: { - backgroundColor: '', - textColor: '', + backgroundColor: '#202020', + textColor: '#FFFFFF', }, }, }); - const formColor = form.watch('color'); - // Reset form when editingLabel changes or dialog opens useEffect(() => { if (dialogOpen) { if (editingLabel) { form.reset({ name: editingLabel.name, - color: editingLabel.color || { backgroundColor: '#E2E2E2', textColor: '#000000' }, + color: editingLabel.color || { backgroundColor: '#202020', textColor: '#FFFFFF' }, }); } else { form.reset({ name: '', - color: { backgroundColor: '#E2E2E2', textColor: '#000000' }, + color: { backgroundColor: '#202020', textColor: '#FFFFFF' }, }); } } @@ -85,7 +83,7 @@ export function LabelDialog({ setDialogOpen(false); form.reset({ name: '', - color: { backgroundColor: '#E2E2E2', textColor: '#000000' }, + color: { backgroundColor: '#202020', textColor: '#FFFFFF' }, }); }; @@ -132,8 +130,8 @@ export function LabelDialog({ key={color.backgroundColor} type="button" className={`h-10 w-10 rounded-[4px] border-[0.5px] border-white/10 transition-all ${ - formColor?.backgroundColor.toString() === color.backgroundColor && - formColor.textColor.toString() === color.textColor + form.watch('color')?.backgroundColor === color.backgroundColor && + form.watch('color')?.textColor === color.textColor ? 'scale-110 ring-2 ring-blue-500 ring-offset-1' : 'hover:scale-105' }`} diff --git a/apps/mail/components/ui/nav-main.tsx b/apps/mail/components/ui/nav-main.tsx index 91ee06fc9f..e6229cfbe3 100644 --- a/apps/mail/components/ui/nav-main.tsx +++ b/apps/mail/components/ui/nav-main.tsx @@ -173,11 +173,16 @@ export function NavMain({ items }: NavMainProps) { ); const onSubmit = async (data: LabelType) => { - toast.promise(createLabel(data), { - loading: 'Creating label...', - success: 'Label created successfully', - error: 'Failed to create label', - }); + try { + await createLabel(data); + toast.success('Label created successfully'); + + setTimeout(() => { + refetch(); + }, 200); + } catch (error) { + toast.error('Failed to create label'); + } }; return ( diff --git a/apps/server/src/trpc/routes/label.ts b/apps/server/src/trpc/routes/label.ts index 4bbe038176..0dab8d37e3 100644 --- a/apps/server/src/trpc/routes/label.ts +++ b/apps/server/src/trpc/routes/label.ts @@ -47,19 +47,15 @@ export const labelsRouter = router({ textColor: z.string(), }) .default({ - backgroundColor: '', - textColor: '', + backgroundColor: '#202020', + textColor: '#FFFFFF', }), }), ) .mutation(async ({ ctx, input }) => { const { activeConnection } = ctx; const agent = await getZeroAgent(activeConnection.id); - const label = { - ...input, - type: 'user', - }; - return await agent.createLabel(label); + return await agent.createLabel(input); }), update: activeDriverProcedure .use( From b109190fed64140445b12ea09baca61c2c82cae2 Mon Sep 17 00:00:00 2001 From: anshumancanrock Date: Mon, 14 Jul 2025 00:48:54 +0530 Subject: [PATCH 02/10] minor fixes --- apps/mail/components/labels/label-dialog.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/mail/components/labels/label-dialog.tsx b/apps/mail/components/labels/label-dialog.tsx index a9e380e1ee..3072741fec 100644 --- a/apps/mail/components/labels/label-dialog.tsx +++ b/apps/mail/components/labels/label-dialog.tsx @@ -55,6 +55,7 @@ export function LabelDialog({ }, }, }); + const formColor = form.watch('color'); // Reset form when editingLabel changes or dialog opens useEffect(() => { @@ -130,8 +131,8 @@ export function LabelDialog({ key={color.backgroundColor} type="button" className={`h-10 w-10 rounded-[4px] border-[0.5px] border-white/10 transition-all ${ - form.watch('color')?.backgroundColor === color.backgroundColor && - form.watch('color')?.textColor === color.textColor + formColor?.backgroundColor.toString() === color.backgroundColor && + formColor.textColor.toString() === color.textColor ? 'scale-110 ring-2 ring-blue-500 ring-offset-1' : 'hover:scale-105' }`} From 76838d4e97b8699519e023ab414f69e037c3ea86 Mon Sep 17 00:00:00 2001 From: anshumancanrock Date: Mon, 14 Jul 2025 00:53:45 +0530 Subject: [PATCH 03/10] improvements --- apps/mail/components/ui/nav-main.tsx | 13 +++---------- apps/server/src/trpc/routes/label.ts | 13 ++++--------- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/apps/mail/components/ui/nav-main.tsx b/apps/mail/components/ui/nav-main.tsx index e6229cfbe3..cea34cf437 100644 --- a/apps/mail/components/ui/nav-main.tsx +++ b/apps/mail/components/ui/nav-main.tsx @@ -173,16 +173,9 @@ export function NavMain({ items }: NavMainProps) { ); const onSubmit = async (data: LabelType) => { - try { - await createLabel(data); - toast.success('Label created successfully'); - - setTimeout(() => { - refetch(); - }, 200); - } catch (error) { - toast.error('Failed to create label'); - } + await createLabel(data); + toast.success('Label created successfully'); + setTimeout(() => refetch(), 200); }; return ( diff --git a/apps/server/src/trpc/routes/label.ts b/apps/server/src/trpc/routes/label.ts index 0dab8d37e3..fc7a413ca8 100644 --- a/apps/server/src/trpc/routes/label.ts +++ b/apps/server/src/trpc/routes/label.ts @@ -41,15 +41,10 @@ export const labelsRouter = router({ .input( z.object({ name: z.string(), - color: z - .object({ - backgroundColor: z.string(), - textColor: z.string(), - }) - .default({ - backgroundColor: '#202020', - textColor: '#FFFFFF', - }), + color: z.object({ + backgroundColor: z.string().default('#202020'), + textColor: z.string().default('#FFFFFF'), + }), }), ) .mutation(async ({ ctx, input }) => { From 0420814818a4f316df477f448671ccca9c338ec2 Mon Sep 17 00:00:00 2001 From: anshumancanrock Date: Mon, 14 Jul 2025 01:03:49 +0530 Subject: [PATCH 04/10] color fix --- apps/mail/components/labels/label-dialog.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/mail/components/labels/label-dialog.tsx b/apps/mail/components/labels/label-dialog.tsx index 3072741fec..e52e07a841 100644 --- a/apps/mail/components/labels/label-dialog.tsx +++ b/apps/mail/components/labels/label-dialog.tsx @@ -63,12 +63,12 @@ export function LabelDialog({ if (editingLabel) { form.reset({ name: editingLabel.name, - color: editingLabel.color || { backgroundColor: '#202020', textColor: '#FFFFFF' }, + color: editingLabel.color || { backgroundColor: '#E2E2E2', textColor: '#000000' }, }); } else { form.reset({ name: '', - color: { backgroundColor: '#202020', textColor: '#FFFFFF' }, + color: { backgroundColor: '#E2E2E2', textColor: '#000000' }, }); } } @@ -84,7 +84,7 @@ export function LabelDialog({ setDialogOpen(false); form.reset({ name: '', - color: { backgroundColor: '#202020', textColor: '#FFFFFF' }, + color: { backgroundColor: '#E2E2E2', textColor: '#000000' }, }); }; From 3accec333df91ea1501edfce8ab4314393fbcf96 Mon Sep 17 00:00:00 2001 From: anshumancanrock Date: Mon, 14 Jul 2025 01:09:21 +0530 Subject: [PATCH 05/10] color fix --- apps/mail/components/labels/label-dialog.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/mail/components/labels/label-dialog.tsx b/apps/mail/components/labels/label-dialog.tsx index e52e07a841..a19f1fa02f 100644 --- a/apps/mail/components/labels/label-dialog.tsx +++ b/apps/mail/components/labels/label-dialog.tsx @@ -68,7 +68,7 @@ export function LabelDialog({ } else { form.reset({ name: '', - color: { backgroundColor: '#E2E2E2', textColor: '#000000' }, + color: { backgroundColor: '#202020', textColor: '#FFFFFF' }, }); } } @@ -84,7 +84,7 @@ export function LabelDialog({ setDialogOpen(false); form.reset({ name: '', - color: { backgroundColor: '#E2E2E2', textColor: '#000000' }, + color: { backgroundColor: '#202020', textColor: '#FFFFFF' }, }); }; From b9dc8b83e06472c019f11bbcd7818db84ad79657 Mon Sep 17 00:00:00 2001 From: anshumancanrock Date: Mon, 14 Jul 2025 01:16:37 +0530 Subject: [PATCH 06/10] minor fixes --- apps/server/src/trpc/routes/label.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/server/src/trpc/routes/label.ts b/apps/server/src/trpc/routes/label.ts index fc7a413ca8..31fb1aa55c 100644 --- a/apps/server/src/trpc/routes/label.ts +++ b/apps/server/src/trpc/routes/label.ts @@ -50,7 +50,11 @@ export const labelsRouter = router({ .mutation(async ({ ctx, input }) => { const { activeConnection } = ctx; const agent = await getZeroAgent(activeConnection.id); - return await agent.createLabel(input); + const label = { + ...input, + type: 'user', + }; + return await agent.createLabel(label); }), update: activeDriverProcedure .use( From 5325ae4334341a7ae763cf59183858637e44815f Mon Sep 17 00:00:00 2001 From: anshumancanrock Date: Mon, 14 Jul 2025 02:34:58 +0530 Subject: [PATCH 07/10] minor fix --- apps/mail/components/ui/nav-main.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/mail/components/ui/nav-main.tsx b/apps/mail/components/ui/nav-main.tsx index cea34cf437..1f46817d67 100644 --- a/apps/mail/components/ui/nav-main.tsx +++ b/apps/mail/components/ui/nav-main.tsx @@ -173,9 +173,14 @@ export function NavMain({ items }: NavMainProps) { ); const onSubmit = async (data: LabelType) => { - await createLabel(data); - toast.success('Label created successfully'); - setTimeout(() => refetch(), 200); + try { + await createLabel(data); + toast.success('Label created successfully'); + setTimeout(() => refetch(), 200); + } catch (error) { + toast.error('Failed to create label. Please try again.'); + console.error('Label creation failed:', error); + } }; return ( From e24130ffe237ba1b1a2f355202f41934f73a6875 Mon Sep 17 00:00:00 2001 From: anshumancanrock Date: Mon, 14 Jul 2025 02:54:34 +0530 Subject: [PATCH 08/10] fixes --- apps/mail/components/labels/label-dialog.tsx | 14 ++++++++------ apps/server/src/trpc/routes/label.ts | 9 +++++++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/apps/mail/components/labels/label-dialog.tsx b/apps/mail/components/labels/label-dialog.tsx index a19f1fa02f..85cade4e81 100644 --- a/apps/mail/components/labels/label-dialog.tsx +++ b/apps/mail/components/labels/label-dialog.tsx @@ -16,6 +16,11 @@ import { import { CurvedArrow } from '@/components/icons/icons'; import { LABEL_COLORS } from '@/lib/label-colors'; import type { Label as LabelType } from '@/types'; + +const DEFAULT_LABEL_COLORS = { + backgroundColor: '#202020', + textColor: '#FFFFFF', +} as const; import { Button } from '@/components/ui/button'; import { Label } from '@/components/ui/label'; import { Input } from '@/components/ui/input'; @@ -49,10 +54,7 @@ export function LabelDialog({ const form = useForm({ defaultValues: { name: '', - color: { - backgroundColor: '#202020', - textColor: '#FFFFFF', - }, + color: DEFAULT_LABEL_COLORS, }, }); const formColor = form.watch('color'); @@ -68,7 +70,7 @@ export function LabelDialog({ } else { form.reset({ name: '', - color: { backgroundColor: '#202020', textColor: '#FFFFFF' }, + color: DEFAULT_LABEL_COLORS, }); } } @@ -84,7 +86,7 @@ export function LabelDialog({ setDialogOpen(false); form.reset({ name: '', - color: { backgroundColor: '#202020', textColor: '#FFFFFF' }, + color: DEFAULT_LABEL_COLORS, }); }; diff --git a/apps/server/src/trpc/routes/label.ts b/apps/server/src/trpc/routes/label.ts index 31fb1aa55c..8cee2589e5 100644 --- a/apps/server/src/trpc/routes/label.ts +++ b/apps/server/src/trpc/routes/label.ts @@ -3,6 +3,11 @@ import { getZeroAgent } from '../../lib/server-utils'; import { Ratelimit } from '@upstash/ratelimit'; import { z } from 'zod'; +const DEFAULT_LABEL_COLORS = { + backgroundColor: '#202020', + textColor: '#FFFFFF', +} as const; + export const labelsRouter = router({ list: activeDriverProcedure .use( @@ -42,8 +47,8 @@ export const labelsRouter = router({ z.object({ name: z.string(), color: z.object({ - backgroundColor: z.string().default('#202020'), - textColor: z.string().default('#FFFFFF'), + backgroundColor: z.string().regex(/^#[0-9A-F]{6}$/i, 'Must be a valid hex color').default(DEFAULT_LABEL_COLORS.backgroundColor), + textColor: z.string().regex(/^#[0-9A-F]{6}$/i, 'Must be a valid hex color').default(DEFAULT_LABEL_COLORS.textColor), }), }), ) From 02256416326b77d0563c01303dcaa2e743794460 Mon Sep 17 00:00:00 2001 From: anshumancanrock Date: Mon, 14 Jul 2025 19:15:33 +0530 Subject: [PATCH 09/10] fix --- apps/server/src/trpc/routes/label.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/trpc/routes/label.ts b/apps/server/src/trpc/routes/label.ts index 8cee2589e5..2c49007293 100644 --- a/apps/server/src/trpc/routes/label.ts +++ b/apps/server/src/trpc/routes/label.ts @@ -49,7 +49,7 @@ export const labelsRouter = router({ color: z.object({ backgroundColor: z.string().regex(/^#[0-9A-F]{6}$/i, 'Must be a valid hex color').default(DEFAULT_LABEL_COLORS.backgroundColor), textColor: z.string().regex(/^#[0-9A-F]{6}$/i, 'Must be a valid hex color').default(DEFAULT_LABEL_COLORS.textColor), - }), + }).default(DEFAULT_LABEL_COLORS), }), ) .mutation(async ({ ctx, input }) => { From 2b0981c6e6221584a42585455f5da668caa0e49c Mon Sep 17 00:00:00 2001 From: anshumancanrock Date: Mon, 14 Jul 2025 22:25:47 +0530 Subject: [PATCH 10/10] removed unnecessary setTimeout --- apps/mail/components/ui/nav-main.tsx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/mail/components/ui/nav-main.tsx b/apps/mail/components/ui/nav-main.tsx index 1f46817d67..9c20d3fc21 100644 --- a/apps/mail/components/ui/nav-main.tsx +++ b/apps/mail/components/ui/nav-main.tsx @@ -173,14 +173,16 @@ export function NavMain({ items }: NavMainProps) { ); const onSubmit = async (data: LabelType) => { - try { - await createLabel(data); - toast.success('Label created successfully'); - setTimeout(() => refetch(), 200); - } catch (error) { - toast.error('Failed to create label. Please try again.'); - console.error('Label creation failed:', error); - } + toast.promise( + createLabel(data).then(() => { + refetch(); + }), + { + loading: 'Creating label...', + success: 'Label created successfully', + error: 'Failed to create label', + } + ); }; return (