curiousroamers/src/client/Banner.tsx

77 lines
1.5 KiB
TypeScript

import React from 'react';
import Link from './Link';
interface Link {
status: string;
text: string;
}
interface BannerProps {
title: string;
description: string;
links: Array<Link>;
image: string;
setStatus: any;
}
/**
* @return {jsx} The root component
*/
export default function Banner(
{setStatus, title, description, links, image}: BannerProps) {
let imgUrl;
if (image.startsWith('/static/images/')) {
imgUrl = image;
} else {
imgUrl = '/static/images/' + image;
}
const containerStyle = {
backgroundImage: `url('` + imgUrl + `')`,
backgroundPosition: '64% 78%',
backgroundSize: 'cover',
};
const jumbotronStyle = {
backgroundColor: 'transparent',
};
const colorLayer = {
backgroundColor: '#1279be70',
};
return (
<React.Fragment>
<div
className='container-fluid p-0'
style={containerStyle}>
<div
className='container-fluid p-0'
style={colorLayer}>
<div
className='jumbotron container text-white my-4 px-0'
id='banner'
style={jumbotronStyle}>
<h1 className='display-4 font-weight-bold'>{title}</h1>
<div className='h5'>
{description.split('\n').map((elem, index) =>
<p key={index}>
{elem}
</p>)}
</div>
<br />
{links.map((elem, index) =>
<p key={index} className='lead mt-2'>
<button
className='btn btn-info btn-lg
font-weight-bold'
onClick={() => setStatus(elem.status)}>
{elem.text}</button>
</p>)}
</div>
</div>
</div>
</React.Fragment>
);
}