Add sponsor banner
This commit is contained in:
23
components/sponsor-banner/index.js
Normal file
23
components/sponsor-banner/index.js
Normal file
@ -0,0 +1,23 @@
|
||||
import React from 'react';
|
||||
import { BannerWrap, CloseSponsor, EmojiWrap } from './style';
|
||||
|
||||
export function SponsorBanner({ onCloseBanner = () => null }){
|
||||
return (
|
||||
<div className='row'>
|
||||
<div className='col p-0'>
|
||||
<BannerWrap href='https://google.com' target='_blank' className='alert alert-info'>
|
||||
Sponsored by DigitalOcean
|
||||
<EmojiWrap>😍</EmojiWrap>
|
||||
Check them out!
|
||||
|
||||
<CloseSponsor
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
onCloseBanner();
|
||||
}}
|
||||
className='close'>×</CloseSponsor>
|
||||
</BannerWrap>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
37
components/sponsor-banner/style.js
Normal file
37
components/sponsor-banner/style.js
Normal file
@ -0,0 +1,37 @@
|
||||
import styled from 'styled-components';
|
||||
|
||||
export const BannerWrap = styled.a`
|
||||
margin-bottom: 0;
|
||||
background: #101010;
|
||||
color: white;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
padding: 10px 15px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
transition: all 200ms;
|
||||
|
||||
&:hover {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
`;
|
||||
|
||||
export const EmojiWrap = styled.span`
|
||||
position: relative;
|
||||
top: 1px;
|
||||
margin: 0 0 0 6px;
|
||||
`;
|
||||
|
||||
export const CloseSponsor = styled.span`
|
||||
color: white;
|
||||
text-shadow: none;
|
||||
margin-right: 15px;
|
||||
position: relative;
|
||||
top: -2px;
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
color: white;
|
||||
}
|
||||
`;
|
@ -62,3 +62,15 @@ code:not([class]) {
|
||||
word-wrap: normal;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.banner-wrap {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.body-wrap.sponsor-banner-visible {
|
||||
margin-top: 44px;
|
||||
}
|
@ -1,8 +1,14 @@
|
||||
import React from 'react';
|
||||
import classNames from 'classnames';
|
||||
import './global.scss';
|
||||
import { firePageView } from 'lib/gtag';
|
||||
import { SponsorBanner } from '../../components/sponsor-banner';
|
||||
|
||||
class DefaultLayout extends React.Component {
|
||||
state = {
|
||||
isBannerClosed: false
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
firePageView(window.location.pathname);
|
||||
}
|
||||
@ -10,8 +16,13 @@ class DefaultLayout extends React.Component {
|
||||
render() {
|
||||
return (
|
||||
<div>
|
||||
<div className={ classNames('banner-wrap', { 'd-none': this.state.isBannerClosed }) }>
|
||||
<SponsorBanner onCloseBanner={() => this.setState({ isBannerClosed: true })} />
|
||||
</div>
|
||||
<div className={ classNames('body-wrap', { 'sponsor-banner-visible': !this.state.isBannerClosed }) }>
|
||||
{ this.props.children }
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user