1
import { useContext, useMemo } from 'react';
2
import urlJoin from 'url-join';
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';
12
export const useOpenSettings = (tab: SettingsTabs = SettingsTabs.Common) => {
13
const activeId = useSessionStore((s) => s.activeId);
14
const router = useQueryRoute();
15
const mobile = useIsMobile();
17
return useMemo(() => {
19
return () => router.push(urlJoin('/settings', tab));
21
// use Intercepting Routes on Desktop
22
return () => router.push('/settings/modal', { query: { session: activeId, tab } });
24
}, [mobile, tab, activeId, router]);
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();
33
return useMemo(() => {
34
if (activeId === INBOX_SESSION_ID) {
35
useGlobalStore.setState({
36
sidebarKey: SidebarTabKey.Setting,
41
return () => router.push('/chat/settings');
43
// use Intercepting Routes on Desktop
44
return () => router.push('/chat/settings/modal', { query: { session: activeId, tab } });
46
}, [openSettings, mobile, activeId, router, tab]);
49
export const useInterceptingRoutes = () => {
50
return useContext(InterceptContext);