ndlib/marble-website-starter

View on GitHub
@ndlib/gatsby-source-appsync-marble/src/getItems/transform/citationGenerator/index.js

Summary

Maintainability
C
1 day
Test Coverage

module.exports = (item, slug) => {
  if (item.repository) {
    if (item.repository.toLowerCase() === 'museum') {
      return museumCitation(item)
    } else if (item.repository.toLowerCase() === 'rare' || item.repository.toLowerCase() === 'unda') {
      return archivalCollectionCitation(item, slug)
    }
  }
  return ''
}

const museumCitation = (item) => {
  let citation = findArtist(item.creators)
  citation += ', '
  citation += safeString(item.title)
  citation += ', '
  citation += safeString(item.createdDate)
  citation += ', '
  citation += safeString(item.medium)
  citation += '. Snite Museum of Art, University of Notre Dame. '
  citation += safeString(item.dedication)
  citation += ', '
  citation += safeString(item.uniqueIdentifier)
  citation += '.'

  return citation
}

const archivalCollectionCitation = (item, slug) => {
  // 'collection name, identifier. Rare Books & Special Collections, Hesburgh Libraries, University of Notre Dame, South Bend, IN. http://url'
  let citation = safeString(item.title)
  citation += ', '
  citation += safeString(item.uniqueIdentifier)
  citation += '. '
  if (item.repository.toLowerCase() === 'rare') {
    citation += 'Rare Books & Special Collections'
  } else if (item.repository.toLowerCase() === 'unda') {
    citation += 'University Archives'
  } else {
    console.error('Invalid repository for archival collections')
  }
  citation += ', Hesburgh Libraries, University of Notre Dame, South Bend, IN. '
  citation += `https://marble.nd.edu/${slug}`
  citation += '.'

  return citation
}

const findArtist = (creators) => {
  if (creators && creators.length > 0) {
    if (creators[0].fullName) {
      return creators[0].fullName
    } else {
      return creators[0].default
    }
  }
}

const safeString = (field) => {
  if (field) {
    return field
  }
  return ''
}