bbc/psammead

View on GitHub
packages/components/psammead-media-player/src/Message/index.jsx

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import React from 'react';
import { string } from 'prop-types';
import styled from '@emotion/styled';
import { C_WHITE } from '@bbc/psammead-styles/colours';
import { GEL_SPACING_DBL, GEL_SPACING } from '@bbc/gel-foundations/spacings';
import { GEL_LONG_PRIMER } from '@bbc/gel-foundations/typography';
import { getSansRegular } from '@bbc/psammead-styles/font-styles';
import { GEL_GROUP_2_SCREEN_WIDTH_MIN } from '@bbc/gel-foundations/breakpoints';
import Image from '@bbc/psammead-image';

const NOJS_BACKGROUND_COLOUR = 'rgba(34, 34, 34, 0.75)';

const StyledWrapper = styled.div`
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
`;

const MessageWrapper = styled.div`
  ${({ service }) => getSansRegular(service)}
  ${GEL_LONG_PRIMER};
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  border: 0.0625rem solid transparent;
  color: ${C_WHITE};
  background-color: ${NOJS_BACKGROUND_COLOUR};
  @media screen and (-ms-high-contrast: active) {
    background-color: transparent;
  }
`;

const StyledMessage = styled.strong`
  display: block;
  font-weight: normal;
  bottom: 0;
  position: absolute;
  padding: ${GEL_SPACING};
  @media screen and (-ms-high-contrast: active) {
    background-color: window;
  }
  @media (min-width: ${GEL_GROUP_2_SCREEN_WIDTH_MIN}) {
    padding: ${GEL_SPACING_DBL};
  }
`;

const Message = ({ service, message, placeholderSrc, placeholderSrcset }) => (
  <StyledWrapper>
    {placeholderSrc && (
      <Image
        alt=""
        src={placeholderSrc}
        srcset={placeholderSrcset}
        aria-hidden="true"
      />
    )}
    <MessageWrapper service={service}>
      <StyledMessage>{message}</StyledMessage>
    </MessageWrapper>
  </StyledWrapper>
);

Message.propTypes = {
  service: string.isRequired,
  message: string.isRequired,
  placeholderSrcset: string,
  placeholderSrc: string,
};

Message.defaultProps = {
  placeholderSrcset: '',
  placeholderSrc: '',
};

export default Message;