diff --git a/app/javascript/flavours/glitch/features/compose/components/action_bar.js b/app/javascript/flavours/glitch/features/compose/components/action_bar.js
new file mode 100644
index 0000000000..267c0ba699
--- /dev/null
+++ b/app/javascript/flavours/glitch/features/compose/components/action_bar.js
@@ -0,0 +1,66 @@
+import React from 'react';
+import ImmutablePropTypes from 'react-immutable-proptypes';
+import PropTypes from 'prop-types';
+import DropdownMenuContainer from '../../../containers/dropdown_menu_container';
+import { defineMessages, injectIntl } from 'react-intl';
+import { preferencesLink, profileLink } from 'flavours/glitch/utils/backend_links';
+
+const messages = defineMessages({
+ edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' },
+ pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned posts' },
+ preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
+ follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
+ favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },
+ lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },
+ blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
+ domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' },
+ mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },
+ filters: { id: 'navigation_bar.filters', defaultMessage: 'Muted words' },
+ logout: { id: 'navigation_bar.logout', defaultMessage: 'Logout' },
+ bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
+});
+
+export default @injectIntl
+class ActionBar extends React.PureComponent {
+
+ static propTypes = {
+ account: ImmutablePropTypes.map.isRequired,
+ onLogout: PropTypes.func.isRequired,
+ intl: PropTypes.object.isRequired,
+ };
+
+ handleLogout = () => {
+ this.props.onLogout();
+ }
+
+ render () {
+ const { intl } = this.props;
+
+ let menu = [];
+
+ menu.push({ text: intl.formatMessage(messages.edit_profile), href: profileLink });
+ menu.push({ text: intl.formatMessage(messages.preferences), href: preferencesLink });
+ menu.push({ text: intl.formatMessage(messages.pins), to: '/pinned' });
+ menu.push(null);
+ menu.push({ text: intl.formatMessage(messages.follow_requests), to: '/follow_requests' });
+ menu.push({ text: intl.formatMessage(messages.favourites), to: '/favourites' });
+ menu.push({ text: intl.formatMessage(messages.bookmarks), to: '/bookmarks' });
+ menu.push({ text: intl.formatMessage(messages.lists), to: '/lists' });
+ menu.push(null);
+ menu.push({ text: intl.formatMessage(messages.mutes), to: '/mutes' });
+ menu.push({ text: intl.formatMessage(messages.blocks), to: '/blocks' });
+ menu.push({ text: intl.formatMessage(messages.domain_blocks), to: '/domain_blocks' });
+ menu.push({ text: intl.formatMessage(messages.filters), href: '/filters' });
+ menu.push(null);
+ menu.push({ text: intl.formatMessage(messages.logout), action: this.handleLogout });
+
+ return (
+
+ );
+ }
+
+}
diff --git a/app/javascript/flavours/glitch/features/compose/components/navigation_bar.js b/app/javascript/flavours/glitch/features/compose/components/navigation_bar.js
index ba73ed553a..1a68f1e129 100644
--- a/app/javascript/flavours/glitch/features/compose/components/navigation_bar.js
+++ b/app/javascript/flavours/glitch/features/compose/components/navigation_bar.js
@@ -1,5 +1,7 @@
import React from 'react';
+import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
+import ActionBar from './action_bar';
import Avatar from 'flavours/glitch/components/avatar';
import Permalink from 'flavours/glitch/components/permalink';
import { FormattedMessage } from 'react-intl';
@@ -10,11 +12,12 @@ export default class NavigationBar extends ImmutablePureComponent {
static propTypes = {
account: ImmutablePropTypes.map.isRequired,
+ onLogout: PropTypes.func.isRequired,
};
render () {
return (
-
+
{this.props.account.get('acct')}
@@ -28,11 +31,16 @@ export default class NavigationBar extends ImmutablePureComponent {
{ profileLink !== undefined && (
)}
+
+
);
- };
+ }
+
}
diff --git a/app/javascript/flavours/glitch/features/compose/containers/navigation_container.js b/app/javascript/flavours/glitch/features/compose/containers/navigation_container.js
index 0e14002616..89036adcd3 100644
--- a/app/javascript/flavours/glitch/features/compose/containers/navigation_container.js
+++ b/app/javascript/flavours/glitch/features/compose/containers/navigation_container.js
@@ -1,11 +1,30 @@
import { connect } from 'react-redux';
+import { defineMessages, injectIntl } from 'react-intl';
import NavigationBar from '../components/navigation_bar';
+import { logOut } from 'flavours/glitch/utils/log_out';
+import { openModal } from 'flavours/glitch/actions/modal';
import { me } from 'flavours/glitch/initial_state';
+const messages = defineMessages({
+ logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' },
+ logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' },
+});
+
const mapStateToProps = state => {
return {
account: state.getIn(['accounts', me]),
};
};
-export default connect(mapStateToProps)(NavigationBar);
+const mapDispatchToProps = (dispatch, { intl }) => ({
+ onLogout () {
+ dispatch(openModal('CONFIRM', {
+ message: intl.formatMessage(messages.logoutMessage),
+ confirm: intl.formatMessage(messages.logoutConfirm),
+ closeWhenConfirm: false,
+ onConfirm: () => logOut(),
+ }));
+ },
+});
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(NavigationBar));
diff --git a/app/javascript/flavours/glitch/styles/components/drawer.scss b/app/javascript/flavours/glitch/styles/components/drawer.scss
index 61969abeef..cf996fb71c 100644
--- a/app/javascript/flavours/glitch/styles/components/drawer.scss
+++ b/app/javascript/flavours/glitch/styles/components/drawer.scss
@@ -92,7 +92,7 @@
@include search-popout();
}
-.drawer--account {
+.navigation-bar {
padding: 10px;
color: $darker-text-color;
display: flex;
diff --git a/app/javascript/flavours/glitch/styles/components/single_column.scss b/app/javascript/flavours/glitch/styles/components/single_column.scss
index d91306151e..45d57aedd7 100644
--- a/app/javascript/flavours/glitch/styles/components/single_column.scss
+++ b/app/javascript/flavours/glitch/styles/components/single_column.scss
@@ -37,7 +37,7 @@
top: 15px;
}
- .drawer--account {
+ .navigation-bar {
flex: 0 1 48px;
}