fix: resolve TypeScript errors and ESLint warnings in login flow

- Add proper case block scoping with curly braces
- Update PlexProfile import path
- Add onError callback handling
- Fix dependency array in useEffect
This commit is contained in:
0xsysr3ll
2025-04-21 17:08:35 +02:00
parent 62b1bfcd89
commit 0a6c2ee9cc
2 changed files with 15 additions and 16 deletions

View File

@@ -16,6 +16,8 @@ const messages = defineMessages('components.Login.PlexProfileSelector', {
interface PlexProfileSelectorProps {
profiles: PlexProfile[];
mainUserId: number;
authToken: string | undefined;
onProfileSelected: (
profileId: string,
pin?: string,

View File

@@ -15,7 +15,7 @@ import { useUser } from '@app/hooks/useUser';
import defineMessages from '@app/utils/defineMessages';
import { Transition } from '@headlessui/react';
import { XCircleIcon } from '@heroicons/react/24/solid';
import { PlexProfile } from '@server/api/plex';
import type { PlexProfile } from '@server/api/plextv';
import { ApiErrorCode } from '@server/constants/error';
import { MediaServerType } from '@server/constants/server';
import axios from 'axios';
@@ -65,62 +65,56 @@ const Login = () => {
setProcessing(true);
try {
const response = await axios.post('/api/v1/auth/plex', { authToken });
switch (response.data?.status) {
case 'REQUIRES_PIN':
case 'REQUIRES_PIN': {
setPinProfileId(response.data.profileId);
setPinProfileName(response.data.profileName);
setShowPinEntry(true);
break;
case 'REQUIRES_PROFILE':
}
case 'REQUIRES_PROFILE': {
setProfiles(response.data.profiles);
profilesRef.current = response.data.profiles;
const rawUserId = response.data.mainUserId;
let numericUserId = Number(rawUserId);
if (!numericUserId || isNaN(numericUserId) || numericUserId <= 0) {
numericUserId = 1;
}
setMainUserId(numericUserId);
setShowProfileSelector(true);
break;
}
default:
if (response.data?.id) {
revalidate();
}
break;
}
} catch (e: any) {
} catch (e) {
const httpStatus = e?.response?.status;
const msg =
httpStatus === 403
? intl.formatMessage(messages.accessDenied)
: e?.response?.data?.message ??
intl.formatMessage(messages.authFailed);
setError(msg);
setAuthToken(undefined);
} finally {
setProcessing(false);
}
};
if (authToken) {
login();
}
}, [authToken, revalidate]);
}, [authToken, revalidate, intl]);
const handleSubmitProfile = async (
profileId: string,
pin?: string,
onError?: (message: string) => void
onError?: (msg: string) => void
) => {
setProcessing(true);
setError(null);
setError('');
try {
const payload = {
@@ -145,7 +139,7 @@ const Login = () => {
setPinError(null);
revalidate();
}
} catch (e: any) {
} catch (e) {
const code = e?.response?.data?.error as string | undefined;
const httpStatus = e?.response?.status;
let msg: string;
@@ -169,6 +163,9 @@ const Login = () => {
}
}
setError(msg);
if (onError) {
onError(msg);
}
}
};