--- /dev/null
+import React from 'react';
+import { FormattedMessage } from 'react-intl';
+
+const NotSignedInIndicator = () => (
+ <div className='scrollable scrollable--flex'>
+ <div className='empty-column-indicator'>
+ <FormattedMessage id='not_signed_in_indicator.not_signed_in' defaultMessage='You need to sign in to access this resource.' />
+ </div>
+ </div>
+);
+
+export default NotSignedInIndicator;
static contextTypes = {
router: PropTypes.object,
+ identity: PropTypes.object,
};
static propTypes = {
intl: PropTypes.object.isRequired,
multiColumn: PropTypes.bool,
isSearching: PropTypes.bool,
- layout: PropTypes.string,
};
handleHeaderClick = () => {
}
render () {
- const { intl, multiColumn, isSearching, layout } = this.props;
+ const { intl, multiColumn, isSearching } = this.props;
+ const { signedIn } = this.context.identity;
return (
<Column bindToDocument={!multiColumn} ref={this.setRef} label={intl.formatMessage(messages.title)}>
- {layout === 'mobile' ? (
- <div className='explore__search-header'>
- <Search />
- </div>
- ) : (
- <ColumnHeader
- icon={isSearching ? 'search' : 'hashtag'}
- title={intl.formatMessage(isSearching ? messages.searchResults : messages.title)}
- onClick={this.handleHeaderClick}
- multiColumn={multiColumn}
- />
- )}
+ <ColumnHeader
+ icon={isSearching ? 'search' : 'hashtag'}
+ title={intl.formatMessage(isSearching ? messages.searchResults : messages.title)}
+ onClick={this.handleHeaderClick}
+ multiColumn={multiColumn}
+ />
+
+ <div className='explore__search-header'>
+ <Search />
+ </div>
<div className='scrollable scrollable--flex'>
{isSearching ? (
<NavLink exact to='/explore'><FormattedMessage id='explore.trending_statuses' defaultMessage='Posts' /></NavLink>
<NavLink exact to='/explore/tags'><FormattedMessage id='explore.trending_tags' defaultMessage='Hashtags' /></NavLink>
<NavLink exact to='/explore/links'><FormattedMessage id='explore.trending_links' defaultMessage='News' /></NavLink>
- <NavLink exact to='/explore/suggestions'><FormattedMessage id='explore.suggested_follows' defaultMessage='For you' /></NavLink>
+ {signedIn && <NavLink exact to='/explore/suggestions'><FormattedMessage id='explore.suggested_follows' defaultMessage='For you' /></NavLink>}
</div>
<Switch>
import AnnouncementsContainer from 'flavours/glitch/features/getting_started/containers/announcements_container';
import classNames from 'classnames';
import IconWithBadge from 'flavours/glitch/components/icon_with_badge';
+import NotSignedInIndicator from 'flavours/glitch/components/not_signed_in_indicator';
+import { Helmet } from 'react-helmet';
+import { title } from 'flavours/glitch/util/initial_state';
const messages = defineMessages({
title: { id: 'column.home', defaultMessage: 'Home' },
@injectIntl
class HomeTimeline extends React.PureComponent {
+ static contextTypes = {
+ identity: PropTypes.object,
+ };
+
static propTypes = {
dispatch: PropTypes.func.isRequired,
intl: PropTypes.object.isRequired,
render () {
const { intl, hasUnread, columnId, multiColumn, hasAnnouncements, unreadAnnouncements, showAnnouncements } = this.props;
const pinned = !!columnId;
+ const { signedIn } = this.context.identity;
let announcementsButton = null;
<ColumnSettingsContainer />
</ColumnHeader>
- <StatusListContainer
- trackScroll={!pinned}
- scrollKey={`home_timeline-${columnId}`}
- onLoadMore={this.handleLoadMore}
- timelineId='home'
- emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Follow more people to fill it up. {suggestions}' values={{ suggestions: <Link to='/start'><FormattedMessage id='empty_column.home.suggestions' defaultMessage='See some suggestions' /></Link> }} />}
- bindToDocument={!multiColumn}
- regex={this.props.regex}
- />
+ {signedIn ? (
+ <StatusListContainer
+ trackScroll={!pinned}
+ scrollKey={`home_timeline-${columnId}`}
+ onLoadMore={this.handleLoadMore}
+ timelineId='home'
+ emptyMessage={<FormattedMessage id='empty_column.home' defaultMessage='Your home timeline is empty! Follow more people to fill it up. {suggestions}' values={{ suggestions: <Link to='/start'><FormattedMessage id='empty_column.home.suggestions' defaultMessage='See some suggestions' /></Link> }} />}
+ bindToDocument={!multiColumn}
+ regex={this.props.regex}
+ />
+ ) : <NotSignedInIndicator />}
+
+ <Helmet>
+ <title>{intl.formatMessage(messages.title)} - {title}</title>
+ </Helmet>
</Column>
);
}
import Icon from 'flavours/glitch/components/icon';
import compareId from 'flavours/glitch/util/compare_id';
import NotificationsPermissionBanner from './components/notifications_permission_banner';
+import NotSignedInIndicator from 'flavours/glitch/components/not_signed_in_indicator';
+import { Helmet } from 'react-helmet';
+import { title } from 'flavours/glitch/util/initial_state';
import NotificationPurgeButtonsContainer from 'flavours/glitch/containers/notification_purge_buttons_container';
@injectIntl
class Notifications extends React.PureComponent {
+ static contextTypes = {
+ identity: PropTypes.object,
+ };
+
static propTypes = {
columnId: PropTypes.string,
notifications: ImmutablePropTypes.list.isRequired,
const { animatingNCD } = this.state;
const pinned = !!columnId;
const emptyMessage = <FormattedMessage id='empty_column.notifications' defaultMessage="You don't have any notifications yet. When other people interact with you, you will see it here." />;
+ const { signedIn } = this.context.identity;
let scrollableContent = null;
- const filterBarContainer = showFilterBar
+ const filterBarContainer = (signedIn && showFilterBar)
? (<FilterBarContainer />)
: null;
this.scrollableContent = scrollableContent;
- const scrollContainer = (
- <ScrollableList
- scrollKey={`notifications-${columnId}`}
- trackScroll={!pinned}
- isLoading={isLoading}
- showLoading={isLoading && notifications.size === 0}
- hasMore={hasMore}
- numPending={numPending}
- prepend={needsNotificationPermission && <NotificationsPermissionBanner />}
- alwaysPrepend
- emptyMessage={emptyMessage}
- onLoadMore={this.handleLoadOlder}
- onLoadPending={this.handleLoadPending}
- onScrollToTop={this.handleScrollToTop}
- onScroll={this.handleScroll}
- bindToDocument={!multiColumn}
- >
- {scrollableContent}
- </ScrollableList>
- );
+ let scrollContainer;
+
+ if (signedIn) {
+ scrollContainer = (
+ <ScrollableList
+ scrollKey={`notifications-${columnId}`}
+ trackScroll={!pinned}
+ isLoading={isLoading}
+ showLoading={isLoading && notifications.size === 0}
+ hasMore={hasMore}
+ numPending={numPending}
+ prepend={needsNotificationPermission && <NotificationsPermissionBanner />}
+ alwaysPrepend
+ emptyMessage={emptyMessage}
+ onLoadMore={this.handleLoadOlder}
+ onLoadPending={this.handleLoadPending}
+ onScrollToTop={this.handleScrollToTop}
+ onScroll={this.handleScroll}
+ bindToDocument={!multiColumn}
+ >
+ {scrollableContent}
+ </ScrollableList>
+ );
+ } else {
+ scrollContainer = <NotSignedInIndicator />;
+ }
const extraButtons = [];
>
<ColumnSettingsContainer />
</ColumnHeader>
+
{filterBarContainer}
{scrollContainer}
+
+ <Helmet>
+ <title>{intl.formatMessage(messages.title)} - {title}</title>
+ </Helmet>
</Column>
);
}