blob: 294389a0b5e14c06b8321841ebaf7cce949c811b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { FC } from 'react';
import { Nav } from 'react-bootstrap';
import { NavLink, useLocation, useNavigate } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import { loggedUserInfoStore, sideNavStore } from '@/stores';
import { Icon, PluginRender } from '@/components';
import { PluginType } from '@/utils/pluginKit';
import request from '@/utils/request';
import './index.scss';
const Index: FC = () => {
const { t } = useTranslation();
const { pathname } = useLocation();
const { user: userInfo } = loggedUserInfoStore();
const { can_revision, revision } = sideNavStore();
const navigate = useNavigate();
return (
<Nav variant="pills" className="flex-column" id="sideNav">
<NavLink
to="/questions"
className={({ isActive }) =>
isActive || pathname === '/' ? 'nav-link active' : 'nav-link'
}>
<Icon name="question-circle-fill" className="me-2" />
<span>{t('header.nav.question')}</span>
</NavLink>
<NavLink
to="/tags"
className={() =>
pathname === '/tags' ? 'nav-link active' : 'nav-link'
}>
<Icon name="tags-fill" className="me-2" />
<span>{t('header.nav.tag')}</span>
</NavLink>
<NavLink to="/users" className="nav-link">
<Icon name="people-fill" className="me-2" />
<span>{t('header.nav.user')}</span>
</NavLink>
<NavLink to="/badges" className="nav-link">
<Icon name="award-fill" className="me-2" />
<span>{t('header.nav.badges')}</span>
</NavLink>
<PluginRender
slug_name="quick_links"
type={PluginType.Sidebar}
request={request}
navigate={navigate}
/>
{can_revision || userInfo?.role_id === 2 ? (
<>
<div className="py-2 px-3 mt-3 small fw-bold">
{t('header.nav.moderation')}
</div>
{can_revision && (
<NavLink to="/review" className="nav-link">
<Icon name="shield-fill-check" className="me-2" />
<span>{t('header.nav.review')}</span>
<span className="float-end">
{revision > 99 ? '99+' : revision > 0 ? revision : ''}
</span>
</NavLink>
)}
{userInfo?.role_id === 2 ? (
<NavLink to="/admin" className="nav-link">
<Icon name="gear-fill" className="me-2" />
<span>{t('header.nav.admin')}</span>
</NavLink>
) : null}
</>
) : null}
</Nav>
);
};
export default Index;