ElectronicBabylonianLiterature/ebl-frontend

View on GitHub
src/fragmentarium/ui/fragment/FragmentInCorpus.tsx

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import React from 'react'
import { Fragment } from 'fragmentarium/domain/fragment'
import { ManuscriptAttestation } from 'corpus/domain/manuscriptAttestation'
import Breadcrumbs, { TextCrumb } from 'common/Breadcrumbs'
import GenreCrumb from 'corpus/ui/GenreCrumb'
import CorpusTextCrumb from 'corpus/ui/CorpusTextCrumb'
import ChapterCrumb from 'corpus/ui/ChapterCrumb'
import withData from 'http/withData'

const FragmentInCorpus = withData<
  {
    fragment: Fragment
  },
  { fragmentService },
  Array<ManuscriptAttestation>
>(
  ({ data }): JSX.Element => (
    <FragmentInCorpusDisplay manuscriptAttestations={data} />
  ),
  (props) => props.fragmentService.findInCorpus(props.fragment.number)
)

function FragmentInCorpusDisplay({
  manuscriptAttestations,
}: {
  manuscriptAttestations: ManuscriptAttestation[]
}): JSX.Element {
  return (
    <>
      {manuscriptAttestations.length > 0 && (
        <div className="fragment_in_corpus__container">
          <h3 className="fragment_in_corpus__header">Edited in Corpus</h3>
          {manuscriptAttestations.map((manuscriptAttestation, index) => {
            return (
              <Breadcrumbs
                key={index}
                className="fragment_in_corpus__breadcrumbs"
                crumbs={[
                  new GenreCrumb(manuscriptAttestation.text.genre, false),
                  new CorpusTextCrumb(
                    manuscriptAttestation.chapterId.textId,
                    manuscriptAttestation.text.name,
                    false
                  ),
                  new ChapterCrumb(
                    manuscriptAttestation.chapterId,
                    false,
                    true
                  ),
                  new TextCrumb(manuscriptAttestation.manuscriptSiglum),
                ]}
                hasFullPath={false}
              />
            )
          })}
        </div>
      )}
    </>
  )
}

export default FragmentInCorpus