Consider tracker logged out if token is expired

Server returns logged in state for a tracker even while the token has expired
This commit is contained in:
schroda
2024-05-22 23:24:05 +02:00
parent 871908eba9
commit ea6eac5066
2 changed files with 12 additions and 8 deletions

View File

@@ -24,7 +24,7 @@ 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 { TBaseTracker } from '@/lib/data/Trackers.ts';
import { TBaseTracker, Trackers } from '@/lib/data/Trackers.ts';
export const SettingsTrackerCard = ({ tracker }: { tracker: TBaseTracker }) => {
const { t } = useTranslation();
@@ -93,7 +93,7 @@ export const SettingsTrackerCard = ({ tracker }: { tracker: TBaseTracker }) => {
/>
</ListItemAvatar>
<ListItemText primary={tracker.name} />
{tracker.isLoggedIn && (
{Trackers.isLoggedIn(tracker) && (
<ListItemSecondaryAction>
<Chip label={t('global.label.logged_in')} color="success" />
</ListItemSecondaryAction>
@@ -101,12 +101,12 @@ export const SettingsTrackerCard = ({ tracker }: { tracker: TBaseTracker }) => {
</ListItemButton>
<Dialog
{...bindDialog(popupState)}
open={(tracker.isLoggedIn || !tracker.authUrl) && popupState.isOpen}
open={(Trackers.isLoggedIn(tracker) || !tracker.authUrl) && popupState.isOpen}
disableRestoreFocus
>
<DialogTitle>
{t(
tracker.isLoggedIn
Trackers.isLoggedIn(tracker)
? 'tracking.settings.dialog.title.log_out'
: 'tracking.settings.dialog.title.log_in',
{ name: tracker.name },
@@ -142,9 +142,9 @@ export const SettingsTrackerCard = ({ tracker }: { tracker: TBaseTracker }) => {
!tracker.isLoggedIn &&
(isCredentialLoginInProgress || !username.length || !password.length)
}
onClick={() => (tracker.isLoggedIn ? handleLogout() : handleLogin())}
onClick={() => (Trackers.isLoggedIn(tracker) ? handleLogout() : handleLogin())}
>
{t(tracker.isLoggedIn ? 'global.button.log_out' : 'global.button.log_in')}
{t(Trackers.isLoggedIn(tracker) ? 'global.button.log_out' : 'global.button.log_in')}
</Button>
</DialogActions>
</Dialog>

View File

@@ -26,7 +26,7 @@ export type TrackerManga = TrackerSearchQuery['searchTracker']['trackSearches'][
export type TBaseTracker = GetTrackersQuery['trackers']['nodes'][number];
type LoggedInInfo = Pick<TrackerType, 'isLoggedIn'>;
type LoggedInInfo = Pick<TrackerType, 'isLoggedIn' | 'isTokenExpired'>;
type TrackRecordTrackerInfo = { tracker: Partial<TrackRecordType['tracker']> };
@@ -43,8 +43,12 @@ export class Trackers {
return this.isUnsetDate(date) ? undefined : date;
}
static isLoggedIn<Tracker extends LoggedInInfo>(tracker: Tracker): boolean {
return tracker.isLoggedIn && !tracker.isTokenExpired;
}
static getLoggedIn<Tracker extends LoggedInInfo>(trackers: Tracker[]): Tracker[] {
return trackers.filter((tracker) => tracker.isLoggedIn);
return trackers.filter(this.isLoggedIn);
}
static getTrackers<TrackRecord extends TrackRecordTrackerInfo>(