• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

zooniverse / front-end-monorepo / 13441857992

20 Feb 2025 06:11PM UTC coverage: 75.481% (-0.03%) from 75.515%
13441857992

Pull #6581

github

web-flow
Merge 4943918c9 into f61207d68
Pull Request #6581: refactor: image loading handlers

10845 of 16563 branches covered (65.48%)

Branch coverage included in aggregate %.

26 of 29 new or added lines in 4 files covered. (89.66%)

9 existing lines in 3 files now uncovered.

16947 of 20257 relevant lines covered (83.66%)

398.64 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

75.0
/packages/lib-react-components/src/hooks/useProgressiveImage.js
1
import { useEffect, useRef, useState } from 'react'
1,041!
2

3
const defaultPlaceholder = {
1✔
4
  naturalHeight: 600,
5
  naturalWidth: 800,
6
  src: ''
7
}
8

9
const DEFAULT_HANDLER = () => false
7✔
10

11
function preloadImage({
12
  src,
15✔
13
  onLoad = DEFAULT_HANDLER,
15!
14
  onError = DEFAULT_HANDLER
15!
15
}) {
16
  const { Image } = window
15✔
17
  const img = new Image()
15✔
18
  img.onload = onLoad
15✔
19
  img.onerror = onError
15✔
20
  img.src = src
15✔
21
}
22

23
export default function useProgressiveImage({
24
  delay = 0,
20!
25
  placeholderSrc = '',
20!
26
  src,
20✔
27
  onLoad = DEFAULT_HANDLER,
20!
28
  onError = DEFAULT_HANDLER
20!
29
}) {
20✔
30
  const placeholder = {
20✔
31
    ...defaultPlaceholder,
32
    src: placeholderSrc
33
  }
34
  const [loading, setLoading] = useState(true)
20✔
35
  const imgRef = useRef(placeholder)
20✔
36
  const [error, setError] = useState(null)
20✔
37

38
  function onImageLoad(event) {
39
    imgRef.current = event.target
7✔
40
    onLoad(event)
7✔
41
    setLoading(false)
7✔
42
  }
43

44
  function onImageError(error) {
NEW
45
    onError(error)
×
NEW
46
    setError(error)
×
NEW
47
    setLoading(false)
×
48
  }
49

50
  function fetchImage() {
51
    setLoading(true)
15✔
52
    setError(null)
15✔
53
    preloadImage({
15✔
54
      src,
55
      onLoad: delay ? event => setTimeout(onImageLoad, delay, event) : onImageLoad,
1✔
56
      onError: onImageError
57
    })
58
  }
59

60
  useEffect(function onNewImage() {
20✔
61
    if (src) {
15✔
62
      fetchImage()
15✔
63
    }
64
  }, [src])
65

66
  return { img: imgRef.current, error, loading }
20✔
67
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc