Skip to content

Commit 415f376

Browse files
feat(onLongPress): allow function as value in delay (#4979)
1 parent e38e8d9 commit 415f376

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

packages/core/onLongPress/index.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ describe('onLongPress', () => {
2424
expect(onLongPressCallback).toHaveBeenCalledTimes(1)
2525
}
2626

27-
async function triggerCallbackWithDelay(isRef: boolean) {
27+
async function triggerCallbackWithDelay(isRef: boolean, delayFunc?: (ev: PointerEvent) => number) {
2828
const onLongPressCallback = vi.fn()
29-
onLongPress(isRef ? element : element.value, onLongPressCallback, { delay: 1000 })
29+
onLongPress(isRef ? element : element.value, onLongPressCallback, { delay: delayFunc ?? 1000 })
3030
// first pointer down
3131
element.value.dispatchEvent(pointerdownEvent)
3232

@@ -199,6 +199,7 @@ describe('onLongPress', () => {
199199
it('should remove event listeners after being stopped', () => stopEventListeners(isRef))
200200
it('should trigger longpress if pointer is moved', () => triggerCallbackWithThreshold(isRef))
201201
it('should trigger onMouseUp when pointer is released', () => triggerOnMouseUp(isRef))
202+
it('should trigger longpress after options.delay ms when options.delay is a function', () => triggerCallbackWithDelay(isRef, () => 1000))
202203
})
203204
}
204205

packages/core/onLongPress/index.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export interface OnLongPressOptions {
1414
*
1515
* @default 500
1616
*/
17-
delay?: number
17+
delay?: number | ((ev: PointerEvent) => number)
1818

1919
modifiers?: OnLongPressModifiers
2020

@@ -64,6 +64,14 @@ export function onLongPress(
6464
hasLongPressed = false
6565
}
6666

67+
function getDelay(ev: PointerEvent): number {
68+
const delay = options?.delay
69+
if (typeof delay === 'function') {
70+
return delay(ev)
71+
}
72+
return delay ?? DEFAULT_DELAY
73+
}
74+
6775
function onRelease(ev: PointerEvent) {
6876
const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed]
6977
clear()
@@ -108,7 +116,7 @@ export function onLongPress(
108116
hasLongPressed = true
109117
handler(ev)
110118
},
111-
options?.delay ?? DEFAULT_DELAY,
119+
getDelay(ev),
112120
)
113121
}
114122

0 commit comments

Comments
 (0)