Update findGalleries to only fetch imageCount instead of all images (#941)

This commit is contained in:
InfiniteTF 2020-11-15 04:40:47 +01:00 committed by GitHub
parent c74f145224
commit ba8b3b29a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 57 additions and 23 deletions

View file

@ -0,0 +1,28 @@
fragment GallerySlimData on Gallery {
id
checksum
path
title
date
url
details
rating
image_count
cover {
...SlimImageData
}
studio {
...StudioData
}
tags {
...TagData
}
performers {
...PerformerData
}
scene {
id
title
path
}
}

View file

@ -2,7 +2,7 @@ query FindGalleries($filter: FindFilterType, $gallery_filter: GalleryFilterType)
findGalleries(gallery_filter: $gallery_filter, filter: $filter) { findGalleries(gallery_filter: $gallery_filter, filter: $filter) {
count count
galleries { galleries {
...GalleryData ...GallerySlimData
} }
} }
} }
@ -11,4 +11,4 @@ query FindGallery($id: ID!) {
findGallery(id: $id) { findGallery(id: $id) {
...GalleryData ...GalleryData
} }
} }

View file

@ -10,6 +10,7 @@ type Gallery {
rating: Int rating: Int
scene: Scene scene: Scene
studio: Studio studio: Studio
image_count: Int!
tags: [Tag!]! tags: [Tag!]!
performers: [Performer!]! performers: [Performer!]!

View file

@ -108,3 +108,8 @@ func (r *galleryResolver) Performers(ctx context.Context, obj *models.Gallery) (
qb := models.NewPerformerQueryBuilder() qb := models.NewPerformerQueryBuilder()
return qb.FindByGalleryID(obj.ID, nil) return qb.FindByGalleryID(obj.ID, nil)
} }
func (r *galleryResolver) ImageCount(ctx context.Context, obj *models.Gallery) (int, error) {
qb := models.NewImageQueryBuilder()
return qb.CountByGalleryID(obj.ID)
}

View file

