Reduce requested tracker data in queries
This commit is contained in:
@@ -6,13 +6,7 @@
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import {
|
||||
GetMangaQuery,
|
||||
GetTrackersQuery,
|
||||
TrackerSearchQuery,
|
||||
TrackerType,
|
||||
TrackRecordType,
|
||||
} from '@/lib/graphql/generated/graphql.ts';
|
||||
import { TrackerType, TrackRecordType, TrackSearchType } from '@/lib/graphql/generated/graphql.ts';
|
||||
|
||||
export enum Tracker {
|
||||
MYANIMELIST = 1,
|
||||
@@ -20,15 +14,44 @@ export enum Tracker {
|
||||
|
||||
export const UNSET_DATE = '0';
|
||||
|
||||
export type TTrackRecord = GetMangaQuery['manga']['trackRecords']['nodes'][number];
|
||||
export type TTrackRecordBase = Pick<TrackRecordType, 'id' | 'remoteId' | 'title'>;
|
||||
|
||||
export type TrackerManga = TrackerSearchQuery['searchTracker']['trackSearches'][number];
|
||||
export type TTrackRecordBind = TTrackRecordBase &
|
||||
Pick<
|
||||
TrackRecordType,
|
||||
| 'trackerId'
|
||||
| 'remoteUrl'
|
||||
| 'status'
|
||||
| 'lastChapterRead'
|
||||
| 'totalChapters'
|
||||
| 'score'
|
||||
| 'displayScore'
|
||||
| 'startDate'
|
||||
| 'finishDate'
|
||||
>;
|
||||
|
||||
export type TBaseTracker = GetTrackersQuery['trackers']['nodes'][number];
|
||||
export type TTrackerManga = Pick<
|
||||
TrackSearchType,
|
||||
| 'id'
|
||||
| 'remoteId'
|
||||
| 'trackingUrl'
|
||||
| 'title'
|
||||
| 'coverUrl'
|
||||
| 'publishingType'
|
||||
| 'startDate'
|
||||
| 'publishingStatus'
|
||||
| 'summary'
|
||||
>;
|
||||
|
||||
export type TTrackerBase = Pick<TrackerType, 'id' | 'name' | 'icon' | 'isLoggedIn' | 'isTokenExpired'>;
|
||||
|
||||
export type TTrackerSearch = TTrackerBase & Pick<TrackerType, 'authUrl'>;
|
||||
|
||||
export type TTrackerBind = TTrackerBase & Pick<TrackerType, 'icon' | 'supportsTrackDeletion' | 'scores' | 'statuses'>;
|
||||
|
||||
type LoggedInInfo = Pick<TrackerType, 'isLoggedIn' | 'isTokenExpired'>;
|
||||
|
||||
type TrackRecordTrackerInfo = { tracker: Partial<TrackRecordType['tracker']> };
|
||||
type TrackRecordTrackerInfo = { tracker: TTrackerBind };
|
||||
|
||||
export class Trackers {
|
||||
static getIds(trackers: { id: number }[]): number[] {
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
|
||||
import gql from 'graphql-tag';
|
||||
import { SOURCE_BASE_FIELDS } from '@/lib/graphql/fragments/SourceFragments.ts';
|
||||
import { TRACKER_BIND_FIELDS } from '@/lib/graphql/fragments/TrackFragments.ts';
|
||||
import { TRACK_RECORD_BIND_FIELDS } from '@/lib/graphql/fragments/TrackRecordFragments.ts';
|
||||
|
||||
export const PAGE_INFO = gql`
|
||||
fragment PAGE_INFO on PageInfo {
|
||||
@@ -52,53 +54,14 @@ export const UPDATER_CATEGORY_FIELDS = gql`
|
||||
}
|
||||
`;
|
||||
|
||||
export const FULL_TRACKER_FIELDS = gql`
|
||||
fragment FULL_TRACKER_FIELDS on TrackerType {
|
||||
id
|
||||
name
|
||||
authUrl
|
||||
icon
|
||||
supportsTrackDeletion
|
||||
isLoggedIn
|
||||
isTokenExpired
|
||||
scores
|
||||
statuses {
|
||||
name
|
||||
value
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const BASE_TRACK_RECORD_FIELDS = gql`
|
||||
fragment BASE_TRACK_RECORD_FIELDS on TrackRecordType {
|
||||
id
|
||||
status
|
||||
lastChapterRead
|
||||
totalChapters
|
||||
score
|
||||
displayScore
|
||||
startDate
|
||||
finishDate
|
||||
}
|
||||
`;
|
||||
|
||||
export const QUERY_TRACK_RECORD_FIELDS = gql`
|
||||
${BASE_TRACK_RECORD_FIELDS}
|
||||
fragment QUERY_TRACK_RECORD_FIELDS on TrackRecordType {
|
||||
...BASE_TRACK_RECORD_FIELDS
|
||||
title
|
||||
remoteUrl
|
||||
remoteId
|
||||
}
|
||||
`;
|
||||
|
||||
export const FULL_TRACK_RECORD_FIELDS = gql`
|
||||
${QUERY_TRACK_RECORD_FIELDS}
|
||||
${FULL_TRACKER_FIELDS}
|
||||
${TRACK_RECORD_BIND_FIELDS}
|
||||
${TRACKER_BIND_FIELDS}
|
||||
|
||||
fragment FULL_TRACK_RECORD_FIELDS on TrackRecordType {
|
||||
...QUERY_TRACK_RECORD_FIELDS
|
||||
...TRACK_RECORD_BIND_FIELDS
|
||||
tracker {
|
||||
...FULL_TRACKER_FIELDS
|
||||
...TRACKER_BIND_FIELDS
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
54
src/lib/graphql/fragments/TrackFragments.ts
Normal file
54
src/lib/graphql/fragments/TrackFragments.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* 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 gql from 'graphql-tag';
|
||||
import { TRACK_RECORD_BIND_FIELDS } from '@/lib/graphql/fragments/TrackRecordFragments.ts';
|
||||
|
||||
export const TRACKER_BASE_FIELDS = gql`
|
||||
fragment TRACKER_BASE_FIELDS on TrackerType {
|
||||
id
|
||||
name
|
||||
icon
|
||||
isLoggedIn
|
||||
isTokenExpired
|
||||
}
|
||||
`;
|
||||
|
||||
export const TRACKER_SETTING_FIELDS = gql`
|
||||
${TRACKER_BASE_FIELDS}
|
||||
|
||||
fragment TRACKER_SETTING_FIELDS on TrackerType {
|
||||
...TRACKER_BASE_FIELDS
|
||||
|
||||
authUrl
|
||||
}
|
||||
`;
|
||||
|
||||
export const TRACKER_BIND_FIELDS = gql`
|
||||
${TRACKER_BASE_FIELDS}
|
||||
${TRACK_RECORD_BIND_FIELDS}
|
||||
|
||||
fragment TRACKER_BIND_FIELDS on TrackerType {
|
||||
...TRACKER_BASE_FIELDS
|
||||
|
||||
icon
|
||||
|
||||
supportsTrackDeletion
|
||||
scores
|
||||
statuses {
|
||||
name
|
||||
value
|
||||
}
|
||||
|
||||
trackRecords {
|
||||
nodes {
|
||||
...TRACK_RECORD_BIND_FIELDS
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
40
src/lib/graphql/fragments/TrackRecordFragments.ts
Normal file
40
src/lib/graphql/fragments/TrackRecordFragments.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* 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 gql from 'graphql-tag';
|
||||
|
||||
export const TRACK_RECORD_SEARCH_FIELDS = gql`
|
||||
fragment TRACK_RECORD_SEARCH_FIELDS on TrackSearchType {
|
||||
id
|
||||
remoteId
|
||||
title
|
||||
trackingUrl
|
||||
coverUrl
|
||||
publishingType
|
||||
startDate
|
||||
publishingStatus
|
||||
summary
|
||||
}
|
||||
`;
|
||||
|
||||
export const TRACK_RECORD_BIND_FIELDS = gql`
|
||||
fragment TRACK_RECORD_BIND_FIELDS on TrackRecordType {
|
||||
id
|
||||
remoteId
|
||||
trackerId
|
||||
remoteUrl
|
||||
title
|
||||
status
|
||||
lastChapterRead
|
||||
totalChapters
|
||||
score
|
||||
displayScore
|
||||
startDate
|
||||
finishDate
|
||||
}
|
||||
`;
|
||||
File diff suppressed because one or more lines are too long
@@ -7,8 +7,8 @@
|
||||
*/
|
||||
|
||||
import gql from 'graphql-tag';
|
||||
import { BASE_TRACK_RECORD_FIELDS } from '@/lib/graphql/Fragments';
|
||||
import { CHAPTER_LIST_FIELDS } from '@/lib/graphql/fragments/ChapterFragments.ts';
|
||||
import { TRACK_RECORD_BIND_FIELDS } from '@/lib/graphql/fragments/TrackRecordFragments.ts';
|
||||
|
||||
export const DELETE_CHAPTER_METADATA = gql`
|
||||
mutation DELETE_CHAPTER_METADATA($input: DeleteChapterMetaInput!) {
|
||||
@@ -90,7 +90,8 @@ export const SET_CHAPTER_METADATA = gql`
|
||||
`;
|
||||
|
||||
export const UPDATE_CHAPTER = gql`
|
||||
${BASE_TRACK_RECORD_FIELDS}
|
||||
${TRACK_RECORD_BIND_FIELDS}
|
||||
|
||||
mutation UPDATE_CHAPTER(
|
||||
$input: UpdateChapterInput!
|
||||
$getBookmarked: Boolean!
|
||||
@@ -141,14 +142,15 @@ export const UPDATE_CHAPTER = gql`
|
||||
}
|
||||
trackProgress(input: { mangaId: $mangaId }) @include(if: $trackProgress) {
|
||||
trackRecords {
|
||||
...BASE_TRACK_RECORD_FIELDS
|
||||
...TRACK_RECORD_BIND_FIELDS
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const UPDATE_CHAPTERS = gql`
|
||||
${BASE_TRACK_RECORD_FIELDS}
|
||||
${TRACK_RECORD_BIND_FIELDS}
|
||||
|
||||
mutation UPDATE_CHAPTERS(
|
||||
$input: UpdateChaptersInput!
|
||||
$getBookmarked: Boolean!
|
||||
@@ -199,7 +201,7 @@ export const UPDATE_CHAPTERS = gql`
|
||||
}
|
||||
trackProgress(input: { mangaId: $mangaId }) @include(if: $trackProgress) {
|
||||
trackRecords {
|
||||
...BASE_TRACK_RECORD_FIELDS
|
||||
...TRACK_RECORD_BIND_FIELDS
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,52 +7,54 @@
|
||||
*/
|
||||
|
||||
import gql from 'graphql-tag';
|
||||
import { BASE_TRACK_RECORD_FIELDS, QUERY_TRACK_RECORD_FIELDS } from '@/lib/graphql/Fragments.ts';
|
||||
import { TRACK_RECORD_BIND_FIELDS } from '@/lib/graphql/fragments/TrackRecordFragments.ts';
|
||||
import { TRACKER_SETTING_FIELDS } from '@/lib/graphql/fragments/TrackFragments.ts';
|
||||
|
||||
export const TRACKER_LOGIN_OAUTH = gql`
|
||||
${TRACKER_SETTING_FIELDS}
|
||||
|
||||
mutation TRACKER_LOGIN_OAUTH($input: LoginTrackerOAuthInput!) {
|
||||
loginTrackerOAuth(input: $input) {
|
||||
tracker {
|
||||
id
|
||||
isLoggedIn
|
||||
authUrl
|
||||
...TRACKER_SETTING_FIELDS
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const TRACKER_LOGIN_CREDENTIALS = gql`
|
||||
${TRACKER_SETTING_FIELDS}
|
||||
|
||||
mutation TRACKER_LOGIN_CREDENTIALS($input: LoginTrackerCredentialsInput!) {
|
||||
loginTrackerCredentials(input: $input) {
|
||||
isLoggedIn
|
||||
tracker {
|
||||
id
|
||||
isLoggedIn
|
||||
authUrl
|
||||
...TRACKER_SETTING_FIELDS
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const TRACKER_LOGOUT = gql`
|
||||
${TRACKER_SETTING_FIELDS}
|
||||
|
||||
mutation TRACKER_LOGOUT($trackerId: Int!) {
|
||||
logoutTracker(input: { trackerId: $trackerId }) {
|
||||
clientMutationId
|
||||
tracker {
|
||||
id
|
||||
isLoggedIn
|
||||
authUrl
|
||||
...TRACKER_SETTING_FIELDS
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const TRACKER_BIND = gql`
|
||||
${QUERY_TRACK_RECORD_FIELDS}
|
||||
${TRACK_RECORD_BIND_FIELDS}
|
||||
|
||||
mutation TRACKER_BIND($mangaId: Int!, $remoteId: LongString!, $trackerId: Int!) {
|
||||
bindTrack(input: { mangaId: $mangaId, remoteId: $remoteId, trackerId: $trackerId }) {
|
||||
trackRecord {
|
||||
...QUERY_TRACK_RECORD_FIELDS
|
||||
...TRACK_RECORD_BIND_FIELDS
|
||||
tracker {
|
||||
id
|
||||
}
|
||||
@@ -90,11 +92,12 @@ export const TRACKER_UNBIND = gql`
|
||||
`;
|
||||
|
||||
export const TRACKER_UPDATE_BIND = gql`
|
||||
${QUERY_TRACK_RECORD_FIELDS}
|
||||
${TRACK_RECORD_BIND_FIELDS}
|
||||
|
||||
mutation TRACKER_UPDATE_BIND($input: UpdateTrackInput!) {
|
||||
updateTrack(input: $input) {
|
||||
trackRecord {
|
||||
...QUERY_TRACK_RECORD_FIELDS
|
||||
...TRACK_RECORD_BIND_FIELDS
|
||||
manga {
|
||||
id
|
||||
trackRecords {
|
||||
@@ -110,11 +113,12 @@ export const TRACKER_UPDATE_BIND = gql`
|
||||
`;
|
||||
|
||||
export const TRACKER_FETCH_BIND = gql`
|
||||
${BASE_TRACK_RECORD_FIELDS}
|
||||
${TRACK_RECORD_BIND_FIELDS}
|
||||
|
||||
mutation TRACKER_FETCH_BIND($recordId: Int!) {
|
||||
fetchTrack(input: { recordId: $recordId }) {
|
||||
trackRecord {
|
||||
...BASE_TRACK_RECORD_FIELDS
|
||||
...TRACK_RECORD_BIND_FIELDS
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,39 +7,51 @@
|
||||
*/
|
||||
|
||||
import gql from 'graphql-tag';
|
||||
import { FULL_TRACKER_FIELDS, PAGE_INFO } from '@/lib/graphql/Fragments.ts';
|
||||
import { PAGE_INFO } from '@/lib/graphql/Fragments.ts';
|
||||
import { TRACKER_BIND_FIELDS, TRACKER_SETTING_FIELDS } from '@/lib/graphql/fragments/TrackFragments.ts';
|
||||
import { TRACK_RECORD_SEARCH_FIELDS } from '@/lib/graphql/fragments/TrackRecordFragments.ts';
|
||||
|
||||
export const GET_TRACKERS = gql`
|
||||
export const GET_TRACKERS_SETTINGS = gql`
|
||||
${PAGE_INFO}
|
||||
${FULL_TRACKER_FIELDS}
|
||||
query GET_TRACKERS {
|
||||
${TRACKER_SETTING_FIELDS}
|
||||
|
||||
query GET_TRACKERS_SETTINGS {
|
||||
trackers {
|
||||
totalCount
|
||||
pageInfo {
|
||||
...PAGE_INFO
|
||||
}
|
||||
nodes {
|
||||
...FULL_TRACKER_FIELDS
|
||||
...TRACKER_SETTING_FIELDS
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const GET_TRACKERS_BIND = gql`
|
||||
${PAGE_INFO}
|
||||
${TRACKER_BIND_FIELDS}
|
||||
|
||||
query GET_TRACKERS_BIND {
|
||||
trackers {
|
||||
totalCount
|
||||
pageInfo {
|
||||
...PAGE_INFO
|
||||
}
|
||||
nodes {
|
||||
...TRACKER_BIND_FIELDS
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const TRACKER_SEARCH = gql`
|
||||
${TRACK_RECORD_SEARCH_FIELDS}
|
||||
|
||||
query TRACKER_SEARCH($query: String!, $trackerId: Int!) {
|
||||
searchTracker(input: { query: $query, trackerId: $trackerId }) {
|
||||
trackSearches {
|
||||
id
|
||||
title
|
||||
coverUrl
|
||||
publishingStatus
|
||||
publishingType
|
||||
remoteId
|
||||
startDate
|
||||
summary
|
||||
totalChapters
|
||||
trackerId
|
||||
trackingUrl
|
||||
...TRACK_RECORD_SEARCH_FIELDS
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,8 +169,6 @@ import {
|
||||
GetMangaToMigrateQueryVariables,
|
||||
GetMangaToMigrateToFetchMutation,
|
||||
GetMangaToMigrateToFetchMutationVariables,
|
||||
GetTrackersQuery,
|
||||
GetTrackersQueryVariables,
|
||||
TrackerLogoutMutation,
|
||||
TrackerLogoutMutationVariables,
|
||||
TrackerLoginOauthMutation,
|
||||
@@ -297,7 +295,7 @@ import { WEBUI_UPDATE_SUBSCRIPTION } from '@/lib/graphql/subscriptions/ServerInf
|
||||
import { GET_DOWNLOAD_STATUS } from '@/lib/graphql/queries/DownloaderQuery.ts';
|
||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||
import { Queue, QueuePriority } from '@/lib/Queue.ts';
|
||||
import { GET_TRACKERS, TRACKER_SEARCH } from '@/lib/graphql/queries/TrackerQuery.ts';
|
||||
import { TRACKER_SEARCH } from '@/lib/graphql/queries/TrackerQuery.ts';
|
||||
import {
|
||||
TRACKER_BIND,
|
||||
TRACKER_FETCH_BIND,
|
||||
@@ -2545,10 +2543,11 @@ export class RequestManager {
|
||||
return this.doRequest(GQLMethod.USE_QUERY, GET_MIGRATABLE_SOURCES, undefined, options);
|
||||
}
|
||||
|
||||
public useGetTrackerList(
|
||||
options?: QueryHookOptions<GetTrackersQuery, GetTrackersQueryVariables>,
|
||||
): AbortableApolloUseQueryResponse<GetTrackersQuery, GetTrackersQueryVariables> {
|
||||
return this.doRequest(GQLMethod.USE_QUERY, GET_TRACKERS, undefined, options);
|
||||
public useGetTrackerList<Data, Variables extends OperationVariables = never>(
|
||||
document: DocumentNode | TypedDocumentNode<Data, Variables>,
|
||||
options?: QueryHookOptions<Data, Variables>,
|
||||
): AbortableApolloUseQueryResponse<Data, Variables> {
|
||||
return this.doRequest(GQLMethod.USE_QUERY, document, undefined, options);
|
||||
}
|
||||
|
||||
public useLogoutFromTracker(
|
||||
@@ -2601,7 +2600,7 @@ export class RequestManager {
|
||||
GQLMethod.MUTATION,
|
||||
TRACKER_UNBIND,
|
||||
{ input: { recordId, deleteRemoteTrack } },
|
||||
{ refetchQueries: [GET_MANGA, GET_CATEGORY_MANGAS, GET_MANGAS], ...options },
|
||||
{ refetchQueries: [GET_MANGA], ...options },
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user