Settings Tab: When nav tabs collapsed, show toggle
This commit is contained in:
parent
a75a0f9143
commit
f1350e4754
4 changed files with 90 additions and 4 deletions
|
@ -34,6 +34,19 @@ $secondary-text-color: light-dark(
|
||||||
}
|
}
|
||||||
|
|
||||||
&__header {
|
&__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;
|
margin-inline-start: 24px;
|
||||||
@include mixins.font-title-medium;
|
@include mixins.font-title-medium;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
|
|
|
@ -137,6 +137,7 @@ export default {
|
||||||
hasCallRingtoneNotification: false,
|
hasCallRingtoneNotification: false,
|
||||||
hasContentProtection: false,
|
hasContentProtection: false,
|
||||||
hasCountMutedConversations: false,
|
hasCountMutedConversations: false,
|
||||||
|
hasFailedStorySends: false,
|
||||||
hasHideMenuBar: false,
|
hasHideMenuBar: false,
|
||||||
hasIncomingCallNotifications: true,
|
hasIncomingCallNotifications: true,
|
||||||
hasLinkPreviews: true,
|
hasLinkPreviews: true,
|
||||||
|
@ -168,7 +169,13 @@ export default {
|
||||||
isUpdateDownloaded: false,
|
isUpdateDownloaded: false,
|
||||||
lastSyncTime: Date.now(),
|
lastSyncTime: Date.now(),
|
||||||
localeOverride: null,
|
localeOverride: null,
|
||||||
|
navTabsCollapsed: false,
|
||||||
notificationContent: 'name',
|
notificationContent: 'name',
|
||||||
|
otherTabsUnreadStats: {
|
||||||
|
unreadCount: 0,
|
||||||
|
unreadMentionsCount: 0,
|
||||||
|
markedUnread: false,
|
||||||
|
},
|
||||||
preferredSystemLocales: ['en'],
|
preferredSystemLocales: ['en'],
|
||||||
resolvedLocale: 'en',
|
resolvedLocale: 'en',
|
||||||
selectedCamera:
|
selectedCamera:
|
||||||
|
@ -239,6 +246,7 @@ export default {
|
||||||
onStartUpdate: action('onStartUpdate'),
|
onStartUpdate: action('onStartUpdate'),
|
||||||
onTextFormattingChange: action('onTextFormattingChange'),
|
onTextFormattingChange: action('onTextFormattingChange'),
|
||||||
onThemeChange: action('onThemeChange'),
|
onThemeChange: action('onThemeChange'),
|
||||||
|
onToggleNavTabsCollapse: action('onToggleNavTabsCollapse'),
|
||||||
onUniversalExpireTimerChange: action('onUniversalExpireTimerChange'),
|
onUniversalExpireTimerChange: action('onUniversalExpireTimerChange'),
|
||||||
onWhoCanSeeMeChange: action('onWhoCanSeeMeChange'),
|
onWhoCanSeeMeChange: action('onWhoCanSeeMeChange'),
|
||||||
onWhoCanFindMeChange: action('onWhoCanFindMeChange'),
|
onWhoCanFindMeChange: action('onWhoCanFindMeChange'),
|
||||||
|
@ -386,3 +394,30 @@ export const UpdateDownloaded = Template.bind({});
|
||||||
UpdateDownloaded.args = {
|
UpdateDownloaded.args = {
|
||||||
isUpdateDownloaded: true,
|
isUpdateDownloaded: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const NavTabsCollapsed = Template.bind({});
|
||||||
|
NavTabsCollapsed.args = {
|
||||||
|
navTabsCollapsed: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
export const NavTabsCollapsedWithBadges = Template.bind({});
|
||||||
|
NavTabsCollapsedWithBadges.args = {
|
||||||
|
navTabsCollapsed: true,
|
||||||
|
hasFailedStorySends: false,
|
||||||
|
otherTabsUnreadStats: {
|
||||||
|
unreadCount: 1,
|
||||||
|
unreadMentionsCount: 2,
|
||||||
|
markedUnread: false,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const NavTabsCollapsedWithExclamation = Template.bind({});
|
||||||
|
NavTabsCollapsedWithExclamation.args = {
|
||||||
|
navTabsCollapsed: true,
|
||||||
|
hasFailedStorySends: true,
|
||||||
|
otherTabsUnreadStats: {
|
||||||
|
unreadCount: 1,
|
||||||
|
unreadMentionsCount: 2,
|
||||||
|
markedUnread: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
|
@ -74,6 +74,8 @@ import { PreferencesBackups } from './PreferencesBackups';
|
||||||
import { PreferencesInternal } from './PreferencesInternal';
|
import { PreferencesInternal } from './PreferencesInternal';
|
||||||
import { FunEmojiLocalizationProvider } from './fun/FunEmojiLocalizationProvider';
|
import { FunEmojiLocalizationProvider } from './fun/FunEmojiLocalizationProvider';
|
||||||
import type { ValidateLocalBackupStructureResultType } from '../services/backups/util/localBackup';
|
import type { ValidateLocalBackupStructureResultType } from '../services/backups/util/localBackup';
|
||||||
|
import { NavTabsToggle } from './NavTabs';
|
||||||
|
import type { UnreadStats } from '../util/countUnreadStats';
|
||||||
|
|
||||||
type CheckboxChangeHandlerType = (value: boolean) => unknown;
|
type CheckboxChangeHandlerType = (value: boolean) => unknown;
|
||||||
type SelectChangeHandlerType<T = string | number> = (value: T) => unknown;
|
type SelectChangeHandlerType<T = string | number> = (value: T) => unknown;
|
||||||
|
@ -134,9 +136,12 @@ export type PropsDataType = {
|
||||||
resolvedLocale: string;
|
resolvedLocale: string;
|
||||||
|
|
||||||
// Other props
|
// Other props
|
||||||
|
hasFailedStorySends: boolean;
|
||||||
hasPendingUpdate: boolean;
|
hasPendingUpdate: boolean;
|
||||||
initialSpellCheckSetting: boolean;
|
initialSpellCheckSetting: boolean;
|
||||||
isUpdateDownloaded: boolean;
|
isUpdateDownloaded: boolean;
|
||||||
|
navTabsCollapsed: boolean;
|
||||||
|
otherTabsUnreadStats: UnreadStats;
|
||||||
|
|
||||||
// Limited support features
|
// Limited support features
|
||||||
isAutoDownloadUpdatesSupported: boolean;
|
isAutoDownloadUpdatesSupported: boolean;
|
||||||
|
@ -220,6 +225,7 @@ type PropsFunctionType = {
|
||||||
onSpellCheckChange: CheckboxChangeHandlerType;
|
onSpellCheckChange: CheckboxChangeHandlerType;
|
||||||
onTextFormattingChange: CheckboxChangeHandlerType;
|
onTextFormattingChange: CheckboxChangeHandlerType;
|
||||||
onThemeChange: SelectChangeHandlerType<ThemeType>;
|
onThemeChange: SelectChangeHandlerType<ThemeType>;
|
||||||
|
onToggleNavTabsCollapse: (navTabsCollapsed: boolean) => void;
|
||||||
onUniversalExpireTimerChange: SelectChangeHandlerType<number>;
|
onUniversalExpireTimerChange: SelectChangeHandlerType<number>;
|
||||||
onWhoCanSeeMeChange: SelectChangeHandlerType<PhoneNumberSharingMode>;
|
onWhoCanSeeMeChange: SelectChangeHandlerType<PhoneNumberSharingMode>;
|
||||||
onWhoCanFindMeChange: SelectChangeHandlerType<PhoneNumberDiscoverability>;
|
onWhoCanFindMeChange: SelectChangeHandlerType<PhoneNumberDiscoverability>;
|
||||||
|
@ -305,6 +311,7 @@ export function Preferences({
|
||||||
hasCallRingtoneNotification,
|
hasCallRingtoneNotification,
|
||||||
hasContentProtection,
|
hasContentProtection,
|
||||||
hasCountMutedConversations,
|
hasCountMutedConversations,
|
||||||
|
hasFailedStorySends,
|
||||||
hasHideMenuBar,
|
hasHideMenuBar,
|
||||||
hasIncomingCallNotifications,
|
hasIncomingCallNotifications,
|
||||||
hasLinkPreviews,
|
hasLinkPreviews,
|
||||||
|
@ -339,6 +346,7 @@ export function Preferences({
|
||||||
isUpdateDownloaded,
|
isUpdateDownloaded,
|
||||||
lastSyncTime,
|
lastSyncTime,
|
||||||
makeSyncRequest,
|
makeSyncRequest,
|
||||||
|
navTabsCollapsed,
|
||||||
notificationContent,
|
notificationContent,
|
||||||
onAudioNotificationsChange,
|
onAudioNotificationsChange,
|
||||||
onAutoConvertEmojiChange,
|
onAutoConvertEmojiChange,
|
||||||
|
@ -371,10 +379,12 @@ export function Preferences({
|
||||||
onSpellCheckChange,
|
onSpellCheckChange,
|
||||||
onTextFormattingChange,
|
onTextFormattingChange,
|
||||||
onThemeChange,
|
onThemeChange,
|
||||||
|
onToggleNavTabsCollapse,
|
||||||
onUniversalExpireTimerChange,
|
onUniversalExpireTimerChange,
|
||||||
onWhoCanSeeMeChange,
|
onWhoCanSeeMeChange,
|
||||||
onWhoCanFindMeChange,
|
onWhoCanFindMeChange,
|
||||||
onZoomFactorChange,
|
onZoomFactorChange,
|
||||||
|
otherTabsUnreadStats,
|
||||||
phoneNumber = '',
|
phoneNumber = '',
|
||||||
preferredSystemLocales,
|
preferredSystemLocales,
|
||||||
refreshCloudBackupStatus,
|
refreshCloudBackupStatus,
|
||||||
|
@ -1837,9 +1847,23 @@ export function Preferences({
|
||||||
<div className="module-title-bar-drag-area" />
|
<div className="module-title-bar-drag-area" />
|
||||||
<div className="Preferences">
|
<div className="Preferences">
|
||||||
<div className="Preferences__page-selector">
|
<div className="Preferences__page-selector">
|
||||||
<h1 className="Preferences__header">
|
<div className="Preferences__header">
|
||||||
|
{navTabsCollapsed ? (
|
||||||
|
<div className="Preferences__header__toggle">
|
||||||
|
<NavTabsToggle
|
||||||
|
i18n={i18n}
|
||||||
|
onToggleNavTabsCollapse={onToggleNavTabsCollapse}
|
||||||
|
navTabsCollapsed
|
||||||
|
hasFailedStorySends={hasFailedStorySends}
|
||||||
|
otherTabsUnreadStats={otherTabsUnreadStats}
|
||||||
|
hasPendingUpdate={false}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
) : undefined}
|
||||||
|
<h1 className="Preferences__header__text">
|
||||||
{i18n('icu:Preferences--header')}
|
{i18n('icu:Preferences--header')}
|
||||||
</h1>
|
</h1>
|
||||||
|
</div>
|
||||||
{maybeUpdateDialog ? (
|
{maybeUpdateDialog ? (
|
||||||
<div className="module-left-pane__dialogs">{maybeUpdateDialog}</div>
|
<div className="module-left-pane__dialogs">{maybeUpdateDialog}</div>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
|
@ -8,7 +8,11 @@ import type { AudioDevice } from '@signalapp/ringrtc';
|
||||||
import { useItemsActions } from '../ducks/items';
|
import { useItemsActions } from '../ducks/items';
|
||||||
import { useConversationsActions } from '../ducks/conversations';
|
import { useConversationsActions } from '../ducks/conversations';
|
||||||
import { getConversationsWithCustomColorSelector } from '../selectors/conversations';
|
import { getConversationsWithCustomColorSelector } from '../selectors/conversations';
|
||||||
import { getCustomColors, getItems } from '../selectors/items';
|
import {
|
||||||
|
getCustomColors,
|
||||||
|
getItems,
|
||||||
|
getNavTabsCollapsed,
|
||||||
|
} from '../selectors/items';
|
||||||
import { DEFAULT_AUTO_DOWNLOAD_ATTACHMENT } from '../../textsecure/Storage';
|
import { DEFAULT_AUTO_DOWNLOAD_ATTACHMENT } from '../../textsecure/Storage';
|
||||||
import { DEFAULT_CONVERSATION_COLOR } from '../../types/Colors';
|
import { DEFAULT_CONVERSATION_COLOR } from '../../types/Colors';
|
||||||
import { isBackupFeatureEnabledForRedux } from '../../util/isBackupEnabled';
|
import { isBackupFeatureEnabledForRedux } from '../../util/isBackupEnabled';
|
||||||
|
@ -49,6 +53,8 @@ import {
|
||||||
getHasPendingUpdate,
|
getHasPendingUpdate,
|
||||||
isUpdateDownloaded as getIsUpdateDownloaded,
|
isUpdateDownloaded as getIsUpdateDownloaded,
|
||||||
} from '../selectors/updates';
|
} from '../selectors/updates';
|
||||||
|
import { getHasAnyFailedStorySends } from '../selectors/stories';
|
||||||
|
import { getOtherTabsUnreadStats } from '../selectors/nav';
|
||||||
|
|
||||||
const DEFAULT_NOTIFICATION_SETTING = 'message';
|
const DEFAULT_NOTIFICATION_SETTING = 'message';
|
||||||
|
|
||||||
|
@ -94,6 +100,7 @@ export function SmartPreferences(): JSX.Element {
|
||||||
resetDefaultChatColor,
|
resetDefaultChatColor,
|
||||||
setEmojiSkinToneDefault: onEmojiSkinToneDefaultChange,
|
setEmojiSkinToneDefault: onEmojiSkinToneDefaultChange,
|
||||||
setGlobalDefaultConversationColor,
|
setGlobalDefaultConversationColor,
|
||||||
|
toggleNavTabsCollapse,
|
||||||
} = useItemsActions();
|
} = useItemsActions();
|
||||||
const { removeCustomColorOnConversations, resetAllChatColors } =
|
const { removeCustomColorOnConversations, resetAllChatColors } =
|
||||||
useConversationsActions();
|
useConversationsActions();
|
||||||
|
@ -109,6 +116,9 @@ export function SmartPreferences(): JSX.Element {
|
||||||
const i18n = useSelector(getIntl);
|
const i18n = useSelector(getIntl);
|
||||||
const hasPendingUpdate = useSelector(getHasPendingUpdate);
|
const hasPendingUpdate = useSelector(getHasPendingUpdate);
|
||||||
const isUpdateDownloaded = useSelector(getIsUpdateDownloaded);
|
const isUpdateDownloaded = useSelector(getIsUpdateDownloaded);
|
||||||
|
const navTabsCollapsed = useSelector(getNavTabsCollapsed);
|
||||||
|
const hasFailedStorySends = useSelector(getHasAnyFailedStorySends);
|
||||||
|
const otherTabsUnreadStats = useSelector(getOtherTabsUnreadStats);
|
||||||
|
|
||||||
// The weird ones
|
// The weird ones
|
||||||
|
|
||||||
|
@ -604,6 +614,7 @@ export function SmartPreferences(): JSX.Element {
|
||||||
hasCallRingtoneNotification={hasCallRingtoneNotification}
|
hasCallRingtoneNotification={hasCallRingtoneNotification}
|
||||||
hasContentProtection={hasContentProtection}
|
hasContentProtection={hasContentProtection}
|
||||||
hasCountMutedConversations={hasCountMutedConversations}
|
hasCountMutedConversations={hasCountMutedConversations}
|
||||||
|
hasFailedStorySends={hasFailedStorySends}
|
||||||
hasHideMenuBar={hasHideMenuBar}
|
hasHideMenuBar={hasHideMenuBar}
|
||||||
hasIncomingCallNotifications={hasIncomingCallNotifications}
|
hasIncomingCallNotifications={hasIncomingCallNotifications}
|
||||||
hasLinkPreviews={hasLinkPreviews}
|
hasLinkPreviews={hasLinkPreviews}
|
||||||
|
@ -640,6 +651,7 @@ export function SmartPreferences(): JSX.Element {
|
||||||
lastSyncTime={lastSyncTime}
|
lastSyncTime={lastSyncTime}
|
||||||
localeOverride={localeOverride}
|
localeOverride={localeOverride}
|
||||||
makeSyncRequest={makeSyncRequest}
|
makeSyncRequest={makeSyncRequest}
|
||||||
|
navTabsCollapsed={navTabsCollapsed}
|
||||||
notificationContent={notificationContent}
|
notificationContent={notificationContent}
|
||||||
onAudioNotificationsChange={onAudioNotificationsChange}
|
onAudioNotificationsChange={onAudioNotificationsChange}
|
||||||
onAutoConvertEmojiChange={onAutoConvertEmojiChange}
|
onAutoConvertEmojiChange={onAutoConvertEmojiChange}
|
||||||
|
@ -675,10 +687,12 @@ export function SmartPreferences(): JSX.Element {
|
||||||
onSpellCheckChange={onSpellCheckChange}
|
onSpellCheckChange={onSpellCheckChange}
|
||||||
onTextFormattingChange={onTextFormattingChange}
|
onTextFormattingChange={onTextFormattingChange}
|
||||||
onThemeChange={onThemeChange}
|
onThemeChange={onThemeChange}
|
||||||
|
onToggleNavTabsCollapse={toggleNavTabsCollapse}
|
||||||
onUniversalExpireTimerChange={onUniversalExpireTimerChange}
|
onUniversalExpireTimerChange={onUniversalExpireTimerChange}
|
||||||
onWhoCanFindMeChange={onWhoCanFindMeChange}
|
onWhoCanFindMeChange={onWhoCanFindMeChange}
|
||||||
onWhoCanSeeMeChange={onWhoCanSeeMeChange}
|
onWhoCanSeeMeChange={onWhoCanSeeMeChange}
|
||||||
onZoomFactorChange={onZoomFactorChange}
|
onZoomFactorChange={onZoomFactorChange}
|
||||||
|
otherTabsUnreadStats={otherTabsUnreadStats}
|
||||||
preferredSystemLocales={preferredSystemLocales}
|
preferredSystemLocales={preferredSystemLocales}
|
||||||
refreshCloudBackupStatus={refreshCloudBackupStatus}
|
refreshCloudBackupStatus={refreshCloudBackupStatus}
|
||||||
refreshBackupSubscriptionStatus={refreshBackupSubscriptionStatus}
|
refreshBackupSubscriptionStatus={refreshBackupSubscriptionStatus}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue