diff --git a/src/components/TvDetails/TvCrew/index.tsx b/src/components/TvDetails/TvCrew/index.tsx
new file mode 100644
index 00000000..8276a318
--- /dev/null
+++ b/src/components/TvDetails/TvCrew/index.tsx
@@ -0,0 +1,66 @@
+import Link from 'next/link';
+import { useRouter } from 'next/router';
+import React, { useContext } from 'react';
+import { defineMessages, useIntl } from 'react-intl';
+import useSWR from 'swr';
+import type { TvDetails } from '../../../../server/models/Tv';
+import { LanguageContext } from '../../../context/LanguageContext';
+import Error from '../../../pages/_error';
+import Header from '../../Common/Header';
+import LoadingSpinner from '../../Common/LoadingSpinner';
+import PersonCard from '../../PersonCard';
+
+const messages = defineMessages({
+ fullseriescrew: 'Full Series Crew',
+});
+
+const TvCrew: React.FC = () => {
+ const router = useRouter();
+ const intl = useIntl();
+ const { locale } = useContext(LanguageContext);
+ const { data, error } = useSWR
(
+ `/api/v1/tv/${router.query.tvId}?language=${locale}`
+ );
+
+ if (!data && !error) {
+ return ;
+ }
+
+ if (!data) {
+ return ;
+ }
+
+ return (
+ <>
+
+ {data.name}
+
+ }
+ >
+ {intl.formatMessage(messages.fullseriescrew)}
+
+
+ {data?.credits.crew.map((person, index) => {
+ return (
+ -
+
+
+ );
+ })}
+
+ >
+ );
+};
+
+export default TvCrew;
diff --git a/src/components/TvDetails/index.tsx b/src/components/TvDetails/index.tsx
index 58993258..d374c85e 100644
--- a/src/components/TvDetails/index.tsx
+++ b/src/components/TvDetails/index.tsx
@@ -63,6 +63,7 @@ const messages = defineMessages({
showtype: 'Show Type',
anime: 'Anime',
network: 'Network',
+ viewfullcrew: 'View Full Crew',
});
interface TvDetailsProps {
@@ -436,6 +437,29 @@ const TvDetails: React.FC = ({ tv }) => {
))}
+ {sortedCrew.length > 0 && (
+
+ )}
diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json
index 5fae284e..dda83fff 100644
--- a/src/i18n/locale/en.json
+++ b/src/i18n/locale/en.json
@@ -19,6 +19,7 @@
"components.Layout.alphawarning": "This is ALPHA software. Almost everything is bound to be nearly broken and/or unstable. Please report issues to the Overseerr GitHub!",
"components.Login.signinplex": "Sign in to continue",
"components.MovieDetails.MovieCast.fullcast": "Full Cast",
+ "components.MovieDetails.MovieCrew.fullcrew": "Full Crew",
"components.MovieDetails.approve": "Approve",
"components.MovieDetails.available": "Available",
"components.MovieDetails.budget": "Budget",
@@ -46,9 +47,11 @@
"components.MovieDetails.studio": "Studio",
"components.MovieDetails.unavailable": "Unavailable",
"components.MovieDetails.userrating": "User Rating",
+ "components.MovieDetails.viewfullcrew": "View Full Crew",
"components.MovieDetails.viewrequest": "View Request",
"components.PersonDetails.appearsin": "Appears in",
"components.PersonDetails.ascharacter": "as {character}",
+ "components.PersonDetails.crewmember": "Crew Member",
"components.PersonDetails.nobiography": "No biography available.",
"components.PlexLoginButton.loading": "Loading…",
"components.PlexLoginButton.loggingin": "Logging in…",
@@ -277,6 +280,7 @@
"components.TitleCard.movie": "Movie",
"components.TitleCard.tvshow": "Series",
"components.TvDetails.TvCast.fullseriescast": "Full Series Cast",
+ "components.TvDetails.TvCrew.fullseriescrew": "Full Series Crew",
"components.TvDetails.anime": "Anime",
"components.TvDetails.approve": "Approve",
"components.TvDetails.approverequests": "Approve {requestCount} {requestCount, plural, one {Request} other {Requests}}",
@@ -305,6 +309,7 @@
"components.TvDetails.status": "Status",
"components.TvDetails.unavailable": "Unavailable",
"components.TvDetails.userrating": "User Rating",
+ "components.TvDetails.viewfullcrew": "View Full Crew",
"components.UserEdit.admin": "Admin",
"components.UserEdit.adminDescription": "Full administrator access. Bypasses all permission checks.",
"components.UserEdit.autoapprove": "Auto Approve",
diff --git a/src/pages/movie/[movieId]/crew.tsx b/src/pages/movie/[movieId]/crew.tsx
new file mode 100644
index 00000000..6ba59053
--- /dev/null
+++ b/src/pages/movie/[movieId]/crew.tsx
@@ -0,0 +1,9 @@
+import { NextPage } from 'next';
+import React from 'react';
+import MovieCrew from '../../../components/MovieDetails/MovieCrew';
+
+const MovieCrewPage: NextPage = () => {
+ return ;
+};
+
+export default MovieCrewPage;
diff --git a/src/pages/tv/[tvId]/crew.tsx b/src/pages/tv/[tvId]/crew.tsx
new file mode 100644
index 00000000..aec04080
--- /dev/null
+++ b/src/pages/tv/[tvId]/crew.tsx
@@ -0,0 +1,9 @@
+import { NextPage } from 'next';
+import React from 'react';
+import TvCrew from '../../../components/TvDetails/TvCrew';
+
+const TvCrewPage: NextPage = () => {
+ return ;
+};
+
+export default TvCrewPage;