You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
overseerr/src/components/PlexLoginButton/index.tsx

45 lines
1006 B

import React, { useState } from 'react';
import PlexOAuth from '../../utils/plex';
const plexOAuth = new PlexOAuth();
interface PlexLoginButtonProps {
onAuthToken: (authToken: string) => void;
onError?: (message: string) => void;
}
const PlexLoginButton: React.FC<PlexLoginButtonProps> = ({
onAuthToken,
onError,
}) => {
const [loading, setLoading] = useState<boolean>(false);
const getPlexLogin = async () => {
setLoading(true);
try {
const authToken = await plexOAuth.login();
onAuthToken(authToken);
setLoading(false);
} catch (e) {
if (onError) {
onError(e.message);
}
setLoading(false);
}
};
return (
<span className="inline-flex rounded-md shadow-sm">
<button
type="button"
onClick={() => getPlexLogin()}
disabled={loading}
className="plex-button"
>
{loading ? 'Loading...' : 'Login with Plex'}
</button>
</span>
);
};
export default PlexLoginButton;