import React, { useMemo } from "react"; import { Button, ButtonGroup } from "react-bootstrap"; 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 { FormattedMessage } from "react-intl"; import { RatingBanner } from "../Shared/RatingBanner"; import { faPlayCircle, faTag } from "@fortawesome/free-solid-svg-icons"; import { RelatedGroupPopoverButton } from "./RelatedGroupPopover"; import { SweatDrops } from "../Shared/SweatDrops"; const Description: React.FC<{ sceneNumber?: number; description?: string; }> = ({ sceneNumber, description }) => { if (!sceneNumber && !description) return null; return ( <>
{sceneNumber !== undefined && ( #{sceneNumber} )} {description !== undefined && ( {description} )} ); }; interface IProps { group: GQL.GroupDataFragment; cardWidth?: number; sceneNumber?: number; selecting?: boolean; selected?: boolean; zoomIndex?: number; onSelectedChanged?: (selected: boolean, shiftKey: boolean) => void; fromGroupId?: string; onMove?: (srcIds: string[], targetId: string, after: boolean) => void; } export const GroupCard: React.FC = ({ group, sceneNumber, cardWidth, selecting, selected, zoomIndex, onSelectedChanged, fromGroupId, onMove, }) => { const groupDescription = useMemo(() => { if (!fromGroupId) { return undefined; } const containingGroup = group.containing_groups.find( (cg) => cg.group.id === fromGroupId ); return containingGroup?.description ?? undefined; }, [fromGroupId, group.containing_groups]); function maybeRenderScenesPopoverButton() { if (group.scenes.length === 0) return; const popoverContent = group.scenes.map((scene) => ( )); return ( ); } function maybeRenderTagPopoverButton() { if (group.tags.length <= 0) return; const popoverContent = group.tags.map((tag) => ( )); return ( ); } function maybeRenderOCounter() { if (!group.o_counter) return; return (
); } function maybeRenderPopoverButtonGroup() { if ( sceneNumber || groupDescription || group.scenes.length > 0 || group.tags.length > 0 || group.containing_groups.length > 0 || group.sub_group_count > 0 ) { return ( <>
{maybeRenderScenesPopoverButton()} {maybeRenderTagPopoverButton()} {(group.sub_group_count > 0 || group.containing_groups.length > 0) && ( )} {maybeRenderOCounter()} ); } } return ( {group.name } details={
{group.date}
} selected={selected} selecting={selecting} onSelectedChanged={onSelectedChanged} popovers={maybeRenderPopoverButtonGroup()} /> ); };