From 1628677222e77539b5ac71731aed28aedf54f3cd Mon Sep 17 00:00:00 2001 From: david Date: Fri, 27 Feb 2026 10:53:36 +0300 Subject: [PATCH] lint frontend, fix drag and drop bug --- .../src/components/kanban/CreateCardModal.tsx | 120 ++++++++++++++++++ .../src/components/kanban/CreateListModal.tsx | 106 ++++++++++++++++ frontend/src/components/kanban/KanbanCard.tsx | 2 +- .../src/components/kanban/KanbanColumn.tsx | 38 +++++- frontend/src/hooks/useBoard.ts | 8 +- frontend/src/hooks/useBoards.ts | 8 +- frontend/src/hooks/useCardMutations.ts | 12 +- frontend/src/hooks/useListMutations.ts | 4 +- frontend/src/pages/BoardCreate.tsx | 20 ++- frontend/src/pages/BoardDetail.tsx | 85 +++++++++---- frontend/src/pages/BoardEdit.tsx | 9 ++ frontend/src/pages/Login.tsx | 12 +- frontend/src/pages/Register.tsx | 10 +- 13 files changed, 382 insertions(+), 52 deletions(-) create mode 100644 frontend/src/components/kanban/CreateCardModal.tsx create mode 100644 frontend/src/components/kanban/CreateListModal.tsx diff --git a/frontend/src/components/kanban/CreateCardModal.tsx b/frontend/src/components/kanban/CreateCardModal.tsx new file mode 100644 index 0000000..09eba9c --- /dev/null +++ b/frontend/src/components/kanban/CreateCardModal.tsx @@ -0,0 +1,120 @@ +import { useForm } from 'react-hook-form'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { z } from 'zod'; +import { ModalContentProps } from '../../types'; +import { useToast } from '../../context/toasts/useToast'; + +const cardSchema = z.object({ + name: z + .string() + .min(1, 'Card name is required') + .max(100, 'Card name must be less than 100 characters'), + description: z.string().max(2000, 'Description must be less than 2000 characters').optional(), +}); + +type CardFormData = z.infer; + +interface CreateCardModalProps extends ModalContentProps { + onCreate: (data: { name: string; description?: string }) => Promise; +} + +export function CreateCardModal({ onClose, onCreate }: CreateCardModalProps) { + const { addNotification } = useToast(); + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ + resolver: zodResolver(cardSchema), + }); + + const onSubmit = async (data: CardFormData) => { + try { + await onCreate(data); + onClose(); + } catch (err) { + const errorMessage = err instanceof Error ? err.message : 'Failed to create card'; + addNotification({ + type: 'error', + title: 'Error Creating Card', + message: errorMessage, + duration: 5000, + }); + } + }; + + return ( +
+
+ + +
+ +
+
+ + + {errors.name &&

{errors.name.message}

} +
+ +
+ +