mirror of
https://github.com/dream-num/univer.git
synced 2026-09-19 02:18:42 +08:00
fix(sheets-ui): reorder tabs correctly with hidden sheets (#7259)
This commit is contained in:
@@ -54,6 +54,7 @@ import { SheetSkeletonManagerService } from '../../../services/sheet-skeleton-ma
|
||||
import { useActiveWorkbook } from '../../hook';
|
||||
import { SheetBarItem } from './SheetBarItem';
|
||||
import { SheetBarTabsContextMenu } from './SheetBarTabsContextMenu';
|
||||
import { getSheetTabTargetOrder } from './utils/sheet-tab-drag-sort';
|
||||
import { SlideTabBar } from './utils/slide-tab-bar';
|
||||
|
||||
const SCROLL_SHADOW_NONE = '';
|
||||
@@ -507,7 +508,12 @@ export function SheetBarTabs() {
|
||||
});
|
||||
},
|
||||
onSlideEnd: async (event: Event, order: number) => {
|
||||
await commandService.executeCommand(SetWorksheetOrderCommand.id, { order });
|
||||
const targetOrder = getSheetTabTargetOrder(
|
||||
workbook.getSheetOrders(),
|
||||
workbook.getUnhiddenWorksheets(),
|
||||
order
|
||||
);
|
||||
await commandService.executeCommand(SetWorksheetOrderCommand.id, { order: targetOrder });
|
||||
},
|
||||
onChangeTab: (_event: MouseEvent, subUnitId: string) => {
|
||||
// Do not use SetWorksheetActivateCommand, otherwise activation timing may be incorrect.
|
||||
|
||||
+16
-1
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { calculateSheetTabDragSort, reorderItems } from '../sheet-tab-drag-sort';
|
||||
import { calculateSheetTabDragSort, getSheetTabTargetOrder, reorderItems } from '../sheet-tab-drag-sort';
|
||||
|
||||
const layout = [
|
||||
{ id: 'sheet-0', left: 0, width: 40 },
|
||||
@@ -75,4 +75,19 @@ describe('sheet-tab-drag-sort', () => {
|
||||
expect(reorderItems(['a', 'b', 'c', 'd'], 2, 0)).toEqual(['c', 'a', 'b', 'd']);
|
||||
expect(reorderItems(['a', 'b', 'c', 'd'], 2, 2)).toEqual(['a', 'b', 'c', 'd']);
|
||||
});
|
||||
|
||||
it('moves sheet 2 after sheet 6 when sheet 5 is hidden', () => {
|
||||
const sheetOrder = ['sheet-1', 'sheet-2', 'sheet-3', 'sheet-4', 'sheet-5', 'sheet-6'];
|
||||
const visibleSheetIds = ['sheet-1', 'sheet-2', 'sheet-3', 'sheet-4', 'sheet-6'];
|
||||
const targetOrder = getSheetTabTargetOrder(sheetOrder, visibleSheetIds, 4);
|
||||
|
||||
expect(reorderItems(sheetOrder, 1, targetOrder)).toEqual([
|
||||
'sheet-1',
|
||||
'sheet-3',
|
||||
'sheet-4',
|
||||
'sheet-5',
|
||||
'sheet-6',
|
||||
'sheet-2',
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -88,3 +88,7 @@ export function reorderItems<T>(items: T[], fromIndex: number, toIndex: number):
|
||||
nextItems.splice(toIndex, 0, movedItem);
|
||||
return nextItems;
|
||||
}
|
||||
|
||||
export function getSheetTabTargetOrder(sheetOrder: readonly string[], visibleSheetIds: string[], targetIndex: number): number {
|
||||
return sheetOrder.indexOf(visibleSheetIds[targetIndex]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user