Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 34 additions & 18 deletions frontend/src/components/list/SceneList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
type SceneQueryInput,
SceneSortEnum,
SortDirectionEnum,
useSceneCount,
useScenes,
} from "src/graphql";
import { usePagination, useQueryParams } from "src/hooks";
Expand Down Expand Up @@ -72,21 +73,36 @@ const SceneList: FC<Props> = ({
params.favorite !== "NONE" && ensureEnum(FavoriteFilter, params.favorite);

const { page, setPage } = usePagination();
const { loading, data } = useScenes({
input: {
page,
per_page: perPage,
sort,
direction,
...filter,
favorites: (favoriteFilter !== undefined && favorite) || undefined,
tags:
tagsFilter ||
(params.tag
? { value: [params.tag], modifier: CriterionModifier.INCLUDES }
: undefined),
},
});
const input: SceneQueryInput = {
page,
per_page: perPage,
sort,
direction,
...filter,
favorites: (favoriteFilter !== undefined && favorite) || undefined,
tags:
tagsFilter ||
(params.tag
? { value: [params.tag], modifier: CriterionModifier.INCLUDES }
: undefined),
};

const { loading, data } = useScenes({ input });

// A page that isn't full is the last one, so the total is known from the rows.
const scenes = data?.queryScenes.scenes;
const derivedCount =
scenes && scenes.length > 0 && scenes.length < perPage
? (page - 1) * perPage + scenes.length
: undefined;

// Pinned to page 1 so the cache key is the filter alone and paging within a
// filter reuses the count rather than recounting.
const { data: countData } = useSceneCount(
{ input: { ...input, page: 1 } },
loading || derivedCount !== undefined,
);
const count = derivedCount ?? countData?.queryScenes.count;

if (!loading && !data) return <ErrorMessage error="Failed to load scenes." />;

Expand Down Expand Up @@ -162,7 +178,7 @@ const SceneList: FC<Props> = ({
</>
);

const scenes = (data?.queryScenes.scenes ?? []).map((scene) => (
const sceneCards = (scenes ?? []).map((scene) => (
<Col xs={3} key={scene.id}>
<SceneCard scene={scene} />
</Col>
Expand All @@ -173,12 +189,12 @@ const SceneList: FC<Props> = ({
page={page}
setPage={setPage}
perPage={perPage}
listCount={data?.queryScenes.count}
listCount={count}
loading={loading}
filters={filters}
entityName="scenes"
>
<Row>{scenes}</Row>
<Row>{sceneCards}</Row>
</List>
);
};
Expand Down
5 changes: 5 additions & 0 deletions frontend/src/graphql/queries/SceneCount.gql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
query SceneCount($input: SceneQueryInput!) {
queryScenes(input: $input) {
count
}
}
1 change: 0 additions & 1 deletion frontend/src/graphql/queries/Scenes.gql
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#import "../fragments/QuerySceneFragment.gql"
query Scenes($input: SceneQueryInput!) {
queryScenes(input: $input) {
count
scenes {
...QuerySceneFragment
}
Expand Down
8 changes: 0 additions & 8 deletions frontend/src/graphql/queries/ScenesWithoutCount.gql

This file was deleted.

9 changes: 5 additions & 4 deletions frontend/src/graphql/queries/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ import {
type QueryExistingPerformerQueryVariables,
QueryExistingSceneDocument,
type QueryExistingSceneQueryVariables,
SceneCountDocument,
type SceneCountQueryVariables,
SceneDocument,
ScenePairingsDocument,
type ScenePairingsQueryVariables,
Expand All @@ -47,7 +49,6 @@ import {
type ScenesQueryVariables,
ScenesWithFingerprintsDocument,
type ScenesWithFingerprintsQueryVariables,
ScenesWithoutCountDocument,
SearchAllDocument,
type SearchAllQuery,
type SearchAllQueryVariables,
Expand Down Expand Up @@ -161,11 +162,11 @@ export const useScenesWithFingerprints = (
skip,
});

export const useScenesWithoutCount = (
variables: ScenesQueryVariables,
export const useSceneCount = (
variables: SceneCountQueryVariables,
skip = false,
) =>
useQuery(ScenesWithoutCountDocument, {
useQuery(SceneCountDocument, {
variables,
skip,
});
Expand Down
20 changes: 10 additions & 10 deletions frontend/src/graphql/types.ts

Large diffs are not rendered by default.

25 changes: 10 additions & 15 deletions frontend/src/pages/home/Home.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,28 @@ import { LoadingIndicator } from "src/components/fragments";

import SceneCard from "src/components/sceneCard";
import { ROUTE_SCENES } from "src/constants";
import {
SceneSortEnum,
SortDirectionEnum,
useScenesWithoutCount,
} from "src/graphql";
import { SceneSortEnum, SortDirectionEnum, useScenes } from "src/graphql";

const CLASSNAME = "HomePage";
const CLASSNAME_SCENES = `${CLASSNAME}-scenes`;

const ScenesComponent: FC = () => {
const { data: sceneData, loading: loadingRecent } = useScenesWithoutCount({
const { data: sceneData, loading: loadingRecent } = useScenes({
input: {
page: 1,
per_page: 20,
sort: SceneSortEnum.CREATED_AT,
direction: SortDirectionEnum.DESC,
},
});
const { data: trendingData, loading: loadingTrending } =
useScenesWithoutCount({
input: {
page: 1,
per_page: 20,
sort: SceneSortEnum.TRENDING,
direction: SortDirectionEnum.DESC,
},
});
const { data: trendingData, loading: loadingTrending } = useScenes({
input: {
page: 1,
per_page: 20,
sort: SceneSortEnum.TRENDING,
direction: SortDirectionEnum.DESC,
},
});

if (loadingTrending) return <LoadingIndicator message="Loading..." />;

Expand Down
Loading