mirror of
https://github.com/ant-design/ant-design.git
synced 2024-12-19 03:54:28 +08:00
0e9ac35e3c
Some checks are pending
Publish Any Commit / build (push) Waiting to run
🔀 Sync mirror to Gitee / mirror (push) Waiting to run
✅ test / lint (push) Waiting to run
✅ test / test-react-legacy (16, 1/2) (push) Waiting to run
✅ test / test-react-legacy (16, 2/2) (push) Waiting to run
✅ test / test-react-legacy (17, 1/2) (push) Waiting to run
✅ test / test-react-legacy (17, 2/2) (push) Waiting to run
✅ test / test-node (push) Waiting to run
✅ test / test-react-latest (dom, 1/2) (push) Waiting to run
✅ test / test-react-latest (dom, 2/2) (push) Waiting to run
✅ test / test-react-latest-dist (dist, 1/2) (push) Blocked by required conditions
✅ test / test-react-latest-dist (dist, 2/2) (push) Blocked by required conditions
✅ test / test-react-latest-dist (dist-min, 1/2) (push) Blocked by required conditions
✅ test / test-react-latest-dist (dist-min, 2/2) (push) Blocked by required conditions
✅ test / test-coverage (push) Blocked by required conditions
✅ test / build (push) Waiting to run
✅ test / test lib/es module (es, 1/2) (push) Waiting to run
✅ test / test lib/es module (es, 2/2) (push) Waiting to run
✅ test / test lib/es module (lib, 1/2) (push) Waiting to run
✅ test / test lib/es module (lib, 2/2) (push) Waiting to run
👁️ Visual Regression Persist Start / test image (push) Waiting to run
* fix: input work with Upload * test: update snapshot
38 lines
955 B
TypeScript
38 lines
955 B
TypeScript
import React from 'react';
|
|
import raf from 'rc-util/lib/raf';
|
|
|
|
/**
|
|
* When click on the label,
|
|
* the event will be stopped to prevent the label from being clicked twice.
|
|
* label click -> input click -> label click again
|
|
*/
|
|
export default function useBubbleLock(
|
|
onOriginInputClick?: React.MouseEventHandler<HTMLInputElement>,
|
|
) {
|
|
const labelClickLockRef = React.useRef<number | null>(null);
|
|
|
|
const clearLock = () => {
|
|
raf.cancel(labelClickLockRef.current!);
|
|
labelClickLockRef.current = null;
|
|
};
|
|
|
|
const onLabelClick: React.MouseEventHandler<HTMLLabelElement> = () => {
|
|
clearLock();
|
|
|
|
labelClickLockRef.current = raf(() => {
|
|
labelClickLockRef.current = null;
|
|
});
|
|
};
|
|
|
|
const onInputClick: React.MouseEventHandler<HTMLInputElement> = (e) => {
|
|
if (labelClickLockRef.current) {
|
|
e.stopPropagation();
|
|
clearLock();
|
|
}
|
|
|
|
onOriginInputClick?.(e);
|
|
};
|
|
|
|
return [onLabelClick, onInputClick] as const;
|
|
}
|