清理素材批量选择锚点

全选或取消全选前清空上次单项选择锚点

覆盖全选清空后 Shift 点击不扩展旧范围的回归场景
This commit is contained in:
2026-07-27 16:43:16 +08:00
parent f7a191b3d9
commit 35cb6888f9
2 changed files with 37 additions and 1 deletions
@@ -1,6 +1,12 @@
/* @vitest-environment jsdom */
import { act, render, screen, waitFor } from '@testing-library/react';
import {
act,
fireEvent,
render,
screen,
waitFor,
} from '@testing-library/react';
import { useRef } from 'react';
import { beforeEach, describe, expect, it, vi } from 'vitest';
@@ -483,6 +489,35 @@ describe('useImageCanvasAssetLibrary', () => {
expect(screen.getByTestId('selected-assets').textContent).toBe('');
});
it('clears the range anchor when toggling all visible assets', async () => {
loadEditorAssetLibraryMock.mockResolvedValueOnce({
folders: [
{
folderId: 'project',
label: '项目素材',
sortOrder: 0,
collapsed: false,
systemDefault: true,
},
],
assets: [
createAssetSnapshot({ assetId: 'asset-a', label: '素材A' }),
createAssetSnapshot({ assetId: 'asset-b', label: '素材B' }),
createAssetSnapshot({ assetId: 'asset-c', label: '素材C' }),
],
});
render(<AssetLibraryHarness />);
fireEvent.click(await screen.findByRole('button', { name: '素材A' }));
fireEvent.click(screen.getByRole('button', { name: 'toggle all' }));
fireEvent.click(screen.getByRole('button', { name: 'toggle all' }));
fireEvent.click(screen.getByRole('button', { name: '素材C' }), {
shiftKey: true,
});
expect(screen.getByTestId('selected-assets').textContent).toBe('asset-c');
});
it('submits a generated asset to showcase review', async () => {
loadEditorAssetLibraryMock.mockResolvedValueOnce({
folders: [
@@ -500,6 +500,7 @@ export function useImageCanvasAssetLibrary({
);
const toggleAllAssetsSelected = useCallback((visibleAssetIds: string[]) => {
assetSelectionAnchorRef.current = null;
setSelectedAssetIds((currentIds) =>
resolveVisibleAssetSelectionToggle({
selectedAssetIds: currentIds,