Files
frontend-app-learner-dashboard/src/containers/RelatedProgramsModal/components/ProgramCard.jsx
2022-06-13 22:17:06 -04:00

70 lines
1.9 KiB
JavaScript

import React from 'react';
import PropTypes from 'prop-types';
import { useIntl } from '@edx/frontend-platform/i18n';
import {
Badge,
Card,
// Hyperlink,
Icon,
} from '@edx/paragon';
import { Program } from '@edx/paragon/icons';
import messages from './messages';
import './index.scss';
export const whiteFontWrapper = (node) => (<span className="text-white">{node}</span>);
export const ProgramCard = ({ data }) => {
const { formatMessage } = useIntl();
const numCoursesMessage = formatMessage(
messages.courses,
{ numCourses: data.numberOfCourses },
);
const durationMessage = formatMessage(
messages.duration,
{ numWeeks: data.estimatedNumberOfWeeks },
);
return (
<Card
className="program-card d-inline-block bg-primary-500 text-white pb-3.5"
style={{ width: '18rem', color: 'white' }}
>
<Card.ImageCap
className="program-card-banner"
src={data.bannerUrl}
srcAlt={formatMessage(messages.bannerAlt)}
logoSrc={data.logoUrl}
logoAlt={formatMessage(messages.logoAlt)}
/>
<Card.Header
title={whiteFontWrapper(data.title)}
subtitle={whiteFontWrapper(data.provider)}
/>
<div className="ml-4">
<Badge variant="light" className="program-type-badge">
<Icon src={Program} className="d-inline-block" /> {data.programType}
</Badge>
<div className="program-summary mt-2">
{numCoursesMessage} {durationMessage}
</div>
</div>
</Card>
);
};
ProgramCard.propTypes = {
data: PropTypes.shape({
estimatedNumberOfWeeks: PropTypes.number,
numberOfCourses: PropTypes.number,
bannerUrl: PropTypes.string,
logoUrl: PropTypes.string,
title: PropTypes.string,
provider: PropTypes.string,
programType: PropTypes.string,
programUrl: PropTypes.string,
programTypeUrl: PropTypes.string,
}).isRequired,
};
export default ProgramCard;