|
@@ -1,7 +1,6 @@
|
|
|
-import {Layout, Tabs} from 'antd';
|
|
|
+import {Layout} from 'antd';
|
|
|
import {FC} from 'react';
|
|
|
-import css from './index.module.css';
|
|
|
-import {useMenu, useTabActive, useTabItems} from './hooks';
|
|
|
+import {useMenu, useTabItems} from './hooks';
|
|
|
import {Menu, Item} from 'react-contexify';
|
|
|
import {
|
|
|
DndContext,
|
|
@@ -9,16 +8,19 @@ import {
|
|
|
PointerSensor,
|
|
|
closestCenter,
|
|
|
} from '@dnd-kit/core';
|
|
|
-import {restrictToHorizontalAxis} from '@dnd-kit/modifiers';
|
|
|
+import {
|
|
|
+ restrictToFirstScrollableAncestor,
|
|
|
+ restrictToHorizontalAxis,
|
|
|
+} from '@dnd-kit/modifiers';
|
|
|
import {
|
|
|
SortableContext,
|
|
|
horizontalListSortingStrategy,
|
|
|
} from '@dnd-kit/sortable';
|
|
|
-import DraggableItem from './draggable-item';
|
|
|
+import Tabs from './tab';
|
|
|
+import TabPanel from './tab-panel';
|
|
|
|
|
|
const Main: FC = function () {
|
|
|
const [tabs, onDragEnd] = useTabItems();
|
|
|
- const [activeKey, {onChange, onEdit}] = useTabActive();
|
|
|
const {show, onMenuitemClick} = useMenu();
|
|
|
const sensor = useSensor(PointerSensor, {
|
|
|
activationConstraint: {distance: 10},
|
|
@@ -26,50 +28,26 @@ const Main: FC = function () {
|
|
|
|
|
|
return (
|
|
|
<>
|
|
|
- <Layout.Content className='layout-content-custom'>
|
|
|
- <Tabs
|
|
|
- defaultActiveKey='-1'
|
|
|
- data-testid='tab_list'
|
|
|
- size='small'
|
|
|
- hideAdd
|
|
|
- activeKey={activeKey}
|
|
|
- onChange={onChange}
|
|
|
- items={tabs}
|
|
|
- className={css.tabs}
|
|
|
- onEdit={onEdit}
|
|
|
- renderTabBar={function (props, DefaultTab) {
|
|
|
- return (
|
|
|
- <DndContext
|
|
|
- modifiers={[restrictToHorizontalAxis]}
|
|
|
- collisionDetection={closestCenter}
|
|
|
- onDragEnd={onDragEnd}
|
|
|
- sensors={[sensor]}
|
|
|
- autoScroll
|
|
|
- >
|
|
|
- <SortableContext
|
|
|
- items={tabs.map(val => val.key)}
|
|
|
- strategy={horizontalListSortingStrategy}
|
|
|
- >
|
|
|
- <DefaultTab {...props}>
|
|
|
- {function (node) {
|
|
|
- return (
|
|
|
- <DraggableItem
|
|
|
- {...node.props}
|
|
|
- id={node.key!.toString()}
|
|
|
- showContext={show}
|
|
|
- key={node.key}
|
|
|
- >
|
|
|
- {node}
|
|
|
- </DraggableItem>
|
|
|
- );
|
|
|
- }}
|
|
|
- </DefaultTab>
|
|
|
- </SortableContext>
|
|
|
- </DndContext>
|
|
|
- );
|
|
|
- }}
|
|
|
- />
|
|
|
- </Layout.Content>
|
|
|
+ <DndContext
|
|
|
+ modifiers={[
|
|
|
+ restrictToFirstScrollableAncestor,
|
|
|
+ restrictToHorizontalAxis,
|
|
|
+ ]}
|
|
|
+ collisionDetection={closestCenter}
|
|
|
+ onDragEnd={onDragEnd}
|
|
|
+ sensors={[sensor]}
|
|
|
+ autoScroll
|
|
|
+ >
|
|
|
+ <SortableContext
|
|
|
+ items={tabs.map(val => val.key)}
|
|
|
+ strategy={horizontalListSortingStrategy}
|
|
|
+ >
|
|
|
+ <Layout.Content className='layout-content-custom'>
|
|
|
+ <Tabs onTabItemContentMenu={show} />
|
|
|
+ <TabPanel />
|
|
|
+ </Layout.Content>
|
|
|
+ </SortableContext>
|
|
|
+ </DndContext>
|
|
|
|
|
|
<Menu id='content_menu' style={{zIndex: '999999'}}>
|
|
|
<Item id='remove' data-testid='remove' onClick={onMenuitemClick}>
|