Skip to content

Instantly share code, notes, and snippets.

@vinodsobale
Created July 9, 2018 04:55
Show Gist options
  • Save vinodsobale/6e7f606d7e232fda0652f60027b04529 to your computer and use it in GitHub Desktop.
Save vinodsobale/6e7f606d7e232fda0652f60027b04529 to your computer and use it in GitHub Desktop.
Header carrier integration code
import React from 'react';
import { connect } from 'react-redux';
import { NavLink, Link } from 'react-router-dom';
import { bindActionCreators, compose } from 'redux';
import { get as _get, pick as _pick } from 'lodash';
import Cookie from 'universal-cookie';
import ReactModal from 'react-modal';
import { translate } from 'react-i18next';
import createHistory from 'history/createBrowserHistory';
import Search from '../../components/Search';
import {
clearSuggestion,
clearSearchResults,
onToggleSearch
} from '../../modules/search/search.actions';
import './Header.css';
import { isServer, config, DIRT_OPTIONS } from '../../services/environment';
import { logout } from '../../modules/logout/logout.actions';
import { setToken } from '../../modules/token/token.actions';
import {
getOfferId,
getOffer,
activateOffer
} from '../../modules/offer/offer.action';
import AuthComponent from '../../components/AuthComponent/AuthComponent';
import MenuDropDown from '../../components/MenuDropDown';
import PromoCode from '../PromoCode/PromoCode';
import MyPlan from '../../components/MyPlan';
import ViuLogo from '../../components/ViuLogo';
import UserPlaceholder from '../../components/UserPlaceholder';
import Loading from '../../components/Loading/Loading';
import * as Log from '../../services/log';
import { getSubscriptionData } from '../../modules/billing/billing.action';
import Toasts from '../Toastr';
import { addToast } from '../../modules/toasts/toasts.actions';
import {
setFlavour,
setLanguage
} from '../../modules/programming/programming.actions';
import { QueryStringToJSON } from '../../services/queryStringToJson';
import * as utilityService from '../../services/utilityService';
import { authenticate } from '../../modules/auth/auth.actions';
import * as googleTagManager from '../../services/googleTagManager';
import {
fetchCategoryDetails,
fetchCategories,
emptyCategoryDetails
} from '../../modules/content/content.actions';
import { DEFAULT_CATEGORY_SLUG } from '../../components/Discover/DiscZover';
export class Header extends React.Component {
constructor(props) {
super(props);
this.state = {
autModalActive: false,
userNavDesktop: false,
userNavMobile: false,
numberOfCategoriesToShow: 0,
myPlanModal: false,
isActive: false,
reactModal: false,
promoModalActive: false,
toggleLangBtn: false,
showSuggesion: false
};
this.windowWidth = 1368;
}
componentDidMount() {
document.addEventListener('keydown', this.closeModal, false);
if (this.props.location && this.props.location.search) {
const params = QueryStringToJSON(this.props.location.search);
const dirt = _pick(params, DIRT_OPTIONS);
if (dirt && dirt.msisdn) {
window.sessionStorage.setItem('msisdn', JSON.stringify(dirt.msisdn));
}
if (dirt && dirt.isDirt) {
window.sessionStorage.setItem('isDirt', JSON.stringify(dirt.isDirt));
}
if (dirt && dirt.offerid) {
window.sessionStorage.setItem('offerid', JSON.stringify(dirt.offerid));
}
window.sessionStorage.setItem('dirt_option', JSON.stringify(dirt));
}
// check fallback language
const { programming } = this.props;
this.currentFlavour = _get(programming, 'currentFlavour', {});
this.supportedLangs = _get(this.currentFlavour, 'supportedLanguages', []);
Log.init();
googleTagManager.init(this.props.auth.location.countryCode);
this.cookie = new Cookie();
this.fallbackLang();
this.windowWidth = window.innerWidth;
this.setNumberOfCategories();
this.setSuggesionModal(this.supportedLangs.length);
this.detectCarrier();
}
fallbackLang() {
// Here checking browser language/fallback language, if preffered language is not available
const { i18n } = this.props;
if (window.localStorage) {
if (window.localStorage.i18nextLng === 'id') {
let prefItem = this.supportedLangs.filter(item => item.id === 'id');
if (prefItem[0]) {
i18n.changeLanguage('id');
this.onLanguageChange(prefItem[0]);
} else {
i18n.changeLanguage('en');
prefItem = this.supportedLangs.filter(item => item.id === 'en');
this.onLanguageChange(prefItem[0]);
}
} else {
i18n.changeLanguage('en');
const prefItem = this.supportedLangs.filter(item => item.id === 'en');
this.onLanguageChange(prefItem[0]);
}
}
}
setSuggesionModal(supportedLang) {
this.langFlag = this.cookie.get('lang_flag');
if (supportedLang > 1 && this.langFlag === 'true') {
this.setState({ showSuggesion: true });
}
}
componentWillMount() {
if (!isServer) {
document.removeEventListener('keydown', this.closeModal, false);
}
}
closeModal = e => {
if (e.keyCode === 27) {
if (this.props.isSearchVisible && e.target.className === 'txtsearch') {
this.props.clearSearchResults();
this.props.clearSuggestion();
this.searchRefs.getWrappedInstance().searchInputRef.value = '';
this.searchRefs.getWrappedInstance().searchInputRef.blur();
this.props.onToggleSearch(false);
}
document.removeEventListener('click', this.handleOutsideClick, false);
}
};
handleOutsideClick = e => {
if (e.target.className !== 'c-sideNavOverlay') {
return;
}
this.toggleMenu();
};
handleOutsideClickNav = e => {
if (this.popup && this.popup.contains(e.target)) {
return;
}
this.toggleNav();
};
toggleMenu = () => {
this.setState(prevState => {
const isMenuOpen = !prevState.isMenuOpen;
const newOverlayDiv = document.createElement('div');
const parentDivForOverlayDiv = document.querySelector('.c-innerScroll');
if (isMenuOpen) {
document.addEventListener('click', this.handleOutsideClick, false);
parentDivForOverlayDiv.insertBefore(
newOverlayDiv,
parentDivForOverlayDiv.childNodes[0]
);
newOverlayDiv.classList.add('c-sideNavOverlay');
} else {
document.removeEventListener('click', this.handleOutsideClick, false);
parentDivForOverlayDiv.removeChild(
document.querySelector('.c-sideNavOverlay')
);
}
return { isMenuOpen };
});
};
toggleNav = () => {
this.setState(prevState => {
const userNavDesktop = !prevState.userNavDesktop;
const userNavMobile = !prevState.userNavMobile;
if (userNavDesktop) {
document.addEventListener('click', this.handleOutsideClickNav, false);
} else {
document.removeEventListener(
'click',
this.handleOutsideClickNav,
false
);
}
return { userNavDesktop, userNavMobile };
});
};
shouldShowRedeem() {
const { auth } = this.props;
return !(utilityService.getStatus() && auth.old.country.supported);
}
togglePromoCode() {
this.setState({ promoModalActive: true, reactModal: false });
Log.sendEvent({
event_name: 'page_view',
event_type: Log.LOG_CONSTANT.LOG_TYPE.PAGE_VIEW_LOG,
log_name: Log.LOG_CONSTANT.LOG_NAME.REDEEMVOUCERCODE_POPUP
});
}
toggleMyPlan(isMobile) {
const { login, signup } = this.props;
const vuserid = Object.keys(login).length
? login.user.userId
: signup.user.userId;
this.props.getSubscriptionData(vuserid);
if (isMobile) this.toggleMenu();
else this.toggleNav();
this.setState({ myPlanModal: true, reactModal: false });
Log.sendEvent({
event_name: 'page_view',
event_type: Log.LOG_CONSTANT.LOG_TYPE.PAGE_VIEW_LOG,
log_name: Log.LOG_CONSTANT.LOG_NAME.MY_PLAN
});
}
onHideModal = e => {
e.preventDefault();
this.setState({ autModalActive: false });
};
onHidePlanModal = () => {
this.setState({ myPlanModal: false });
};
onHidePromoModal = () => {
this.setState({ promoModalActive: false });
};
openAuth = e => {
e.preventDefault();
this.setState({ autModalActive: !this.state.autModalActive });
};
doLogout = e => {
e.preventDefault();
const { t } = this.props;
this.props.doLogout().then(response => {
this.props.getOfferId().then(offer => {
if (offer && offer.id) {
this.props.getOffer(offer.id);
}
});
const { vuserid } = response;
this.props.getSubscriptionData(vuserid);
// show toast message for logout
this.props.addToast({
text: t('TOASTR_CONSTANTS.LOGOUT')
});
if (localStorage) {
localStorage.removeItem('userIdType');
} else {
window.sessionStorage.removeItem('userIdType');
}
});
this.setState({ autModalActive: false });
};
checkUser = () => {
let identity = null;
if (Object.keys(this.props.login).length !== 0 && this.props.login.user) {
identity = this.props.login;
}
if (Object.keys(this.props.signup).length !== 0 && this.props.signup.user) {
identity = this.props.signup;
}
if (identity) {
const { jwtToken } = identity.user;
this.props.onTokenUpdate(jwtToken);
if (this.cookie) {
this.cookie.set('user', identity, config.cookieOptions);
}
if (identity.user && identity.user.isShadowLogin) {
return false;
}
return true;
}
return false;
};
clearUserCookies = () => {
if (this.cookie) {
this.cookie.remove('user', config.cookieOptions);
}
};
clearSearchOnClick = () => {
if (this.props.isSearchVisible) {
setTimeout(() => {
this.props.clearSearchResults();
this.props.onToggleSearch(false);
}, 200);
}
};
renderNav() {
const { categories, prefix } = this.props;
let filteredCategories = categories.filter(
category => category.id !== 'home'
);
if (!isServer) {
filteredCategories = categories
.filter(category => category.id !== 'home')
.slice(0, this.state.numberOfCategoriesToShow);
}
return (
<div className="nav__links">
{filteredCategories.map(item => (
<NavLink
to={{
pathname: `${prefix}/${item.slug}`,
state: { shouldPlay: true }
}}
key={item.id}
className="link__url"
activeClassName="active"
onClick={this.clearSearchOnClick}
>
{item.title}
</NavLink>
))}
</div>
);
}
renderMobileNav() {
const { categories, prefix, t } = this.props;
const filteredCategories = categories.filter(
category => category.id !== 'home'
);
let categoriesToShowClass = 'for--mobile';
if (filteredCategories.length > this.state.numberOfCategoriesToShow) {
categoriesToShowClass = '';
}
return (
<div className={`c-sidebar__category , ${categoriesToShowClass}`}>
{filteredCategories.map(item => (
<Link
to={{
pathname: `${prefix}/${item.slug}`,
state: { shouldPlay: true }
}}
key={item.id}
className="link"
onClick={() => {
this.setState({ reactModal: false });
this.clearSearchOnClick();
}}
>
{item.title}
</Link>
))}
{this.props.login.user &&
this.props.login.user.isShadowLogin &&
!this.state.hideSidebarMyPlan && (
<Link
onClick={() => {
this.toggleMyPlan(true);
}}
to={{}}
className="link"
>
{t('header.myplan')}
</Link>
)}
</div>
);
}
setNumberOfCategories = () => {
if (this.windowWidth >= 1366) {
this.setState({ numberOfCategoriesToShow: 5 });
} else if (this.windowWidth < 1366 && this.windowWidth >= 1024) {
this.setState({ numberOfCategoriesToShow: 3 });
}
};
hideSidebarMyPlan = () => {
this.setState({ hideSidebarMyPlan: true });
};
toggleLanguage = () => {
this.setState(state => ({ toggleLangBtn: !state.toggleLangBtn }));
};
renderUserDetails(userNavDesktop) {
const { isSearchVisible, t } = this.props;
const { isActive } = this.state;
const userName =
_get(this.props, 'login.user.userName', '') ||
_get(this.props, 'login.userName', '');
return (
<div className="header__nav__s2">
{/* This is a language change dropdown */}
<div
className={
this.state.toggleLangBtn === true
? 'language__btn open-dd'
: 'language__btn'
}
>
<button onClick={() => this.toggleLanguage()}>
<span>{this.currentLang.id.toUpperCase()}</span>
<i className="icon viu-earth-globe" />
</button>
<div className="c-langModal">
<span className="lang__title">{t('header.changeLanguage')}</span>
<div className="lang__items">
{this.supportedLangs.map(item => (
<button
key={item.id}
onClick={() => this.onLanguageChange(item)}
className={
this.currentLang.label === item.label
? 'btn-lang active'
: 'btn-lang'
}
>
{item.label}
</button>
))}
</div>
</div>
</div>
{/* This is a browse button that brings up the SEARCH COMPONENT */}
<div className="browse__btn">
<button onClick={this.toggleSearch}>
<span>{t('header.search')}</span>
{isSearchVisible && isActive ? (
<i className="icon viu-close-button" />
) : (
<i className="icon viu-search" />
)}
</button>
</div>
{this.props.isLoggedIn &&
((this.props.signup.user && !this.props.signup.user.isShadowLogin) ||
(this.props.login.user && !this.props.login.user.isShadowLogin)) ? (
<div
className={userNavDesktop ? 'user__btn openmenu' : 'user__btn'}
ref={node => {
this.popup = node;
}}
>
<button className="usersidebar" onClick={this.toggleNav}>
{this.props.login.userPictureUrl ? (
<img
src={this.props.login.userPictureUrl}
alt={userName || 'user'}
className="user--pic"
/>
) : (
<UserPlaceholder opacity=".4" />
)}
</button>
<div className="c-popup c-usersidebar">
<div className="user__image">
{this.props.login.userPictureUrl ? (
<img
src={this.props.login.userPictureUrl}
alt={userName || 'user'}
/>
) : (
<UserPlaceholder size="large" color="#CBCBCB" />
)}
</div>
{userName !== '' && (
<div className="user__name">
<h5>{userName}</h5>
</div>
)}
<div className="user__links">
<button
onClick={() => {
this.toggleMyPlan(false);
}}
className="link"
>
{!this.state.hideSidebarMyPlan
? this.hideSidebarMyPlan()
: null}
{/* {STRING_CONSTANTS.MY_PLAN} */}
{t('header.myplan')}
</button>
<button className="link" onClick={this.doLogout}>
{t('header.signout')}
</button>
</div>
</div>
</div>
) : (
<div className="sign__btn">
<button onClick={this.openAuth}>
{t('header.signin')}/{t('header.signup')}
</button>
</div>
)}
{this.state.myPlanModal ? (
<MyPlan onHideModal={this.onHidePlanModal} />
) : null}
</div>
);
}
toggleSearch = () => {
const { isSearchVisible } = this.props;
this.props.onToggleSearch(!isSearchVisible, false);
if (!isSearchVisible) {
setTimeout(() => {
this.searchRefs.getWrappedInstance().searchInputRef.focus();
}, 100);
}
this.props.clearSearchResults();
this.props.clearSuggestion();
};
toggleIcon = flag => {
this.setState({ isActive: flag });
};
onLanguageChange = item => {
const {
i18n,
programming: { currentCountry, currentFlavour, currentLanguage }
} = this.props;
this.props.setLanguage(item);
this.cookie = new Cookie();
this.cookie.set('pref_lang', item.id, config.cookieOptions);
i18n.changeLanguage(item.id);
const authParams = {
languageid: item.id,
contentFlavour: currentFlavour.id,
contentCountry: currentCountry.id
};
Log.sendEvent({
event_name: 'language_changed',
event_type: Log.LOG_CONSTANT.LOG_TYPE.EVENT_LOG,
log_name: Log.LOG_CONSTANT.LOG_NAME.LANGUAGE_CHANGE,
previous_language: currentLanguage.id,
selected_language: item.id
});
if (this.cookie.get('user')) {
const { user } = this.cookie.get('user');
authParams.userid = user.userName;
authParams.vuserid = user.userId;
}
(async () => {
this.props.emptyCategoryDetails();
await this.props.authenticate(authParams);
await this.props.fetchCategories();
const collectionDetailsToFetch = this.props.categories.find(
category => category.slug === DEFAULT_CATEGORY_SLUG
);
if (
collectionDetailsToFetch &&
Object.keys(collectionDetailsToFetch).length
) {
await this.props.fetchCategoryDetails(
collectionDetailsToFetch.id,
collectionDetailsToFetch.slug
);
}
const history = createHistory();
history.push(
`/ott/${currentCountry.id}/${item.id}/${this.currentFlavour.id}`
);
})();
};
onFlavourChange = item => {
const { programming: { currentCountry, currentLanguage } } = this.props;
this.props.setFlavour(item);
const authParams = {
languageid: item.defaultLanguage,
contentFlavour: item.id,
contentCountry: currentCountry.id
};
if (this.cookie.get('user')) {
const { user } = this.cookie.get('user');
authParams.userid = user.userName;
authParams.vuserid = user.userId;
}
(async () => {
this.props.emptyCategoryDetails();
await this.props.authenticate(authParams);
await this.props.fetchCategories();
const collectionDetailsToFetch = this.props.categories.find(
category => category.slug === DEFAULT_CATEGORY_SLUG
);
if (
collectionDetailsToFetch &&
Object.keys(collectionDetailsToFetch).length
) {
await this.props.fetchCategoryDetails(
collectionDetailsToFetch.id,
collectionDetailsToFetch.slug
);
}
const history = createHistory();
history.push(
`/ott/${currentCountry.id}/${currentLanguage.id}/${item.id}`
);
})();
};
closeSuggesion = () => {
this.setState({ showSuggesion: false });
this.cookie = new Cookie();
this.cookie.set('lang_flag', false, config.cookieOptions);
};
selectOption = supportedLang => {
this.setState({ showSuggesion: false });
this.cookie = new Cookie();
this.cookie.set('lang_flag', false, config.cookieOptions);
this.prefLang = this.cookie.get('pref_lang');
supportedLang.forEach(item => {
if (item.id !== this.prefLang) {
this.onLanguageChange(item);
}
});
};
/*
Look for billing hash in auth
*/
// isUserActiveOnOtherOffer() {
// const { auth } = this.props;
// let isUserActiveOnOffer = null;
// if (auth && auth.billing) {
// const { billing } = auth;
// if (billing.status !== 'ACTIVE') {
// isUserActiveOnOffer = false;
// } else {
// isUserActiveOnOffer = true;
// }
// }
// return isUserActiveOnOffer;
// }
detectCarrier() {
const { auth } = this.props;
if (auth && auth.billing) {
const { billing } = auth;
if (
billing.status !== 'ACTIVE' &&
(billing.partner === 'Telkomsel' || billing.partner === 'Hutch')
) {
console.info('User is not active on any other offer');
console.info('Partner Detected');
} else {
/*
1. Show user welcome Pop#2 which disappears after 5s
2. Initiate the signup/signin flow by showing the pop up
3. Tell user that he/she is active on another offer & to change plan contact help.viu@vuclip.com
*/
}
}
}
render() {
const {
autModalActive,
userNavDesktop,
userNavMobile,
reactModal,
promoModalActive,
showSuggesion
} = this.state;
const {
isCategoryFetching,
prefix,
programming,
isLoading,
isSearchVisible,
auth
} = this.props;
const userName =
_get(this.props, 'login.user.userName', '') ||
_get(this.props, 'login.userName', '') ||
_get(this.props, 'signup.userid', '');
this.flavours = _get(programming, 'currentCountry.flavours', []);
this.currentFlavour = _get(programming, 'currentFlavour', {});
this.supportedLangs = _get(this.currentFlavour, 'supportedLanguages', []);
this.currentLang = _get(programming, 'currentLanguage', {});
this.currentCountry = _get(programming, 'currentCountry', {});
const countryLocation = _get(auth, 'location', {});
const countryId = this.currentCountry.id;
const showBlogLink =
countryLocation &&
(countryLocation.countryCode === config.countryCodes.ID ||
countryLocation.countryCode === config.countryCodes.MY);
if (this.props.logout.userId) {
const jwToken = this.props.logout.jwtToken;
this.props.onTokenUpdate(jwToken);
this.clearUserCookies();
}
const { t } = this.props;
return (
<div className="c-page-header">
<Loading isLoading={isLoading} />
<Toasts />
{/* modal to ask do you want to continue with the language which is available on URL or preferred language */}
{showSuggesion && (
<div className="c-lang-toast">
<div className="left--msg">
You are browsing Viu in {this.currentLang.label}
</div>
<div className="right--msg">
<button className="lang--btn" onClick={this.closeSuggesion}>
Got it
</button>
<button
className="lang--btn"
onClick={() => this.selectOption(this.supportedLangs)}
>
Undo
</button>
</div>
</div>
)}
<div>
<div className="header__nav clearfix">
<div className="header__nav__s1">
<div className={reactModal ? 'nav__btn openmenu' : 'nav__btn'}>
<button
className="menusidebar"
onClick={() => this.setState({ reactModal: !reactModal })}
/>
<ReactModal
isOpen={reactModal}
overlayClassName="c-sideNavOverlay"
className="c-popup c-sidebar"
shouldCloseOnOverlayClick
onRequestClose={() => this.setState({ reactModal: false })}
shouldCloseOnEsc
role="dialog"
parentSelector={() => document.querySelector('.nav__btn')}
ariaHideApp={false}
>
<div className="c-innerPopup">
<div className="c-sidebar__dd user--prof for--mobile">
<div className="user--info clearfix">
<div className="user-pic clearfix">
<div className="clearfix">
{this.props.login.userPictureUrl ? (
<img
src={this.props.login.userPictureUrl}
alt={userName || 'user'}
className="user--pic"
/>
) : (
<UserPlaceholder color="#CBCBCB" />
)}
</div>
</div>
{this.checkUser() ? (
<div
className={
userNavMobile
? 'user--nav clearfix user--nav--dd ddactive'
: 'user--nav clearfix user--nav--dd'
}
>
<button
className="user__login__st"
onClick={this.toggleNav}
>
{userName}
<i className="icon viu-angle-down" />
</button>
<div className="user--nav-links">
{/* <Link to="/profile" className="link">
Edit profile
</Link> */}
{/* <Link to="/plan" className="link">
My Plan
</Link> */}
<button
onClick={() => {
this.toggleMyPlan(true);
}}
className="link"
>
{t('header.myplan')}
</button>
<button className="link" onClick={this.doLogout}>
{t('header.signout')}
</button>
{/* <Trans i18nKey="billingComponent.packagesValidity">
Get Premium for {{ userName }} days
</Trans> */}
</div>
</div>
) : (
<div className="user--nav clearfix">
<button
className="user__login__st"
onClick={e => {
this.setState({ reactModal: false });
this.openAuth(e);
}}
>
{t('header.signin')} / {t('header.signup')}
</button>
{/* <Trans i18nKey="billingComponent.packagesValidity">
Get Premium for {{ userName }} days
</Trans> */}
</div>
)}
</div>
</div>
<div className="clearfix menutop">
{this.supportedLangs.length !== 1 ? (
<MenuDropDown
label={t('header.supportedLangs')}
listData={this.supportedLangs}
selectedItem={this.currentLang}
onItemSelect={this.onLanguageChange}
/>
) : null}
{this.flavours.length !== 1 ? (
<MenuDropDown
label={t('header.contentPreferences')}
listData={this.flavours}
selectedItem={this.currentFlavour}
onItemSelect={this.onFlavourChange}
/>
) : null}
</div>
<div className="clearfix menubottom">
<div className="c-sidebar__menulink">
{!isCategoryFetching && this.renderMobileNav()}
{this.shouldShowRedeem() && (
<Link
onClick={() => {
this.togglePromoCode();
}}
to={{}}
className="link"
>
{t('header.redeem')}
</Link>
)}
<Link
onClick={() => {
this.setState({ reactModal: false });
this.clearSearchOnClick();
}}
className="link"
to={`${prefix}/faq`}
>
{t('header.faq')}
</Link>
</div>
<div className="c-sidebar__menulink for--mobile">
<a
href={`${config.appsFlyerUrl}&c=VIU_WAP_APP_${countryId}&af_web_dp=https%3A%2F%2Fviu.com%3Futm_source%3DVIU_WAP%26utm_medium%3DWAP%26utm_campaign%3DVIU_WAP_APP_${countryId}`}
className="link"
>
{t('header.applications')}
</a>
</div>
<div className="c-sidebar__menulink dl--app for--desktop">
<span className="c-menutitle">
{t('header.applications')}
</span>
<a
rel="noopener noreferrer"
target="_blank"
href="https://play.google.com/store/apps/details?id=com.vuclip.viu"
className="link link__forapp"
>
<i className="icon viu-playstore" />
{t('header.googleStore')}
</a>
<a
rel="noopener noreferrer"
target="_blank"
href="https://itunes.apple.com/in/app/viu-download-movies-tv-shows/id1044543328?mt=8"
className="link link__forapp"
>
<i className="icon viu-apple" />
{t('header.appStore')}
</a>
</div>
<div className="c-sidebar__social">
<a
rel="noopener noreferrer"
target="_blank"
href="https://www.facebook.com/VuclipGlobal/"
>
<i className="icon viu-facebook-official" />
</a>
<a
rel="noopener noreferrer"
target="_blank"
href="https://www.youtube.com/channel/UCsY5_QhqsVwcDC_1HFUyJpQ"
>
<i className="icon viu-youtube-alt" />
</a>
<a
rel="noopener noreferrer"
target="_blank"
href="https://twitter.com/vuclipinc"
>
<i className="icon viu-twitter" />
</a>
</div>
<div className="c-sidebar__footernav clearfix">
<Link
onClick={() => this.setState({ reactModal: false })}
className="link"
to={`${prefix}/terms`}
>
{t('header.terms')}
</Link>
<Link
onClick={() => this.setState({ reactModal: false })}
className="link"
to={`${prefix}/privacy`}
>
Privacy Policy
</Link>
{countryLocation.countryCode ===
config.countryCodes.MY ? (
<Link
onClick={() =>
this.setState({
reactModal: false
})}
className="link"
to={`${prefix}/privasi`}
>
Polisi Privasi
</Link>
) : null}
{countryId === 'id' ? (
<Link
onClick={() =>
this.setState({
reactModal: false
})}
className="link"
to={`${prefix}/kebijakan_privasi`}
>
Kebijakan Privasi
</Link>
) : null}
{showBlogLink && (
<Link
className="link blog-link"
to={`https://www.viu.com/ott/${countryLocation.countryCode.toLowerCase()}/articles/`}
target="_blank"
>
{t('header.blog')}
</Link>
)}
</div>
<div className="c-sidebar__footernav clearfix margin10-bottom">
<a
rel="noopener noreferrer"
target="_blank"
href="http://www.vuclip.com/"
>
{t('header.about')}
</a>
{/* <a rel="noopener noreferrer" target="_blank" href="/">
Blog
</a> */}
<a
rel="noopener noreferrer"
target="_blank"
href="http://www.vuclip.com/culture.php"
>
{t('header.culture')}
</a>
</div>
<div className="c-sidebar__footerinfo">
&copy; {t('header.copyright')}
</div>
</div>
</div>
</ReactModal>
</div>
<div className="nav__logo">
<Link
id="logo"
to={{
pathname: `${prefix}/`,
state: { shouldPlay: true, fromTitle: true }
}}
>
<ViuLogo />
</Link>
</div>
{!isCategoryFetching && this.renderNav()}
</div>
{this.renderUserDetails(userNavDesktop)}
</div>
</div>
{isSearchVisible && (
<Search
setIcon={this.toggleIcon}
ref={element => {
this.searchRefs = element;
}}
/>
)}
{autModalActive ? (
<AuthComponent onHideModal={this.onHideModal} />
) : null}
{promoModalActive && <PromoCode onHideModal={this.onHidePromoModal} />}
</div>
);
}
}
const mapStateToProps = state => ({
categories: state.content.categories,
isCategoryFetching: state.content.isCategoryFetching,
login: state.login,
logout: state.logout,
signup: state.signup,
programming: state.programming,
auth: state.auth,
isLoggedIn: state.isuser,
isLoading: state.isLoading,
isSearchVisible: state.search.isVisible,
subscriptionData: state.billing.subscriptionData,
currentCollectionSlug: state.content.currentCollectionSlug
});
const mapDispatchToProps = dispatch =>
bindActionCreators(
{
doLogout: logout,
onTokenUpdate: setToken,
clearSuggestion,
clearSearchResults,
onToggleSearch,
getSubscriptionData,
addToast,
getOfferId,
getOffer,
setFlavour,
setLanguage,
authenticate,
fetchCategoryDetails,
fetchCategories,
emptyCategoryDetails,
activateOffer
},
dispatch
);
export default compose(
translate(),
connect(mapStateToProps, mapDispatchToProps)
)(Header);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment