import React, { type JSX, useCallback } from 'react'; import Link from 'next/link'; import { pathUtils } from '@growi/core/dist/utils'; import { useTranslation } from 'next-i18next'; import urljoin from 'url-join'; import { useGrowiAppIdForGrowiCloud, useGrowiCloudUri, } from '~/stores-universal/context'; import styles from './AdminNavigation.module.scss'; const moduleClass = styles['admin-navigation']; // 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')} ); // Temporarily hiding // case 'ai-integration': return ( // <>{/* TODO: unify sizing of growi-custom-icons so that simplify code -- 2024.10.09 Yuki Takei */} // // growi_ai // // {t('ai_integration.ai_integration')} // // ); 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 rounded border-0' : '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 = useCallback( (isListGroupItems: boolean) => { return ( <> {/* eslint-disable no-multi-spaces */} {/* Temporarily hiding */} {/* */} {growiCloudUri != null && growiAppIdForGrowiCloud != null && ( )} {/* eslint-enable no-multi-spaces */} ); }, [growiAppIdForGrowiCloud, growiCloudUri, isActiveMenu, pathname], ); return ( {/* List group */}
{getListGroupItemOrDropdownItemList(true)}
{/* Dropdown */}
{getListGroupItemOrDropdownItemList(false)}
); };