From 0255b9325868bad2d1ee97ca1c35fa2080bdbdca Mon Sep 17 00:00:00 2001 From: NikolaBorislavovHristov Date: Wed, 8 May 2019 19:36:25 +0300 Subject: [PATCH] UserMenu basic implementation --- src/common/NavBar/UserMenu/UserMenu.js | 113 ++++++++++++++++++++--- src/common/NavBar/UserMenu/styles.less | 110 ++++++++++++++++++++++ src/common/NavBar/UserPanel/UserPanel.js | 69 -------------- src/common/NavBar/UserPanel/index.js | 3 - src/common/NavBar/UserPanel/styles.less | 80 ---------------- 5 files changed, 210 insertions(+), 165 deletions(-) delete mode 100644 src/common/NavBar/UserPanel/UserPanel.js delete mode 100644 src/common/NavBar/UserPanel/index.js delete mode 100644 src/common/NavBar/UserPanel/styles.less 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 ( -
-
- {renderAvatar(props.avatar, props.email)} - {renderEmail(props.email)} -
{props.email.length === 0 ? 'Log in' : 'Log out'}
-
-
-
- Fullscreen mode -
-
- - Settings - - - Add-ons - -
- Play Magnet Link -
- - Help & Feedback - -
- Terms of Service - About Stremio -
- ); -} - -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