diff --git a/src/components/image-editor/useImageCanvasAssetLibrary.test.tsx b/src/components/image-editor/useImageCanvasAssetLibrary.test.tsx index 2888206db..3642649b6 100644 --- a/src/components/image-editor/useImageCanvasAssetLibrary.test.tsx +++ b/src/components/image-editor/useImageCanvasAssetLibrary.test.tsx @@ -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(); + + 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: [ diff --git a/src/components/image-editor/useImageCanvasAssetLibrary.ts b/src/components/image-editor/useImageCanvasAssetLibrary.ts index ad7db3236..63f02a52c 100644 --- a/src/components/image-editor/useImageCanvasAssetLibrary.ts +++ b/src/components/image-editor/useImageCanvasAssetLibrary.ts @@ -500,6 +500,7 @@ export function useImageCanvasAssetLibrary({ ); const toggleAllAssetsSelected = useCallback((visibleAssetIds: string[]) => { + assetSelectionAnchorRef.current = null; setSelectedAssetIds((currentIds) => resolveVisibleAssetSelectionToggle({ selectedAssetIds: currentIds,