Compare commits

..

3 Commits

Author SHA1 Message Date
Gauthier
7d2bf3a065 refactor: rename Error components to ErrorPage 2024-10-18 13:49:49 +02:00
Gauthier
a2b3408c9a feat: exit Jellyseerr when migration fails (#1026) 2024-10-18 18:24:29 +08:00
Fallenbagel
cbb1a74526 fix: fixes wrong avatar rendered for the modifiedBy user in request list (#1028)
This fixes an issue where when the request is modified it was showing the avatar of the requester
instead of the modifiedBy user

fix #1017
2024-10-18 06:28:42 +08:00
40 changed files with 102 additions and 88 deletions

View File

@@ -94,7 +94,6 @@
"swagger-ui-express": "4.6.2",
"swr": "2.2.5",
"typeorm": "0.3.12",
"undici": "^6.20.1",
"web-push": "3.5.0",
"winston": "3.8.2",
"winston-daily-rotate-file": "4.7.1",

9
pnpm-lock.yaml generated
View File

@@ -194,9 +194,6 @@ importers:
typeorm:
specifier: 0.3.12
version: 0.3.12(sqlite3@5.1.4(encoding@0.1.13))(ts-node@10.9.1(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@20.14.8)(typescript@4.9.5))
undici:
specifier: ^6.20.1
version: 6.20.1
web-push:
specifier: 3.5.0
version: 3.5.0
@@ -8771,10 +8768,6 @@ packages:
undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
undici@6.20.1:
resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==}
engines: {node: '>=18.17'}
unicode-canonical-property-names-ecmascript@2.0.0:
resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
engines: {node: '>=4'}
@@ -19493,8 +19486,6 @@ snapshots:
undici-types@5.26.5: {}
undici@6.20.1: {}
unicode-canonical-property-names-ecmascript@2.0.0: {}
unicode-emoji-utils@1.2.0:

View File

@@ -37,15 +37,8 @@ import dns from 'node:dns';
import net from 'node:net';
import path from 'path';
import swaggerUi from 'swagger-ui-express';
import { Agent, setGlobalDispatcher } from 'undici';
import YAML from 'yamljs';
// Set the global dispatcher to use autoSelectFamily
// attempt to fix ipv6 issues
setGlobalDispatcher(
new Agent({ connect: { timeout: 60_000, autoSelectFamily: true } })
);
if (process.env.forceIpv4First === 'true') {
dns.setDefaultResultOrder('ipv4first');
net.setDefaultAutoSelectFamily(false);

View File

@@ -648,7 +648,7 @@ class Settings {
if (data) {
const parsedJson = JSON.parse(data);
this.data = await runMigrations(parsedJson);
this.data = await runMigrations(parsedJson, SETTINGS_PATH);
this.data = merge(this.data, parsedJson);

View File

@@ -1,3 +1,4 @@
/* eslint-disable no-console */
import type { AllSettings } from '@server/lib/settings';
import logger from '@server/logger';
import fs from 'fs';
@@ -6,7 +7,8 @@ import path from 'path';
const migrationsDir = path.join(__dirname, 'migrations');
export const runMigrations = async (
settings: AllSettings
settings: AllSettings,
SETTINGS_PATH: string
): Promise<AllSettings> => {
const migrations = fs
.readdirSync(migrationsDir)
@@ -17,14 +19,43 @@ export const runMigrations = async (
let migrated = settings;
try {
const settingsBefore = JSON.stringify(migrated);
for (const migration of migrations) {
migrated = await migration(migrated);
}
const settingsAfter = JSON.stringify(migrated);
if (settingsBefore !== settingsAfter) {
// a migration occured
// we check that the new config will be saved
fs.writeFileSync(SETTINGS_PATH, JSON.stringify(migrated, undefined, ' '));
const fileSaved = JSON.parse(fs.readFileSync(SETTINGS_PATH, 'utf-8'));
if (JSON.stringify(fileSaved) !== settingsAfter) {
// something went wrong while saving file
throw new Error('Unable to save settings after migration.');
}
}
} catch (e) {
logger.error(
`Something went wrong while running settings migrations: ${e.message}`,
{ label: 'Settings Migrator' }
);
// we stop jellyseerr if the migration failed
console.log(
'===================================================================='
);
console.log(
' SOMETHING WENT WRONG WHILE RUNNING SETTINGS MIGRATIONS '
);
console.log(
' Please check that your configuration folder is properly set up '
);
console.log(
'===================================================================='
);
process.exit();
}
return migrated;

View File

@@ -9,7 +9,7 @@ import useDebouncedState from '@app/hooks/useDebouncedState';
import { useUpdateQueryParams } from '@app/hooks/useUpdateQueryParams';
import { Permission, useUser } from '@app/hooks/useUser';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import {
ChevronLeftIcon,
@@ -75,7 +75,7 @@ const Blacklist = () => {
// check if there's no data and no errors in the table
// so as to show a spinner inside the table and not refresh the whole component
if (!data && error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const searchItem = (e: ChangeEvent<HTMLInputElement>) => {

View File

@@ -9,7 +9,7 @@ import TitleCard from '@app/components/TitleCard';
import useSettings from '@app/hooks/useSettings';
import { Permission, useUser } from '@app/hooks/useUser';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import { refreshIntervalHelper } from '@app/utils/refreshIntervalHelper';
import { ArrowDownTrayIcon } from '@heroicons/react/24/outline';
@@ -91,7 +91,7 @@ const CollectionDetails = ({ collection }: CollectionDetailsProps) => {
}
if (!data) {
return <Error statusCode={404} />;
return <ErrorPage statusCode={404} />;
}
let collectionStatus = MediaStatus.UNKNOWN;

View File

@@ -3,7 +3,7 @@ import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { MovieResult } from '@server/models/Search';
import { useRouter } from 'next/router';
@@ -31,7 +31,7 @@ const DiscoverMovieGenre = () => {
);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const title = isLoadingInitialData

View File

@@ -3,7 +3,7 @@ import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover, { encodeURIExtraParams } from '@app/hooks/useDiscover';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { TmdbKeyword } from '@server/api/themoviedb/interfaces';
import type { MovieResult } from '@server/models/Search';
@@ -35,7 +35,7 @@ const DiscoverMovieKeyword = () => {
);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const title = isLoadingInitialData

View File

@@ -3,7 +3,7 @@ import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { MovieResult } from '@server/models/Search';
import { useRouter } from 'next/router';
@@ -37,7 +37,7 @@ const DiscoverMovieLanguage = () => {
>(`/api/v1/discover/movies/language/${router.query.language}`);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const title = isLoadingInitialData

View File

@@ -10,7 +10,7 @@ import {
import FilterSlideover from '@app/components/Discover/FilterSlideover';
import useDiscover from '@app/hooks/useDiscover';
import { useUpdateQueryParams } from '@app/hooks/useUpdateQueryParams';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import { BarsArrowDownIcon, FunnelIcon } from '@heroicons/react/24/solid';
import type { SortOptions as TMDBSortOptions } from '@server/api/themoviedb';
@@ -66,7 +66,7 @@ const DiscoverMovies = () => {
const [showFilters, setShowFilters] = useState(false);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const title = intl.formatMessage(messages.discovermovies);

View File

@@ -3,7 +3,7 @@ import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { TvNetwork } from '@server/models/common';
import type { TvResult } from '@server/models/Search';
@@ -33,7 +33,7 @@ const DiscoverTvNetwork = () => {
);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const title = isLoadingInitialData

View File

@@ -3,7 +3,7 @@ import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { ProductionCompany } from '@server/models/common';
import type { MovieResult } from '@server/models/Search';
@@ -33,7 +33,7 @@ const DiscoverMovieStudio = () => {
);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const title = isLoadingInitialData

View File

@@ -10,7 +10,7 @@ import {
import FilterSlideover from '@app/components/Discover/FilterSlideover';
import useDiscover from '@app/hooks/useDiscover';
import { useUpdateQueryParams } from '@app/hooks/useUpdateQueryParams';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import { BarsArrowDownIcon, FunnelIcon } from '@heroicons/react/24/solid';
import type { SortOptions as TMDBSortOptions } from '@server/api/themoviedb';
@@ -64,7 +64,7 @@ const DiscoverTv = () => {
});
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const title = intl.formatMessage(messages.discovertv);

View File

@@ -3,7 +3,7 @@ import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { TvResult } from '@server/models/Search';
import { useRouter } from 'next/router';
@@ -31,7 +31,7 @@ const DiscoverTvGenre = () => {
);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const title = isLoadingInitialData

View File

@@ -3,7 +3,7 @@ import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover, { encodeURIExtraParams } from '@app/hooks/useDiscover';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { TmdbKeyword } from '@server/api/themoviedb/interfaces';
import type { TvResult } from '@server/models/Search';
@@ -35,7 +35,7 @@ const DiscoverTvKeyword = () => {
);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const title = isLoadingInitialData

View File

@@ -3,7 +3,7 @@ import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { TvResult } from '@server/models/Search';
import { useRouter } from 'next/router';
@@ -37,7 +37,7 @@ const DiscoverTvLanguage = () => {
>(`/api/v1/discover/tv/language/${router.query.language}`);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const title = isLoadingInitialData

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { TvResult } from '@server/models/Search';
import { useIntl } from 'react-intl';
@@ -23,7 +23,7 @@ const DiscoverTvUpcoming = () => {
} = useDiscover<TvResult>('/api/v1/discover/tv/upcoming');
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
return (

View File

@@ -3,7 +3,7 @@ import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import { useUser } from '@app/hooks/useUser';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { WatchlistItem } from '@server/interfaces/api/discoverInterfaces';
import Link from 'next/link';
@@ -43,7 +43,7 @@ const DiscoverWatchlist = () => {
);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const title = intl.formatMessage(

View File

@@ -3,7 +3,7 @@ import LoadingSpinner from '@app/components/Common/LoadingSpinner';
import PageTitle from '@app/components/Common/PageTitle';
import { genreColorMap } from '@app/components/Discover/constants';
import GenreCard from '@app/components/GenreCard';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { GenreSliderItem } from '@server/interfaces/api/discoverInterfaces';
import { useIntl } from 'react-intl';
@@ -24,7 +24,7 @@ const MovieGenreList = () => {
}
if (!data) {
return <Error statusCode={404} />;
return <ErrorPage statusCode={404} />;
}
return (

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type {
MovieResult,
@@ -30,7 +30,7 @@ const Trending = () => {
);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
return (

View File

@@ -3,7 +3,7 @@ import LoadingSpinner from '@app/components/Common/LoadingSpinner';
import PageTitle from '@app/components/Common/PageTitle';
import { genreColorMap } from '@app/components/Discover/constants';
import GenreCard from '@app/components/GenreCard';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { GenreSliderItem } from '@server/interfaces/api/discoverInterfaces';
import { useIntl } from 'react-intl';
@@ -24,7 +24,7 @@ const TvGenreList = () => {
}
if (!data) {
return <Error statusCode={404} />;
return <ErrorPage statusCode={404} />;
}
return (

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { MovieResult } from '@server/models/Search';
import { useIntl } from 'react-intl';
@@ -25,7 +25,7 @@ const UpcomingMovies = () => {
} = useDiscover<MovieResult>('/api/v1/discover/movies/upcoming');
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
return (

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import LoadingSpinner from '@app/components/Common/LoadingSpinner';
import PageTitle from '@app/components/Common/PageTitle';
import PersonCard from '@app/components/PersonCard';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { MovieDetails } from '@server/models/Movie';
import Link from 'next/link';
@@ -26,7 +26,7 @@ const MovieCast = () => {
}
if (!data) {
return <Error statusCode={404} />;
return <ErrorPage statusCode={404} />;
}
return (

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import LoadingSpinner from '@app/components/Common/LoadingSpinner';
import PageTitle from '@app/components/Common/PageTitle';
import PersonCard from '@app/components/PersonCard';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { MovieDetails } from '@server/models/Movie';
import Link from 'next/link';
@@ -26,7 +26,7 @@ const MovieCrew = () => {
}
if (!data) {
return <Error statusCode={404} />;
return <ErrorPage statusCode={404} />;
}
return (

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { MovieDetails } from '@server/models/Movie';
import type { MovieResult } from '@server/models/Search';
@@ -34,7 +34,7 @@ const MovieRecommendations = () => {
);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
return (

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { MovieDetails } from '@server/models/Movie';
import type { MovieResult } from '@server/models/Search';
@@ -32,7 +32,7 @@ const MovieSimilar = () => {
} = useDiscover<MovieResult>(`/api/v1/movie/${router.query.movieId}/similar`);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
return (

View File

@@ -5,7 +5,7 @@ import LoadingSpinner from '@app/components/Common/LoadingSpinner';
import PageTitle from '@app/components/Common/PageTitle';
import TitleCard from '@app/components/TitleCard';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { PersonCombinedCreditsResponse } from '@server/interfaces/api/personInterfaces';
import type { PersonDetails as PersonDetailsType } from '@server/models/Person';
@@ -79,7 +79,7 @@ const PersonDetails = () => {
}
if (!data) {
return <Error statusCode={404} />;
return <ErrorPage statusCode={404} />;
}
const personAttributes: string[] = [];

View File

@@ -635,7 +635,7 @@ const RequestItem = ({ request, revalidateList }: RequestItemProps) => {
<span className="avatar-sm ml-1.5">
<CachedImage
type="avatar"
src={requestData.requestedBy.avatar}
src={requestData.modifiedBy.avatar}
alt=""
className="avatar-sm object-cover"
width={20}

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type {
MovieResult,
@@ -38,7 +38,7 @@ const Search = () => {
);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
return (

View File

@@ -5,7 +5,7 @@ import LoadingSpinner from '@app/components/Common/LoadingSpinner';
import PageTitle from '@app/components/Common/PageTitle';
import Releases from '@app/components/Settings/SettingsAbout/Releases';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import { InformationCircleIcon } from '@heroicons/react/24/solid';
import type {
@@ -51,7 +51,7 @@ const SettingsAbout = () => {
}
if (!data) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
return (

View File

@@ -8,7 +8,7 @@ import Tooltip from '@app/components/Common/Tooltip';
import useDebouncedState from '@app/hooks/useDebouncedState';
import { useUpdateQueryParams } from '@app/hooks/useUpdateQueryParams';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import { Transition } from '@headlessui/react';
import {
@@ -128,7 +128,7 @@ const SettingsLogs = () => {
// check if there's no data and no errors in the table
// so as to show a spinner inside the table and not refresh the whole component
if (!data && error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const hasNextPage = data?.pageInfo.pages ?? 0 > pageIndex + 1;

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import LoadingSpinner from '@app/components/Common/LoadingSpinner';
import PageTitle from '@app/components/Common/PageTitle';
import PersonCard from '@app/components/PersonCard';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { TvDetails } from '@server/models/Tv';
import Link from 'next/link';
@@ -24,7 +24,7 @@ const TvCast = () => {
}
if (!data) {
return <Error statusCode={404} />;
return <ErrorPage statusCode={404} />;
}
return (

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import LoadingSpinner from '@app/components/Common/LoadingSpinner';
import PageTitle from '@app/components/Common/PageTitle';
import PersonCard from '@app/components/PersonCard';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { TvDetails } from '@server/models/Tv';
import Link from 'next/link';
@@ -24,7 +24,7 @@ const TvCrew = () => {
}
if (!data) {
return <Error statusCode={404} />;
return <ErrorPage statusCode={404} />;
}
return (

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { TvResult } from '@server/models/Search';
import type { TvDetails } from '@server/models/Tv';
@@ -30,7 +30,7 @@ const TvRecommendations = () => {
} = useDiscover<TvResult>(`/api/v1/tv/${router.query.tvId}/recommendations`);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
return (

View File

@@ -2,7 +2,7 @@ import Header from '@app/components/Common/Header';
import ListView from '@app/components/Common/ListView';
import PageTitle from '@app/components/Common/PageTitle';
import useDiscover from '@app/hooks/useDiscover';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { TvResult } from '@server/models/Search';
import type { TvDetails } from '@server/models/Tv';
@@ -30,7 +30,7 @@ const TvSimilar = () => {
} = useDiscover<TvResult>(`/api/v1/tv/${router.query.tvId}/similar`);
if (error) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
return (

View File

@@ -30,7 +30,7 @@ import useLocale from '@app/hooks/useLocale';
import useSettings from '@app/hooks/useSettings';
import { Permission, useUser } from '@app/hooks/useUser';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import { sortCrewPriority } from '@app/utils/creditHelpers';
import defineMessages from '@app/utils/defineMessages';
import { refreshIntervalHelper } from '@app/utils/refreshIntervalHelper';
@@ -177,7 +177,7 @@ const TvDetails = ({ tv }: TvDetailsProps) => {
}
if (!data) {
return <Error statusCode={404} />;
return <ErrorPage statusCode={404} />;
}
const mediaLinks: PlayButtonLink[] = [];

View File

@@ -8,7 +8,7 @@ import type { SettingsRoute } from '@app/components/Common/SettingsTabs';
import SettingsTabs from '@app/components/Common/SettingsTabs';
import { useUser } from '@app/hooks/useUser';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import { CloudIcon, EnvelopeIcon } from '@heroicons/react/24/solid';
import type { UserSettingsNotificationsResponse } from '@server/interfaces/api/userSettingsInterfaces';
@@ -124,7 +124,7 @@ const UserNotificationSettings = ({
}
if (!data) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
return (

View File

@@ -7,7 +7,7 @@ import ProfileHeader from '@app/components/UserProfile/ProfileHeader';
import useSettings from '@app/hooks/useSettings';
import { useUser } from '@app/hooks/useUser';
import globalMessages from '@app/i18n/globalMessages';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import type { UserSettingsNotificationsResponse } from '@server/interfaces/api/userSettingsInterfaces';
import { hasPermission, Permission } from '@server/lib/permissions';
@@ -43,7 +43,7 @@ const UserSettings = ({ children }: UserSettingsProps) => {
}
if (!user) {
return <Error statusCode={500} />;
return <ErrorPage statusCode={500} />;
}
const settingsRoutes: SettingsRoute[] = [

View File

@@ -7,7 +7,7 @@ import Slider from '@app/components/Slider';
import TmdbTitleCard from '@app/components/TitleCard/TmdbTitleCard';
import ProfileHeader from '@app/components/UserProfile/ProfileHeader';
import { Permission, UserType, useUser } from '@app/hooks/useUser';
import Error from '@app/pages/_error';
import ErrorPage from '@app/pages/_error';
import defineMessages from '@app/utils/defineMessages';
import { ArrowRightCircleIcon } from '@heroicons/react/24/outline';
import type { WatchlistResponse } from '@server/interfaces/api/discoverInterfaces';
@@ -116,7 +116,7 @@ const UserProfile = () => {
}
if (!user) {
return <Error statusCode={404} />;
return <ErrorPage statusCode={404} />;
}
const watchlistSliderTitle = intl.formatMessage(