79 lines
3.2 KiB
JavaScript
79 lines
3.2 KiB
JavaScript
import React, { Component } from 'react'
|
|
import PropTypes from 'prop-types'
|
|
|
|
import MobileHeader from './MobileHeader'
|
|
import UpperLeftUI from './UpperLeftUI'
|
|
import UpperRightUI from './UpperRightUI'
|
|
import Toast from './Toast'
|
|
|
|
class App extends Component {
|
|
static propTypes = {
|
|
children: PropTypes.object,
|
|
toast: PropTypes.string,
|
|
unreadNotificationsCount: PropTypes.number,
|
|
notifications: PropTypes.array,
|
|
fetchNotifications: PropTypes.func,
|
|
markAsRead: PropTypes.func,
|
|
markAsUnread: PropTypes.func,
|
|
location: PropTypes.object,
|
|
mobile: PropTypes.bool,
|
|
mobileTitle: PropTypes.string,
|
|
mobileTitleWidth: PropTypes.number,
|
|
mobileTitleClick: PropTypes.func,
|
|
openInviteLightbox: PropTypes.func,
|
|
map: PropTypes.object,
|
|
userRequested: PropTypes.bool,
|
|
requestAnswered: PropTypes.bool,
|
|
requestApproved: PropTypes.bool,
|
|
onRequestAccess: PropTypes.func,
|
|
serverData: PropTypes.object
|
|
}
|
|
|
|
static childContextTypes = {
|
|
location: PropTypes.object
|
|
}
|
|
|
|
getChildContext () {
|
|
const { location } = this.props
|
|
return {location}
|
|
}
|
|
|
|
render () {
|
|
const { children, toast, unreadNotificationsCount, openInviteLightbox,
|
|
mobile, mobileTitle, mobileTitleWidth, mobileTitleClick, location,
|
|
map, userRequested, requestAnswered, requestApproved, serverData,
|
|
onRequestAccess, notifications, fetchNotifications,
|
|
markAsRead, markAsUnread } = this.props
|
|
const { pathname } = location || {}
|
|
// this fixes a bug that happens otherwise when you logout
|
|
const currentUser = this.props.currentUser && this.props.currentUser.id ? this.props.currentUser : null
|
|
const unauthedHome = pathname === '/' && !currentUser
|
|
return <div className="wrapper" id="wrapper">
|
|
{mobile && <MobileHeader currentUser={currentUser}
|
|
unreadNotificationsCount={unreadNotificationsCount}
|
|
mobileTitle={mobileTitle}
|
|
mobileTitleWidth={mobileTitleWidth}
|
|
onTitleClick={mobileTitleClick}
|
|
serverData={serverData} />}
|
|
{!unauthedHome && <UpperLeftUI currentUser={currentUser}
|
|
map={map}
|
|
userRequested={userRequested}
|
|
requestAnswered={requestAnswered}
|
|
requestApproved={requestApproved}
|
|
onRequestClick={onRequestAccess} />}
|
|
{!mobile && <UpperRightUI currentUser={currentUser}
|
|
unreadNotificationsCount={unreadNotificationsCount}
|
|
notifications={notifications}
|
|
fetchNotifications={fetchNotifications}
|
|
markAsRead={markAsRead}
|
|
markAsUnread={markAsUnread}
|
|
openInviteLightbox={openInviteLightbox}
|
|
signInPage={pathname === '/login'} />}
|
|
<Toast message={toast} />
|
|
{!mobile && currentUser && <a className='feedback-icon' target='_blank' href='https://hylo.com/c/metamaps/tag/feedback'></a>}
|
|
{children}
|
|
</div>
|
|
}
|
|
}
|
|
|
|
export default App
|