Calls Tab & Group Call Disposition
This commit is contained in:
parent
620e85ca01
commit
1eaabb6734
139 changed files with 9182 additions and 2721 deletions
94
ts/state/smart/NavTabs.tsx
Normal file
94
ts/state/smart/NavTabs.tsx
Normal file
|
@ -0,0 +1,94 @@
|
|||
// Copyright 2023 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import React, { useCallback } from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import type { NavTabPanelProps } from '../../components/NavTabs';
|
||||
import { NavTabs } from '../../components/NavTabs';
|
||||
import { getIntl, getTheme } from '../selectors/user';
|
||||
import {
|
||||
getAllConversationsUnreadStats,
|
||||
getMe,
|
||||
} from '../selectors/conversations';
|
||||
import { getPreferredBadgeSelector } from '../selectors/badges';
|
||||
import type { StateType } from '../reducer';
|
||||
import {
|
||||
getHasAnyFailedStorySends,
|
||||
getStoriesNotificationCount,
|
||||
} from '../selectors/stories';
|
||||
import { showSettings } from '../../shims/Whisper';
|
||||
import { useGlobalModalActions } from '../ducks/globalModals';
|
||||
import { useUpdatesActions } from '../ducks/updates';
|
||||
import { getStoriesEnabled } from '../selectors/items';
|
||||
import { getSelectedNavTab } from '../selectors/nav';
|
||||
import type { NavTab } from '../ducks/nav';
|
||||
import { useNavActions } from '../ducks/nav';
|
||||
|
||||
export type SmartNavTabsProps = Readonly<{
|
||||
navTabsCollapsed: boolean;
|
||||
onToggleNavTabsCollapse(navTabsCollapsed: boolean): void;
|
||||
renderCallsTab(props: NavTabPanelProps): JSX.Element;
|
||||
renderChatsTab(props: NavTabPanelProps): JSX.Element;
|
||||
renderStoriesTab(props: NavTabPanelProps): JSX.Element;
|
||||
}>;
|
||||
|
||||
export function SmartNavTabs({
|
||||
navTabsCollapsed,
|
||||
onToggleNavTabsCollapse,
|
||||
renderCallsTab,
|
||||
renderChatsTab,
|
||||
renderStoriesTab,
|
||||
}: SmartNavTabsProps): JSX.Element {
|
||||
const i18n = useSelector(getIntl);
|
||||
const selectedNavTab = useSelector(getSelectedNavTab);
|
||||
const { changeNavTab } = useNavActions();
|
||||
const me = useSelector(getMe);
|
||||
const badge = useSelector(getPreferredBadgeSelector)(me.badges);
|
||||
const theme = useSelector(getTheme);
|
||||
const storiesEnabled = useSelector(getStoriesEnabled);
|
||||
const unreadConversationsStats = useSelector(getAllConversationsUnreadStats);
|
||||
const unreadStoriesCount = useSelector(getStoriesNotificationCount);
|
||||
const hasFailedStorySends = useSelector(getHasAnyFailedStorySends);
|
||||
|
||||
const hasPendingUpdate = useSelector((state: StateType) => {
|
||||
return state.updates.didSnooze;
|
||||
});
|
||||
|
||||
const { toggleProfileEditor } = useGlobalModalActions();
|
||||
const { startUpdate } = useUpdatesActions();
|
||||
|
||||
const onNavTabSelected = useCallback(
|
||||
(tab: NavTab) => {
|
||||
// For some reason react-aria will call this more often than the tab
|
||||
// actually changing.
|
||||
if (tab !== selectedNavTab) {
|
||||
changeNavTab(tab);
|
||||
}
|
||||
},
|
||||
[changeNavTab, selectedNavTab]
|
||||
);
|
||||
|
||||
return (
|
||||
<NavTabs
|
||||
badge={badge}
|
||||
hasFailedStorySends={hasFailedStorySends}
|
||||
hasPendingUpdate={hasPendingUpdate}
|
||||
i18n={i18n}
|
||||
me={me}
|
||||
navTabsCollapsed={navTabsCollapsed}
|
||||
onShowSettings={showSettings}
|
||||
onStartUpdate={startUpdate}
|
||||
onNavTabSelected={onNavTabSelected}
|
||||
onToggleNavTabsCollapse={onToggleNavTabsCollapse}
|
||||
onToggleProfileEditor={toggleProfileEditor}
|
||||
renderCallsTab={renderCallsTab}
|
||||
renderChatsTab={renderChatsTab}
|
||||
renderStoriesTab={renderStoriesTab}
|
||||
selectedNavTab={selectedNavTab}
|
||||
storiesEnabled={storiesEnabled}
|
||||
theme={theme}
|
||||
unreadConversationsStats={unreadConversationsStats}
|
||||
unreadStoriesCount={unreadStoriesCount}
|
||||
/>
|
||||
);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue