mirror of
https://github.com/stashapp/stash.git
synced 2025-12-06 08:26:00 +01:00
Merge a3f2d1436e into e213fde0cc
This commit is contained in:
commit
e6aa19156e
5 changed files with 53 additions and 5 deletions
|
|
@ -612,6 +612,8 @@ input TagFilterType {
|
||||||
images_filter: ImageFilterType
|
images_filter: ImageFilterType
|
||||||
"Filter by related galleries that meet this criteria"
|
"Filter by related galleries that meet this criteria"
|
||||||
galleries_filter: GalleryFilterType
|
galleries_filter: GalleryFilterType
|
||||||
|
"Filter by related performers that meet this criteria"
|
||||||
|
performers_filter: PerformerFilterType
|
||||||
|
|
||||||
"Filter by creation time"
|
"Filter by creation time"
|
||||||
created_at: TimestampCriterionInput
|
created_at: TimestampCriterionInput
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,8 @@ type TagFilterType struct {
|
||||||
ImagesFilter *ImageFilterType `json:"images_filter"`
|
ImagesFilter *ImageFilterType `json:"images_filter"`
|
||||||
// Filter by related galleries that meet this criteria
|
// Filter by related galleries that meet this criteria
|
||||||
GalleriesFilter *GalleryFilterType `json:"galleries_filter"`
|
GalleriesFilter *GalleryFilterType `json:"galleries_filter"`
|
||||||
|
// Filter by related performers that meet this criteria
|
||||||
|
PerformersFilter *PerformerFilterType `json:"performers_filter"`
|
||||||
// Filter by created at
|
// Filter by created at
|
||||||
CreatedAt *TimestampCriterionInput `json:"created_at"`
|
CreatedAt *TimestampCriterionInput `json:"created_at"`
|
||||||
// Filter by updated at
|
// Filter by updated at
|
||||||
|
|
|
||||||
|
|
@ -104,9 +104,10 @@ type tagRepositoryType struct {
|
||||||
aliases stringRepository
|
aliases stringRepository
|
||||||
stashIDs stashIDRepository
|
stashIDs stashIDRepository
|
||||||
|
|
||||||
scenes joinRepository
|
scenes joinRepository
|
||||||
images joinRepository
|
images joinRepository
|
||||||
galleries joinRepository
|
galleries joinRepository
|
||||||
|
performers joinRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -152,6 +153,14 @@ var (
|
||||||
fkColumn: galleryIDColumn,
|
fkColumn: galleryIDColumn,
|
||||||
foreignTable: galleryTable,
|
foreignTable: galleryTable,
|
||||||
},
|
},
|
||||||
|
performers: joinRepository{
|
||||||
|
repository: repository{
|
||||||
|
tableName: performersTagsTable,
|
||||||
|
idColumn: tagIDColumn,
|
||||||
|
},
|
||||||
|
fkColumn: performerIDColumn,
|
||||||
|
foreignTable: performerTable,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,15 @@ func (qb *tagFilterHandler) criterionHandler() criterionHandler {
|
||||||
tagRepository.galleries.innerJoin(f, "", "tags.id")
|
tagRepository.galleries.innerJoin(f, "", "tags.id")
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
&relatedFilterHandler{
|
||||||
|
relatedIDCol: "performers_tags.performer_id",
|
||||||
|
relatedRepo: performerRepository.repository,
|
||||||
|
relatedHandler: &performerFilterHandler{tagFilter.PerformersFilter},
|
||||||
|
joinFn: func(f *filterBuilder) {
|
||||||
|
tagRepository.performers.innerJoin(f, "", "tags.id")
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,10 @@ import { Option } from "./SidebarListFilter";
|
||||||
import {
|
import {
|
||||||
CriterionModifier,
|
CriterionModifier,
|
||||||
FilterMode,
|
FilterMode,
|
||||||
|
GalleryFilterType,
|
||||||
InputMaybe,
|
InputMaybe,
|
||||||
IntCriterionInput,
|
IntCriterionInput,
|
||||||
|
PerformerFilterType,
|
||||||
SceneFilterType,
|
SceneFilterType,
|
||||||
} from "src/core/generated-graphql";
|
} from "src/core/generated-graphql";
|
||||||
import { useIntl } from "react-intl";
|
import { useIntl } from "react-intl";
|
||||||
|
|
@ -515,12 +517,16 @@ export function makeQueryVariables(query: string, extraProps: {}) {
|
||||||
interface IFilterType {
|
interface IFilterType {
|
||||||
scenes_filter?: InputMaybe<SceneFilterType>;
|
scenes_filter?: InputMaybe<SceneFilterType>;
|
||||||
scene_count?: InputMaybe<IntCriterionInput>;
|
scene_count?: InputMaybe<IntCriterionInput>;
|
||||||
|
performers_filter?: InputMaybe<PerformerFilterType>;
|
||||||
|
performer_count?: InputMaybe<IntCriterionInput>;
|
||||||
|
galleries_filter?: InputMaybe<GalleryFilterType>;
|
||||||
|
gallery_count?: InputMaybe<IntCriterionInput>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setObjectFilter(
|
export function setObjectFilter(
|
||||||
out: IFilterType,
|
out: IFilterType,
|
||||||
mode: FilterMode,
|
mode: FilterMode,
|
||||||
relatedFilterOutput: SceneFilterType
|
relatedFilterOutput: SceneFilterType | PerformerFilterType | GalleryFilterType
|
||||||
) {
|
) {
|
||||||
const empty = Object.keys(relatedFilterOutput).length === 0;
|
const empty = Object.keys(relatedFilterOutput).length === 0;
|
||||||
|
|
||||||
|
|
@ -533,7 +539,27 @@ export function setObjectFilter(
|
||||||
value: 0,
|
value: 0,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
out.scenes_filter = relatedFilterOutput;
|
out.scenes_filter = relatedFilterOutput as SceneFilterType;
|
||||||
|
break;
|
||||||
|
case FilterMode.Performers:
|
||||||
|
// if empty, only get objects with performers
|
||||||
|
if (empty) {
|
||||||
|
out.performer_count = {
|
||||||
|
modifier: CriterionModifier.GreaterThan,
|
||||||
|
value: 0,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
out.performers_filter = relatedFilterOutput as PerformerFilterType;
|
||||||
|
break;
|
||||||
|
case FilterMode.Galleries:
|
||||||
|
// if empty, only get objects with performers
|
||||||
|
if (empty) {
|
||||||
|
out.gallery_count = {
|
||||||
|
modifier: CriterionModifier.GreaterThan,
|
||||||
|
value: 0,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
out.galleries_filter = relatedFilterOutput as GalleryFilterType;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue