import React, { JSX } from 'react'; import { Box, Link, Typography, Avatar, Grid, SxProps, CardActions, Chip, Stack, CardHeader } from '@mui/material'; import { Card, CardContent, Divider, useTheme, } from '@mui/material'; import DeleteIcon from '@mui/icons-material/Delete'; import { useMediaQuery } from '@mui/material'; import { Job, JobFull } from 'types/types'; import { CopyBubble } from "components/CopyBubble"; import { rest } from 'lodash'; import { AIBanner } from 'components/ui/AIBanner'; import { useAuth } from 'hooks/AuthContext'; import { DeleteConfirmation } from '../DeleteConfirmation'; import { Build, CheckCircle, Description, Psychology, Star, Work } from '@mui/icons-material'; interface JobInfoProps { job: Job | JobFull; sx?: SxProps; action?: string; elevation?: number; variant?: "small" | "normal" | null }; const JobInfo: React.FC = (props: JobInfoProps) => { const { job } = props; const { user, apiClient } = useAuth(); const { sx, action = '', elevation = 1, variant = "normal" } = props; const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down('md')); const isAdmin = user?.isAdmin; const deleteJob = async (jobId: string | undefined) => { if (jobId) { await apiClient.deleteJob(jobId); } } if (!job) { return No user loaded.; } const renderRequirementSection = (title: string, items: string[] | undefined, icon: JSX.Element, required = false) => { if (!items || items.length === 0) return null; return ( {icon} {title} {required && } {items.map((item, index) => ( ))} ); }; const renderJobRequirements = () => { if (!job.requirements) return null; return ( } sx={{ p: 0, pb: 1 }} /> {renderRequirementSection( "Technical Skills (Required)", job.requirements.technicalSkills.required, , true )} {renderRequirementSection( "Technical Skills (Preferred)", job.requirements.technicalSkills.preferred, )} {renderRequirementSection( "Experience Requirements (Required)", job.requirements.experienceRequirements.required, , true )} {renderRequirementSection( "Experience Requirements (Preferred)", job.requirements.experienceRequirements.preferred, )} {renderRequirementSection( "Soft Skills", job.requirements.softSkills, )} {renderRequirementSection( "Experience", job.requirements.experience, )} {renderRequirementSection( "Education", job.requirements.education, )} {renderRequirementSection( "Certifications", job.requirements.certifications, )} {renderRequirementSection( "Preferred Attributes", job.requirements.preferredAttributes, )} ); }; return ( {variant !== "small" && <> {'location' in job && Location: {job.location.city}, {job.location.state || job.location.country} } {job.title && Title: {job.title} } {job.company && Company: {job.company} } {job.summary && Summary: {job.summary} } {job.createdAt && Created: {job.createdAt.toISOString()} } { job.owner && Created by: {job.owner.fullName} } } {renderJobRequirements()} {isAdmin && { deleteJob(job.id); }} sx={{ minWidth: 'auto', px: 2, maxHeight: "min-content", color: "red" }} action="delete" label="job" title="Delete job" icon= message={`Are you sure you want to delete ${job.id}? This action cannot be undone.`} />} ); }; export { JobInfo };