import React, { useCallback } from 'react'; import { pathUtils } from '@growi/core/dist/utils'; import { useTranslation } from 'next-i18next'; import Link from 'next/link'; import urljoin from 'url-join'; import { useGrowiCloudUri, useGrowiAppIdForGrowiCloud } from '../../../stores/context'; // eslint-disable-next-line react/prop-types const MenuLabel = ({ menu }: { menu: string }) => { const { t } = useTranslation(['admin', 'commons']); switch (menu) { /* eslint-disable no-multi-spaces, max-len */ case 'app': return <>settings{ t('headers.app_settings', { ns: 'commons' }) }; case 'security': return <>shield{ t('security_settings.security_settings') }; case 'markdown': return <>note{ t('markdown_settings.markdown_settings') }; case 'customize': return <>construction{ t('customize_settings.customize_settings') }; case 'importer': return <>cloud_upload{ t('importer_management.import_data') }; case 'export': return <>cloud_download{ t('export_management.export_archive_data') }; case 'data-transfer': return <>flight{ t('g2g_data_transfer.data_transfer', { ns: 'commons' })}; case 'notification': return <>notifications{ t('external_notification.external_notification')}; case 'slack-integration': return <>shuffle{ t('slack_integration.slack_integration') }; case 'slack-integration-legacy': return <>shuffle{ t('slack_integration_legacy.slack_integration_legacy')}; case 'users': return <>person{ t('user_management.user_management') }; case 'user-groups': return <>group{ t('user_group_management.user_group_management') }; case 'audit-log': return <>feed{ t('audit_log_management.audit_log')}; case 'plugins': return <>extension{ t('plugins.plugins')}; case 'search': return <>search{ t('full_text_search_management.full_text_search_management') }; case 'cloud': return <>share{ t('cloud_setting_management.to_cloud_settings')} ; default: return <>home{ t('wiki_management_homepage') }; /* eslint-enable no-multi-spaces, max-len */ } }; type MenuLinkProps = { menu: string, isListGroupItems: boolean, isRoot?: boolean, isActive?: boolean, } const MenuLink = ({ menu, isRoot, isListGroupItems, isActive, }: MenuLinkProps) => { const pageTransitionClassName = isListGroupItems ? 'list-group-item list-group-item-action border-0 round-corner' : 'dropdown-item px-3 py-2'; const href = isRoot ? '/admin' : urljoin('/admin', menu); return ( ); }; export const AdminNavigation = (): JSX.Element => { const pathname = window.location.pathname; const { data: growiCloudUri } = useGrowiCloudUri(); const { data: growiAppIdForGrowiCloud } = useGrowiAppIdForGrowiCloud(); const isActiveMenu = useCallback((path: string | string[]) => { const paths = Array.isArray(path) ? path : [path]; return paths.some((path) => { const basisPath = pathUtils.normalizePath(urljoin('/admin', path)); const basisParentPath = pathUtils.addTrailingSlash(basisPath); return ( pathname === basisPath || pathname.startsWith(basisParentPath) ); }); }, [pathname]); const getListGroupItemOrDropdownItemList = (isListGroupItems: boolean) => { return ( <> {/* eslint-disable no-multi-spaces */} {growiCloudUri != null && growiAppIdForGrowiCloud != null && ( ) } {/* eslint-enable no-multi-spaces */} ); }; return ( {/* List group */}
{getListGroupItemOrDropdownItemList(true)}
{/* Dropdown */}
{getListGroupItemOrDropdownItemList(false)}
); };