import React from 'react'; import styled from '@emotion/styled'; import PropTypes from 'prop-types'; import { Link } from 'gatsby'; import Img from 'gatsby-image'; import { TagsBlock } from 'components'; const Wrapper = styled.article` margin-bottom: 2rem; position: relative; z-index: 100; border-radius: ${props => props.theme.borderRadius.default}; box-shadow: ${props => props.theme.shadow.feature.small.default}; transition: ${props => props.theme.transitions.boom.transition}; flex-basis: calc(99.9% * 1 / 3 - 2.5rem); max-width: calc(99.9% * 1 / 3 - 2.5rem); width: calc(99.9% * 1 / 3 - 2.5rem); &:hover { box-shadow: ${props => props.theme.shadow.feature.small.hover}; transform: scale(1.04); } @media (max-width: 1000px) { flex-basis: calc(99.9% * 1 / 2 - 1rem); max-width: calc(99.9% * 1 / 2 - 1rem); width: calc(99.9% * 1 / 2 - 1rem); height: 18rem; } @media (max-width: 700px) { flex-basis: 100%; max-width: 100%; width: 100%; height: 15rem; } `; const Image = styled.div` margin: auto; position: relative; box-shadow: ${props => props.theme.shadow.feature.small.default}; transition: ${props => props.theme.transitions.boom.transition}; border-radius: ${props => props.theme.borderRadius.default}; min-height: 300px; img { border-radius: ${props => props.theme.borderRadius.default}; } &:hover { box-shadow: ${props => props.theme.shadow.feature.small.hover}; transform: scale(1.04); } a { position: absolute; top: 0; right: 0; bottom: 0; left: 0; border-radius: ${props => props.theme.borderRadius.default}; > div { position: static !important; } > div > div { position: static !important; } &:focus { outline: none; box-shadow: 0 0 0 5px ${props => props.theme.colors.primary.dark}; } } flex-basis: 100%; max-width: 100%; width: 100%; @media (max-width: 800px) { flex-basis: 100%; max-width: 100%; width: 100%; margin-bottom: 1.5rem; } @media (max-width: 500px) { min-height: 200px; } `; const Information = styled.div` h1 { font-size: 2rem; display: inline-block; color: ${props => props.theme.colors.black.base}; transition: all ${props => props.theme.transitions.default.duration}; &:hover { color: ${props => props.theme.colors.primary.base}; } } text-align: center; flex-basis: 100%; max-width: 100%; width: 100%; @media (max-width: 800px) { flex-basis: 100%; max-width: 100%; width: 100%; } `; const Date = styled.div` margin-top: 1rem; color: ${props => props.theme.colors.black.lighter}; `; const Title = styled.h1` margin: 0; `; const ShopList = ({ path, cover, title, date, excerpt, tags }) => ( <Wrapper> <Image> <Link to={path} title={title}> {cover && typeof cover === 'object' && <Img fluid={cover || {} || [] || ''} /> } {cover && typeof cover === 'string' && <img src={cover || {} || [] || ''} style={{height: '100%', objectFit: 'fill'}} /> } </Link> </Image> <Information> <Date>{date}</Date> <Link to={path}> <Title>{title}</Title> </Link> <TagsBlock list={tags} /> {excerpt} </Information> </Wrapper> ); export default ShopList; ShopList.propTypes = { cover: PropTypes.object, path: PropTypes.string.isRequired, excerpt: PropTypes.string, date: PropTypes.string, title: PropTypes.string.isRequired, tags: PropTypes.array, };