lobe-chat

Форк
0
/
useInterceptingRoutes.ts 
51 строка · 1.8 Кб
1
import { useContext, useMemo } from 'react';
2
import urlJoin from 'url-join';
3

4
import { InterceptContext } from '@/app/@modal/features/InterceptingContext';
5
import { INBOX_SESSION_ID } from '@/const/session';
6
import { useIsMobile } from '@/hooks/useIsMobile';
7
import { useQueryRoute } from '@/hooks/useQueryRoute';
8
import { useGlobalStore } from '@/store/global';
9
import { ChatSettingsTabs, SettingsTabs, SidebarTabKey } from '@/store/global/initialState';
10
import { useSessionStore } from '@/store/session';
11

12
export const useOpenSettings = (tab: SettingsTabs = SettingsTabs.Common) => {
13
  const activeId = useSessionStore((s) => s.activeId);
14
  const router = useQueryRoute();
15
  const mobile = useIsMobile();
16

17
  return useMemo(() => {
18
    if (mobile) {
19
      return () => router.push(urlJoin('/settings', tab));
20
    } else {
21
      // use Intercepting Routes on Desktop
22
      return () => router.push('/settings/modal', { query: { session: activeId, tab } });
23
    }
24
  }, [mobile, tab, activeId, router]);
25
};
26

27
export const useOpenChatSettings = (tab: ChatSettingsTabs = ChatSettingsTabs.Meta) => {
28
  const activeId = useSessionStore((s) => s.activeId);
29
  const openSettings = useOpenSettings(SettingsTabs.Agent);
30
  const router = useQueryRoute();
31
  const mobile = useIsMobile();
32

33
  return useMemo(() => {
34
    if (activeId === INBOX_SESSION_ID) {
35
      useGlobalStore.setState({
36
        sidebarKey: SidebarTabKey.Setting,
37
      });
38
      return openSettings;
39
    }
40
    if (mobile) {
41
      return () => router.push('/chat/settings');
42
    } else {
43
      // use Intercepting Routes on Desktop
44
      return () => router.push('/chat/settings/modal', { query: { session: activeId, tab } });
45
    }
46
  }, [openSettings, mobile, activeId, router, tab]);
47
};
48

49
export const useInterceptingRoutes = () => {
50
  return useContext(InterceptContext);
51
};
52

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.