diff --git a/src/app/[locale]/projects/components/Projects.tsx b/src/app/[locale]/projects/components/Projects.tsx index e547fa33..f6c05c15 100644 --- a/src/app/[locale]/projects/components/Projects.tsx +++ b/src/app/[locale]/projects/components/Projects.tsx @@ -22,8 +22,10 @@ import { useEffect, useState } from 'react' import { Dropdown, OverlayTrigger, Spinner, Tooltip } from 'react-bootstrap' import { FaClipboard, FaPencilAlt, FaTrashAlt } from 'react-icons/fa' import { MdOutlineTask } from 'react-icons/md' +import CreateClearingRequestModal from '../detail/[id]/components/CreateClearingRequestModal' import DeleteProjectDialog from './DeleteProjectDialog' import ImportSBOMModal from './ImportSBOMModal' +import MessageService from '@/services/message.service' type EmbeddedProjects = Embedded @@ -95,6 +97,9 @@ function Project(): JSX.Element { const [deleteDialogOpen, setDeleteDialogOpen] = useState(false) const [importSBOMMetadata, setImportSBOMMetadata] = useState({ show: false, importType: 'SPDX' }) + const [showClearingRequestModal, setShowClearingRequestModal] = useState(false) + const [clearingRequestProjectId, setClearingRequestProjectId] = useState('') + const handleDeleteProject = (projectId: string) => { setDeleteProjectId(projectId) setDeleteDialogOpen(true) @@ -104,6 +109,11 @@ function Project(): JSX.Element { router.push('/projects/add') } + const handleEditProject = (projectId: string) => { + router.push(`/projects/edit/${projectId}`) + MessageService.success(t('You are editing the original document')) + } + const columns = [ { id: 'projects.name', @@ -185,13 +195,22 @@ function Project(): JSX.Element { <> {t('Edit')}}> - + handleEditProject(id)} + > - + - {t('Create Clearing Request')}}> - + Create Clearing Request}> + { + setClearingRequestProjectId(id) + setShowClearingRequestModal(true) + }} + > @@ -390,6 +409,11 @@ function Project(): JSX.Element { + ) } diff --git a/src/app/[locale]/projects/detail/[id]/components/Summary.tsx b/src/app/[locale]/projects/detail/[id]/components/Summary.tsx index 109e9752..26c1af82 100644 --- a/src/app/[locale]/projects/detail/[id]/components/Summary.tsx +++ b/src/app/[locale]/projects/detail/[id]/components/Summary.tsx @@ -204,7 +204,11 @@ export default function Summary({ summaryData }: { summaryData: SummaryDataType {t('Owner Country')}: - {summaryData.ownerCountry !== undefined ? new Intl.DisplayNames(['en'], { type: 'region' }).of(summaryData.ownerCountry) : ''} + + {(summaryData.ownerCountry != null) && /^[A-Z]{2}$/.test(summaryData.ownerCountry) + ? new Intl.DisplayNames(['en'], { type: 'region' }).of(summaryData.ownerCountry) + : ''} + {t('Lead Architect')}: diff --git a/src/app/[locale]/projects/edit/[id]/components/EditProject.tsx b/src/app/[locale]/projects/edit/[id]/components/EditProject.tsx index fdd73d9b..119a2c66 100644 --- a/src/app/[locale]/projects/edit/[id]/components/EditProject.tsx +++ b/src/app/[locale]/projects/edit/[id]/components/EditProject.tsx @@ -22,6 +22,7 @@ import { notFound, useRouter, useSearchParams } from 'next/navigation' import { useEffect, useState } from 'react' import { Button, Col, ListGroup, Row, Tab } from 'react-bootstrap' import Obligations from '../../../components/Obligations/Obligations' +import DeleteProjectDialog from '../../../components/DeleteProjectDialog' interface LinkedReleaseProps { release?: string @@ -52,6 +53,12 @@ function EditProject({ projectId }: { projectId: string }): JSX.Element { const DEFAULT_ACTIVE_TAB = 'summary' const [activeKey, setActiveKey] = useState(DEFAULT_ACTIVE_TAB) + const [deleteDialogOpen, setDeleteDialogOpen] = useState(false) + + const handleDeleteProject = () => { + setDeleteDialogOpen(true) + } + useEffect(() => { let tab = searchParams.get('tab') if (tab === null || TABS.indexOf(tab) === -1) { @@ -227,8 +234,8 @@ function EditProject({ projectId }: { projectId: string }): JSX.Element { } if (project["_embedded"]?.["projectOwner"] !== undefined) { - setProjectOwner({ [project["_embedded"]["projectOwner"].email]: - project["_embedded"]["projectOwner"].fullName ?? '' }) + setProjectOwner({ 'Project owner': + project["projectOwner"] ?? '' }) } if (project["_embedded"]?.["projectManager"] !== undefined) { @@ -296,7 +303,7 @@ function EditProject({ projectId }: { projectId: string }): JSX.Element { securityResponsibles: project.securityResponsibles ?? [], contributors: (project._embedded?.['sw360:contributors'] ?? []).map(user => user.email), moderators: (project._embedded?.['sw360:moderators'] ?? []).map(user => user.email), - projectOwner: project._embedded?.projectOwner?.email ?? '', + projectOwner: project.projectOwner ?? '', leadArchitect: project._embedded?.leadArchitect?.email ?? '', linkedReleases: projectPayload.linkedReleases ?? {}, } @@ -346,6 +353,13 @@ function EditProject({ projectId }: { projectId: string }): JSX.Element { return (
+ {projectId && ( + + )}
{t('Delete Project')}