From 6d1da5bb42cc61a2447961cc5b61a966b7cc300f Mon Sep 17 00:00:00 2001 From: Chaiwat Ekkaewnumchai Date: Wed, 7 Oct 2020 03:11:00 -0700 Subject: [PATCH] Add Login Component Summary: - Add Sandy renderer for `SignInSheet` - Change background color for default button Reviewed By: mweststrate Differential Revision: D24112100 fbshipit-source-id: a602c920c24dd039697834aaba3c79e79f04481e --- desktop/app/src/chrome/SignInSheet.tsx | 79 ++++++++++++++----- desktop/app/src/sandy-chrome/LeftRail.tsx | 53 ++++++++++++- .../src/sandy-chrome/SandyDesignSystem.tsx | 1 + desktop/app/src/sandy-chrome/theme.tsx | 1 + desktop/themes/base.less | 2 + desktop/themes/dark.less | 3 +- desktop/themes/light.less | 3 +- 7 files changed, 119 insertions(+), 23 deletions(-) diff --git a/desktop/app/src/chrome/SignInSheet.tsx b/desktop/app/src/chrome/SignInSheet.tsx index 1a27b470b..d4a601ce3 100644 --- a/desktop/app/src/chrome/SignInSheet.tsx +++ b/desktop/app/src/chrome/SignInSheet.tsx @@ -26,6 +26,7 @@ import {State as Store} from '../reducers'; import ContextMenu from '../ui/components/ContextMenu'; import {clipboard} from 'electron'; import {reportPlatformFailures} from '../utils/metrics'; +import {Modal} from 'antd'; const Container = styled(FlexColumn)({ padding: 20, @@ -47,6 +48,7 @@ const TokenInput = styled(Input)({ }); type OwnProps = { + useSandy?: boolean; onHide: () => any; }; @@ -128,9 +130,42 @@ class SignInSheet extends Component { this.setState({token: '', error: ''}); }; - render() { + renderSandyContainer( + contents: React.ReactElement, + footer: React.ReactElement, + ) { + return ( + + {contents} + + ); + } + + renderNativeContainer( + contents: React.ReactElement, + footer: React.ReactElement, + ) { return ( + {contents} +
+ + + {footer} + +
+ ); + } + + render() { + const content = ( + <> You are not currently logged in to Facebook. To log in you will need to{' '} @@ -150,27 +185,33 @@ class SignInSheet extends Component { onChange={(e) => this.setState({token: e.target.value})} /> -
{this.state.error && ( - - Error: {this.state.error} - + <> +
+ + Error: {this.state.error} + + )} -
- - - - - - - + ); + const footer = ( + <> + + + + + ); + + return this.props.useSandy + ? this.renderSandyContainer(content, footer) + : this.renderNativeContainer(content, footer); } } diff --git a/desktop/app/src/sandy-chrome/LeftRail.tsx b/desktop/app/src/sandy-chrome/LeftRail.tsx index 33ec75976..0ad429147 100644 --- a/desktop/app/src/sandy-chrome/LeftRail.tsx +++ b/desktop/app/src/sandy-chrome/LeftRail.tsx @@ -9,7 +9,7 @@ import React, {cloneElement, useState, useCallback} from 'react'; import {styled, Layout} from 'flipper'; -import {Button, Divider, Badge, Tooltip} from 'antd'; +import {Button, Divider, Badge, Tooltip, Avatar, Popover} from 'antd'; import { MobileFilled, AppstoreOutlined, @@ -27,9 +27,12 @@ import {toggleLeftSidebarVisible} from '../reducers/application'; import {theme} from './theme'; import SettingsSheet from '../chrome/SettingsSheet'; import WelcomeScreen from './WelcomeScreen'; +import SignInSheet from '../chrome/SignInSheet'; import {errorCounterAtom} from '../chrome/ConsoleLogs'; import {ToplevelProps} from './SandyApp'; import {useValue} from 'flipper-plugin'; +import {logout} from '../reducers/user'; +import config from '../fb-stubs/config'; const LeftRailButtonElem = styled(Button)<{kind?: 'small'}>(({kind}) => ({ width: kind === 'small' ? 32 : 36, @@ -128,7 +131,7 @@ export function LeftRail({ title="Right Sidebar Toggle" /> - } title="Log In" /> + {config.showLogin && } @@ -220,3 +223,49 @@ function WelcomeScreenButton() { ); } + +function LoginButton() { + const dispatch = useDispatch(); + const user = useStore((state) => state.user); + const login = (user?.id ?? null) !== null; + const profileUrl = user?.profile_picture?.uri; + const [showLogin, setShowLogin] = useState(false); + const [showLogout, setShowLogout] = useState(false); + const onClose = useCallback(() => setShowLogin(false), []); + const onHandleVisibleChange = useCallback( + (visible) => setShowLogout(visible), + [], + ); + return login ? ( + { + onHandleVisibleChange(false); + dispatch(logout()); + }}> + Log Out + + } + trigger="click" + placement="right" + visible={showLogout} + overlayStyle={{padding: 0}} + onVisibleChange={onHandleVisibleChange}> + + + + + ) : ( + <> + } + title="Log In" + onClick={() => setShowLogin(true)} + /> + {showLogin && } + + ); +} diff --git a/desktop/app/src/sandy-chrome/SandyDesignSystem.tsx b/desktop/app/src/sandy-chrome/SandyDesignSystem.tsx index 682f37167..053075584 100644 --- a/desktop/app/src/sandy-chrome/SandyDesignSystem.tsx +++ b/desktop/app/src/sandy-chrome/SandyDesignSystem.tsx @@ -69,6 +69,7 @@ export default function SandyDesignSystem() { + diff --git a/desktop/app/src/sandy-chrome/theme.tsx b/desktop/app/src/sandy-chrome/theme.tsx index 5c69852c9..e256f673a 100644 --- a/desktop/app/src/sandy-chrome/theme.tsx +++ b/desktop/app/src/sandy-chrome/theme.tsx @@ -22,6 +22,7 @@ export const theme = { disabledColor: 'var(--flipper-disabled-color)', backgroundDefault: 'var(--flipper-background-default)', backgroundWash: 'var(--flipper-background-wash)', + buttonDefaultBackground: 'var(--flipper-button-default-background)', backgroundTransparentHover: 'var(--flipper-background-transparent-hover)', dividerColor: 'var(--flipper-divider-color)', borderRadius: 'var(--flipper-border-radius)', diff --git a/desktop/themes/base.less b/desktop/themes/base.less index 6ece2be82..bb0b8bef5 100644 --- a/desktop/themes/base.less +++ b/desktop/themes/base.less @@ -30,6 +30,7 @@ @normal-color: @background-wash; @tooltip-color: @background-default; @tooltip-bg: @text-color-primary; +@btn-default-bg: @button-default-background; /** This section maps theme colors to CSS variables so that they can be @@ -47,6 +48,7 @@ --flipper-disabled-color: @disabled-color; --flipper-background-default: @background-default; --flipper-background-wash: @background-wash; + --flipper-button-default-background: @button-default-background; --flipper-background-transparent-hover: @background-transparent-hover; --flipper-divider-color: @divider-color; --flipper-border-radius: @border-radius-base; diff --git a/desktop/themes/dark.less b/desktop/themes/dark.less index 5221c742c..af128f2eb 100644 --- a/desktop/themes/dark.less +++ b/desktop/themes/dark.less @@ -30,6 +30,8 @@ @background-default: @black; // Background - Wash @background-wash: #0d0d0d; // white 5% +// Backgroud - default button +@button-default-background: rgba(255, 255, 255, 0.1); // white 10% // Background - transparent hover @button-transparent-hover: rgba(255, 255, 255, 0.1); // white 10% @@ -38,7 +40,6 @@ // @background-wash2: fade(@white, 10%) // @button-primary-background: @purple6; // @button-primary-background-hover: @purple7; -// @button-default-background: @fade(@white, 10%) // @button-default=backgorund-hover: @fade(@white, 15%) // @button-default-background-disabled: @fade(@white, 10%) // @button-background-active: @fade(@white, 8%) diff --git a/desktop/themes/light.less b/desktop/themes/light.less index 9eb5a2972..ebcabb6ee 100644 --- a/desktop/themes/light.less +++ b/desktop/themes/light.less @@ -30,6 +30,8 @@ @background-default: @white; // Background - Wash @background-wash: #f2f2f2; // black 5% +// Backgroud - default button +@button-default-background: rgba(0, 0, 0, 0.1); // black 10% // Background - transparent hover @background-transparent-hover: rgba(0, 0, 0, 0.1); // black 10% @@ -38,7 +40,6 @@ // @background-wash2: fade(@black, 10%) // @button-primary-background: @purple6; // @button-primary-background-hover: @purple7; -// @button-default-background: @fade(@black, 10%) // @button-default=backgorund-hover: @fade(@black, 15%) // @button-default-background-disabled: @fade(@black, 10%) // @button-background-active: @fade(@black, 8%)