import { useMemo } from "react";
import { Button, ButtonGroup } from "react-bootstrap";
import * as GQL from "src/core/generated-graphql";
import { Icon } from "../Shared/Icon";
import { TagLink } from "../Shared/TagLink";
import { HoverPopover } from "../Shared/HoverPopover";
import NavUtils from "src/utils/navigation";
import TextUtils from "src/utils/text";
import { useConfigurationContext } from "src/hooks/Config";
import { GridCard } from "../Shared/GridCard/GridCard";
import { faTag } from "@fortawesome/free-solid-svg-icons";
import { markerTitle } from "src/core/markers";
import { Link } from "react-router-dom";
import { objectTitle } from "src/core/files";
import { PerformerPopoverButton } from "../Shared/PerformerPopoverButton";
import { ScenePreview } from "./SceneCard";
import { TruncatedText } from "../Shared/TruncatedText";
interface ISceneMarkerCardProps {
marker: GQL.SceneMarkerDataFragment;
cardWidth?: number;
previewHeight?: number;
index?: number;
compact?: boolean;
selecting?: boolean;
selected?: boolean | undefined;
zoomIndex?: number;
onSelectedChanged?: (selected: boolean, shiftKey: boolean) => void;
}
const SceneMarkerCardPopovers = (props: ISceneMarkerCardProps) => {
function maybeRenderPerformerPopoverButton() {
if (props.marker.scene.performers.length <= 0) return;
return (
);
}
function renderTagPopoverButton() {
const popoverContent = [
,
];
props.marker.tags.map((tag) =>
popoverContent.push(
)
);
return (
);
}
function renderPopoverButtonGroup() {
if (!props.compact) {
return (
<>
{maybeRenderPerformerPopoverButton()}
{renderTagPopoverButton()}
>
);
}
}
return <>{renderPopoverButtonGroup()}>;
};
const SceneMarkerCardDetails = (props: ISceneMarkerCardProps) => {
return (
{TextUtils.formatTimestampRange(
props.marker.seconds,
props.marker.end_seconds ?? undefined
)}
{objectTitle(props.marker.scene)}
}
/>
);
};
const SceneMarkerCardImage = (props: ISceneMarkerCardProps) => {
const { configuration } = useConfigurationContext();
const file = useMemo(
() =>
props.marker.scene.files.length > 0
? props.marker.scene.files[0]
: undefined,
[props.marker.scene]
);
function isPortrait() {
const width = file?.width ? file.width : 0;
const height = file?.height ? file.height : 0;
return height > width;
}
function maybeRenderSceneSpecsOverlay() {
return (
{props.marker.end_seconds && (
{TextUtils.secondsToTimestamp(
props.marker.end_seconds - props.marker.seconds
)}
)}
);
}
return (
<>
{maybeRenderSceneSpecsOverlay()}
>
);
};
export const SceneMarkerCard = (props: ISceneMarkerCardProps) => {
function zoomIndex() {
if (!props.compact && props.zoomIndex !== undefined) {
return `zoom-${props.zoomIndex}`;
}
return "";
}
return (
}
details={}
popovers={}
selected={props.selected}
selecting={props.selecting}
onSelectedChanged={props.onSelectedChanged}
/>
);
};