Reconmap/web-client

View on GitHub
src/components/projects/DetailsTab.jsx

Summary

Maintainability
C
1 day
Test Coverage
import { SimpleGrid } from "@chakra-ui/react";
import ClientLink from "components/clients/Link";
import VulnerabilitiesByCategoryStatsWidget from "components/layout/dashboard/widgets/VulnerabilitiesByCategoryStatsWidget";
import VulnerabilitiesByRiskStatsWidget from "components/layout/dashboard/widgets/VulnerabilitiesByRiskStatsWidget";
import EmptyField from "components/ui/EmptyField";
import RelativeDateFormatter from "components/ui/RelativeDateFormatter";
import TimestampsSection from "components/ui/TimestampsSection";
import VisibilityLegend from "components/ui/VisibilityLegend";
import UserLink from "components/users/Link";
import ReactMarkdown from "react-markdown";
import { IconChartBar, IconDocument } from "../ui/Icons";

const ProjectDetailsTab = ({ project }) => {
    const isTemplate = project.is_template === 1;

    return (
        <section className="grid grid-two">
            <div>
                <h4>
                    <IconDocument /> Project details
                </h4>
                <dl>
                    {!isTemplate && (
                        <>
                            <dt>Visibility</dt>
                            <dd>
                                <VisibilityLegend
                                    visibility={project.visibility}
                                />
                            </dd>

                            <dt>Status</dt>
                            <dd>{project.archived ? "Archived" : "Active"}</dd>
                        </>
                    )}

                    {project.category_id && (
                        <>
                            <dt>Category</dt>
                            <dd>{project.category_name}</dd>
                        </>
                    )}

                    {project.vulnerability_metrics && (
                        <>
                            <dt>Vulnerability metrics</dt>
                            <dd>{project.vulnerability_metrics}</dd>
                        </>
                    )}

                    <dt>Description</dt>
                    <dd>
                        {project.description ? (
                            <ReactMarkdown>{project.description}</ReactMarkdown>
                        ) : (
                            <EmptyField />
                        )}
                    </dd>

                    {!isTemplate && (
                        <>
                            <dt>External ID</dt>
                            <dd>{project.external_id}</dd>
                        </>
                    )}
                </dl>

                <h4 style={{ marginTop: 20 }}>
                    <IconChartBar /> Stats
                </h4>

                <SimpleGrid gap="3" columns={{ base: "1", md: "2", xl: "3" }}>
                    <VulnerabilitiesByRiskStatsWidget projectId={project.id} />
                    <VulnerabilitiesByCategoryStatsWidget
                        projectId={project.id}
                    />
                </SimpleGrid>
            </div>

            <div>
                <h4>Relations</h4>
                <dl>
                    {!isTemplate && (
                        <>
                            <dt>Client</dt>
                            <dd>
                                <ClientLink clientId={project.client_id}>
                                    {project.client_name}
                                </ClientLink>
                            </dd>
                        </>
                    )}

                    <dt>Created by</dt>
                    <dd>
                        <UserLink userId={project.creator_uid}>
                            {project.creator_full_name}
                        </UserLink>
                    </dd>
                </dl>

                <TimestampsSection entity={project} />

                {(project.engagement_start_date ||
                    project.engagement_end_date) && (
                    <dl>
                        {project.engagement_start_date && (
                            <>
                                <dt>Engagement start date</dt>
                                <dd>
                                    <RelativeDateFormatter
                                        date={project.engagement_start_date}
                                    />
                                </dd>
                            </>
                        )}

                        {project.engagement_end_date && (
                            <>
                                <dt>Engagement end date</dt>
                                <dd>
                                    <RelativeDateFormatter
                                        date={project.engagement_end_date}
                                    />
                                </dd>
                            </>
                        )}
                    </dl>
                )}

                {project.archived === 1 && (
                    <dl>
                        <dt>Archived</dt>
                        <dd>
                            <RelativeDateFormatter date={project.archive_ts} />
                        </dd>
                    </dl>
                )}
            </div>
        </section>
    );
};

export default ProjectDetailsTab;