@ -10,7 +10,7 @@ import MultiSet from "../Shared/MultiSet";
import { RatingStars } from "../Scenes/SceneDetails/RatingStars"; import { RatingStars } from "../Scenes/SceneDetails/RatingStars";
interface IListOperationProps { interface IListOperationProps {
selected: GQL.GalleryDataFragment[]; selected: GQL.GallerySlimDataFragment[];
onClose: (applied: boolean) => void; onClose: (applied: boolean) => void;
} }
@ -134,11 +134,11 @@ export const EditGalleriesDialog: React.FC<IListOperationProps> = (
setIsUpdating(false); setIsUpdating(false);
} }
function getRating(state: GQL.GalleryDataFragment[]) { function getRating(state: GQL.GallerySlimDataFragment[]) {
let ret: number | undefined; let ret: number | undefined;
let first = true; let first = true;
state.forEach((gallery: GQL.GalleryDataFragment) => { state.forEach((gallery) => {
if (first) { if (first) {
ret = gallery.rating ?? undefined; ret = gallery.rating ?? undefined;
first = false; first = false;
@ -150,11 +150,11 @@ export const EditGalleriesDialog: React.FC<IListOperationProps> = (
return ret; return ret;
} }
function getStudioId(state: GQL.GalleryDataFragment[]) { function getStudioId(state: GQL.GallerySlimDataFragment[]) {
let ret: string | undefined; let ret: string | undefined;
let first = true; let first = true;
state.forEach((gallery: GQL.GalleryDataFragment) => { state.forEach((gallery) => {
if (first) { if (first) {
ret = gallery?.studio?.id; ret = gallery?.studio?.id;
first = false; first = false;
@ -169,11 +169,11 @@ export const EditGalleriesDialog: React.FC<IListOperationProps> = (
return ret; return ret;
} }
function getPerformerIds(state: GQL.GalleryDataFragment[]) { function getPerformerIds(state: GQL.GallerySlimDataFragment[]) {
let ret: string[] = []; let ret: string[] = [];
let first = true; let first = true;
state.forEach((gallery: GQL.GalleryDataFragment) => { state.forEach((gallery) => {
if (first) { if (first) {
ret = gallery.performers ret = gallery.performers
? gallery.performers.map((p) => p.id).sort() ? gallery.performers.map((p) => p.id).sort()
@ -193,11 +193,11 @@ export const EditGalleriesDialog: React.FC<IListOperationProps> = (
return ret; return ret;
} }
function getTagIds(state: GQL.GalleryDataFragment[]) { function getTagIds(state: GQL.GallerySlimDataFragment[]) {
let ret: string[] = []; let ret: string[] = [];
let first = true; let first = true;
state.forEach((gallery: GQL.GalleryDataFragment) => { state.forEach((gallery) => {
if (first) { if (first) {
ret = gallery.tags ? gallery.tags.map((t) => t.id).sort() : []; ret = gallery.tags ? gallery.tags.map((t) => t.id).sort() : [];
first = false; first = false;
@ -221,7 +221,7 @@ export const EditGalleriesDialog: React.FC<IListOperationProps> = (
let updateTagIds: string[] = []; let updateTagIds: string[] = [];
let first = true; let first = true;
state.forEach((gallery: GQL.GalleryDataFragment) => { state.forEach((gallery: GQL.GallerySlimDataFragment) => {
const galleryRating = gallery.rating; const galleryRating = gallery.rating;
const GalleriestudioID = gallery?.studio?.id; const GalleriestudioID = gallery?.studio?.id;
const galleryPerformerIDs = (gallery.performers ?? []) const galleryPerformerIDs = (gallery.performers ?? [])

View file

@ -8,7 +8,7 @@ import { HoverPopover, Icon, TagLink } from "../Shared";
import { BasicCard } from "../Shared/BasicCard"; import { BasicCard } from "../Shared/BasicCard";
interface IProps { interface IProps {
gallery: GQL.GalleryDataFragment; gallery: GQL.GallerySlimDataFragment;
selecting?: boolean; selecting?: boolean;
selected: boolean | undefined; selected: boolean | undefined;
zoomIndex: number; zoomIndex: number;
@ -164,9 +164,9 @@ export const GalleryCard: React.FC<IProps> = (props) => {
</h5> </h5>
</Link> </Link>
<span> <span>
{props.gallery.images.length}&nbsp; {props.gallery.image_count}&nbsp;
<FormattedPlural <FormattedPlural
value={props.gallery.images.length ?? 0} value={props.gallery.image_count}
one="image" one="image"
other="images" other="images"
/> />

View file

@ -4,7 +4,7 @@ import { Table } from "react-bootstrap";
import { Link, useHistory } from "react-router-dom"; import { Link, useHistory } from "react-router-dom";
import { import {
FindGalleriesQueryResult, FindGalleriesQueryResult,
GalleryDataFragment, GallerySlimDataFragment,
} from "src/core/generated-graphql"; } from "src/core/generated-graphql";
import { useGalleriesList } from "src/hooks"; import { useGalleriesList } from "src/hooks";
import { showWhenSelected } from "src/hooks/ListHook"; import { showWhenSelected } from "src/hooks/ListHook";
@ -127,7 +127,7 @@ export const GalleryList: React.FC<IGalleryList> = ({
} }
function renderEditGalleriesDialog( function renderEditGalleriesDialog(
selectedImages: GalleryDataFragment[], selectedImages: GallerySlimDataFragment[],
onClose: (applied: boolean) => void onClose: (applied: boolean) => void
) { ) {
return ( return (
@ -138,7 +138,7 @@ export const GalleryList: React.FC<IGalleryList> = ({
} }
function renderDeleteGalleriesDialog( function renderDeleteGalleriesDialog(
selectedImages: GalleryDataFragment[], selectedImages: GallerySlimDataFragment[],
onClose: (confirmed: boolean) => void onClose: (confirmed: boolean) => void
) { ) {
return ( return (
@ -200,8 +200,8 @@ export const GalleryList: React.FC<IGalleryList> = ({
</td> </td>
<td className="d-none d-sm-block"> <td className="d-none d-sm-block">
<Link to={`/galleries/${gallery.id}`}> <Link to={`/galleries/${gallery.id}`}>
{gallery.title ?? gallery.path} ({gallery.images.length}{" "} {gallery.title ?? gallery.path} ({gallery.image_count}{" "}
{gallery.images.length === 1 ? "image" : "images"}) {gallery.image_count === 1 ? "image" : "images"})
</Link> </Link>
</td> </td>
</tr> </tr>

View file

@ -6,7 +6,7 @@ import { useHistory, useLocation } from "react-router-dom";
import { import {
SlimSceneDataFragment, SlimSceneDataFragment,
SceneMarkerDataFragment, SceneMarkerDataFragment,
GalleryDataFragment, GallerySlimDataFragment,
StudioDataFragment, StudioDataFragment,
PerformerDataFragment, PerformerDataFragment,
FindScenesQueryResult, FindScenesQueryResult,
@ -567,9 +567,9 @@ export const useImagesList = (
}); });
export const useGalleriesList = ( export const useGalleriesList = (
props: IListHookOptions<FindGalleriesQueryResult, GalleryDataFragment> props: IListHookOptions<FindGalleriesQueryResult, GallerySlimDataFragment>
) => ) =>
useList<FindGalleriesQueryResult, GalleryDataFragment>({ useList<FindGalleriesQueryResult, GallerySlimDataFragment>({
...props, ...props,
filterMode: FilterMode.Galleries, filterMode: FilterMode.Galleries,
useData: useFindGalleries, useData: useFindGalleries,