Add group graphql interfaces (#5017)

* Deprecate movie and add group interfaces
* UI changes
This commit is contained in:
WithoutPants
2024-07-03 13:59:40 +10:00
committed by GitHub
parent f477b996b5
commit 2739696813
108 changed files with 1437 additions and 567 deletions

View File

@@ -210,43 +210,43 @@ export const queryFindImages = (filter: ListFilterModel) =>
},
});
export const useFindMovie = (id: string) => {
export const useFindGroup = (id: string) => {
const skip = id === "new" || id === "";
return GQL.useFindMovieQuery({ variables: { id }, skip });
return GQL.useFindGroupQuery({ variables: { id }, skip });
};
export const useFindMovies = (filter?: ListFilterModel) =>
GQL.useFindMoviesQuery({
export const useFindGroups = (filter?: ListFilterModel) =>
GQL.useFindGroupsQuery({
skip: filter === undefined,
variables: {
filter: filter?.makeFindFilter(),
movie_filter: filter?.makeFilter(),
group_filter: filter?.makeFilter(),
},
});
export const queryFindMovies = (filter: ListFilterModel) =>
client.query<GQL.FindMoviesQuery>({
query: GQL.FindMoviesDocument,
export const queryFindGroups = (filter: ListFilterModel) =>
client.query<GQL.FindGroupsQuery>({
query: GQL.FindGroupsDocument,
variables: {
filter: filter.makeFindFilter(),
movie_filter: filter.makeFilter(),
group_filter: filter.makeFilter(),
},
});
export const queryFindMoviesByIDForSelect = (movieIDs: string[]) =>
client.query<GQL.FindMoviesForSelectQuery>({
query: GQL.FindMoviesForSelectDocument,
export const queryFindGroupsByIDForSelect = (groupIDs: string[]) =>
client.query<GQL.FindGroupsForSelectQuery>({
query: GQL.FindGroupsForSelectDocument,
variables: {
ids: movieIDs,
ids: groupIDs,
},
});
export const queryFindMoviesForSelect = (filter: ListFilterModel) =>
client.query<GQL.FindMoviesForSelectQuery>({
query: GQL.FindMoviesForSelectDocument,
export const queryFindGroupsForSelect = (filter: ListFilterModel) =>
client.query<GQL.FindGroupsForSelectQuery>({
query: GQL.FindGroupsForSelectDocument,
variables: {
filter: filter.makeFindFilter(),
movie_filter: filter.makeFilter(),
group_filter: filter.makeFilter(),
},
});
@@ -485,13 +485,13 @@ function updateO(
}
const sceneMutationImpactedTypeFields = {
Movie: ["scenes", "scene_count"],
Group: ["scenes", "scene_count"],
Gallery: ["scenes"],
Performer: [
"scenes",
"scene_count",
"movies",
"movie_count",
"groups",
"group_count",
"performer_count",
],
Studio: ["scene_count", "performer_count"],
@@ -500,7 +500,7 @@ const sceneMutationImpactedTypeFields = {
const sceneMutationImpactedQueries = [
GQL.FindScenesDocument, // various filters
GQL.FindMoviesDocument, // is missing scenes
GQL.FindGroupsDocument, // is missing scenes
GQL.FindGalleriesDocument, // is missing scenes
GQL.FindPerformersDocument, // filter by scene count
GQL.FindStudiosDocument, // filter by scene count
@@ -1273,98 +1273,98 @@ export const mutateImageSetPrimaryFile = (id: string, fileID: string) =>
},
});
const movieMutationImpactedTypeFields = {
Performer: ["movie_count"],
Studio: ["movie_count"],
const groupMutationImpactedTypeFields = {
Performer: ["group_count"],
Studio: ["group_count"],
};
const movieMutationImpactedQueries = [
GQL.FindMoviesDocument, // various filters
const groupMutationImpactedQueries = [
GQL.FindGroupsDocument, // various filters
];
export const useMovieCreate = () =>
GQL.useMovieCreateMutation({
export const useGroupCreate = () =>
GQL.useGroupCreateMutation({
update(cache, result) {
const movie = result.data?.movieCreate;
if (!movie) return;
const group = result.data?.groupCreate;
if (!group) return;
// update stats
updateStats(cache, "movie_count", 1);
updateStats(cache, "group_count", 1);
evictTypeFields(cache, movieMutationImpactedTypeFields);
evictQueries(cache, movieMutationImpactedQueries);
evictTypeFields(cache, groupMutationImpactedTypeFields);
evictQueries(cache, groupMutationImpactedQueries);
},
});
export const useMovieUpdate = () =>
GQL.useMovieUpdateMutation({
export const useGroupUpdate = () =>
GQL.useGroupUpdateMutation({
update(cache, result) {
if (!result.data?.movieUpdate) return;
if (!result.data?.groupUpdate) return;
evictTypeFields(cache, movieMutationImpactedTypeFields);
evictQueries(cache, movieMutationImpactedQueries);
evictTypeFields(cache, groupMutationImpactedTypeFields);
evictQueries(cache, groupMutationImpactedQueries);
},
});
export const useBulkMovieUpdate = (input: GQL.BulkMovieUpdateInput) =>
GQL.useBulkMovieUpdateMutation({
export const useBulkGroupUpdate = (input: GQL.BulkGroupUpdateInput) =>
GQL.useBulkGroupUpdateMutation({
variables: { input },
update(cache, result) {
if (!result.data?.bulkMovieUpdate) return;
if (!result.data?.bulkGroupUpdate) return;
evictTypeFields(cache, movieMutationImpactedTypeFields);
evictQueries(cache, movieMutationImpactedQueries);
evictTypeFields(cache, groupMutationImpactedTypeFields);
evictQueries(cache, groupMutationImpactedQueries);
},
});
export const useMovieDestroy = (input: GQL.MovieDestroyInput) =>
GQL.useMovieDestroyMutation({
export const useGroupDestroy = (input: GQL.GroupDestroyInput) =>
GQL.useGroupDestroyMutation({
variables: input,
update(cache, result) {
if (!result.data?.movieDestroy) return;
if (!result.data?.groupDestroy) return;
const obj = { __typename: "Movie", id: input.id };
deleteObject(cache, obj, GQL.FindMovieDocument);
const obj = { __typename: "Group", id: input.id };
deleteObject(cache, obj, GQL.FindGroupDocument);
// update stats
updateStats(cache, "movie_count", -1);
updateStats(cache, "group_count", -1);
evictTypeFields(cache, {
Scene: ["movies"],
Performer: ["movie_count"],
Studio: ["movie_count"],
Scene: ["groups"],
Performer: ["group_count"],
Studio: ["group_count"],
});
evictQueries(cache, [
...movieMutationImpactedQueries,
GQL.FindScenesDocument, // filter by movie
...groupMutationImpactedQueries,
GQL.FindScenesDocument, // filter by group
]);
},
});
export const useMoviesDestroy = (input: GQL.MoviesDestroyMutationVariables) =>
GQL.useMoviesDestroyMutation({
export const useGroupsDestroy = (input: GQL.GroupsDestroyMutationVariables) =>
GQL.useGroupsDestroyMutation({
variables: input,
update(cache, result) {
if (!result.data?.moviesDestroy) return;
if (!result.data?.groupsDestroy) return;
const { ids } = input;
for (const id of ids) {
const obj = { __typename: "Movie", id };
deleteObject(cache, obj, GQL.FindMovieDocument);
const obj = { __typename: "Group", id };
deleteObject(cache, obj, GQL.FindGroupDocument);
}
// update stats
updateStats(cache, "movie_count", -ids.length);
updateStats(cache, "group_count", -ids.length);
evictTypeFields(cache, {
Scene: ["movies"],
Performer: ["movie_count"],
Studio: ["movie_count"],
Scene: ["groups"],
Performer: ["group_count"],
Studio: ["group_count"],
});
evictQueries(cache, [
...movieMutationImpactedQueries,
GQL.FindScenesDocument, // filter by movie
...groupMutationImpactedQueries,
GQL.FindScenesDocument, // filter by group
]);
},
});
@@ -1678,7 +1678,7 @@ export const usePerformerDestroy = () =>
evictQueries(cache, [
...performerMutationImpactedQueries,
GQL.FindPerformersDocument, // appears with
GQL.FindMoviesDocument, // filter by performers
GQL.FindGroupsDocument, // filter by performers
GQL.FindSceneMarkersDocument, // filter by performers
]);
},
@@ -1718,7 +1718,7 @@ export const usePerformersDestroy = (
evictQueries(cache, [
...performerMutationImpactedQueries,
GQL.FindPerformersDocument, // appears with
GQL.FindMoviesDocument, // filter by performers
GQL.FindGroupsDocument, // filter by performers
GQL.FindSceneMarkersDocument, // filter by performers
]);
},
@@ -1731,7 +1731,7 @@ const studioMutationImpactedTypeFields = {
export const studioMutationImpactedQueries = [
GQL.FindScenesDocument, // filter by studio
GQL.FindImagesDocument, // filter by studio
GQL.FindMoviesDocument, // filter by studio
GQL.FindGroupsDocument, // filter by studio
GQL.FindGalleriesDocument, // filter by studio
GQL.FindPerformersDocument, // filter by studio
GQL.FindStudiosDocument, // various filters
@@ -2161,11 +2161,11 @@ export const mutateStashBoxBatchStudioTag = (
variables: { input },
});
export const useListMovieScrapers = () => GQL.useListMovieScrapersQuery();
export const useListGroupScrapers = () => GQL.useListGroupScrapersQuery();
export const queryScrapeMovieURL = (url: string) =>
client.query<GQL.ScrapeMovieUrlQuery>({
query: GQL.ScrapeMovieUrlDocument,
export const queryScrapeGroupURL = (url: string) =>
client.query<GQL.ScrapeGroupUrlQuery>({
query: GQL.ScrapeGroupUrlDocument,
variables: { url },
fetchPolicy: "network-only",
});
@@ -2261,7 +2261,7 @@ export const useLoggingSubscribe = () => GQL.useLoggingSubscribeSubscription();
// all scraper-related queries
export const scraperMutationImpactedQueries = [
GQL.ListMovieScrapersDocument,
GQL.ListGroupScrapersDocument,
GQL.ListPerformerScrapersDocument,
GQL.ListSceneScrapersDocument,
GQL.InstalledScraperPackagesDocument,