import axios, { AxiosError } from "axios"; import Link from "next/link"; import { useRouter } from "next/router"; import { FC } from "react"; import { useQuery } from "react-query"; import Avatar from "@mui/material/Avatar"; import Box from "@mui/material/Box"; import Card from "@mui/material/Card"; import CardActionArea from "@mui/material/CardActionArea"; import CardContent from "@mui/material/CardContent"; import CardMedia from "@mui/material/CardMedia"; import CircularProgress from "@mui/material/CircularProgress"; import Tooltip from "@mui/material/Tooltip"; import Typography from "@mui/material/Typography"; import { abbreviateNumber } from "@src/utils"; import { Video as VideoModel } from "@interfaces/video"; interface Channel { authorThumbnails: { url: string; width: number; height: number }[]; } const Video: FC = ({ thumbnail, title, id, author, views, published }) => { const requestFields = ["authorThumbnails"]; const { isLoading, error, data } = useQuery>( `channelData-${author.id}`, () => axios .get(`https://invidious.privacy.gd/api/v1/channels/${author.id}`, { params: { fields: requestFields.join(",") } }) .then((res) => res.data), { retry: 1, retryDelay: 5000 } ); const router = useRouter(); return ( router.push(`/watch?v=${id}`)}> {title} {isLoading && } {data && ( thumbnail.width == 100 )?.url as string } /> )} {author.name} {abbreviateNumber(views)} Views • Published {published.text} ); }; export default Video;