Skip to content

Commit

Permalink
Consider tracker logged out if token is expired
Browse files Browse the repository at this point in the history
Server returns logged in state for a tracker even while the token has expired
  • Loading branch information
schroda committed May 22, 2024
1 parent 871908e commit ea6eac5
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
12 changes: 6 additions & 6 deletions src/components/tracker/SettingsTrackerCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -93,20 +93,20 @@ 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>
)}
</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 },
Expand Down Expand Up @@ -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>
Expand Down
8 changes: 6 additions & 2 deletions src/lib/data/Trackers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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']> };

Expand All @@ -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>(
Expand Down

0 comments on commit ea6eac5

Please sign in to comment.