diff --git a/src/pages/Projects.tsx b/src/pages/Projects.tsx index 3f96dec..e280c5a 100644 --- a/src/pages/Projects.tsx +++ b/src/pages/Projects.tsx @@ -9,7 +9,7 @@ import { Plus, Archive, Trash2, Pencil } from "lucide-react"; import FilterBar from "../components/FilterBar"; import { Button } from "../components/ui/button"; -import { Card, CardHeader, CardTitle, CardContent } from "../components/ui/card"; +import { Card } from "../components/ui/card"; import { Modal } from "../components/Modal"; import { toast } from "sonner"; import { Input } from "../components/ui/input"; @@ -21,8 +21,8 @@ import { canWorkspace, } from "../lib/permissions"; -export const Projects: React.FC = () => { - const { t } = useTranslation(); +export const Projects: React.FC = () => { + const { t, lang } = useTranslation(); const { activeWorkspace } = useWorkspace(); const workspaceRole = activeWorkspace?.my_role; const canCreateProject = canWorkspace(workspaceRole, PROJECTS_CREATE); @@ -100,7 +100,7 @@ export const Projects: React.FC = () => { setProjectToDelete(project); }; - const confirmDelete = async () => { + const confirmDelete = async () => { if (!deleteModal.project) return; try { const deletedId = deleteModal.project.id; @@ -118,7 +118,20 @@ export const Projects: React.FC = () => { } catch (error) { toast.error(t.projects?.deleteError || 'Failed to delete project'); } - }; + }; + + const formatDate = (dateStr: string | undefined) => { + if (!dateStr) return "-" + try { + const date = new Date(dateStr) + return new Intl.DateTimeFormat(lang === "fa" ? "fa-IR" : "en-US", { + dateStyle: "long", + timeZone: "Asia/Tehran", + }).format(date) + } catch { + return dateStr + } + } return ( @@ -161,74 +174,76 @@ export const Projects: React.FC = () => { searchPlaceholder={t.projects?.searchPlaceholder || 'Search projects...'} /> - {loading ? ( -
-
{t.projects?.loading || 'Loading...'}
-
- ) : ( -
-
- {projects.map((project) => ( - - -
-
- - {project.name} - -
-

- {project.client ? `${t.projects?.client || "Client"}: ${project.client.name}` : t.projects?.noClient || 'No client'} -

- - {project.description && ( -

- {project.description} -

- )} - -
- - {(canEditProject || canDeleteProject) && ( -
- {canEditProject && ( - - )} + {loading ? ( +
+
{t.projects?.loading || 'Loading...'}
+
+ ) : ( +
+ +
+ {projects.length === 0 ? ( +
+

{t.projects?.emptyState || 'No projects found'}

+
+ ) : ( +
    + {projects.map((project) => ( +
  • +
    +

    {project.name}

    +

    + {project.client ? `${t.projects?.client || "Client"}: ${project.client.name}` : t.projects?.noClient || "No client"} +

    + {project.description && ( +

    + {project.description} +

    + )} +
    + {(t.projects as any)?.addedOn || "Added on"}: {formatDate(project.created_at)} +
    +
    - {canDeleteProject && ( - + {(canEditProject || canDeleteProject) && ( +
    + {canEditProject && ( + + )} + + {canDeleteProject && ( + + )} +
    )} -
- )} - -
- ))} - - {projects.length === 0 && ( -
-

{t.projects?.emptyState || 'No projects found'}

-
- )} -
- - + ))} + + )} +
+
+ +