import { Button, ButtonGroup, OverlayTrigger, Tooltip } from "react-bootstrap"; import React, { useState } from "react"; import * as GQL from "src/core/generated-graphql"; import { GridCard } from "../Shared/GridCard/GridCard"; import { HoverPopover } from "../Shared/HoverPopover"; import { Icon } from "../Shared/Icon"; import { SceneLink, TagLink } from "../Shared/TagLink"; import { TruncatedText } from "../Shared/TruncatedText"; import { PerformerPopoverButton } from "../Shared/PerformerPopoverButton"; import { PopoverCountButton } from "../Shared/PopoverCountButton"; import NavUtils from "src/utils/navigation"; import { RatingBanner } from "../Shared/RatingBanner"; import { faBox, faPlayCircle, faTag } from "@fortawesome/free-solid-svg-icons"; import { galleryTitle } from "src/core/galleries"; import { StudioOverlay } from "../Shared/GridCard/StudioOverlay"; import { GalleryPreviewScrubber } from "./GalleryPreviewScrubber"; import cx from "classnames"; import { useHistory } from "react-router-dom"; import { PatchComponent } from "src/patch"; interface IGalleryPreviewProps { gallery: GQL.SlimGalleryDataFragment; onScrubberClick?: (index: number) => void; } export const GalleryPreview: React.FC = ({ gallery, onScrubberClick, }) => { const [imgSrc, setImgSrc] = useState( gallery.paths.cover ?? undefined ); return (
{!!imgSrc && ( {gallery.title )} {gallery.image_count > 0 && ( )}
); }; interface IGalleryCardProps { gallery: GQL.SlimGalleryDataFragment; cardWidth?: number; selecting?: boolean; selected?: boolean | undefined; zoomIndex?: number; onSelectedChanged?: (selected: boolean, shiftKey: boolean) => void; } const GalleryCardPopovers = PatchComponent( "GalleryCard.Popovers", (props: IGalleryCardProps) => { function maybeRenderScenePopoverButton() { if (props.gallery.scenes.length === 0) return; const popoverContent = props.gallery.scenes.map((scene) => ( )); return ( ); } function maybeRenderTagPopoverButton() { if (props.gallery.tags.length <= 0) return; const popoverContent = props.gallery.tags.map((tag) => ( )); return ( ); } function maybeRenderPerformerPopoverButton() { if (props.gallery.performers.length <= 0) return; return ( ); } function maybeRenderImagesPopoverButton() { if (!props.gallery.image_count) return; return ( ); } function maybeRenderOrganized() { if (props.gallery.organized) { return ( {"Organized"}} placement="bottom" >
); } } function maybeRenderPopoverButtonGroup() { if ( props.gallery.scenes.length > 0 || props.gallery.performers.length > 0 || props.gallery.tags.length > 0 || props.gallery.organized || props.gallery.image_count > 0 ) { return ( <>
{maybeRenderImagesPopoverButton()} {maybeRenderTagPopoverButton()} {maybeRenderPerformerPopoverButton()} {maybeRenderScenePopoverButton()} {maybeRenderOrganized()} ); } } return <>{maybeRenderPopoverButtonGroup()}; } ); const GalleryCardDetails = PatchComponent( "GalleryCard.Details", (props: IGalleryCardProps) => { return (
{props.gallery.date}
); } ); const GalleryCardOverlays = PatchComponent( "GalleryCard.Overlays", (props: IGalleryCardProps) => { return ; } ); const GalleryCardImage = PatchComponent( "GalleryCard.Image", (props: IGalleryCardProps) => { const history = useHistory(); return ( <> { history.push(`/galleries/${props.gallery.id}/images/${i}`); }} /> ); } ); export const GalleryCard = PatchComponent( "GalleryCard", (props: IGalleryCardProps) => { return ( } overlays={} details={} popovers={} selected={props.selected} selecting={props.selecting} onSelectedChanged={props.onSelectedChanged} /> ); } );