From 371e43356d2c057e52368c32ffe2af1744311d91 Mon Sep 17 00:00:00 2001 From: sct Date: Wed, 16 Sep 2020 06:30:47 +0000 Subject: [PATCH] feat(frontend): request card / recent requests --- server/routes/request.ts | 11 ++++- src/components/Discover/index.tsx | 41 +++++++++++++++++ src/components/TitleCard/RequestCard.tsx | 56 ++++++++++++++++++++++++ src/components/TitleCard/index.tsx | 2 +- 4 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 src/components/TitleCard/RequestCard.tsx diff --git a/server/routes/request.ts b/server/routes/request.ts index e8408f986..3f6c2184f 100644 --- a/server/routes/request.ts +++ b/server/routes/request.ts @@ -11,9 +11,18 @@ requestRoutes.get('/', async (req, res, next) => { const requestRepository = getRepository(MediaRequest); try { const requests = req.user?.hasPermission(Permission.MANAGE_REQUESTS) - ? await requestRepository.find() + ? await requestRepository.find({ + order: { + id: 'DESC', + }, + take: 20, + }) : await requestRepository.find({ where: { requestedBy: { id: req.user?.id } }, + order: { + id: 'DESC', + }, + take: 20, }); return res.status(200).json(requests); diff --git a/src/components/Discover/index.tsx b/src/components/Discover/index.tsx index e9c212732..1c24f3d87 100644 --- a/src/components/Discover/index.tsx +++ b/src/components/Discover/index.tsx @@ -2,6 +2,8 @@ import React from 'react'; import useSWR from 'swr'; import type { MovieResult, TvResult } from '../../../server/models/Search'; import TitleCard from '../TitleCard'; +import { MediaRequest } from '../../../server/entity/MediaRequest'; +import RequestCard from '../TitleCard/RequestCard'; interface MovieDiscoverResult { page: number; @@ -25,8 +27,47 @@ const Discover: React.FC = () => { '/api/v1/discover/tv' ); + const { data: requests, error: requestError } = useSWR( + '/api/v1/request' + ); + return ( <> +
+
+

+ Recent Requests +

+
+
+
+ {requests?.map((request) => ( +
+ +
+ ))} + {!requests && + !requestError && + [...Array(10)].map((_item, i) => ( +
+ +
+ ))} + {requests && !requestError && requests.length === 0 && ( +
+ No Requests found :( +
+ )} +

diff --git a/src/components/TitleCard/RequestCard.tsx b/src/components/TitleCard/RequestCard.tsx new file mode 100644 index 000000000..adc706800 --- /dev/null +++ b/src/components/TitleCard/RequestCard.tsx @@ -0,0 +1,56 @@ +import React from 'react'; +import useSWR from 'swr'; +import type { MovieDetails } from '../../../server/models/Movie'; +import type { TvDetails } from '../../../server/models/Tv'; +import TitleCard from '.'; + +interface TmdbTitleCardProps { + tmdbId: number; + type: 'movie' | 'tv'; +} + +const isMovie = (movie: MovieDetails | TvDetails): movie is MovieDetails => { + return (movie as MovieDetails).title !== undefined; +}; + +const RequestCard: React.FC = ({ tmdbId, type }) => { + const url = + type === 'movie' ? `/api/v1/movie/${tmdbId}` : `/api/v1/tv/${tmdbId}`; + const { data: title, error } = useSWR(url); + + if (!title && !error) { + return ; + } + + if (!title) { + return ; + } + + return isMovie(title) ? ( + + ) : ( + + ); +}; + +export default RequestCard; diff --git a/src/components/TitleCard/index.tsx b/src/components/TitleCard/index.tsx index 6ca314f23..78a9d009a 100644 --- a/src/components/TitleCard/index.tsx +++ b/src/components/TitleCard/index.tsx @@ -13,7 +13,7 @@ import MovieRequestModal from '../RequestModal/MovieRequestModal'; interface TitleCardProps { id: number; image?: string; - summary: string; + summary?: string; year: string; title: string; userScore: number;