diff --git a/web/sidebar/left-layout-aside.react.js b/web/sidebar/left-layout-aside.react.js
index e8bc08f29..6054c390c 100644
--- a/web/sidebar/left-layout-aside.react.js
+++ b/web/sidebar/left-layout-aside.react.js
@@ -1,31 +1,31 @@
// @flow
import * as React from 'react';
-import AppSwitcher from './app-switcher.react.js';
import CommunityPicker from './community-picker.react.js';
import css from './left-layout-aside.css';
import SettingsSwitcher from './settings-switcher.react.js';
import { useSelector } from '../redux/redux-utils.js';
+import AppSwitcher from '../topbar/app-switcher.react.js';
function LeftLayoutAside(): React.Node {
const navInfo = useSelector(state => state.navInfo);
const navigationPanel = React.useMemo(() => {
if (navInfo.tab === 'settings') {
return ;
}
return ;
}, [navInfo.tab]);
return (
);
}
const MemoizedLeftLayoutAside: React.ComponentType<{}> = React.memo<{}>(
LeftLayoutAside,
);
export default MemoizedLeftLayoutAside;
diff --git a/web/sidebar/app-switcher.react.js b/web/topbar/app-switcher.react.js
similarity index 96%
rename from web/sidebar/app-switcher.react.js
rename to web/topbar/app-switcher.react.js
index e84327c73..3884025dd 100644
--- a/web/sidebar/app-switcher.react.js
+++ b/web/topbar/app-switcher.react.js
@@ -1,134 +1,134 @@
// @flow
import * as React from 'react';
import { useDispatch } from 'react-redux';
import SWMansionIcon from 'lib/components/SWMansionIcon.react.js';
import {
mostRecentlyReadThreadSelector,
unreadCount,
} from 'lib/selectors/thread-selectors.js';
-import css from './left-layout-aside.css';
-import NavigationPanel from './navigation-panel.react.js';
import { updateNavInfoActionType } from '../redux/action-types.js';
import { useSelector } from '../redux/redux-utils.js';
import { navTabSelector } from '../selectors/nav-selectors.js';
+import css from '../sidebar/left-layout-aside.css';
+import NavigationPanel from '../sidebar/navigation-panel.react.js';
function AppSwitcher(): React.Node {
const activeChatThreadID = useSelector(
state => state.navInfo.activeChatThreadID,
);
const mostRecentlyReadThread = useSelector(mostRecentlyReadThreadSelector);
const isActiveThreadCurrentlyUnread = useSelector(
state =>
!activeChatThreadID ||
!!state.threadStore.threadInfos[activeChatThreadID]?.currentUser.unread,
);
const dispatch = useDispatch();
const onClickChat = React.useCallback(
(event: SyntheticEvent) => {
event.preventDefault();
dispatch({
type: updateNavInfoActionType,
payload: {
tab: 'chat',
activeChatThreadID: isActiveThreadCurrentlyUnread
? mostRecentlyReadThread
: activeChatThreadID,
},
});
},
[
dispatch,
isActiveThreadCurrentlyUnread,
mostRecentlyReadThread,
activeChatThreadID,
],
);
const boundUnreadCount = useSelector(unreadCount);
let chatBadge = null;
if (boundUnreadCount > 0) {
chatBadge = {boundUnreadCount};
}
const chatNavigationItem = React.useMemo(
() => (
{chatBadge}
Chat
),
[chatBadge, onClickChat],
);
const onClickCalendar = React.useCallback(
(event: SyntheticEvent) => {
event.preventDefault();
dispatch({
type: updateNavInfoActionType,
payload: { tab: 'calendar' },
});
},
[dispatch],
);
const isCalendarEnabled = useSelector(state => state.enabledApps.calendar);
const calendarNavigationItem = React.useMemo(() => {
if (!isCalendarEnabled) {
return null;
}
return (
Calendar
);
}, [isCalendarEnabled, onClickCalendar]);
const onClickApps = React.useCallback(
(event: SyntheticEvent) => {
event.preventDefault();
dispatch({
type: updateNavInfoActionType,
payload: {
tab: 'apps',
},
});
},
[dispatch],
);
const appNavigationItem = React.useMemo(
() => (
Apps
),
[onClickApps],
);
return (
{chatNavigationItem}
{calendarNavigationItem}
{appNavigationItem}
);
}
export default AppSwitcher;