diff --git a/src/common/NavBar/UserMenu/UserMenu.js b/src/common/NavBar/UserMenu/UserMenu.js
index 0d2fdb98d..c3138b74e 100644
--- a/src/common/NavBar/UserMenu/UserMenu.js
+++ b/src/common/NavBar/UserMenu/UserMenu.js
@@ -1,22 +1,109 @@
const React = require('react');
+const PropTypes = require('prop-types');
const classnames = require('classnames');
const Icon = require('stremio-icons/dom');
const Popup = require('../../Popup');
const { Input } = require('stremio-navigation');
const styles = require('./styles');
-const UserMenu = ({ className }) => (
-
-
-
-
-
-
-
-
- userpanel
-
-
-);
+const UserMenu = ({ className, email, avatar, logout }) => {
+ const [fullscreen, setFullscreen] = React.useState(document.fullscreenElement instanceof HTMLElement);
+ const toggleFullscreen = React.useCallback(() => {
+ if (fullscreen) {
+ document.exitFullscreen();
+ } else {
+ document.documentElement.requestFullscreen();
+ }
+ }, [fullscreen]);
+ const onFullscreenChange = React.useCallback(() => {
+ setFullscreen(document.fullscreenElement instanceof HTMLElement);
+ }, []);
+ React.useEffect(() => {
+ document.addEventListener('fullscreenchange', onFullscreenChange);
+ return () => {
+ document.removeEventListener('fullscreenchange', onFullscreenChange);
+ };
+ }, []);
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
{email.length === 0 ? 'Anonymous user' : email}
+
+
+
{email.length === 0 ? 'Log in / Sign up' : 'Log out'}
+
+
+
+
+
+
{fullscreen ? 'Exit Fullscreen' : 'Enter Fullscreen'}
+
+
+
+
+
+
Settings
+
+
+
+
Addons
+
+
+
+
Remote Control
+
+
+
+
Play Magnet Link
+
+
+
+
Help & Feedback
+
+
+
+
+
Terms of Service
+
+
+
About Stremio
+
+
+
+
+
+ );
+};
+
+UserMenu.propTypes = {
+ className: PropTypes.string,
+ email: PropTypes.string.isRequired,
+ avatar: PropTypes.string.isRequired,
+ logout: PropTypes.func.isRequired
+};
+
+UserMenu.defaultProps = {
+ email: '',
+ avatar: ''
+};
module.exports = UserMenu;
diff --git a/src/common/NavBar/UserMenu/styles.less b/src/common/NavBar/UserMenu/styles.less
index 6018c35b5..3a0ed4a2c 100644
--- a/src/common/NavBar/UserMenu/styles.less
+++ b/src/common/NavBar/UserMenu/styles.less
@@ -1,3 +1,8 @@
+.user-menu {
+ --user-menu-width: 280px;
+ font-size: 14px;
+}
+
.user-menu-button {
text-align: center;
overflow: hidden;
@@ -19,4 +24,109 @@
width: 16%;
}
}
+}
+
+.user-menu-modal-container {
+ --box-shadow: -0.6em .6em .5em -0.1em var(--color-backgrounddark40);
+
+ .user-menu {
+ width: var(--user-menu-width);
+ background-color: var(--color-background);
+
+ .user-info {
+ display: grid;
+ width: 100%;
+ height: 6em;
+ grid-template-columns: 6em 1fr;
+ grid-template-rows: 50% 50%;
+ grid-template-areas:
+ "avatar email"
+ "avatar login-logout-button";
+
+ .avatar {
+ grid-area: avatar;
+ padding: 0.8em;
+ border-radius: 50%;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-origin: content-box;
+ background-clip: content-box;
+ }
+
+ .email-container {
+ grid-area: email;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ padding: 0.8em 0.8em 0 0;
+ color: var(--color-surfacelighter);
+ overflow: hidden;
+ }
+
+ .login-logout-button {
+ grid-area: login-logout-button;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ padding: 0 0.8em 0.8em 0;
+ color: var(--color-surface);
+ overflow: hidden;
+ cursor: pointer;
+
+ &:hover {
+ color: var(--color-surfacelighter);
+ }
+ }
+
+ .email-container, .login-logout-button {
+ .user-info-label {
+ flex: 1;
+ max-height: 100%;
+ line-height: 1.1em;
+ word-break: break-all;
+ overflow: hidden;
+ }
+ }
+ }
+
+ .user-menu-section {
+ width: 100%;
+ border-top: calc(0.5 * var(--focusable-border-size)) solid var(--color-surfacedark80);
+
+ .option {
+ width: 100%;
+ height: 4em;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ cursor: pointer;
+
+ &:hover {
+ background-color: var(--color-backgroundlighter);
+ }
+
+ .option-icon {
+ width: 4em;
+ height: 4em;
+ padding: 1.3em;
+ fill: var(--color-secondarylight);
+ }
+
+ .option-label {
+ flex: 1;
+ padding-right: 1.3em;
+ max-height: 2.2em;
+ line-height: 1.1em;
+ color: var(--color-surfacelighter);
+ word-break: break-all;
+ overflow: hidden;
+
+ &:only-child {
+ padding-left: 1.3em;
+ }
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/src/common/NavBar/UserPanel/UserPanel.js b/src/common/NavBar/UserPanel/UserPanel.js
deleted file mode 100644
index a44c488f2..000000000
--- a/src/common/NavBar/UserPanel/UserPanel.js
+++ /dev/null
@@ -1,69 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import Icon from 'stremio-icons/dom';
-import styles from './styles';
-
-const renderAvatar = (avatar, email) => {
- if (email.length === 0) {
- return (
-
- );
- }
-
- return (
-
- );
-}
-
-const renderEmail = (email) => {
- return (
- {email.length === 0 ? 'Anonymous' : email}
- );
-}
-
-const UserPanel = (props) => {
- return (
-
- );
-}
-
-UserPanel.propTypes = {
- avatar: PropTypes.string.isRequired,
- email: PropTypes.string.isRequired,
- login: PropTypes.func,
- logout: PropTypes.func,
- resizeWindow: PropTypes.func,
- playMagnetLink: PropTypes.func,
-};
-UserPanel.defaultProps = {
- avatar: '',
- email: ''
-};
-
-export default UserPanel;
diff --git a/src/common/NavBar/UserPanel/index.js b/src/common/NavBar/UserPanel/index.js
deleted file mode 100644
index ded20c602..000000000
--- a/src/common/NavBar/UserPanel/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import UserPanel from './UserPanel';
-
-export default UserPanel;
diff --git a/src/common/NavBar/UserPanel/styles.less b/src/common/NavBar/UserPanel/styles.less
deleted file mode 100644
index 3de1bedb9..000000000
--- a/src/common/NavBar/UserPanel/styles.less
+++ /dev/null
@@ -1,80 +0,0 @@
-.user-panel {
- --user-panel-width: 260px;
- --spacing: 16px;
- --separator-height: 1px;
-}
-
-.user-panel {
- width: var(--user-panel-width);
- background-color: var(--color-backgroundlighter);
-
- .user-info {
- display: grid;
- padding: var(--spacing);
- grid-template-columns: calc(0.2 * var(--user-panel-width)) auto;
- grid-template-rows: calc(0.1 * var(--user-panel-width)) calc(0.1 * var(--user-panel-width));
- grid-template-areas:
- "avatar email"
- "avatar login-logout";
-
- .avatar {
- grid-area: avatar;
- border-radius: 50%;
- background-size: cover;
- background-position: center;
- background-repeat: no-repeat;
- }
-
- .email {
- grid-area: email;
- display: flex;
- align-items: center;
- color: var(--color-surfacelighter);
- padding-left: var(--spacing);
- overflow: hidden;
- white-space: pre;
- text-overflow: ellipsis;
- }
-
- .login-logout {
- grid-area: login-logout;
- display: flex;
- align-items: center;
- color: var(--color-surface);
- padding-left: var(--spacing);
- overflow: hidden;
- white-space: pre;
- text-overflow: ellipsis;
-
- &:hover {
- cursor: pointer;
- color: var(--color-surfacelighter);
- }
- }
- }
-
- .option {
- display: flex;
- align-items: center;
- padding: var(--spacing);
- color: var(--color-surfacelighter80);
-
- .icon {
- width: calc(var(--user-panel-width) * 0.08);
- height: calc(var(--user-panel-width) * 0.08);
- margin-right: var(--spacing);
- fill: var(--color-secondarylighter);
- }
-
- &:hover {
- cursor: pointer;
- color: var(--color-surfacelighter);
- background-color: var(--color-secondarylighter20);
- }
- }
-
- .separator {
- height: var(--separator-height);
- background-color: var(--color-surface);
- }
-}
\ No newline at end of file