diff --git a/src/components/CreateClientModal.tsx b/src/components/CreateClientModal.tsx index 9482da8..327d0ac 100644 --- a/src/components/CreateClientModal.tsx +++ b/src/components/CreateClientModal.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from "react"; +import { useEffect, useState, type FormEvent } from "react"; import { toast } from "sonner"; import { createClient } from "../api/clients"; import { useTranslation } from "../hooks/useTranslation"; @@ -48,8 +48,9 @@ export default function CreateClientModal({ isOpen, onClose, onSuccess, workspac setThumbnailFile(file); }; - const handleSubmit = async () => { - if (!name.trim()) return; + const handleSubmit = async (event?: FormEvent) => { + event?.preventDefault(); + if (!name.trim()) return; setIsLoading(true); try { await createClient(workspaceId, { name, notes, thumbnail: thumbnailFile }); @@ -72,15 +73,15 @@ export default function CreateClientModal({ isOpen, onClose, onSuccess, workspac - + ); - return ( - -
+ return ( + +
-
-
- ); + + + ); } diff --git a/src/components/DeleteClientModal.tsx b/src/components/DeleteClientModal.tsx index 594fdff..20e4675 100644 --- a/src/components/DeleteClientModal.tsx +++ b/src/components/DeleteClientModal.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, type FormEvent } from "react"; import { toast } from "sonner"; import { type Client } from "../types/client"; import { deleteClient } from "../api/clients"; @@ -17,8 +17,9 @@ export default function DeleteClientModal({ isOpen, onClose, onSuccess, client } const { t } = useTranslation(); const [isLoading, setIsLoading] = useState(false); - const handleDelete = async () => { - if (!client) return; + const handleDelete = async (event?: FormEvent) => { + event?.preventDefault(); + if (!client) return; setIsLoading(true); try { await deleteClient(client.id); @@ -38,11 +39,12 @@ export default function DeleteClientModal({ isOpen, onClose, onSuccess, client } - @@ -55,10 +57,12 @@ export default function DeleteClientModal({ isOpen, onClose, onSuccess, client } title={t.clients.deleteConfirmTitle} footer={footer} maxWidth="max-w-sm" - > -

- {client ? t.clients.deleteConfirmMessage(client.name) : ""} -

- - ); -} + > +
+

+ {client ? t.clients.deleteConfirmMessage(client.name) : ""} +

+
+ + ); +} diff --git a/src/components/EditClientModal.tsx b/src/components/EditClientModal.tsx index 19104ea..e5347ff 100644 --- a/src/components/EditClientModal.tsx +++ b/src/components/EditClientModal.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from "react"; +import { useState, useEffect, type FormEvent } from "react"; import { toast } from "sonner"; import { type Client } from "../types/client"; import { updateClient } from "../api/clients"; @@ -59,8 +59,9 @@ export default function EditClientModal({ isOpen, onClose, onSuccess, client }: setClearThumbnail(false); }; - const handleSubmit = async () => { - if (!client || !name.trim()) return; + const handleSubmit = async (event?: FormEvent) => { + event?.preventDefault(); + if (!client || !name.trim()) return; setIsLoading(true); try { await updateClient(client.id, { name, notes, thumbnail: thumbnailFile, clear_thumbnail: clearThumbnail }); @@ -80,15 +81,15 @@ export default function EditClientModal({ isOpen, onClose, onSuccess, client }: - + ); - return ( - -
+ return ( + +
-
-
- ); + + + ); } diff --git a/src/components/projects/ProjectCreateModal.tsx b/src/components/projects/ProjectCreateModal.tsx index 61c6259..df60922 100644 --- a/src/components/projects/ProjectCreateModal.tsx +++ b/src/components/projects/ProjectCreateModal.tsx @@ -100,7 +100,7 @@ export const ProjectCreateModal: React.FC = ({ isOpen, - @@ -110,7 +110,7 @@ export const ProjectCreateModal: React.FC = ({ isOpen, return ( -
+ {/* ردیف اول: عنوان و انتخاب رنگ */}
diff --git a/src/components/projects/ProjectEditModal.tsx b/src/components/projects/ProjectEditModal.tsx index 42b5867..cc0a51d 100644 --- a/src/components/projects/ProjectEditModal.tsx +++ b/src/components/projects/ProjectEditModal.tsx @@ -154,7 +154,7 @@ export const ProjectEditModal: React.FC = ({ isOpen, onCl -
@@ -165,7 +165,7 @@ export const ProjectEditModal: React.FC = ({ isOpen, onCl return ( - +
diff --git a/src/pages/Workspaces.tsx b/src/pages/Workspaces.tsx index 714d82d..7dd3580 100644 --- a/src/pages/Workspaces.tsx +++ b/src/pages/Workspaces.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useEffect, useState, type FormEvent } from 'react'; import { useNavigate, useSearchParams } from 'react-router-dom'; import { Plus, Trash2, Pencil, Eye, LayoutDashboard } from 'lucide-react'; import { toast } from 'sonner'; @@ -94,8 +94,9 @@ export default function Workspaces() { } }; - const confirmDelete = async () => { - if (!deleteModal.workspace) return; + const confirmDelete = async (event?: FormEvent) => { + event?.preventDefault(); + if (!deleteModal.workspace) return; try { const deletedId = deleteModal.workspace.id; await deleteWorkspace(deletedId); @@ -275,15 +276,16 @@ export default function Workspaces() { } > -
+

{t.workspace?.deleteWarning || 'To confirm deletion, please type the workspace name:'} {deleteModal.workspace.name}

@@ -294,7 +296,7 @@ export default function Workspaces() { onChange={(e) => setDeleteInput(e.target.value)} placeholder={deleteModal.workspace.name} /> -
+ )}