import React from "react"; import { Button, ButtonGroup, Card, Form } from "react-bootstrap"; import { Link } from "react-router-dom"; import cx from "classnames"; import * as GQL from "src/core/generated-graphql"; import { Icon, TagLink, HoverPopover, SweatDrops, TruncatedText, } from "src/components/Shared"; import { TextUtils } from "src/utils"; import { PerformerPopoverButton } from "../Shared/PerformerPopoverButton"; interface IImageCardProps { image: GQL.SlimImageDataFragment; selecting?: boolean; selected: boolean | undefined; zoomIndex: number; onSelectedChanged: (selected: boolean, shiftKey: boolean) => void; } export const ImageCard: React.FC = ( props: IImageCardProps ) => { function maybeRenderRatingBanner() { if (!props.image.rating) { return; } return (
RATING: {props.image.rating}
); } 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 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.organized ) { return ( <>
{maybeRenderTagPopoverButton()} {maybeRenderPerformerPopoverButton()} {maybeRenderOCounter()} {maybeRenderOrganized()} ); } } function handleImageClick( event: React.MouseEvent ) { const { shiftKey } = event; if (props.selecting) { props.onSelectedChanged(!props.selected, shiftKey); event.preventDefault(); } } function handleDrag(event: React.DragEvent) { if (props.selecting) { event.dataTransfer.setData("text/plain", ""); event.dataTransfer.setDragImage(new Image(), 0, 0); } } function handleDragOver(event: React.DragEvent) { const ev = event; const shiftKey = false; if (props.selecting && !props.selected) { props.onSelectedChanged(true, shiftKey); } ev.dataTransfer.dropEffect = "move"; ev.preventDefault(); } function isPortrait() { const { file } = props.image; const width = file.width ? file.width : 0; const height = file.height ? file.height : 0; return height > width; } let shiftKey = false; return ( props.onSelectedChanged(!props.selected, shiftKey)} onClick={(event: React.MouseEvent) => { // eslint-disable-next-line prefer-destructuring shiftKey = event.shiftKey; event.stopPropagation(); }} />
{props.image.title
{maybeRenderRatingBanner()}
{maybeRenderPopoverButtonGroup()}
); };