Portal/rsconcept/frontend/src/app/navigation/menu-ai.tsx

68 lines
2.2 KiB
TypeScript
Raw Normal View History

2025-08-05 20:01:18 +03:00
'use client';
2025-07-10 20:00:58 +03:00
import { useAuth } from '@/features/auth/backend/use-auth';
import { Dropdown, DropdownButton, useDropdown } from '@/components/dropdown';
import { IconAssistant, IconChat, IconTemplates } from '@/components/icons';
2025-07-11 13:33:10 +03:00
import { useDialogsStore } from '@/stores/dialogs';
2025-07-10 20:00:58 +03:00
import { globalIDs } from '@/utils/constants';
import { urls } from '../urls';
import { NavigationButton } from './navigation-button';
import { useConceptNavigation } from './navigation-context';
export function MenuAI() {
const router = useConceptNavigation();
2025-10-14 01:05:52 +03:00
const {
elementRef: menuRef,
isOpen: isMenuOpen,
toggle: toggleMenu,
handleBlur: handleMenuBlur,
hide: hideMenu
} = useDropdown();
2025-07-10 20:00:58 +03:00
const { user } = useAuth();
2025-07-11 13:33:10 +03:00
const showAIPrompt = useDialogsStore(state => state.showAIPrompt);
2025-07-10 20:00:58 +03:00
function navigateTemplates(event: React.MouseEvent<Element>) {
2025-10-14 01:05:52 +03:00
hideMenu();
2025-07-10 20:00:58 +03:00
router.push({ path: urls.prompt_templates, newTab: event.ctrlKey || event.metaKey });
}
function handleCreatePrompt(event: React.MouseEvent<Element>) {
event.preventDefault();
event.stopPropagation();
2025-10-14 01:05:52 +03:00
hideMenu();
2025-07-15 23:01:39 +03:00
showAIPrompt();
2025-07-10 20:00:58 +03:00
}
return (
2025-10-14 01:05:52 +03:00
<div ref={menuRef} onBlur={handleMenuBlur} className='flex items-center justify-start relative h-full'>
2025-07-10 20:00:58 +03:00
<NavigationButton
title='ИИ помощник' //
2025-10-14 01:05:52 +03:00
hideTitle={isMenuOpen}
aria-expanded={isMenuOpen}
2025-07-10 20:00:58 +03:00
aria-controls={globalIDs.ai_dropdown}
icon={<IconAssistant size='1.5rem' />}
2025-10-14 01:05:52 +03:00
onClick={toggleMenu}
2025-07-10 20:00:58 +03:00
/>
2025-10-14 01:05:52 +03:00
<Dropdown id={globalIDs.ai_dropdown} className='min-w-[12ch] max-w-48' stretchLeft isOpen={isMenuOpen}>
2025-07-10 20:00:58 +03:00
<DropdownButton
text='Запрос'
title='Создать запрос'
icon={<IconChat size='1rem' />}
onClick={handleCreatePrompt}
/>
<DropdownButton
text='Шаблоны'
title={user?.is_staff ? 'Шаблоны запросов' : 'Доступно только зарегистрированным пользователям'}
icon={<IconTemplates size='1rem' />}
onClick={navigateTemplates}
disabled={!user?.is_staff}
/>
</Dropdown>
</div>
);
}