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 */} {/* eslint-disable no-multi-spaces */} {pathname === '/admin' && } {isActiveMenu('/app') && } {isActiveMenu('/security') && } {isActiveMenu('/markdown') && } {isActiveMenu('/customize') && } {isActiveMenu('/importer') && } {isActiveMenu('/export') && } {(isActiveMenu(['/notification', '/global-notification'])) && } {isActiveMenu('/slack-integration') && } {isActiveMenu('/users') && } {isActiveMenu(['/user-groups', 'user-group-detail']) && } {isActiveMenu('/search') && } {isActiveMenu('/audit-log') && } {isActiveMenu('/plugins') && } {isActiveMenu('/data-transfer') && } {/* eslint-enable no-multi-spaces */} {getListGroupItemOrDropdownItemList(false)} ); };