68 lines
2.3 KiB
TypeScript
68 lines
2.3 KiB
TypeScript
import React from 'react';
|
|
import { Icon, Icons } from 'folds';
|
|
import { useNavigate } from 'react-router-dom';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { useAtomValue } from 'jotai';
|
|
import { SidebarAvatar, SidebarItem, SidebarItemTooltip } from '../../../components/sidebar';
|
|
import { useExploreSelected } from '../../../hooks/router/useExploreSelected';
|
|
import {
|
|
getExploreFeaturedPath,
|
|
getExplorePath,
|
|
getExploreServerPath,
|
|
joinPathComponent,
|
|
} from '../../pathUtils';
|
|
import { useClientConfig } from '../../../hooks/useClientConfig';
|
|
import { useMatrixClient } from '../../../hooks/useMatrixClient';
|
|
import { getMxIdServer } from '../../../utils/matrix';
|
|
import { ScreenSize, useScreenSizeContext } from '../../../hooks/useScreenSize';
|
|
import { useNavToActivePathAtom } from '../../../state/hooks/navToActivePath';
|
|
import { isNativePlatform } from '../../../utils/capacitor';
|
|
|
|
export function ExploreTab() {
|
|
const { t } = useTranslation();
|
|
const mx = useMatrixClient();
|
|
const screenSize = useScreenSizeContext();
|
|
const clientConfig = useClientConfig();
|
|
const navigate = useNavigate();
|
|
const navToActivePath = useAtomValue(useNavToActivePathAtom());
|
|
|
|
const exploreSelected = useExploreSelected();
|
|
|
|
const handleExploreClick = () => {
|
|
const navOpts = { replace: isNativePlatform() };
|
|
if (screenSize === ScreenSize.Mobile) {
|
|
navigate(getExplorePath(), navOpts);
|
|
return;
|
|
}
|
|
|
|
const activePath = navToActivePath.get('explore');
|
|
if (activePath) {
|
|
navigate(joinPathComponent(activePath), navOpts);
|
|
return;
|
|
}
|
|
|
|
if (clientConfig.featuredCommunities?.openAsDefault) {
|
|
navigate(getExploreFeaturedPath(), navOpts);
|
|
return;
|
|
}
|
|
const userId = mx.getUserId();
|
|
const userServer = userId ? getMxIdServer(userId) : undefined;
|
|
if (userServer) {
|
|
navigate(getExploreServerPath(userServer), navOpts);
|
|
return;
|
|
}
|
|
navigate(getExplorePath(), navOpts);
|
|
};
|
|
|
|
return (
|
|
<SidebarItem active={exploreSelected}>
|
|
<SidebarItemTooltip tooltip={t('Explore.explore_community')}>
|
|
{(triggerRef) => (
|
|
<SidebarAvatar as="button" ref={triggerRef} outlined onClick={handleExploreClick}>
|
|
<Icon src={Icons.Explore} filled={exploreSelected} />
|
|
</SidebarAvatar>
|
|
)}
|
|
</SidebarItemTooltip>
|
|
</SidebarItem>
|
|
);
|
|
}
|