'use client'; import { useState, useEffect, useContext } from 'react'; import { Button, Table, TableHeader, TableColumn, TableBody, TableRow, TableCell } from '@heroui/react'; import { Pencil, Trash } from 'lucide-react'; import ProjectTagsManager from './ProjectTagsManager'; import { SettingsMessages } from '@/types/settings'; import { TokenContext } from '@/utils/TokenProvider'; import { deleteProject, fetchProject, updateProject } from '@/utils/projectsControl'; import { ProjectDialogMessages, ProjectType } from '@/types/project'; import DeleteConfirmDialog from '@/components/DeleteConfirmDialog'; import { useRouter } from '@/src/i18n/routing'; import ProjectDialog from '@/components/ProjectDialog'; import { UserType } from '@/types/user'; import { findUser } from '@/utils/usersControl'; import { logError } from '@/utils/errorHandler'; import UserAvatar from '@/components/UserAvatar'; type Props = { projectId: string; messages: SettingsMessages; projectDialogMessages: ProjectDialogMessages; locale: string; }; export default function SettingsPage({ projectId, messages, projectDialogMessages, locale }: Props) { const context = useContext(TokenContext); const router = useRouter(); const [project, setProject] = useState({ id: 0, name: '', detail: '', isPublic: false, userId: 0, createdAt: '', updatedAt: '', Folders: [], Runs: [], }); const [owner, setOwner] = useState({ id: 0, email: '', password: '', avatarPath: '', role: -1, username: '', locale: null, }); useEffect(() => { async function fetchDataEffect() { if (!context.isSignedIn()) { return; } try { const data = await fetchProject(context.token.access_token, Number(projectId)); setProject(data); if (data.userId) { const ownerData = await findUser(context.token.access_token, data.userId); setOwner(ownerData); } else { console.error('failed to get project owner id'); } } catch (error: unknown) { logError('Error fetching project data:', error); } } fetchDataEffect(); }, [context, projectId]); // project dialog const [isProjectDialogOpen, setIsProjectDialogOpen] = useState(false); const onSubmit = async (name: string, detail: string, isPublic: boolean) => { const updatedProject = await updateProject(context.token.access_token, project.id, name, detail, isPublic); setProject(updatedProject); setIsProjectDialogOpen(false); }; // delete confirm dialog const [isDeleteConfirmDialogOpen, setIsDeleteConfirmDialogOpen] = useState(false); const onConfirm = async () => { await deleteProject(context.token.access_token, Number(projectId)); setIsDeleteConfirmDialogOpen(false); router.push(`/projects/`, { locale: locale }); }; return (

{messages.projectManagement}

dummy dummy {messages.projectName} {project.name} {messages.projectDetail} {project.detail} {messages.projectOwner}

{owner.username}

{messages.publicity} {project.isPublic ? messages.public : messages.private}

{messages.tagManagement}

setIsProjectDialogOpen(false)} onSubmit={onSubmit} projectDialogMessages={projectDialogMessages} /> setIsDeleteConfirmDialogOpen(false)} onConfirm={onConfirm} closeText={messages.close} confirmText={messages.areYouSure} deleteText={messages.delete} />
); }