import { Tab, Tabs } from "react-bootstrap"; import queryString from "query-string"; import React, { useEffect, useState } from "react"; import { useParams, useLocation, useHistory } from "react-router-dom"; import * as GQL from "src/core/generated-graphql"; import { StashService } from "src/core/StashService"; import { GalleryViewer } from "src/components/Galleries/GalleryViewer"; import { LoadingIndicator } from "src/components/Shared"; import { useToast } from 'src/hooks'; import { ScenePlayer } from "src/components/ScenePlayer"; import { ScenePerformerPanel } from "./ScenePerformerPanel"; import { SceneMarkersPanel } from "./SceneMarkersPanel"; import { SceneFileInfoPanel } from "./SceneFileInfoPanel"; import { SceneEditPanel } from "./SceneEditPanel"; import { SceneDetailPanel } from "./SceneDetailPanel"; import { OCounterButton } from './OCounterButton'; export const Scene: React.FC = () => { const { id = "new" } = useParams(); const location = useLocation(); const history = useHistory(); const Toast = useToast(); const [timestamp, setTimestamp] = useState(getInitialTimestamp()); const [scene, setScene] = useState(); const { data, error, loading } = StashService.useFindScene(id); const [oLoading, setOLoading] = useState(false); const [incrementO] = StashService.useSceneIncrementO(scene?.id ?? "0"); const [decrementO] = StashService.useSceneDecrementO(scene?.id ?? "0"); const [resetO] = StashService.useSceneResetO(scene?.id ?? "0"); const queryParams = queryString.parse(location.search); const autoplay = queryParams?.autoplay === "true"; useEffect(() => { if (data?.findScene) setScene(data.findScene); }, [data]); function getInitialTimestamp() { const params = queryString.parse(location.search); const initialTimestamp = params?.t ?? "0"; return Number.parseInt( Array.isArray(initialTimestamp) ? initialTimestamp[0] : initialTimestamp, 10 ); } const updateOCounter = (newValue: number) => { const modifiedScene = { ...scene } as GQL.SceneDataFragment; modifiedScene.o_counter = newValue; setScene(modifiedScene); } const onIncrementClick = async () => { try { setOLoading(true); const result = await incrementO(); if(result.data) updateOCounter(result.data.sceneIncrementO); } catch (e) { Toast.error(e); } finally { setOLoading(false); } } const onDecrementClick = async () => { try { setOLoading(true); const result = await decrementO(); if(result.data) updateOCounter(result.data.sceneDecrementO); } catch (e) { Toast.error(e); } finally { setOLoading(false); } } const onResetClick = async () => { try { setOLoading(true); const result = await resetO(); if(result.data) updateOCounter(result.data.sceneResetO); } catch (e) { Toast.error(e); } finally { setOLoading(false); } } function onClickMarker(marker: GQL.SceneMarkerDataFragment) { setTimestamp(marker.seconds); } if (loading || !scene || !data?.findScene) { return ; } if (error) return
{error.message}
; return ( <>
{scene.performers.length > 0 ? ( ) : ( "" )} {scene.gallery ? ( ) : ( "" )} setScene(newScene)} onDelete={() => history.push("/scenes")} />
); };