Advertisement
justfrenzy

CrackFlix - frontend /src/components/App/CardComponent.tsx

May 12th, 2024
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
TypeScript 2.52 KB | Source Code | 0 0
  1. import {
  2.     Card,
  3.     CardBody,
  4.     Image,
  5.     CardFooter,
  6.     Tooltip,
  7.     Divider,
  8. } from '@nextui-org/react';
  9. import { mediaType } from './props.interface';
  10. import React, { useContext } from 'react';
  11. import { Star } from 'lucide-react';
  12. import { AppContext, AppContextTypes } from '../../utils/AppContext';
  13.  
  14. type CardComponentTypes = {
  15.     data: mediaType;
  16.     onOpen: () => void;
  17.     setMediaId: React.Dispatch<React.SetStateAction<number>>;
  18.     isMovie: boolean;
  19. };
  20.  
  21. const CardComponent: React.FC<CardComponentTypes> = ({
  22.     data,
  23.     onOpen,
  24.     setMediaId,
  25.     isMovie,
  26. }) => {
  27.     const handleReleaseDate = (date: string): string =>
  28.         date?.split('-')[0] || '';
  29.  
  30.     const handleVoteAverage = (vote: number): string =>
  31.         (vote as number).toFixed(1);
  32.  
  33.     const { defaultLanguage } = useContext<AppContextTypes>(AppContext);
  34.  
  35.     return (
  36.         <Card
  37.             isPressable
  38.             onPress={() => {
  39.                 setMediaId(data?.id as number);
  40.                 onOpen();
  41.                 console.log(data?.id);
  42.             }}
  43.             className="bg-background/40 max-w-[285px] max-h-[435px"
  44.         >
  45.             <CardBody className="overflow-visible p-0 ">
  46.                 <Image
  47.                     width="100%"
  48.                     loading="lazy"
  49.                     className="object-cover select-none w-full"
  50.                     src={`https://www.themoviedb.org/t/p/w220_and_h330_face${data?.poster_path}`}
  51.                     alt={isMovie ? data?.title : data?.name}
  52.                 />
  53.             </CardBody>
  54.             <CardFooter className={`flex justify-center flex-col h-[25%] `}>
  55.                 <Tooltip
  56.                     showArrow
  57.                     classNames={{
  58.                         content: 'bg-background/80',
  59.                     }}
  60.                     shadow="lg"
  61.                     content={isMovie ? data?.title : data?.name}
  62.                 >
  63.                     <p className="font-bold truncate w-[100%]">
  64.                         {isMovie ? data?.title : data?.name}
  65.                     </p>
  66.                 </Tooltip>
  67.                 <div className="flex flex-row justify-center items-center gap-2">
  68.                     <p className=" text-sm">
  69.                         {handleReleaseDate(
  70.                             isMovie
  71.                                 ? (data?.release_date as mediaType['release_date'])
  72.                                 : (data?.first_air_date as mediaType['first_air_date'])
  73.                         )}
  74.                     </p>
  75.                     <Divider orientation="vertical" />
  76.                     <Star size={12} />
  77.                     <p className="text-sm">
  78.                         {data.vote_average
  79.                             ? handleVoteAverage(
  80.                                     data.vote_average as mediaType['vote_average']
  81.                                 )
  82.                             : ''}
  83.                     </p>
  84.                     <Divider orientation="vertical" />
  85.  
  86.                     <p className="text-sm">
  87.                         {isMovie
  88.                             ? defaultLanguage === 'bg-BG'
  89.                                 ? 'Филм'
  90.                                 : 'Movie'
  91.                             : defaultLanguage === 'bg-BG'
  92.                                 ? 'Сериал'
  93.                                 : 'TV Show'}
  94.                     </p>
  95.                 </div>
  96.             </CardFooter>
  97.         </Card>
  98.     );
  99. };
  100.  
  101. export default CardComponent;
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement