ElectronicBabylonianLiterature/ebl-frontend

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

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import React, { Fragment, FunctionComponent } from 'react'
import classNames from 'classnames'

import withData, { WithoutData } from 'http/withData'
import FragmentLink from 'fragmentarium/ui/FragmentLink'
import { FragmentPagerData } from 'fragmentarium/domain/pager'

type Props = {
  data: FragmentPagerData
  fragmentNumber: string
}

const FragmentPager: FunctionComponent<Props> = ({
  data,
  fragmentNumber,
}: Props): JSX.Element => {
  const PagerLink = ({
    nextFragmentNumber,
    direction,
  }: {
    nextFragmentNumber: string
    direction: string
  }) => (
    <FragmentLink
      number={nextFragmentNumber}
      aria-label={direction}
      folio={null}
    >
      <i
        className={classNames({
          fas: true,
          'fa-angle-right': direction === 'Next',
          'fa-angle-left': direction === 'Previous',
        })}
        aria-hidden
      />
    </FragmentLink>
  )
  return (
    <Fragment>
      <PagerLink nextFragmentNumber={data['previous']} direction="Previous" />
      {fragmentNumber}
      <PagerLink nextFragmentNumber={data['next']} direction="Next" />
    </Fragment>
  )
}

export default withData<
  WithoutData<Props>,
  { fragmentService },
  FragmentPagerData
>(
  ({ data, ...props }) => <FragmentPager data={data} {...props} />,
  (props) => props.fragmentService.fragmentPager(props.fragmentNumber),
  {
    watch: (props) => [props.fragmentNumber],
  }
)