'use client' import React, { useState } from 'react'; import { Alert, message } from 'antd'; import Image from 'next/image'; import { i18nText } from '../../i18nKeys'; import { ExpertData, PayInfo, ProfileData } from '../../types/profile'; import { ExpertsTags } from '../../types/tags'; import { PracticeDTO } from '../../types/practice'; import { EducationDTO } from '../../types/education'; import { ScheduleDTO } from '../../types/schedule'; import { AUTH_TOKEN_KEY } from '../../constants/common'; import { useLocalStorage } from '../../hooks/useLocalStorage'; import { getTags, getPayData, getEducation, getPractice, getSchedule, getPersonalData } from '../../actions/profile'; import { Loader } from '../view/Loader'; import { ExpertTags } from './content/ExpertTags'; import { ExpertSchedule } from './content/ExpertSchedule'; import { ExpertPayData } from './content/ExpertPayData'; import { ExpertEducation } from './content/ExpertEducation'; import { ExpertAbout } from './content/ExpertAbout'; type ExpertProfileProps = { locale: string; data: ExpertData; updateData: (data: ExpertData) => void; isFull: boolean; }; type NewDataPartProps = { key: keyof ExpertData, getNewData: (locale: string, token: string) => Promise, errorMessage?: string; }; export const ExpertProfile = ({ locale, data, updateData, isFull }: ExpertProfileProps) => { const [jwt] = useLocalStorage(AUTH_TOKEN_KEY, ''); const [loading, setLoading] = useState<(keyof ExpertData)[]>([]); function getNewPartData ({ key, getNewData, errorMessage = 'Не удалось получить данные' }: NewDataPartProps) { setLoading([key]); getNewData(locale, jwt) .then((newData) => { updateData({ ...data, [key]: newData }); }) .catch(() => message.error(errorMessage)) .finally(() => setLoading([])); } const updateExpert = (key: keyof ExpertData) => { switch (key) { case 'tags': getNewPartData({ key, getNewData: getTags, errorMessage: 'Не удалось получить направления' }); break; case 'practice': getNewPartData({ key, getNewData: getPractice }); break; case 'education': getNewPartData({ key, getNewData: getEducation, errorMessage: 'Не удалось получить информацию об образовании' }); break; case 'schedule': getNewPartData({ key, getNewData: getSchedule, errorMessage: 'Не удалось получить расписание' }); break; case 'person': getNewPartData({ key, getNewData: getPersonalData, errorMessage: 'Не удалось получить информацию о пользователе' }); break; case 'payData': getNewPartData<{ person6Data?: PayInfo }>({ key, getNewData: getPayData, errorMessage: 'Не удалось получить платежную информацию' }); break; default: break; } }; return ( <>
  1. {i18nText('coaching', locale)}
{`${data?.person?.username} ${data?.person?.surname || ''}`}
{!isFull && (
  • о себе
  • темы сессии
  • рабочее расписание
  • информация об образовании
  • платежная информация
  • )} type="warning" showIcon /> )}
    ); };