ndlib/marble-website-starter

View on GitHub
@ndlib/gatsby-theme-marble/src/utils/findImage.js

Summary

Maintainability
A
45 mins
Test Coverage
import typy from 'typy'
import noImage from 'assets/images/noImage.svg'
import pdfImage from 'assets/images/pdf.svg'

// eslint-disable-next-line complexity
export const findImage = (images, marbleItem, thumbnail = false) => {
  // the default image if it exists
  let returnImage = findDefaultImage(marbleItem, thumbnail)

  // check the child images if default image returned null and was assigned a "no image" image
  if (returnImage === noImage || returnImage === pdfImage) {
    const image = typy(images, 'nodes').safeArray.find(node => node.fileType === 'image') || typy(marbleItem, 'childrenMarbleFile').safeArray.find(file => file.fileType === 'image')
    if (image && thumbnail) {
      returnImage = typy(image, 'local.publicURL').safeString || typy(image, 'iiif.thumbnail').safeString
    } else if (image) {
      returnImage = typy(image, 'local.publicURL').safeString ||
      typy(image, 'iiif.default').safeString
    }
  }
  return returnImage
}
export default findImage

export const findAltImage = (images, index) => {
  if (typy(images, `nodes[${index}].local.childImageSharp.fixed.src`).isString) {
    return typy(images, `nodes[${index}].local.childImageSharp.fixed.src`).safeString
  }

  return typy(images, `nodes[${index}].iiif.service`).isString
    ? `${typy(images, `nodes[${index}].iiif.service`).safeString}/square/125,/0/default.jpg`
    : noImage
}

export const findDefaultImage = (marbleItem, thumbnail = false) => {
  if (typy(marbleItem, 'defaultImage.default').isString) {
    if (thumbnail) {
      return marbleItem.defaultImage.thumbnail
    }
    return marbleItem.defaultImage.default
  }

  // No images were found, check to see if it is a PDF
  const containsPDF = typy(marbleItem, 'childrenMarbleFile').safeArray.find(file => file.fileType === 'pdf')
  if (containsPDF) {
    return pdfImage
  }

  // No image and not a pdf, return noImage icon
  return noImage
}