mirror of
https://github.com/fallenbagel/jellyseerr.git
synced 2025-12-31 19:59:31 -05:00
build(deps): bump dependencies (#2427)
* build(deps): bump dependencies * build(deps): bump next to 12.0.8 * build(deps): bump swr to 1.1.2 * build(deps): bump more dependencies * build(deps): bump husky to 7.0.4 * fix: remove user list button outlines * build(deps): bump dependencies again * build(deps): bump dependencies once more
This commit is contained in:
@@ -41,13 +41,14 @@ const CollectionDetails: React.FC<CollectionDetailsProps> = ({
|
||||
const [requestModal, setRequestModal] = useState(false);
|
||||
const [is4k, setIs4k] = useState(false);
|
||||
|
||||
const { data, error, revalidate } = useSWR<Collection>(
|
||||
`/api/v1/collection/${router.query.collectionId}`,
|
||||
{
|
||||
initialData: collection,
|
||||
revalidateOnMount: true,
|
||||
}
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<Collection>(`/api/v1/collection/${router.query.collectionId}`, {
|
||||
fallbackData: collection,
|
||||
revalidateOnMount: true,
|
||||
});
|
||||
|
||||
const { data: genres } =
|
||||
useSWR<{ id: number; name: string }[]>(`/api/v1/genres/movie`);
|
||||
|
||||
@@ -80,7 +80,7 @@ const IssueDetails: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const [showDeleteModal, setShowDeleteModal] = useState(false);
|
||||
const { user: currentUser, hasPermission } = useUser();
|
||||
const { data: issueData, revalidate: revalidateIssue } = useSWR<Issue>(
|
||||
const { data: issueData, mutate: revalidateIssue } = useSWR<Issue>(
|
||||
`/api/v1/issue/${router.query.issueId}`
|
||||
);
|
||||
const { data, error } = useSWR<MovieDetails | TvDetails>(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { ArrowCircleRightIcon } from '@heroicons/react/outline';
|
||||
import Link from 'next/link';
|
||||
import React, { useEffect } from 'react';
|
||||
import { useSWRInfinite } from 'swr';
|
||||
import useSWRInfinite from 'swr/infinite';
|
||||
import { MediaStatus } from '../../../server/constants/media';
|
||||
import type {
|
||||
MovieResult,
|
||||
|
||||
@@ -90,12 +90,13 @@ const MovieDetails: React.FC<MovieDetailsProps> = ({ movie }) => {
|
||||
const [showMoreStudios, setShowMoreStudios] = useState(false);
|
||||
const [showIssueModal, setShowIssueModal] = useState(false);
|
||||
|
||||
const { data, error, revalidate } = useSWR<MovieDetailsType>(
|
||||
`/api/v1/movie/${router.query.movieId}`,
|
||||
{
|
||||
initialData: movie,
|
||||
}
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<MovieDetailsType>(`/api/v1/movie/${router.query.movieId}`, {
|
||||
fallbackData: movie,
|
||||
});
|
||||
|
||||
const { data: ratingData } = useSWR<RTRating>(
|
||||
`/api/v1/movie/${router.query.movieId}/ratings`
|
||||
|
||||
@@ -112,9 +112,9 @@ const RequestCard: React.FC<RequestCardProps> = ({ request, onTitleData }) => {
|
||||
const {
|
||||
data: requestData,
|
||||
error: requestError,
|
||||
revalidate,
|
||||
mutate: revalidate,
|
||||
} = useSWR<MediaRequest>(`/api/v1/request/${request.id}`, {
|
||||
initialData: request,
|
||||
fallbackData: request,
|
||||
});
|
||||
|
||||
const modifyRequest = async (type: 'approve' | 'decline') => {
|
||||
|
||||
@@ -106,13 +106,12 @@ const RequestItem: React.FC<RequestItemProps> = ({
|
||||
const { data: title, error } = useSWR<MovieDetails | TvDetails>(
|
||||
inView ? url : null
|
||||
);
|
||||
const {
|
||||
data: requestData,
|
||||
revalidate,
|
||||
mutate,
|
||||
} = useSWR<MediaRequest>(`/api/v1/request/${request.id}`, {
|
||||
initialData: request,
|
||||
});
|
||||
const { data: requestData, mutate: revalidate } = useSWR<MediaRequest>(
|
||||
`/api/v1/request/${request.id}`,
|
||||
{
|
||||
fallbackData: request,
|
||||
}
|
||||
);
|
||||
|
||||
const [isRetrying, setRetrying] = useState(false);
|
||||
|
||||
@@ -135,7 +134,7 @@ const RequestItem: React.FC<RequestItemProps> = ({
|
||||
|
||||
try {
|
||||
const result = await axios.post(`/api/v1/request/${request.id}/retry`);
|
||||
mutate(result.data);
|
||||
revalidate(result.data);
|
||||
} catch (e) {
|
||||
addToast(intl.formatMessage(messages.failedretry), {
|
||||
autoDismiss: true,
|
||||
|
||||
@@ -51,7 +51,11 @@ const RequestList: React.FC = () => {
|
||||
const pageIndex = page - 1;
|
||||
const updateQueryParams = useUpdateQueryParams({ page: page.toString() });
|
||||
|
||||
const { data, error, revalidate } = useSWR<RequestResultsResponse>(
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<RequestResultsResponse>(
|
||||
`/api/v1/request?take=${currentPageSize}&skip=${
|
||||
pageIndex * currentPageSize
|
||||
}&filter=${currentFilter}&sort=${currentSort}${
|
||||
|
||||
@@ -34,9 +34,11 @@ const NotificationsDiscord: React.FC = () => {
|
||||
const settings = useSettings();
|
||||
const { addToast, removeToast } = useToasts();
|
||||
const [isTesting, setIsTesting] = useState(false);
|
||||
const { data, error, revalidate } = useSWR(
|
||||
'/api/v1/settings/notifications/discord'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR('/api/v1/settings/notifications/discord');
|
||||
|
||||
const NotificationsDiscordSchema = Yup.object().shape({
|
||||
botAvatarUrl: Yup.string()
|
||||
|
||||
@@ -58,9 +58,11 @@ const NotificationsEmail: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const { addToast, removeToast } = useToasts();
|
||||
const [isTesting, setIsTesting] = useState(false);
|
||||
const { data, error, revalidate } = useSWR(
|
||||
'/api/v1/settings/notifications/email'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR('/api/v1/settings/notifications/email');
|
||||
|
||||
const NotificationsEmailSchema = Yup.object().shape(
|
||||
{
|
||||
|
||||
@@ -30,9 +30,11 @@ const NotificationsGotify: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const { addToast, removeToast } = useToasts();
|
||||
const [isTesting, setIsTesting] = useState(false);
|
||||
const { data, error, revalidate } = useSWR(
|
||||
'/api/v1/settings/notifications/gotify'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR('/api/v1/settings/notifications/gotify');
|
||||
|
||||
const NotificationsGotifySchema = Yup.object().shape({
|
||||
url: Yup.string()
|
||||
|
||||
@@ -31,9 +31,11 @@ const NotificationsLunaSea: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const { addToast, removeToast } = useToasts();
|
||||
const [isTesting, setIsTesting] = useState(false);
|
||||
const { data, error, revalidate } = useSWR(
|
||||
'/api/v1/settings/notifications/lunasea'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR('/api/v1/settings/notifications/lunasea');
|
||||
|
||||
const NotificationsLunaSeaSchema = Yup.object().shape({
|
||||
webhookUrl: Yup.string()
|
||||
|
||||
@@ -31,9 +31,11 @@ const NotificationsPushbullet: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const { addToast, removeToast } = useToasts();
|
||||
const [isTesting, setIsTesting] = useState(false);
|
||||
const { data, error, revalidate } = useSWR(
|
||||
'/api/v1/settings/notifications/pushbullet'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR('/api/v1/settings/notifications/pushbullet');
|
||||
|
||||
const NotificationsPushbulletSchema = Yup.object().shape({
|
||||
accessToken: Yup.string().when('enabled', {
|
||||
|
||||
@@ -33,9 +33,11 @@ const NotificationsPushover: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const { addToast, removeToast } = useToasts();
|
||||
const [isTesting, setIsTesting] = useState(false);
|
||||
const { data, error, revalidate } = useSWR(
|
||||
'/api/v1/settings/notifications/pushover'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR('/api/v1/settings/notifications/pushover');
|
||||
|
||||
const NotificationsPushoverSchema = Yup.object().shape({
|
||||
accessToken: Yup.string()
|
||||
|
||||
@@ -29,9 +29,11 @@ const NotificationsSlack: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const { addToast, removeToast } = useToasts();
|
||||
const [isTesting, setIsTesting] = useState(false);
|
||||
const { data, error, revalidate } = useSWR(
|
||||
'/api/v1/settings/notifications/slack'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR('/api/v1/settings/notifications/slack');
|
||||
|
||||
const NotificationsSlackSchema = Yup.object().shape({
|
||||
webhookUrl: Yup.string()
|
||||
|
||||
@@ -38,9 +38,11 @@ const NotificationsTelegram: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const { addToast, removeToast } = useToasts();
|
||||
const [isTesting, setIsTesting] = useState(false);
|
||||
const { data, error, revalidate } = useSWR(
|
||||
'/api/v1/settings/notifications/telegram'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR('/api/v1/settings/notifications/telegram');
|
||||
|
||||
const NotificationsTelegramSchema = Yup.object().shape({
|
||||
botAPI: Yup.string().when('enabled', {
|
||||
|
||||
@@ -26,9 +26,11 @@ const NotificationsWebPush: React.FC = () => {
|
||||
const { addToast, removeToast } = useToasts();
|
||||
const [isTesting, setIsTesting] = useState(false);
|
||||
const [isHttps, setIsHttps] = useState(false);
|
||||
const { data, error, revalidate } = useSWR(
|
||||
'/api/v1/settings/notifications/webpush'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR('/api/v1/settings/notifications/webpush');
|
||||
|
||||
useEffect(() => {
|
||||
setIsHttps(window.location.protocol.startsWith('https'));
|
||||
|
||||
@@ -74,9 +74,11 @@ const NotificationsWebhook: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const { addToast, removeToast } = useToasts();
|
||||
const [isTesting, setIsTesting] = useState(false);
|
||||
const { data, error, revalidate } = useSWR(
|
||||
'/api/v1/settings/notifications/webhook'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR('/api/v1/settings/notifications/webhook');
|
||||
|
||||
const NotificationsWebhookSchema = Yup.object().shape({
|
||||
webhookUrl: Yup.string()
|
||||
|
||||
@@ -77,10 +77,14 @@ interface Job {
|
||||
const SettingsJobs: React.FC = () => {
|
||||
const intl = useIntl();
|
||||
const { addToast } = useToasts();
|
||||
const { data, error, revalidate } = useSWR<Job[]>('/api/v1/settings/jobs', {
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<Job[]>('/api/v1/settings/jobs', {
|
||||
refreshInterval: 5000,
|
||||
});
|
||||
const { data: cacheData, revalidate: cacheRevalidate } = useSWR<CacheItem[]>(
|
||||
const { data: cacheData, mutate: cacheRevalidate } = useSWR<CacheItem[]>(
|
||||
'/api/v1/settings/cache',
|
||||
{
|
||||
refreshInterval: 10000,
|
||||
|
||||
@@ -65,9 +65,11 @@ const SettingsMain: React.FC = () => {
|
||||
const { user: currentUser, hasPermission: userHasPermission } = useUser();
|
||||
const intl = useIntl();
|
||||
const { setLocale } = useLocale();
|
||||
const { data, error, revalidate } = useSWR<MainSettings>(
|
||||
'/api/v1/settings/main'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<MainSettings>('/api/v1/settings/main');
|
||||
const { data: userData } = useSWR<UserSettingsGeneralResponse>(
|
||||
currentUser ? `/api/v1/user/${currentUser.id}/settings/main` : null
|
||||
);
|
||||
|
||||
@@ -96,10 +96,12 @@ const SettingsPlex: React.FC<SettingsPlexProps> = ({ onComplete }) => {
|
||||
const [availableServers, setAvailableServers] = useState<PlexDevice[] | null>(
|
||||
null
|
||||
);
|
||||
const { data, error, revalidate } = useSWR<PlexSettings>(
|
||||
'/api/v1/settings/plex'
|
||||
);
|
||||
const { data: dataSync, revalidate: revalidateSync } = useSWR<SyncStatus>(
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<PlexSettings>('/api/v1/settings/plex');
|
||||
const { data: dataSync, mutate: revalidateSync } = useSWR<SyncStatus>(
|
||||
'/api/v1/settings/plex/sync',
|
||||
{
|
||||
refreshInterval: 1000,
|
||||
|
||||
@@ -165,12 +165,12 @@ const SettingsServices: React.FC = () => {
|
||||
const {
|
||||
data: radarrData,
|
||||
error: radarrError,
|
||||
revalidate: revalidateRadarr,
|
||||
mutate: revalidateRadarr,
|
||||
} = useSWR<RadarrSettings[]>('/api/v1/settings/radarr');
|
||||
const {
|
||||
data: sonarrData,
|
||||
error: sonarrError,
|
||||
revalidate: revalidateSonarr,
|
||||
mutate: revalidateSonarr,
|
||||
} = useSWR<SonarrSettings[]>('/api/v1/settings/sonarr');
|
||||
const [editRadarrModal, setEditRadarrModal] = useState<{
|
||||
open: boolean;
|
||||
|
||||
@@ -33,9 +33,11 @@ const messages = defineMessages({
|
||||
const SettingsUsers: React.FC = () => {
|
||||
const { addToast } = useToasts();
|
||||
const intl = useIntl();
|
||||
const { data, error, revalidate } = useSWR<MainSettings>(
|
||||
'/api/v1/settings/main'
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<MainSettings>('/api/v1/settings/main');
|
||||
|
||||
if (!data && !error) {
|
||||
return <LoadingSpinner />;
|
||||
|
||||
@@ -83,12 +83,13 @@ const TvDetails: React.FC<TvDetailsProps> = ({ tv }) => {
|
||||
const [showManager, setShowManager] = useState(false);
|
||||
const [showIssueModal, setShowIssueModal] = useState(false);
|
||||
|
||||
const { data, error, revalidate } = useSWR<TvDetailsType>(
|
||||
`/api/v1/tv/${router.query.tvId}`,
|
||||
{
|
||||
initialData: tv,
|
||||
}
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<TvDetailsType>(`/api/v1/tv/${router.query.tvId}`, {
|
||||
fallbackData: tv,
|
||||
});
|
||||
|
||||
const { data: ratingData } = useSWR<RTRating>(
|
||||
`/api/v1/tv/${router.query.tvId}/ratings`
|
||||
|
||||
@@ -93,7 +93,11 @@ const UserList: React.FC = () => {
|
||||
const pageIndex = page - 1;
|
||||
const updateQueryParams = useUpdateQueryParams({ page: page.toString() });
|
||||
|
||||
const { data, error, revalidate } = useSWR<UserResultsResponse>(
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<UserResultsResponse>(
|
||||
`/api/v1/user?take=${currentPageSize}&skip=${
|
||||
pageIndex * currentPageSize
|
||||
}&sort=${currentSort}`
|
||||
@@ -472,7 +476,7 @@ const UserList: React.FC = () => {
|
||||
<div className="flex flex-col flex-grow mt-2 lg:flex-row lg:flex-grow-0">
|
||||
<div className="flex flex-col justify-between flex-grow mb-2 sm:flex-row lg:mb-0 lg:flex-grow-0">
|
||||
<Button
|
||||
className="flex-grow mb-2 sm:mb-0 sm:mr-2 outline"
|
||||
className="flex-grow mb-2 sm:mb-0 sm:mr-2"
|
||||
buttonType="primary"
|
||||
onClick={() => setCreateModal({ isOpen: true })}
|
||||
>
|
||||
@@ -480,7 +484,7 @@ const UserList: React.FC = () => {
|
||||
<span>{intl.formatMessage(messages.createlocaluser)}</span>
|
||||
</Button>
|
||||
<Button
|
||||
className="flex-grow outline lg:mr-2"
|
||||
className="flex-grow lg:mr-2"
|
||||
buttonType="primary"
|
||||
onClick={() => setShowImportModal(true)}
|
||||
>
|
||||
|
||||
@@ -55,12 +55,20 @@ const UserGeneralSettings: React.FC = () => {
|
||||
const [movieQuotaEnabled, setMovieQuotaEnabled] = useState(false);
|
||||
const [tvQuotaEnabled, setTvQuotaEnabled] = useState(false);
|
||||
const router = useRouter();
|
||||
const { user, hasPermission, mutate } = useUser({
|
||||
const {
|
||||
user,
|
||||
hasPermission,
|
||||
revalidate: revalidateUser,
|
||||
} = useUser({
|
||||
id: Number(router.query.userId),
|
||||
});
|
||||
const { user: currentUser, hasPermission: currentHasPermission } = useUser();
|
||||
const { currentSettings } = useSettings();
|
||||
const { data, error, revalidate } = useSWR<UserSettingsGeneralResponse>(
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<UserSettingsGeneralResponse>(
|
||||
user ? `/api/v1/user/${user?.id}/settings/main` : null
|
||||
);
|
||||
|
||||
@@ -140,7 +148,7 @@ const UserGeneralSettings: React.FC = () => {
|
||||
});
|
||||
} finally {
|
||||
revalidate();
|
||||
mutate();
|
||||
revalidateUser();
|
||||
}
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -28,7 +28,11 @@ const UserNotificationsDiscord: React.FC = () => {
|
||||
const { addToast } = useToasts();
|
||||
const router = useRouter();
|
||||
const { user } = useUser({ id: Number(router.query.userId) });
|
||||
const { data, error, revalidate } = useSWR<UserSettingsNotificationsResponse>(
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<UserSettingsNotificationsResponse>(
|
||||
user ? `/api/v1/user/${user?.id}/settings/notifications` : null
|
||||
);
|
||||
|
||||
|
||||
@@ -33,7 +33,11 @@ const UserEmailSettings: React.FC = () => {
|
||||
const { addToast } = useToasts();
|
||||
const router = useRouter();
|
||||
const { user } = useUser({ id: Number(router.query.userId) });
|
||||
const { data, error, revalidate } = useSWR<UserSettingsNotificationsResponse>(
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<UserSettingsNotificationsResponse>(
|
||||
user ? `/api/v1/user/${user?.id}/settings/notifications` : null
|
||||
);
|
||||
|
||||
|
||||
@@ -29,7 +29,11 @@ const UserPushbulletSettings: React.FC = () => {
|
||||
const { addToast } = useToasts();
|
||||
const router = useRouter();
|
||||
const { user } = useUser({ id: Number(router.query.userId) });
|
||||
const { data, error, revalidate } = useSWR<UserSettingsNotificationsResponse>(
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<UserSettingsNotificationsResponse>(
|
||||
user ? `/api/v1/user/${user?.id}/settings/notifications` : null
|
||||
);
|
||||
|
||||
|
||||
@@ -34,7 +34,11 @@ const UserPushoverSettings: React.FC = () => {
|
||||
const { addToast } = useToasts();
|
||||
const router = useRouter();
|
||||
const { user } = useUser({ id: Number(router.query.userId) });
|
||||
const { data, error, revalidate } = useSWR<UserSettingsNotificationsResponse>(
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<UserSettingsNotificationsResponse>(
|
||||
user ? `/api/v1/user/${user?.id}/settings/notifications` : null
|
||||
);
|
||||
|
||||
|
||||
@@ -30,7 +30,11 @@ const UserTelegramSettings: React.FC = () => {
|
||||
const { addToast } = useToasts();
|
||||
const router = useRouter();
|
||||
const { user } = useUser({ id: Number(router.query.userId) });
|
||||
const { data, error, revalidate } = useSWR<UserSettingsNotificationsResponse>(
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<UserSettingsNotificationsResponse>(
|
||||
user ? `/api/v1/user/${user?.id}/settings/notifications` : null
|
||||
);
|
||||
|
||||
|
||||
@@ -25,7 +25,11 @@ const UserWebPushSettings: React.FC = () => {
|
||||
const { addToast } = useToasts();
|
||||
const router = useRouter();
|
||||
const { user } = useUser({ id: Number(router.query.userId) });
|
||||
const { data, error, revalidate } = useSWR<UserSettingsNotificationsResponse>(
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<UserSettingsNotificationsResponse>(
|
||||
user ? `/api/v1/user/${user?.id}/settings/notifications` : null
|
||||
);
|
||||
|
||||
|
||||
@@ -45,7 +45,11 @@ const UserPasswordChange: React.FC = () => {
|
||||
const router = useRouter();
|
||||
const { user: currentUser } = useUser();
|
||||
const { user, hasPermission } = useUser({ id: Number(router.query.userId) });
|
||||
const { data, error, revalidate } = useSWR<{ hasPassword: boolean }>(
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<{ hasPassword: boolean }>(
|
||||
user ? `/api/v1/user/${user?.id}/settings/password` : null
|
||||
);
|
||||
|
||||
|
||||
@@ -27,8 +27,14 @@ const UserPermissions: React.FC = () => {
|
||||
const { addToast } = useToasts();
|
||||
const router = useRouter();
|
||||
const { user: currentUser } = useUser();
|
||||
const { user, mutate } = useUser({ id: Number(router.query.userId) });
|
||||
const { data, error, revalidate } = useSWR<{ permissions?: number }>(
|
||||
const { user, revalidate: revalidateUser } = useUser({
|
||||
id: Number(router.query.userId),
|
||||
});
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<{ permissions?: number }>(
|
||||
user ? `/api/v1/user/${user?.id}/settings/permissions` : null
|
||||
);
|
||||
|
||||
@@ -90,7 +96,7 @@ const UserPermissions: React.FC = () => {
|
||||
});
|
||||
} finally {
|
||||
revalidate();
|
||||
mutate();
|
||||
revalidateUser();
|
||||
}
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -35,7 +35,7 @@ export const SettingsProvider: React.FC<SettingsContextProps> = ({
|
||||
}) => {
|
||||
const { data, error } = useSWR<PublicSettingsResponse>(
|
||||
'/api/v1/settings/public',
|
||||
{ initialData: currentSettings }
|
||||
{ fallbackData: currentSettings }
|
||||
);
|
||||
|
||||
let newSettings = defaultSettings;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import React, { useEffect, useRef } from 'react';
|
||||
import { useUser, User } from '../hooks/useUser';
|
||||
import { useRouter } from 'next/dist/client/router';
|
||||
import React, { useEffect, useRef } from 'react';
|
||||
import { User, useUser } from '../hooks/useUser';
|
||||
|
||||
interface UserContextProps {
|
||||
initialUser: User;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useSWRInfinite } from 'swr';
|
||||
import useSWRInfinite from 'swr/infinite';
|
||||
import { MediaStatus } from '../../server/constants/media';
|
||||
import useSettings from './useSettings';
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import useSwr from 'swr';
|
||||
import useSWR from 'swr';
|
||||
import { MutatorCallback } from 'swr/dist/types';
|
||||
import { UserType } from '../../server/constants/user';
|
||||
import {
|
||||
@@ -40,8 +40,7 @@ interface UserHookResponse {
|
||||
user?: User;
|
||||
loading: boolean;
|
||||
error: string;
|
||||
revalidate: () => Promise<boolean>;
|
||||
mutate: (
|
||||
revalidate: (
|
||||
data?: User | Promise<User> | MutatorCallback<User> | undefined,
|
||||
shouldRevalidate?: boolean | undefined
|
||||
) => Promise<User | undefined>;
|
||||
@@ -55,15 +54,16 @@ export const useUser = ({
|
||||
id,
|
||||
initialData,
|
||||
}: { id?: number; initialData?: User } = {}): UserHookResponse => {
|
||||
const { data, error, revalidate, mutate } = useSwr<User>(
|
||||
id ? `/api/v1/user/${id}` : `/api/v1/auth/me`,
|
||||
{
|
||||
initialData,
|
||||
refreshInterval: 30000,
|
||||
errorRetryInterval: 30000,
|
||||
shouldRetryOnError: false,
|
||||
}
|
||||
);
|
||||
const {
|
||||
data,
|
||||
error,
|
||||
mutate: revalidate,
|
||||
} = useSWR<User>(id ? `/api/v1/user/${id}` : `/api/v1/auth/me`, {
|
||||
fallbackData: initialData,
|
||||
refreshInterval: 30000,
|
||||
errorRetryInterval: 30000,
|
||||
shouldRetryOnError: false,
|
||||
});
|
||||
|
||||
const checkPermission = (
|
||||
permission: Permission | Permission[],
|
||||
@@ -76,8 +76,7 @@ export const useUser = ({
|
||||
user: data,
|
||||
loading: !data && !error,
|
||||
error,
|
||||
revalidate,
|
||||
hasPermission: checkPermission,
|
||||
mutate,
|
||||
revalidate,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -12,24 +12,25 @@ const CollectionPage: NextPage<CollectionPageProps> = ({ collection }) => {
|
||||
return <CollectionDetails collection={collection} />;
|
||||
};
|
||||
|
||||
export const getServerSideProps: GetServerSideProps<CollectionPageProps> =
|
||||
async (ctx) => {
|
||||
const response = await axios.get<Collection>(
|
||||
`http://localhost:${process.env.PORT || 5055}/api/v1/collection/${
|
||||
ctx.query.collectionId
|
||||
}`,
|
||||
{
|
||||
headers: ctx.req?.headers?.cookie
|
||||
? { cookie: ctx.req.headers.cookie }
|
||||
: undefined,
|
||||
}
|
||||
);
|
||||
export const getServerSideProps: GetServerSideProps<
|
||||
CollectionPageProps
|
||||
> = async (ctx) => {
|
||||
const response = await axios.get<Collection>(
|
||||
`http://localhost:${process.env.PORT || 5055}/api/v1/collection/${
|
||||
ctx.query.collectionId
|
||||
}`,
|
||||
{
|
||||
headers: ctx.req?.headers?.cookie
|
||||
? { cookie: ctx.req.headers.cookie }
|
||||
: undefined,
|
||||
}
|
||||
);
|
||||
|
||||
return {
|
||||
props: {
|
||||
collection: response.data,
|
||||
},
|
||||
};
|
||||
return {
|
||||
props: {
|
||||
collection: response.data,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default CollectionPage;
|
||||
|
||||
Reference in New Issue
Block a user