Image improvements (#847)

* Fix image performer filtering
* Add performer images tab
* Add studio images tab
* Rename interface
* Add tag images tab
* Add path filtering for images
* Show image stats on stats page
* Fix incorrect scan counts after timeout
* Add gallery filters
* Relax scene gallery selector
This commit is contained in:
WithoutPants
2020-10-20 10:11:15 +11:00
committed by GitHub
parent 80199f79f3
commit 8eda72ad89
31 changed files with 463 additions and 169 deletions

View File

@@ -11,12 +11,14 @@ import {
useAllPerformersForFilter,
useMarkerStrings,
useScrapePerformerList,
useValidGalleriesForScene,
useTagCreate,
useStudioCreate,
usePerformerCreate,
useFindGalleries,
} from "src/core/StashService";
import { useToast } from "src/hooks";
import { ListFilterModel } from "src/models/list-filter/filter";
import { FilterMode } from "src/models/list-filter/types";
type ValidTypes =
| GQL.SlimPerformerDataFragment
@@ -90,12 +92,24 @@ const getSelectedValues = (selectedItems: ValueType<Option>) =>
: [];
export const SceneGallerySelect: React.FC<ISceneGallerySelect> = (props) => {
const { data, loading } = useValidGalleriesForScene(props.sceneId);
const galleries = data?.validGalleriesForScene ?? [];
const items = (galleries.length > 0
? [{ path: "None", id: "0" }, ...galleries]
: []
).map((g) => ({ label: g.title ?? "", value: g.id }));
const [query, setQuery] = React.useState<string>("");
const { data, loading } = useFindGalleries(getFilter());
const galleries = data?.findGalleries.galleries ?? [];
const items = galleries.map((g) => ({
label: g.title ?? g.path ?? "",
value: g.id,
}));
function getFilter() {
const ret = new ListFilterModel(FilterMode.Galleries);
ret.searchTerm = query;
return ret;
}
const onInputChange = debounce((input: string) => {
setQuery(input);
}, 500);
const onChange = (selectedItems: ValueType<Option>) => {
const selectedItem = getSelectedValues(selectedItems)[0];
@@ -110,8 +124,8 @@ export const SceneGallerySelect: React.FC<ISceneGallerySelect> = (props) => {
return (
<SelectComponent
className="input-control"
onChange={onChange}
onInputChange={onInputChange}
isLoading={loading}
items={items}
selectedOptions={selectedOptions}