diff --git a/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/FlipbookViewer/FlipbookViewer.js b/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/FlipbookViewer/FlipbookViewer.js index 05d644a9ed..7a641f5aa3 100644 --- a/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/FlipbookViewer/FlipbookViewer.js +++ b/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/FlipbookViewer/FlipbookViewer.js @@ -32,12 +32,13 @@ const FlipbookViewer = ({ const [currentFrame, setCurrentFrame] = useState(defaultFrame) const [playing, setPlaying] = useState(false) const [dragMove, setDragMove] = useState() - /** This initializes an image element from the subject's defaultFrame src url. + /** This initializes an image element from the subject's currentFrame src url. * We do this so the SVGPanZoom has dimensions of the subject image. - * We're assuming all frames in one subject have the same dimensions. */ - const defaultFrameLocation = subject ? subject.locations[defaultFrame] : null + */ + const currentFrameLocation = subject ? subject.locations[currentFrame] : null const { img, error, loading, subjectImage } = useSubjectImage({ - src: defaultFrameLocation.url, + frame: currentFrame, + src: currentFrameLocation.url, onReady, onError }) diff --git a/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/MultiFrameViewer/MultiFrameViewerContainer.js b/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/MultiFrameViewer/MultiFrameViewerContainer.js index f476b59f7b..63f2673592 100644 --- a/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/MultiFrameViewer/MultiFrameViewerContainer.js +++ b/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/MultiFrameViewer/MultiFrameViewerContainer.js @@ -77,6 +77,7 @@ function MultiFrameViewerContainer({ // TODO: replace this with a better function to parse the image location from a subject. const imageLocation = subject ? subject.locations[frame] : null const { img, error, loading, subjectImage } = useSubjectImage({ + frame, src: imageLocation?.url, onReady, onError diff --git a/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/SeparateFramesViewer/components/SeparateFrame/SeparateFrame.js b/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/SeparateFramesViewer/components/SeparateFrame/SeparateFrame.js index b51874a96e..cc0b5eb42d 100644 --- a/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/SeparateFramesViewer/components/SeparateFrame/SeparateFrame.js +++ b/packages/lib-classifier/src/components/Classifier/components/SubjectViewer/components/SeparateFramesViewer/components/SeparateFrame/SeparateFrame.js @@ -32,6 +32,7 @@ const SeparateFrame = ({ onReady = DEFAULT_HANDLER }) => { const { img, error, loading, subjectImage } = useSubjectImage({ + frame, src: frameUrl, onReady, onError diff --git a/packages/lib-classifier/src/hooks/Readme.md b/packages/lib-classifier/src/hooks/Readme.md index 850d652ef7..0ed237c214 100644 --- a/packages/lib-classifier/src/hooks/Readme.md +++ b/packages/lib-classifier/src/hooks/Readme.md @@ -104,7 +104,7 @@ A custom hook that fetches an image from a URL, with a ref to the image's DOM no Usage: ```jsx // img is a DOM img. subjectImage is a React ref to the element that displays the image. -const { img, error, loading, subjectImage } = useSubjectImage({ src, onReady, onError }) +const { img, error, loading, subjectImage } = useSubjectImage({ frame, src, onReady, onError }) if (loading) { return

The image is still loading.

diff --git a/packages/lib-classifier/src/hooks/useSubjectImage.js b/packages/lib-classifier/src/hooks/useSubjectImage.js index e3ac2a7e74..2b61a076ff 100644 --- a/packages/lib-classifier/src/hooks/useSubjectImage.js +++ b/packages/lib-classifier/src/hooks/useSubjectImage.js @@ -1,7 +1,7 @@ import { useEffect, useRef } from 'react' import { useProgressiveImage } from '@zooniverse/react-components/hooks' -export default function useSubjectImage({ src, onReady, onError }) { +export default function useSubjectImage({ frame = 0, src, onReady, onError }) { const subjectImage = useRef() const { img, error, loading } = useProgressiveImage({ @@ -20,7 +20,7 @@ export default function useSubjectImage({ src, onReady, onError }) { ? svgImage.getBoundingClientRect() : {} const target = { clientHeight, clientWidth, naturalHeight, naturalWidth } - onReady({ target }) + onReady({ target }, frame) } } diff --git a/packages/lib-classifier/src/store/SubjectViewerStore/SubjectViewerStore.js b/packages/lib-classifier/src/store/SubjectViewerStore/SubjectViewerStore.js index d1660fbe89..2d92bf1155 100644 --- a/packages/lib-classifier/src/store/SubjectViewerStore/SubjectViewerStore.js +++ b/packages/lib-classifier/src/store/SubjectViewerStore/SubjectViewerStore.js @@ -115,7 +115,7 @@ const SubjectViewer = types self.loadingState = asyncStates.error }, - onSubjectReady (event) { + onSubjectReady (event, frameIndex = 0) { const { target = {} } = event || {} const { clientHeight = 0, @@ -123,7 +123,7 @@ const SubjectViewer = types naturalHeight = 0, naturalWidth = 0 } = target || {} - self.dimensions.push({ clientHeight, clientWidth, naturalHeight, naturalWidth }) + self.dimensions[frameIndex] = { clientHeight, clientWidth, naturalHeight, naturalWidth } self.rotation = 0 self.loadingState = asyncStates.success },