Monorepo containing core modules of Zeichen.
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

58 líneas
1.1 KiB

  1. import * as React from 'react'
  2. import * as PropTypes from 'prop-types'
  3. import Link from 'next/link'
  4. import styled from 'styled-components'
  5. import Icon from '../Icon/Icon'
  6. const Base = styled('a')({
  7. width: '4rem',
  8. height: '4rem',
  9. display: 'grid',
  10. placeContent: 'center',
  11. color: 'inherit',
  12. })
  13. const MobileBase = styled(Base)({
  14. '@media (min-width: 1080px)': {
  15. display: 'none',
  16. },
  17. })
  18. const propTypes = {
  19. href: PropTypes.oneOfType([PropTypes.object, PropTypes.string]).isRequired,
  20. iconName: PropTypes.string.isRequired,
  21. title: PropTypes.string,
  22. mobileOnly: PropTypes.bool,
  23. active: PropTypes.bool,
  24. }
  25. type Props = PropTypes.InferProps<typeof propTypes>
  26. const PrimaryNavItem: React.FC<Props> = ({
  27. href,
  28. iconName,
  29. title,
  30. mobileOnly = false,
  31. active = false,
  32. }) => {
  33. const BaseComponent = mobileOnly ? MobileBase : Base
  34. return (
  35. <Link
  36. href={href}
  37. passHref
  38. >
  39. <BaseComponent
  40. title={title}
  41. >
  42. <Icon
  43. name={iconName}
  44. />
  45. </BaseComponent>
  46. </Link>
  47. )
  48. }
  49. PrimaryNavItem.propTypes = propTypes
  50. export default PrimaryNavItem