修复素材键盘选择来源判定

根据 click detail 识别键盘激活并提前清理残留指针类型

新增触摸手势后键盘选择的回归测试
This commit is contained in:
2026-07-27 16:32:52 +08:00
parent 21143f9ff5
commit df8d1320f5
2 changed files with 20 additions and 2 deletions
@@ -227,6 +227,22 @@ describe('ImageCanvasAssetRowView', () => {
);
});
it('uses click detail to recognize keyboard selection after a stale touch gesture', () => {
const toggleAssetSelected = vi.fn();
renderAssetRow({ isAssetSelectionMode: true, toggleAssetSelected });
const primaryButton = screen.getByRole('button', {
name: '选择素材账号素材A',
});
fireEvent.pointerDown(primaryButton, { pointerType: 'touch' });
fireEvent.click(primaryButton, { detail: 0 });
expect(toggleAssetSelected).toHaveBeenCalledWith(
'asset-1',
expect.objectContaining({ pointerKind: 'keyboard' }),
);
});
it('renders rename input and commits with Enter', () => {
const commitAssetRename = vi.fn();
renderAssetRow({
@@ -109,6 +109,9 @@ export function ImageCanvasAssetRowView({
const selectAssetFromEvent = useCallback(
(event: ReactMouseEvent<HTMLElement>) => {
const pointerKind =
event.detail === 0 ? 'keyboard' : selectionPointerKindRef.current;
selectionPointerKindRef.current = 'keyboard';
if (
!isAssetSelectionMode ||
isUploadingAsset ||
@@ -123,9 +126,8 @@ export function ImageCanvasAssetRowView({
shiftKey: event.shiftKey,
ctrlKey: event.ctrlKey,
metaKey: event.metaKey,
pointerKind: selectionPointerKindRef.current,
pointerKind,
});
selectionPointerKindRef.current = 'keyboard';
},
[
asset.id,