11/* eslint-disable @typescript-eslint/camelcase */
22
3- import React from 'react' ;
3+ import React , { useEffect , useState } from 'react' ;
44import styled from 'styled-components' ;
55import PropTypes from 'prop-types' ;
66import Helmet from 'react-helmet' ;
@@ -9,6 +9,7 @@ import Navbar from '../containers/Navbar/Navbar';
99import Footer from './Footer' ;
1010import { GlobalStyles , TypographyClassStyling } from '../styles/global-css' ;
1111import HeadScripts from '../lib/GetHeadScripts' ;
12+ import NewsletterSubscribe from '../containers/NewsletterSubscribe/NewsletterSubscribe' ;
1213
1314const Main = styled . main `
1415 max-width: 100vw !important;
@@ -27,8 +28,36 @@ const HeadElements = () => (
2728 </ Helmet >
2829) ;
2930
30- const Layout = ( { children, pageSettings, padded } ) => {
31+ const Layout = ( { children, pageSettings, padded, newsLetter } ) => {
3132 const { title, description, keywords } = pageSettings ;
33+ const [ popup , setPopup ] = useState ( false ) ;
34+ const [ popupClosed , setPopupClosed ] = useState ( false ) ;
35+
36+ const handleScroll = ( ) => {
37+ const position = window . pageYOffset ;
38+ const pageHeight = window . document . body . scrollHeight ;
39+ const windowHeight = window . innerHeight ;
40+ if ( ( position + windowHeight ) / pageHeight > newsLetter ) {
41+ setPopup ( true ) ;
42+ }
43+ } ;
44+ const closePopup = ( ) => {
45+ setPopupClosed ( true ) ;
46+ } ;
47+ const MaybeRenderPopup = ( ) => {
48+ if ( popup && ! popupClosed && newsLetter )
49+ return < NewsletterSubscribe popup closePopup = { closePopup } /> ;
50+ return null ;
51+ } ;
52+
53+ useEffect ( ( ) => {
54+ window . addEventListener ( 'scroll' , handleScroll , { passive : true } ) ;
55+ window . addEventListener ( 'resize' , handleScroll ) ;
56+ return ( ) => {
57+ window . removeEventListener ( 'scroll' , handleScroll ) ;
58+ window . removeEventListener ( 'resize' , handleScroll ) ;
59+ } ;
60+ } , [ ] ) ;
3261 return (
3362 < >
3463 < HeadElements />
@@ -39,6 +68,7 @@ const Layout = ({ children, pageSettings, padded }) => {
3968 < Main padded = { padded } className = "main" >
4069 < TypographyClassStyling />
4170 { children }
71+ < MaybeRenderPopup />
4272 </ Main >
4373 < Footer />
4474 </ >
@@ -55,8 +85,10 @@ Layout.propTypes = {
5585 description : PropTypes . string . isRequired ,
5686 keywords : PropTypes . string . isRequired ,
5787 } ) . isRequired ,
88+ newsLetter : PropTypes . number ,
5889} ;
5990
6091Layout . defaultProps = {
6192 padded : false ,
93+ newsLetter : 0 ,
6294} ;
0 commit comments