forked from lobehub/lobe-chat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuseInterceptingRoutes.ts
51 lines (45 loc) · 1.79 KB
/
useInterceptingRoutes.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import { useContext, useMemo } from 'react';
import urlJoin from 'url-join';
import { InterceptContext } from '@/app/@modal/features/InterceptingContext';
import { INBOX_SESSION_ID } from '@/const/session';
import { useIsMobile } from '@/hooks/useIsMobile';
import { useQueryRoute } from '@/hooks/useQueryRoute';
import { useGlobalStore } from '@/store/global';
import { ChatSettingsTabs, SettingsTabs, SidebarTabKey } from '@/store/global/initialState';
import { useSessionStore } from '@/store/session';
export const useOpenSettings = (tab: SettingsTabs = SettingsTabs.Common) => {
const activeId = useSessionStore((s) => s.activeId);
const router = useQueryRoute();
const mobile = useIsMobile();
return useMemo(() => {
if (mobile) {
return () => router.push(urlJoin('/settings', tab));
} else {
// use Intercepting Routes on Desktop
return () => router.push('/settings/modal', { query: { session: activeId, tab } });
}
}, [mobile, tab, activeId, router]);
};
export const useOpenChatSettings = (tab: ChatSettingsTabs = ChatSettingsTabs.Meta) => {
const activeId = useSessionStore((s) => s.activeId);
const openSettings = useOpenSettings(SettingsTabs.Agent);
const router = useQueryRoute();
const mobile = useIsMobile();
return useMemo(() => {
if (activeId === INBOX_SESSION_ID) {
useGlobalStore.setState({
sidebarKey: SidebarTabKey.Setting,
});
return openSettings;
}
if (mobile) {
return () => router.push('/chat/settings');
} else {
// use Intercepting Routes on Desktop
return () => router.push('/chat/settings/modal', { query: { session: activeId, tab } });
}
}, [openSettings, mobile, activeId, router, tab]);
};
export const useInterceptingRoutes = () => {
return useContext(InterceptContext);
};