import React, { MouseEvent, useMemo } from "react"; import { Button, ButtonGroup } from "react-bootstrap"; import cx from "classnames"; import * as GQL from "src/core/generated-graphql"; import { Icon } from "src/components/Shared/Icon"; import { GalleryLink, TagLink } from "src/components/Shared/TagLink"; import { HoverPopover } from "src/components/Shared/HoverPopover"; import { SweatDrops } from "src/components/Shared/SweatDrops"; import { PerformerPopoverButton } from "src/components/Shared/PerformerPopoverButton"; import { GridCard } from "src/components/Shared/GridCard/GridCard"; import { RatingBanner } from "src/components/Shared/RatingBanner"; import { faBox, faImages, faSearch, faTag, } from "@fortawesome/free-solid-svg-icons"; import { imageTitle } from "src/core/files"; import { TruncatedText } from "../Shared/TruncatedText"; import { StudioOverlay } from "../Shared/GridCard/StudioOverlay"; interface IImageCardProps { image: GQL.SlimImageDataFragment; cardWidth?: number; selecting?: boolean; selected?: boolean | undefined; zoomIndex: number; onSelectedChanged?: (selected: boolean, shiftKey: boolean) => void; onPreview?: (ev: MouseEvent) => void; } export const ImageCard: React.FC = ( props: IImageCardProps ) => { const file = useMemo( () => props.image.visual_files.length > 0 ? props.image.visual_files[0] : undefined, [props.image] ); function maybeRenderTagPopoverButton() { if (props.image.tags.length <= 0) return; const popoverContent = props.image.tags.map((tag) => ( )); return ( ); } function maybeRenderPerformerPopoverButton() { if (props.image.performers.length <= 0) return; return ( ); } function maybeRenderOCounter() { if (props.image.o_counter) { return (
); } } function maybeRenderGallery() { if (props.image.galleries.length <= 0) return; const popoverContent = props.image.galleries.map((gallery) => ( )); return ( ); } function maybeRenderOrganized() { if (props.image.organized) { return (
); } } function maybeRenderPopoverButtonGroup() { if ( props.image.tags.length > 0 || props.image.performers.length > 0 || props.image.o_counter || props.image.galleries.length > 0 || props.image.organized ) { return ( <>
{maybeRenderTagPopoverButton()} {maybeRenderPerformerPopoverButton()} {maybeRenderOCounter()} {maybeRenderGallery()} {maybeRenderOrganized()} ); } } function isPortrait() { const width = file?.width ? file.width : 0; const height = file?.height ? file.height : 0; return height > width; } const source = props.image.paths.preview != "" ? props.image.paths.preview ?? "" : props.image.paths.thumbnail ?? ""; const video = source.includes("preview"); const ImagePreview = video ? "video" : "img"; return (
{props.onPreview ? (
) : undefined}
} details={
{props.image.date}
} overlays={} popovers={maybeRenderPopoverButtonGroup()} selected={props.selected} selecting={props.selecting} onSelectedChanged={props.onSelectedChanged} /> ); };