mirror of
https://github.com/stashapp/stash.git
synced 2025-12-06 08:26:00 +01:00
Future support for filtering tags list by current filter on Performers page
This commit is contained in:
parent
edcc4e8968
commit
17b5d010ee
5 changed files with 53 additions and 5 deletions
|
|
@ -604,6 +604,8 @@ input TagFilterType {
|
|||
images_filter: ImageFilterType
|
||||
"Filter by related galleries that meet this criteria"
|
||||
galleries_filter: GalleryFilterType
|
||||
"Filter by related performers that meet this criteria"
|
||||
performers_filter: PerformerFilterType
|
||||
|
||||
"Filter by creation time"
|
||||
created_at: TimestampCriterionInput
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@ type TagFilterType struct {
|
|||
ImagesFilter *ImageFilterType `json:"images_filter"`
|
||||
// Filter by related galleries that meet this criteria
|
||||
GalleriesFilter *GalleryFilterType `json:"galleries_filter"`
|
||||
// Filter by related performers that meet this criteria
|
||||
PerformersFilter *PerformerFilterType `json:"performers_filter"`
|
||||
// Filter by created at
|
||||
CreatedAt *TimestampCriterionInput `json:"created_at"`
|
||||
// Filter by updated at
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@ type tagRepositoryType struct {
|
|||
scenes joinRepository
|
||||
images joinRepository
|
||||
galleries joinRepository
|
||||
performers joinRepository
|
||||
}
|
||||
|
||||
var (
|
||||
|
|
@ -145,6 +146,14 @@ var (
|
|||
fkColumn: galleryIDColumn,
|
||||
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")
|
||||
},
|
||||
},
|
||||
|
||||
&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 {
|
||||
CriterionModifier,
|
||||
FilterMode,
|
||||
GalleryFilterType,
|
||||
InputMaybe,
|
||||
IntCriterionInput,
|
||||
PerformerFilterType,
|
||||
SceneFilterType,
|
||||
} from "src/core/generated-graphql";
|
||||
import { useIntl } from "react-intl";
|
||||
|
|
@ -515,12 +517,16 @@ export function makeQueryVariables(query: string, extraProps: {}) {
|
|||
interface IFilterType {
|
||||
scenes_filter?: InputMaybe<SceneFilterType>;
|
||||
scene_count?: InputMaybe<IntCriterionInput>;
|
||||
performers_filter?: InputMaybe<PerformerFilterType>;
|
||||
performer_count?: InputMaybe<IntCriterionInput>;
|
||||
galleries_filter?: InputMaybe<GalleryFilterType>;
|
||||
galleries_count?: InputMaybe<IntCriterionInput>;
|
||||
}
|
||||
|
||||
export function setObjectFilter(
|
||||
out: IFilterType,
|
||||
mode: FilterMode,
|
||||
relatedFilterOutput: SceneFilterType
|
||||
relatedFilterOutput: SceneFilterType | PerformerFilterType | GalleryFilterType
|
||||
) {
|
||||
const empty = Object.keys(relatedFilterOutput).length === 0;
|
||||
|
||||
|
|
@ -533,7 +539,27 @@ export function setObjectFilter(
|
|||
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.galleries_count = {
|
||||
modifier: CriterionModifier.GreaterThan,
|
||||
value: 0,
|
||||
};
|
||||
}
|
||||
out.galleries_filter = relatedFilterOutput as GalleryFilterType;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue