From 93a96003becfad0532cdd9b2d700f7e4462a732b Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 1 Mar 2023 19:59:25 +0800 Subject: [PATCH] Only display theme selector on the library and settings dropdowns --- .../components/templates/PrimaryDropdown.tsx | 122 +++++++++++++++--- .../templates/homeFeed/LibraryFilterMenu.tsx | 3 + .../templates/homeFeed/LibraryHeader.tsx | 4 +- .../templates/reader/ReaderHeader.tsx | 4 +- 4 files changed, 110 insertions(+), 23 deletions(-) diff --git a/packages/web/components/templates/PrimaryDropdown.tsx b/packages/web/components/templates/PrimaryDropdown.tsx index e3f9da321..f0107f338 100644 --- a/packages/web/components/templates/PrimaryDropdown.tsx +++ b/packages/web/components/templates/PrimaryDropdown.tsx @@ -1,34 +1,46 @@ import { useRouter } from 'next/router' -import { ReactNode, useCallback } from 'react' +import { Check } from 'phosphor-react' +import { ReactNode, useCallback, useMemo, useState } from 'react' import { useGetViewerQuery } from '../../lib/networking/queries/useGetViewerQuery' -import { updateTheme } from '../../lib/themeUpdater' +import { currentThemeName, updateTheme } from '../../lib/themeUpdater' import { AvatarDropdown } from '../elements/AvatarDropdown' -import { DropdownMenu, HeaderDropdownAction } from '../patterns/DropdownMenu' +import { Button } from '../elements/Button' +import { Dropdown, DropdownOption } from '../elements/DropdownElements' +import { HStack, VStack } from '../elements/LayoutPrimitives' +import { StyledText } from '../elements/StyledText' +import { DropdownMenu } from '../patterns/DropdownMenu' import { ThemeId } from '../tokens/stitches.config' type PrimaryDropdownProps = { children?: ReactNode + showThemeSection: boolean } +export type HeaderDropdownAction = + | 'navigate-to-install' + | 'navigate-to-emails' + | 'navigate-to-labels' + | 'navigate-to-profile' + | 'navigate-to-subscriptions' + | 'navigate-to-api' + | 'navigate-to-integrations' + | 'increaseFontSize' + | 'decreaseFontSize' + | 'logout' + export function PrimaryDropdown(props: PrimaryDropdownProps): JSX.Element { const { viewerData } = useGetViewerQuery() const router = useRouter() + const [currentTheme, setCurrentTheme] = useState(currentThemeName()) + + const isDark = useMemo(() => { + return currentTheme === 'Dark' || currentTheme === 'Darker' + }, [currentTheme]) + const headerDropdownActionHandler = useCallback( (action: HeaderDropdownAction) => { switch (action) { - case 'apply-darker-theme': - updateTheme(ThemeId.Darker) - break - case 'apply-dark-theme': - updateTheme(ThemeId.Dark) - break - case 'apply-lighter-theme': - updateTheme(ThemeId.Lighter) - break - case 'apply-light-theme': - updateTheme(ThemeId.Light) - break case 'navigate-to-install': router.push('/settings/installation') break @@ -62,14 +74,86 @@ export function PrimaryDropdown(props: PrimaryDropdownProps): JSX.Element { } return ( - ) } - actionHandler={headerDropdownActionHandler} - /> + > + + {props.showThemeSection && } + + headerDropdownActionHandler('navigate-to-install')} + title="Install" + /> + headerDropdownActionHandler('navigate-to-emails')} + title="Emails" + /> + headerDropdownActionHandler('navigate-to-labels')} + title="Labels" + /> + headerDropdownActionHandler('navigate-to-api')} + title="API Keys" + /> + headerDropdownActionHandler('navigate-to-integrations')} + title="Integrations" + /> + window.open('https://docs.omnivore.app', '_blank')} + title="Documentation" + /> + window.Intercom('show')} + title="Feedback" + /> + headerDropdownActionHandler('logout')} + title="Logout" + /> + + ) +} + +function ThemeSection(): JSX.Element { + const [currentTheme, setCurrentTheme] = useState(currentThemeName()) + + const isDark = useMemo(() => { + return currentTheme === 'Dark' || currentTheme === 'Darker' + }, [currentTheme]) + + return ( + <> + Theme + + + + + ) } diff --git a/packages/web/components/templates/homeFeed/LibraryFilterMenu.tsx b/packages/web/components/templates/homeFeed/LibraryFilterMenu.tsx index 3a72367fd..7ee2a7258 100644 --- a/packages/web/components/templates/homeFeed/LibraryFilterMenu.tsx +++ b/packages/web/components/templates/homeFeed/LibraryFilterMenu.tsx @@ -31,6 +31,9 @@ export function LibraryFilterMenu(props: LibraryFilterMenuProps): JSX.Element { borderRight: '1px solid #E1E1E1', overflowY: 'auto', overflowX: 'hidden', + '&::-webkit-scrollbar': { + display: 'none', + }, }} > diff --git a/packages/web/components/templates/homeFeed/LibraryHeader.tsx b/packages/web/components/templates/homeFeed/LibraryHeader.tsx index 078740b05..175ebce64 100644 --- a/packages/web/components/templates/homeFeed/LibraryHeader.tsx +++ b/packages/web/components/templates/homeFeed/LibraryHeader.tsx @@ -289,7 +289,7 @@ function ControlButtonBox(props: ControlButtonBoxProps): JSX.Element { color={props.layout == 'LIST_LAYOUT' ? '#6A6968' : '#FFEA9F'} /> - + - + ) diff --git a/packages/web/components/templates/reader/ReaderHeader.tsx b/packages/web/components/templates/reader/ReaderHeader.tsx index a494ab585..fe208040a 100644 --- a/packages/web/components/templates/reader/ReaderHeader.tsx +++ b/packages/web/components/templates/reader/ReaderHeader.tsx @@ -111,7 +111,7 @@ function ControlButtonBox(props: ReaderHeaderProps): JSX.Element { - + @@ -130,7 +130,7 @@ function ControlButtonBox(props: ReaderHeaderProps): JSX.Element { }, }} > - + )