Portal/rsconcept/frontend/src/features/oss/pages/oss-page/oss-tabs.tsx

83 lines
2.1 KiB
TypeScript
Raw Normal View History

2024-06-07 20:17:03 +03:00
'use client';
2025-02-15 18:32:37 +03:00
import { useLayoutEffect } from 'react';
2025-01-26 22:24:34 +03:00
2025-03-12 12:12:45 +03:00
import { useConceptNavigation } from '@/app/navigation/navigation-context';
2025-02-12 21:36:03 +03:00
2025-03-12 12:04:23 +03:00
import { TabLabel, TabList, TabPanel, Tabs } from '@/components/tabs';
2025-03-12 11:54:32 +03:00
import { useAppLayoutStore } from '@/stores/app-layout';
2024-06-07 20:17:03 +03:00
2025-03-12 11:54:32 +03:00
import { EditorOssCard } from './editor-oss-card';
import { EditorOssGraph } from './editor-oss-graph';
import { MenuOssTabs } from './menu-oss-tabs';
import { OssTabID, useOssEdit } from './oss-edit-context';
2024-06-07 20:17:03 +03:00
2025-01-30 19:22:49 +03:00
interface OssTabsProps {
activeTab: OssTabID;
}
2025-01-26 22:24:34 +03:00
2025-02-19 23:29:45 +03:00
export function OssTabs({ activeTab }: OssTabsProps) {
2025-01-30 19:22:49 +03:00
const router = useConceptNavigation();
2025-01-26 22:24:34 +03:00
const { schema, navigateTab } = useOssEdit();
2024-06-07 20:17:03 +03:00
const hideFooter = useAppLayoutStore(state => state.hideFooter);
2025-01-26 22:24:34 +03:00
2025-02-15 18:32:37 +03:00
useLayoutEffect(() => {
2025-01-26 22:24:34 +03:00
const oldTitle = document.title;
document.title = schema.title;
return () => {
document.title = oldTitle;
};
}, [schema.title]);
2024-06-07 20:17:03 +03:00
2025-02-15 18:32:37 +03:00
useLayoutEffect(() => {
hideFooter(activeTab === OssTabID.GRAPH);
}, [activeTab, hideFooter]);
2024-06-07 20:17:03 +03:00
function onSelectTab(index: number, last: number, event: Event) {
if (last === index) {
return;
}
if (event.type == 'keydown') {
const kbEvent = event as KeyboardEvent;
if (kbEvent.altKey) {
if (kbEvent.code === 'ArrowLeft') {
router.back();
return;
} else if (kbEvent.code === 'ArrowRight') {
router.forward();
return;
}
}
}
2025-03-14 20:43:30 +03:00
navigateTab(index as OssTabID);
2024-06-07 20:17:03 +03:00
}
return (
2025-01-26 22:24:34 +03:00
<Tabs
selectedIndex={activeTab}
onSelect={onSelectTab}
defaultFocus
2025-04-12 21:47:46 +03:00
selectedTabClassName='cc-selected'
2025-03-07 16:21:18 +03:00
className='relative flex flex-col mx-auto min-w-fit items-center'
2025-01-26 22:24:34 +03:00
>
2025-04-17 14:37:47 +03:00
<TabList className='absolute z-sticky flex border-b-2 border-x-2 divide-x-2 bg-secondary'>
2025-03-07 16:21:18 +03:00
<MenuOssTabs />
2025-01-26 22:24:34 +03:00
2025-03-07 16:21:18 +03:00
<TabLabel label='Карточка' title={schema.title ?? ''} />
<TabLabel label='Граф' />
</TabList>
2025-01-26 22:24:34 +03:00
<div className='overflow-x-hidden'>
<TabPanel>
2025-02-19 23:29:45 +03:00
<EditorOssCard />
2025-01-26 22:24:34 +03:00
</TabPanel>
<TabPanel>
2025-02-19 23:29:45 +03:00
<EditorOssGraph />
2025-01-26 22:24:34 +03:00
</TabPanel>
</div>
</Tabs>
2024-06-07 20:17:03 +03:00
);
}