111 lines
2.7 KiB
TypeScript
111 lines
2.7 KiB
TypeScript
'use client';
|
||
|
||
import { ResumeData } from '@/types/types';
|
||
import { useQuery } from 'react-query';
|
||
import React from 'react';
|
||
import { Card, Spin, Button } from 'antd';
|
||
import style from './Resume.module.scss';
|
||
import {
|
||
fetchJobsMatches,
|
||
fetchJobsHardSkills,
|
||
downloadResume,
|
||
} from '@/api/api';
|
||
|
||
interface ResumeProps {
|
||
id: number;
|
||
}
|
||
|
||
const Resume: React.FC<ResumeProps> = ({ id }) => {
|
||
// Получение данных о резюме
|
||
const {
|
||
data: resumeData,
|
||
error: resumeError,
|
||
isLoading: resumeLoading,
|
||
} = useQuery<ResumeData[]>(['matches', id], () => fetchJobsMatches(id), {
|
||
refetchOnWindowFocus: false,
|
||
retry: false,
|
||
});
|
||
|
||
// Получение данных о хардскиллах
|
||
const {
|
||
data: hardSkillsData,
|
||
error: hardSkillsError,
|
||
isLoading: hardSkillsLoading,
|
||
} = useQuery<string[]>(['hardSkills', id], () => fetchJobsHardSkills(id), {
|
||
refetchOnWindowFocus: false,
|
||
retry: false,
|
||
});
|
||
|
||
if (resumeLoading || hardSkillsLoading) return <Spin size='large' />;
|
||
if (resumeError || hardSkillsError)
|
||
return (
|
||
<div className={style.not_found}>
|
||
Произошла ошибка при загрузке данных
|
||
</div>
|
||
);
|
||
|
||
// Функция для обработки клика по кнопке скачивания
|
||
const handleDownload = (filename: string) => {
|
||
downloadResume(filename);
|
||
};
|
||
|
||
|
||
console.log(resumeData)
|
||
return (
|
||
<div>
|
||
{resumeData && resumeData.length > 0 ? (
|
||
<div className={style.card_wrapper}>
|
||
{resumeData.map((resume, index) => (
|
||
<Card
|
||
key={index}
|
||
title={resume.Name}
|
||
bordered={false}
|
||
className={style.card_item}
|
||
>
|
||
<p>
|
||
<strong>Тип:</strong> {resume.Type}
|
||
</p>
|
||
<p>
|
||
<strong>Группа:</strong> {resume.Group}
|
||
</p>
|
||
<p>
|
||
<strong>Занятость:</strong>{' '}
|
||
{resume.Time.length > 1
|
||
? resume.Time.join(', ')
|
||
: resume.Time[0]}
|
||
</p>
|
||
<p>
|
||
<strong>Soft Skills:</strong> {resume.Soft_skills}
|
||
</p>
|
||
<p>
|
||
<strong>Номер телефона:</strong> {resume.Phone_number}
|
||
</p>
|
||
<p>
|
||
<strong>Факультет:</strong> {resume.Faculties}
|
||
</p>
|
||
<p>
|
||
<strong>Email:</strong> {resume.Email}
|
||
</p>
|
||
{hardSkillsData && hardSkillsData.length > 0 && (
|
||
<p>
|
||
<strong>Hard Skills:</strong> {hardSkillsData.join(', ')}
|
||
</p>
|
||
)}
|
||
<Button
|
||
type='primary'
|
||
onClick={() => handleDownload(resume.Link)}
|
||
>
|
||
Скачать PDF
|
||
</Button>
|
||
</Card>
|
||
))}
|
||
</div>
|
||
) : (
|
||
<div>Подходящих резюме не найдено</div>
|
||
)}
|
||
</div>
|
||
);
|
||
};
|
||
|
||
export default Resume;
|