RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/NavBarV2/NavBarPagesToolbar/hooks/useAuditMenu.tsx

Summary

Maintainability
A
3 hrs
Test Coverage
import { usePermission, useRouter, useTranslation } from '@rocket.chat/ui-contexts';

import type { GenericMenuItemProps } from '../../../components/GenericMenu/GenericMenuItem';
import { useHasLicenseModule } from '../../../hooks/useHasLicenseModule';

export const useAuditMenu = () => {
    const router = useRouter();
    const t = useTranslation();

    const hasAuditLicense = useHasLicenseModule('auditing') === true;

    const hasAuditPermission = usePermission('can-audit') && hasAuditLicense;
    const hasAuditLogPermission = usePermission('can-audit-log') && hasAuditLicense;

    if (!hasAuditPermission && !hasAuditLogPermission) {
        return [];
    }

    const auditMessageItem: GenericMenuItemProps = {
        id: 'messages',
        icon: 'document-eye',
        content: t('Messages'),
        onClick: () => router.navigate('/audit'),
    };
    const auditLogItem: GenericMenuItemProps = {
        id: 'auditLog',
        icon: 'document-eye',
        content: t('Logs'),
        onClick: () => router.navigate('/audit-log'),
    };

    return [
        {
            title: t('Audit'),
            items: [hasAuditPermission && auditMessageItem, hasAuditLogPermission && auditLogItem].filter(Boolean) as GenericMenuItemProps[],
        },
    ];
};