Page MenuHomePhabricator

D3190.id9716.diff
No OneTemporary

D3190.id9716.diff

diff --git a/web/chat/thread-menu.react.js b/web/chat/thread-menu.react.js
--- a/web/chat/thread-menu.react.js
+++ b/web/chat/thread-menu.react.js
@@ -1,11 +1,18 @@
// @flow
-import { faBell, faCog } from '@fortawesome/free-solid-svg-icons';
+import {
+ faArrowRight,
+ faBell,
+ faCog,
+ faUserFriends,
+} from '@fortawesome/free-solid-svg-icons';
import classNames from 'classnames';
import * as React from 'react';
-import { type ThreadInfo } from 'lib/types/thread-types';
+import { childThreadInfos } from 'lib/selectors/thread-selectors';
+import { type ThreadInfo, threadTypes } from 'lib/types/thread-types';
+import { useSelector } from '../redux/redux-utils';
import SWMansionIcon from '../SWMansionIcon.react';
import ThreadMenuItem from './thread-menu-item.react';
import css from './thread-menu.css';
@@ -17,9 +24,36 @@
function ThreadMenu(props: ThreadMenuProps): React.Node {
const [isOpen, setIsOpen] = React.useState(false);
- // eslint-disable-next-line no-unused-vars
const { threadInfo } = props;
+ const membersItem = React.useMemo(() => {
+ if (threadInfo.type === threadTypes.PERSONAL) {
+ return null;
+ }
+ return <ThreadMenuItem key="members" text="Members" icon={faUserFriends} />;
+ }, [threadInfo.type]);
+
+ const childThreads = useSelector(
+ state => childThreadInfos(state)[threadInfo.id],
+ );
+
+ const hasSidebars = React.useMemo(() => {
+ const sidebars =
+ childThreads?.filter(
+ childThreadInfo => childThreadInfo.type === threadTypes.SIDEBAR,
+ ) ?? [];
+ return sidebars.length > 0;
+ }, [childThreads]);
+
+ const sidebarItem = React.useMemo(() => {
+ if (!hasSidebars) {
+ return null;
+ }
+ return (
+ <ThreadMenuItem key="sidebars" text="Sidebars" icon={faArrowRight} />
+ );
+ }, [hasSidebars]);
+
const menuItems = React.useMemo(() => {
const settingsItem = (
<ThreadMenuItem key="settings" text="Settings" icon={faCog} />
@@ -27,9 +61,9 @@
const notificationsItem = (
<ThreadMenuItem key="notifications" text="Notifications" icon={faBell} />
);
- const items = [settingsItem, notificationsItem];
+ const items = [settingsItem, notificationsItem, membersItem, sidebarItem];
return items.filter(Boolean);
- }, []);
+ }, [membersItem, sidebarItem]);
const menuActionListClasses = classNames(css.topBarMenuActionList, {
[css.disabled]: !isOpen,

File Metadata

Mime Type
text/plain
Expires
Thu, Dec 26, 7:30 PM (11 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2708267
Default Alt Text
D3190.id9716.diff (2 KB)

Event Timeline