import React, { useContext, useMemo } from "react"; import { useIntl } from "react-intl"; import { FrontPageContent, ICustomFilter } from "src/core/config"; import * as GQL from "src/core/generated-graphql"; import { useFindSavedFilter } from "src/core/StashService"; import { ConfigurationContext } from "src/hooks/Config"; import { ListFilterModel } from "src/models/list-filter/filter"; import { GalleryRecommendationRow } from "../Galleries/GalleryRecommendationRow"; import { ImageRecommendationRow } from "../Images/ImageRecommendationRow"; import { GroupRecommendationRow } from "../Movies/MovieRecommendationRow"; import { PerformerRecommendationRow } from "../Performers/PerformerRecommendationRow"; import { SceneRecommendationRow } from "../Scenes/SceneRecommendationRow"; import { StudioRecommendationRow } from "../Studios/StudioRecommendationRow"; import { TagRecommendationRow } from "../Tags/TagRecommendationRow"; interface IFilter { mode: GQL.FilterMode; filter: ListFilterModel; header: string; } const RecommendationRow: React.FC = ({ mode, filter, header }) => { function isTouchEnabled() { return "ontouchstart" in window || navigator.maxTouchPoints > 0; } const isTouch = isTouchEnabled(); switch (mode) { case GQL.FilterMode.Scenes: return ( ); case GQL.FilterMode.Studios: return ( ); case GQL.FilterMode.Movies: case GQL.FilterMode.Groups: return ( ); case GQL.FilterMode.Performers: return ( ); case GQL.FilterMode.Galleries: return ( ); case GQL.FilterMode.Images: return ( ); case GQL.FilterMode.Tags: return ( ); default: return <>; } }; interface ISavedFilterResults { savedFilterID: string; } const SavedFilterResults: React.FC = ({ savedFilterID, }) => { const { configuration: config } = useContext(ConfigurationContext); const { loading, data } = useFindSavedFilter(savedFilterID.toString()); const filter = useMemo(() => { if (!data?.findSavedFilter) return; const { mode } = data.findSavedFilter; const ret = new ListFilterModel(mode, config); ret.currentPage = 1; ret.configureFromSavedFilter(data.findSavedFilter); ret.randomSeed = -1; return ret; }, [data?.findSavedFilter, config]); if (loading || !data?.findSavedFilter || !filter) { return <>; } const { name, mode } = data.findSavedFilter; return ; }; interface ICustomFilterProps { customFilter: ICustomFilter; } const CustomFilterResults: React.FC = ({ customFilter, }) => { const { configuration: config } = useContext(ConfigurationContext); const intl = useIntl(); const filter = useMemo(() => { const itemsPerPage = 25; const ret = new ListFilterModel(customFilter.mode, config); ret.sortBy = customFilter.sortBy; ret.sortDirection = customFilter.direction; ret.itemsPerPage = itemsPerPage; ret.currentPage = 1; ret.randomSeed = -1; return ret; }, [customFilter, config]); const header = customFilter.message ? intl.formatMessage( { id: customFilter.message.id }, customFilter.message.values ) : customFilter.title ?? ""; return ( ); }; interface IProps { content: FrontPageContent; } export const Control: React.FC = ({ content }) => { switch (content.__typename) { case "SavedFilter": if (!content.savedFilterId) { return
Error: missing savedFilterId
; } return ( ); case "CustomFilter": return ; default: return <>; } };