diff --git a/stylesheets/components/Preferences.scss b/stylesheets/components/Preferences.scss index ce769146c8..ed2f7396c3 100644 --- a/stylesheets/components/Preferences.scss +++ b/stylesheets/components/Preferences.scss @@ -33,49 +33,25 @@ $secondary-text-color: light-dark( background: variables.$color-gray-95; } - &__header { - display: flex; - flex-direction: row; - } - - &__header__toggle { - flex-grow: 0; - min-width: 80px; - width: 80px; - margin-inline-end: -24px; - } - - &__header__text { - flex-grow: 1; - margin-inline-start: 24px; - @include mixins.font-title-medium; - line-height: 20px; - margin-top: 12px; - margin-bottom: 20px; - } - &__dialog-container { margin-bottom: 8px; } &__page-selector { - padding-top: var(--title-bar-drag-area-height); - width: 279px; - flex-grow: 0; - flex-shrink: 0; + padding-top: 2px; + max-height: 100%; + @include mixins.light-theme { background: variables.$color-gray-04; - border-inline-end: 0.5px solid variables.$color-black-alpha-16; } @include mixins.dark-theme { background: variables.$color-gray-80; - border-inline-end: 0.5px solid variables.$color-white-alpha-16; } } &__scroll-area { overflow-y: scroll; - max-height: calc(100% - 52px); + max-height: 100%; &::-webkit-scrollbar-thumb { @include mixins.light-theme { diff --git a/ts/components/Preferences.stories.tsx b/ts/components/Preferences.stories.tsx index 0e8f21f063..70879670b2 100644 --- a/ts/components/Preferences.stories.tsx +++ b/ts/components/Preferences.stories.tsx @@ -243,6 +243,7 @@ export default { }, page: Page.Profile, preferredSystemLocales: ['en'], + preferredWidthFromStorage: 300, resolvedLocale: 'en', selectedCamera: 'dfbe6effe70b0611ba0fdc2a9ea3f39f6cb110e6687948f7e5f016c111b7329c', @@ -328,6 +329,7 @@ export default { ), resetAllChatColors: action('resetAllChatColors'), resetDefaultChatColor: action('resetDefaultChatColor'), + savePreferredLeftPaneWidth: action('savePreferredLeftPaneWidth'), setGlobalDefaultConversationColor: action( 'setGlobalDefaultConversationColor' ), diff --git a/ts/components/Preferences.tsx b/ts/components/Preferences.tsx index 9747078478..afad6e8f48 100644 --- a/ts/components/Preferences.tsx +++ b/ts/components/Preferences.tsx @@ -49,8 +49,8 @@ import { import { PreferencesBackups } from './PreferencesBackups'; import { PreferencesInternal } from './PreferencesInternal'; import { FunEmojiLocalizationProvider } from './fun/FunEmojiLocalizationProvider'; -import { NavTabsToggle } from './NavTabs'; import { Avatar, AvatarSize } from './Avatar'; +import { NavSidebar } from './NavSidebar'; import type { MediaDeviceSettings } from '../types/Calling'; import type { ValidationResultType as BackupValidationResultType } from '../services/backups'; @@ -151,6 +151,7 @@ export type PropsDataType = { me: ConversationType; badge: BadgeType | undefined; theme: ThemeType; + preferredWidthFromStorage: number; // Limited support features isAutoDownloadUpdatesSupported: boolean; @@ -200,6 +201,7 @@ type PropsFunctionType = { removeCustomColorOnConversations: (colorId: string) => unknown; resetAllChatColors: () => unknown; resetDefaultChatColor: () => unknown; + savePreferredLeftPaneWidth: (_: number) => void; setGlobalDefaultConversationColor: ( color: ConversationColorType, customColorData?: { @@ -411,6 +413,7 @@ export function Preferences({ page, phoneNumber = '', preferredSystemLocales, + preferredWidthFromStorage, refreshCloudBackupStatus, refreshBackupSubscriptionStatus, removeCustomColor, @@ -421,6 +424,7 @@ export function Preferences({ resetAllChatColors, resetDefaultChatColor, resolvedLocale, + savePreferredLeftPaneWidth, selectedCamera, selectedMicrophone, selectedSpeaker, @@ -651,6 +655,9 @@ export function Preferences({ } right={deviceName} + rightStyle={{ + maxWidth: '33%', + }} /> @@ -1908,187 +1918,181 @@ export function Preferences({
-
-
- {navTabsCollapsed ? ( -
- -
- ) : undefined} -

- {i18n('icu:Preferences--header')} -

-
- {maybeUpdateDialog ? ( -
-
- {maybeUpdateDialog} -
-
- ) : null} -
- - - - - - - - - {shouldShowBackupsPage ? ( +
+ {me.phoneNumber} +
+ {me.username && ( +
+ {me.username} +
+ )} +
+
+
+
+ - ) : null} - {isInternalUser ? ( - ) : null} + + + + + + {shouldShowBackupsPage ? ( + + ) : null} + {isInternalUser ? ( + + ) : null} +
-
+ {content}
- {renderToastManager({ - containerWidthBreakpoint: WidthBreakpoint.Wide, - })}
); } diff --git a/ts/components/PreferencesUtil.tsx b/ts/components/PreferencesUtil.tsx index a885dc8d28..2d95b36d94 100644 --- a/ts/components/PreferencesUtil.tsx +++ b/ts/components/PreferencesUtil.tsx @@ -32,12 +32,14 @@ export function SettingsControl({ left, onClick, right, + rightStyle, }: { /** A className or `true` to leave room for icon */ icon?: string | true; left: ReactNode; onClick?: () => unknown; right: ReactNode; + rightStyle?: React.CSSProperties; }): JSX.Element { const content = ( <> @@ -50,7 +52,9 @@ export function SettingsControl({ /> )}
{left}
-
{right}
+
+ {right} +
); diff --git a/ts/state/smart/Preferences.tsx b/ts/state/smart/Preferences.tsx index 3f877698b2..5d582ad944 100644 --- a/ts/state/smart/Preferences.tsx +++ b/ts/state/smart/Preferences.tsx @@ -17,6 +17,7 @@ import { getCustomColors, getItems, getNavTabsCollapsed, + getPreferredLeftPaneWidth, } from '../selectors/items'; import { DEFAULT_AUTO_DOWNLOAD_ATTACHMENT } from '../../textsecure/Storage'; import { DEFAULT_CONVERSATION_COLOR } from '../../types/Colors'; @@ -127,6 +128,7 @@ export function SmartPreferences(): JSX.Element | null { putItem, removeCustomColor, resetDefaultChatColor, + savePreferredLeftPaneWidth, setEmojiSkinToneDefault: onEmojiSkinToneDefaultChange, setGlobalDefaultConversationColor, toggleNavTabsCollapse, @@ -144,17 +146,19 @@ export function SmartPreferences(): JSX.Element | null { const getConversationsWithCustomColor = useSelector( getConversationsWithCustomColorSelector ); - const items = useSelector(getItems); const i18n = useSelector(getIntl); + const items = useSelector(getItems); + const hasFailedStorySends = useSelector(getHasAnyFailedStorySends); const hasPendingUpdate = useSelector(getHasPendingUpdate); const isUpdateDownloaded = useSelector(getIsUpdateDownloaded); - const navTabsCollapsed = useSelector(getNavTabsCollapsed); - const hasFailedStorySends = useSelector(getHasAnyFailedStorySends); - const otherTabsUnreadStats = useSelector(getOtherTabsUnreadStats); const me = useSelector(getMe); - const badge = useSelector(getPreferredBadgeSelector)(me.badges); + const navTabsCollapsed = useSelector(getNavTabsCollapsed); + const otherTabsUnreadStats = useSelector(getOtherTabsUnreadStats); + const preferredWidthFromStorage = useSelector(getPreferredLeftPaneWidth); const theme = useSelector(getTheme); + const badge = useSelector(getPreferredBadgeSelector)(me.badges); + // The weird ones const makeSyncRequest = async () => { @@ -763,6 +767,7 @@ export function SmartPreferences(): JSX.Element | null { otherTabsUnreadStats={otherTabsUnreadStats} page={page} preferredSystemLocales={preferredSystemLocales} + preferredWidthFromStorage={preferredWidthFromStorage} refreshCloudBackupStatus={refreshCloudBackupStatus} refreshBackupSubscriptionStatus={refreshBackupSubscriptionStatus} removeCustomColorOnConversations={removeCustomColorOnConversations} @@ -779,6 +784,7 @@ export function SmartPreferences(): JSX.Element | null { sentMediaQualitySetting={sentMediaQualitySetting} setGlobalDefaultConversationColor={setGlobalDefaultConversationColor} setPage={setPage} + savePreferredLeftPaneWidth={savePreferredLeftPaneWidth} showToast={showToast} theme={theme} themeSetting={themeSetting}