есть вот такой запрос import { Box } from "@mts/box";
import { Divider } from "@mts/divider";
import { Icon } from "@mts/icon";
import { IconButton } from "@mts/icon-button";
import { Link } from "@mts/link";
import { Text } from "@mts/text";
import React, { useCallback, useContext, useEffect, useState } from "react";
import style from "./MyDataMain.module.scss";
import { Context } from "../../Context";
import { fetchApi } from "../../fetchApi";
// схема
type CardLinkScheme = {
data: CardLinkTypes[];
return_code: number;
};
//типы данных  которые достает функция  getLinkCard() из linkCard и которые потом .map в  в <Link> </Link>
type CardLinkTypes = {
id: number;
title: string;
link: string;
};
// типы карточек в блоке SidebarRight БЛОК  <МОИ ДАННЫЕ> с двумя иконками справа и текстом внизу
// эти типы данных мы передаем в  workCard
type CardItem = {
title: string;
description: string;
id: number;
};
// workCard это массив данных CardItem
type PropsDataMainList = {
workCard: CardItem;
};
//Экспортируем компонент-карточку в Main
export const MyDataMain = (props: PropsDataMainList) => {
//в linkCard  лежат данные в дженерике <CardLinkTypes[]> которые мы достаем из функции  getLinkCard()  в которой делаем запрос
// на получение  ссылки/ссылок  в карточке , после  .map и отображаются  в дальнейшем в  <Link> </Link>
const [linkCard, setLinkCard] = useState<CardLinkTypes[]>([]);
const { setError } = useContext(Context);
const { workCard } = props;
const getLinkCard = useCallback(
async (id: number) => {
let params = {
url: https://allplusbebetterfe.bebetterdev.mts-corp.ru/api/0.1/users?action=user_workcard_link_list&workcard_id=${id},
req_params: {
method: "GET",
},
};
try {
//Эта строка выполняет асинхронный вызов функции fetchApi с передачей параметра params.
//Результат этого вызова присваивается переменной result.
//Ожидание (await) используется, чтобы дождаться завершения запроса к API.
//Тип переменной result явно указан как Response | void, что означает, что она может содержать объект Response или быть пустой (void).
//Это полезно для явного определения типов данных, что помогает в статическом анализе кода и предотвращает потенциальные ошибки типов.
const result: Response | void = await fetchApi(params);
if (!result) {
setError("No response");
return;
}
if (result.status !== 200) {
setError(result.status);
return;
}
// Эта строка выполняет асинхронный вызов метода .json() на объекте result, чтобы получить данные из ответа в формате JSON.
//Данные присваиваются переменной response, и тип данных ожидается быть CardLinkScheme,
const response: CardLinkScheme = await result.json();
//Этот блок if проверяет, если поле return_code в объекте response равно 0,
//то выполняются следующие действия: устанавливается состояние linkCard с данными из response.data,
// и выводится сообщение в консоль с данными о linkCard.
if (response.return_code === 0) {
setLinkCard(response.data);
console.log("Данные о linkCard после обновления", response.data);
}
} catch (error) {
setError(error);
}
},
[setLinkCard, setError]
);
useEffect(() => {
getLinkCard(workCard.id); // id карточки
}, [getLinkCard, workCard.id]);   мне нужно по аналогии его сделать запрос вот тут import React, { useEffect, useState } from 'react';
import { Box } from '@mts/box';
import { Text } from '@mts/text';
import { Icon } from '@mts/icon';
import { IconButton } from '@mts/icon-button';
import style from './TableBody.module.scss';
import {userAuthentication} from "../../Api/Api"
export type TableBodyItem = {
id: number;
title: string;
dataOpen: string;
closingDate: string;
// ranges:[{id:number,saleLimit:number,saleRate:number,saleOutLimit:number,saleOutRate:number}]//диапозоны
};
//Пропсы tableBody берем из AdminSales.tsx
type PropsInterfaceTableBody = {
tableBody: TableBodyItem[];
};
//Тело таблицы "TableBody" экспортируется в компонент Sales в AdminSales.tsx
export const TableBody = (props: PropsInterfaceTableBody) => {
const { tableBody } = props;
const [loading, setLoading] = useState(false);
const [logUser, setLogUser] = useState(null);
const [email, setEmail] = useState("");
const [firstName, setFirstName] = useState("");
const [error, setError] = useState<number | null>(null);
//  Функция получения инфы  с сервера для шапки таблицы <TableHeader/>
const getInfoTableBody = async (id: number) => {
setLoading(true);
console.log("Запрос о пользователе начат 1 ");
try {
const response = await userAuthentication();
const result = response as Response;
console.log(result, "result");
if (result.status === 200) {
const data = await result.json();
console.log(data, "!!!!!!!!!!!!");
setEmail(data.user.email);
setFirstName(data.user.first_name);
setError(result.status);
tableBody([
{
id: 1,
title: data.user.email,
dataOpen: "01.06.2023",
closingDate: "01.09.2023",
},
{
id: 2,
title: data.user.first_name,
dataOpen: "01.06.2023",
closingDate: "01.09.2023",
},
{ id: 3, title: "дальше" },
{ id: 4, title: "дальше" },
]);
}
} catch (error) {
console.error("Ошибка при получении информации о пользователе", error);
}
console.log("Запрос о пользователе завершен 3");
};
useEffect(() => {
if (logUser === null && !loading) {
getInfoTableBody(tableBody[0].id);
}
}, [loading, logUser]); сделай так же отвечай на русском