ConceptPortal-public/rsconcept/frontend/src/pages/OssPage/OssTabs.tsx

88 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-06-04 23:00:22 +03:00
'use client';
import clsx from 'clsx';
import { useEffect } from 'react';
2024-06-04 23:00:22 +03:00
import { useConceptNavigation } from '@/app/Navigation/NavigationContext';
2025-02-07 10:54:47 +03:00
import { Overlay } from '@/components/ui/Container';
import { TabLabel, TabList, TabPanel, Tabs } from '@/components/ui/Tabs';
import { useAppLayoutStore } from '@/stores/appLayout';
2024-06-04 23:00:22 +03:00
import EditorRSForm from './EditorOssCard';
import EditorTermGraph from './EditorOssGraph';
import MenuOssTabs from './MenuOssTabs';
import { OssTabID, useOssEdit } from './OssEditContext';
2024-06-04 23:00:22 +03:00
2025-01-30 19:23:15 +03:00
interface OssTabsProps {
activeTab: OssTabID;
}
2025-01-30 19:23:15 +03:00
function OssTabs({ activeTab }: OssTabsProps) {
const router = useConceptNavigation();
const { schema, navigateTab } = useOssEdit();
2024-06-04 23:00:22 +03:00
const hideFooter = useAppLayoutStore(state => state.hideFooter);
useEffect(() => {
const oldTitle = document.title;
document.title = schema.title;
return () => {
document.title = oldTitle;
};
}, [schema.title]);
2024-06-04 23:00:22 +03:00
useEffect(() => {
hideFooter(activeTab === OssTabID.GRAPH);
}, [activeTab, hideFooter]);
2024-06-04 23:00:22 +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;
}
}
}
navigateTab(index);
}
return (
<Tabs
selectedIndex={activeTab}
onSelect={onSelectTab}
defaultFocus
selectedTabClassName='clr-selected'
className='flex flex-col mx-auto min-w-fit'
>
<Overlay position='top-0 right-1/2 translate-x-1/2' layer='z-sticky'>
<TabList className={clsx('w-fit', 'flex items-stretch', 'border-b-2 border-x-2 divide-x-2', 'bg-prim-200')}>
<MenuOssTabs />
<TabLabel label='Карточка' title={schema.title ?? ''} />
<TabLabel label='Граф' />
</TabList>
</Overlay>
<div className='overflow-x-hidden'>
<TabPanel>
<EditorRSForm />
</TabPanel>
<TabPanel>
<EditorTermGraph />
</TabPanel>
</div>
</Tabs>
2024-06-04 23:00:22 +03:00
);
}
export default OssTabs;