From bbc81ea276e147bbed3d0cd5e9ceb6477e47c99f Mon Sep 17 00:00:00 2001 From: Vardan Hakobyan Date: Wed, 3 Nov 2021 22:45:50 +0400 Subject: [PATCH] feat: move extensions from prefs menu's left pane to General->Advanced section (#718) --- .../components/shared/AccordionItem.tsx | 44 ++++++++++ .../preferences/PreferencesMenu.ts | 2 - .../preferences/PreferencesView.tsx | 17 ++-- .../components/PreferencesSegment.tsx | 10 ++- .../preferences/panes/AccountPreferences.tsx | 2 - .../preferences/panes/Extensions.tsx | 87 +++++++++---------- .../javascripts/preferences/panes/General.tsx | 23 +++-- .../preferences/panes/account/Advanced.tsx | 38 +++++--- .../extensions-segments/ExtensionItem.tsx | 2 +- app/assets/stylesheets/_sn.scss | 25 ++++++ app/assets/stylesheets/_ui.scss | 3 + app/assets/svg/arrow-down.svg | 3 + 12 files changed, 179 insertions(+), 77 deletions(-) create mode 100644 app/assets/javascripts/components/shared/AccordionItem.tsx create mode 100644 app/assets/svg/arrow-down.svg diff --git a/app/assets/javascripts/components/shared/AccordionItem.tsx b/app/assets/javascripts/components/shared/AccordionItem.tsx new file mode 100644 index 000000000..ae87b2f31 --- /dev/null +++ b/app/assets/javascripts/components/shared/AccordionItem.tsx @@ -0,0 +1,44 @@ +import { FunctionalComponent } from 'preact'; +import { useRef, useState } from 'preact/hooks'; +import ArrowDown from '../../../svg/arrow-down.svg'; +import { Title } from '@/preferences/components'; + +type Props = { + title: string | JSX.Element; + className?: string; +} + +export const AccordionItem: FunctionalComponent = ({ + title, + className = '', + children + }) => { + const elementRef = useRef(null); + const [isExpanded, setIsExpanded] = useState(false); + + return ( +
+
{ + setIsExpanded(!isExpanded); + }} + > + {title} + +
+
+ {children} +
+
+ ); +}; diff --git a/app/assets/javascripts/preferences/PreferencesMenu.ts b/app/assets/javascripts/preferences/PreferencesMenu.ts index 702ff08d0..27e59dba1 100644 --- a/app/assets/javascripts/preferences/PreferencesMenu.ts +++ b/app/assets/javascripts/preferences/PreferencesMenu.ts @@ -11,7 +11,6 @@ const PREFERENCE_IDS = [ 'account', 'appearance', 'security', - 'extensions', 'listed', 'shortcuts', 'accessibility', @@ -38,7 +37,6 @@ const PREFERENCES_MENU_ITEMS: PreferencesMenuItem[] = [ { id: 'general', label: 'General', icon: 'settings' }, // { id: 'appearance', label: 'Appearance', icon: 'themes' }, { id: 'security', label: 'Security', icon: 'security' }, - { id: 'extensions', label: 'Extensions', icon: 'tune' }, { id: 'listed', label: 'Listed', icon: 'listed' }, // { id: 'shortcuts', label: 'Shortcuts', icon: 'keyboard' }, // { id: 'accessibility', label: 'Accessibility', icon: 'accessibility' }, diff --git a/app/assets/javascripts/preferences/PreferencesView.tsx b/app/assets/javascripts/preferences/PreferencesView.tsx index 3bdb64e1b..cd58f05a3 100644 --- a/app/assets/javascripts/preferences/PreferencesView.tsx +++ b/app/assets/javascripts/preferences/PreferencesView.tsx @@ -16,7 +16,6 @@ import { WebApplication } from '@/ui_models/application'; import { MfaProps } from './panes/two-factor-auth/MfaProps'; import { AppState } from '@/ui_models/app_state'; import { useEffect, useMemo } from 'preact/hooks'; -import { Extensions } from './panes/Extensions'; import { ExtensionPane } from './panes/ExtensionPane'; interface PreferencesProps extends MfaProps { @@ -38,7 +37,11 @@ const PaneSelector: FunctionComponent< switch (menu.selectedPaneId) { case 'general': return ( - + ); case 'account': return ( @@ -58,8 +61,6 @@ const PaneSelector: FunctionComponent< application={application} /> ); - case 'extensions': - return ; case 'listed': return ; case 'shortcuts': @@ -81,7 +82,13 @@ const PaneSelector: FunctionComponent< /> ); } else { - return ; + return ( + + ); } } }); diff --git a/app/assets/javascripts/preferences/components/PreferencesSegment.tsx b/app/assets/javascripts/preferences/components/PreferencesSegment.tsx index dad798f5c..4e12a79ce 100644 --- a/app/assets/javascripts/preferences/components/PreferencesSegment.tsx +++ b/app/assets/javascripts/preferences/components/PreferencesSegment.tsx @@ -1,5 +1,11 @@ import { FunctionComponent } from 'preact'; -export const PreferencesSegment: FunctionComponent = ({ children }) => ( -
{children}
+type Props = { + classes?: string; +} +export const PreferencesSegment: FunctionComponent = ({ + children, + classes = '' + }) => ( +
{children}
); diff --git a/app/assets/javascripts/preferences/panes/AccountPreferences.tsx b/app/assets/javascripts/preferences/panes/AccountPreferences.tsx index 7c3db4272..1b3259f08 100644 --- a/app/assets/javascripts/preferences/panes/AccountPreferences.tsx +++ b/app/assets/javascripts/preferences/panes/AccountPreferences.tsx @@ -25,7 +25,6 @@ export const AccountPreferences = observer( {appState.enableUnfinishedFeatures && } - ); } @@ -36,7 +35,6 @@ export const AccountPreferences = observer( {appState.enableUnfinishedFeatures && } - ); } diff --git a/app/assets/javascripts/preferences/panes/Extensions.tsx b/app/assets/javascripts/preferences/panes/Extensions.tsx index 1da5d6aca..a92428bdf 100644 --- a/app/assets/javascripts/preferences/panes/Extensions.tsx +++ b/app/assets/javascripts/preferences/panes/Extensions.tsx @@ -5,8 +5,6 @@ import { WebApplication } from '@/ui_models/application'; import { FunctionComponent } from 'preact'; import { Title, - PreferencesGroup, - PreferencesPane, PreferencesSegment, } from '../components'; import { ConfirmCustomExtension, ExtensionItem, ExtensionsLatestVersions } from './extensions-segments'; @@ -70,55 +68,54 @@ export const Extensions: FunctionComponent<{ .filter(extension => !['modal', 'rooms'].includes(extension.area)); return ( - +
{visibleExtensions.length > 0 && - - { - visibleExtensions - .sort((e1, e2) => e1.name.toLowerCase().localeCompare(e2.name.toLowerCase())) - .map((extension, i) => ( - - )) - } - +
+ { + visibleExtensions + .sort((e1, e2) => e1.name.toLowerCase().localeCompare(e2.name.toLowerCase())) + .map((extension, i) => ( + + )) + } +
} - +
{!confirmableExtension && - - Install Custom Extension -
- { setCustomUrl(value); }} - /> -
-