/* * Copyright (C) Contributors to the Suwayomi project * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ import { useTranslation } from 'react-i18next'; import { useState } from 'react'; import PopupState, { bindDialog, bindTrigger } from 'material-ui-popup-state'; import ListItemButton from '@mui/material/ListItemButton'; import Chip from '@mui/material/Chip'; import ListItemAvatar from '@mui/material/ListItemAvatar'; import ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction'; import Avatar from '@mui/material/Avatar'; import ListItemText from '@mui/material/ListItemText'; import Dialog from '@mui/material/Dialog'; import DialogTitle from '@mui/material/DialogTitle'; import DialogContent from '@mui/material/DialogContent'; import TextField from '@mui/material/TextField'; import DialogActions from '@mui/material/DialogActions'; import Button from '@mui/material/Button'; import { PasswordTextField } from '@/components/atoms/PasswordTextField.tsx'; import { makeToast } from '@/components/util/Toast.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { Trackers, TTrackerSearch } from '@/lib/data/Trackers.ts'; export const SettingsTrackerCard = ({ tracker }: { tracker: TTrackerSearch }) => { const { t } = useTranslation(); const [loginTrackerCredentials, { loading: isCredentialLoginInProgress }] = requestManager.useLoginToTrackerCredentials(); const [logoutFromTracker] = requestManager.useLogoutFromTracker(); const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const isOAuthLogin = !tracker.isLoggedIn && !!tracker.authUrl; const handleLogout = async () => { try { await logoutFromTracker({ variables: { trackerId: tracker.id } }); } catch (e) { makeToast(t('tracking.action.logout.label.failure', { name: tracker.name }), 'error'); } }; const handleLogin = async () => { if (isOAuthLogin) { const state = { redirectUrl: `${window.location.origin}/tracker/login/oauth`, clientName: 'Suwayomi-WebUI', trackerId: tracker.id, trackerName: tracker.name, }; window.open(`${tracker.authUrl}&state=${JSON.stringify(state)}`, '_self'); return; } try { await loginTrackerCredentials({ variables: { input: { trackerId: tracker.id, username, password } } }); } catch (e) { makeToast(t('tracking.action.login.label.failure', { name: tracker.name }), 'error'); } }; const onClick = (openPopup: () => void) => { if (!isOAuthLogin) { openPopup(); return; } handleLogin(); }; return ( {(popupState) => ( <> onClick(popupState.open)} onTouchStart={() => onClick(popupState.open)} > {Trackers.isLoggedIn(tracker) && ( )} {t( Trackers.isLoggedIn(tracker) ? 'tracking.settings.dialog.title.log_out' : 'tracking.settings.dialog.title.log_in', { name: tracker.name }, )} {!isOAuthLogin && !tracker.isLoggedIn && ( setUsername(e.target.value)} /> setPassword(e.target.value)} /> )} )} ); };