import React, { useEffect, useState } from 'react'; import { Button, Checkbox, Form, Input, Radio, Select } from 'antd'; import r from './Resume.module.scss'; import { initThemeParams, MiniApp, useInitData, useMiniApp, usePopup } from '@tma.js/sdk-react'; import { deleteStudent, editStudent, fetchHardSkills, fetchHardSkillsAll, fetchStudent, sendStudent, } from '@/api/api'; import { Bot, FormValues, Request, Student } from '@/types/types'; import { useQuery } from 'react-query'; import { sendDataBot } from '@/api/bot'; type LayoutType = Parameters[0]['layout']; const { Option } = Select; const Resume: React.FC = () => { const [form] = Form.useForm(); const [formLayout, setFormLayout] = useState('horizontal'); const miniApp = useMiniApp(); const [themeParams] = initThemeParams(); const initData = useInitData(true); const popup = usePopup(); const { isLoading, isError, data, error } = useQuery( ['student', initData?.user?.id], () => fetchStudent(initData?.user?.id || 0), { enabled: !!initData?.user?.id, // Включить запрос только когда initData.user.id доступен refetchOnWindowFocus: false, retry: false, } ); const hardSkill = useQuery( ['skills', initData?.user?.id], () => fetchHardSkills(initData?.user?.id || 0), { enabled: !!initData?.user?.id, // Включить запрос только когда initData.user.id доступен refetchOnWindowFocus: false, retry: false, } ); const { data: allSkills } = useQuery( ['hardSkills'], // Обратите внимание на использование массива в качестве ключа () => fetchHardSkillsAll(), { refetchOnWindowFocus: false, retry: false, } ); const onFinish = async (values: FormValues) => { const hard: string[] = values.skills; const student: Request = { StudentID: initData?.user?.id || 0, Name: values.Name, Type: values.Type, Group: values.Group, Faculties: values.Faculties, Phone_number: values.Phone_number, Time: values.Time, // список времени Soft_skills: values.Soft_skills, Link: 'link', // предполагается, что у вас есть ссылка Email: values.Email, Hardskills: values.skills, // список навыков }; const editedStudent: Omit = { Name: values.Name, Type: values.Type, Group: values.Group, Time: values.Time, Faculties: values.Faculties, Phone_number: values.Phone_number, Soft_skills: values.Soft_skills, Link: 'link', Email: values.Email, Hardskills: values.skills, }; const dataBot: Bot = { id: initData?.user?.id || 0, }; if (data) { const result = await editStudent(editedStudent, initData?.user?.id || 0); if (result.status == 200) { popup.open({ title: '', message: 'Изменния были внесены', buttons: [{ id: 'my-id', type: 'default', text: 'Закрыть' }], }); } console.log(result.status); } else { const result = await sendStudent(student); console.log(result.status); const resultbot = await sendDataBot(dataBot); console.log(resultbot); miniApp.close(); } }; useEffect(() => { if (data) { form.setFieldsValue({ Name: data.data.Name, Type: data.data.Type, Group: data.data.Group, Time: data.data.Time, Soft_skills: data.data.Soft_skills, Email: data.data.Email, skills: hardSkill.data?.data.map( (skill: { Title: string }) => skill.Title ), }); } }, [data, form]); const resetResume = async () => { const result = await deleteStudent(initData?.user?.id || 0); if (result.status == 204) { popup.open({ title: '', message: 'Ваше резюме было удалено', buttons: [{ id: 'my-id', type: 'default', text: 'Закрыть' }], }); } await form.resetFields(); miniApp.close(); }; const [selectedValues, setSelectedValues] = useState([]); const handleCheckboxChange = (checkedValues: string[]) => { setSelectedValues(checkedValues); }; const onFormLayoutChange = ({ layout }: { layout: LayoutType }) => { setFormLayout(layout); }; // if (isLoading) { // return Загрузка...; // } return (
Как вас зовут? } className={r.form_item} rules={[ { required: true, message: 'Пожалуйста, введите имя и фамилию!' }, ]} name='Name' > Факультет } className={r.form_item} rules={[{ required: true, message: 'Пожалуйста, введите факультет!' }]} name='Faculties' > Номер телефона } className={r.form_item} rules={[ { required: true, message: 'Пожалуйста, введите номер телефона!' }, ]} name='Phone_number' > Что вы ищите? } rules={[ { required: true, message: 'Пожалуйста, выберит тип занятости!' }, ]} name='Type' > Работу Стажировку {/* Что вы ищите? } rules={[ { required: true, message: 'Пожалуйста, выберите тип занятости!' }, ]} name='Type' > */} Ваша академическая группа: } name='Group' rules={[ { required: true, message: 'Пожалуйста, введите номер вашей группы!', }, { pattern: /^[А-ЯЁ]{2,3}\d{4}$/, message: 'Введите корректный номер группы (например, БВТ2202)!', }, ]} > Какую занятость (часов в неделю) вы рассматриваете? } name='Time' > 20 30 40 Какими навыками вы обладаете? } rules={[ { required: true, message: 'Пожалуйста, укажите ваши hard skills!' }, ]} name='skills' > Расскажите немного о своих soft skills: } rules={[ { required: true, message: 'Пожалуйста, введите ваши soft skills!' }, ]} name='Soft_skills' > Оставьте почту для работодателей: } className={r.form_item} rules={[ { required: true, message: 'Пожалуйста, введите вашу почту!' }, { type: 'email', message: 'Введите корректный email!' }, ]} name='Email' > {data && ( )}
); }; export default Resume;