From f432c660d73baafaa38bc073329026b3035dffcf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 09:06:55 +0000 Subject: [PATCH 1/3] Initial plan From 08dad0d30e2fa0e0b68707c6a948bc0400df15d0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 16 Nov 2025 09:17:24 +0000 Subject: [PATCH 2/3] fix: useLongPress in Tauri apps on macOS Co-authored-by: meet-student <59312002+meet-student@users.noreply.github.com> --- packages/hooks/gulpfile.js | 2 +- packages/hooks/src/useAntdTable/index.tsx | 8 +- .../src/useBoolean/__tests__/index.spec.ts | 10 +-- .../hooks/src/useControllableValue/index.ts | 4 +- .../useCookieState/__tests__/index.spec.tsx | 2 +- .../hooks/src/useCountDown/demo/demo3.tsx | 2 +- .../hooks/src/useEventEmitter/demo/demo1.tsx | 32 ++++---- .../hooks/src/useFullscreen/demo/demo2.tsx | 2 +- .../useInfiniteScroll/__tests__/index.spec.ts | 2 +- packages/hooks/src/useInterval/demo/demo2.tsx | 5 +- .../src/useLongPress/__tests__/index.spec.ts | 78 +++++++++++++++++-- packages/hooks/src/useLongPress/index.ts | 16 ++++ .../hooks/src/useMap/__tests__/index.spec.ts | 2 +- packages/hooks/src/useMount/index.ts | 2 +- .../hooks/src/useRafInterval/demo/demo2.tsx | 5 +- .../src/useRafTimeout/__tests__/node.spec.ts | 4 +- .../hooks/src/useRafTimeout/demo/demo2.tsx | 2 +- .../useRequest/doc/cache/demo/cacheKey.tsx | 2 +- .../useRequest/doc/cache/demo/setCache.tsx | 2 +- packages/hooks/src/useRequest/src/Fetch.ts | 6 +- .../useRequest/src/plugins/useCachePlugin.ts | 4 +- .../src/useRequest/src/useRequestImplement.ts | 2 +- .../hooks/src/useRequest/src/utils/cache.ts | 2 +- .../useTextSelection/__tests__/index.spec.ts | 4 +- packages/hooks/src/useTimeout/demo/demo2.tsx | 2 +- public/useExternal/test-external-script.js | 4 +- 26 files changed, 139 insertions(+), 67 deletions(-) diff --git a/packages/hooks/gulpfile.js b/packages/hooks/gulpfile.js index 6c3a57cad9..9664d6208a 100644 --- a/packages/hooks/gulpfile.js +++ b/packages/hooks/gulpfile.js @@ -53,7 +53,7 @@ async function genMetaData() { return metadata; } -gulp.task('metadata', async function () { +gulp.task('metadata', async () => { const metadata = await genMetaData(); await fse.writeJson('metadata.json', metadata, { spaces: 2 }); }); diff --git a/packages/hooks/src/useAntdTable/index.tsx b/packages/hooks/src/useAntdTable/index.tsx index b6341cea9d..02a033f381 100644 --- a/packages/hooks/src/useAntdTable/index.tsx +++ b/packages/hooks/src/useAntdTable/index.tsx @@ -137,7 +137,7 @@ const useAntdTable = ( current: 1, }; if (!form) { - // @ts-ignore + // @ts-expect-error run(pagination); return; } @@ -148,7 +148,7 @@ const useAntdTable = ( ...values, }; - // @ts-ignore + // @ts-expect-error run(pagination, values, { allFormData: allFormDataRef.current, type, @@ -185,7 +185,7 @@ const useAntdTable = ( const onTableChange = (pagination: any, filters: any, sorter: any, extra: any) => { const [oldPaginationParams, ...restParams] = params || []; run( - // @ts-ignore + // @ts-expect-error { ...oldPaginationParams, current: pagination.current, @@ -204,7 +204,7 @@ const useAntdTable = ( if (params.length > 0) { allFormDataRef.current = cacheFormTableData?.allFormData || {}; restoreForm(); - // @ts-ignore + // @ts-expect-error run(...params); return; } diff --git a/packages/hooks/src/useBoolean/__tests__/index.spec.ts b/packages/hooks/src/useBoolean/__tests__/index.spec.ts index 2498d3fa62..ac6a199819 100644 --- a/packages/hooks/src/useBoolean/__tests__/index.spec.ts +++ b/packages/hooks/src/useBoolean/__tests__/index.spec.ts @@ -33,12 +33,12 @@ describe('useBoolean', () => { }); expect(result.current[0]).toBe(true); act(() => { - // @ts-ignore + // @ts-expect-error result.current[1].set(0); }); expect(result.current[0]).toBe(false); act(() => { - // @ts-ignore + // @ts-expect-error result.current[1].set('a'); }); expect(result.current[0]).toBe(true); @@ -49,13 +49,13 @@ describe('useBoolean', () => { expect(hook1.result.current[0]).toBe(true); const hook2 = setUp(); expect(hook2.result.current[0]).toBe(false); - // @ts-ignore + // @ts-expect-error const hook3 = setUp(0); expect(hook3.result.current[0]).toBe(false); - // @ts-ignore + // @ts-expect-error const hook4 = setUp(''); expect(hook4.result.current[0]).toBe(false); - // @ts-ignore + // @ts-expect-error const hook5 = setUp('hello'); expect(hook5.result.current[0]).toBe(true); }); diff --git a/packages/hooks/src/useControllableValue/index.ts b/packages/hooks/src/useControllableValue/index.ts index 446dd3de51..5e4961e96b 100644 --- a/packages/hooks/src/useControllableValue/index.ts +++ b/packages/hooks/src/useControllableValue/index.ts @@ -37,13 +37,13 @@ function useControllableValue(defaultProps?: Props, options: Options } = options; const value = props[valuePropName] as T; - const isControlled = Object.prototype.hasOwnProperty.call(props, valuePropName); + const isControlled = Object.hasOwn(props, valuePropName); const initialValue = useMemo(() => { if (isControlled) { return value; } - if (Object.prototype.hasOwnProperty.call(props, defaultValuePropName)) { + if (Object.hasOwn(props, defaultValuePropName)) { return props[defaultValuePropName]; } return defaultValue; diff --git a/packages/hooks/src/useCookieState/__tests__/index.spec.tsx b/packages/hooks/src/useCookieState/__tests__/index.spec.tsx index 431c1c5bb9..f5a85333b3 100644 --- a/packages/hooks/src/useCookieState/__tests__/index.spec.tsx +++ b/packages/hooks/src/useCookieState/__tests__/index.spec.tsx @@ -52,7 +52,7 @@ describe('useCookieState', () => { expect(anotherHook.result.current.state).toBe('false'); expect(Cookies.get(COOKIE)).toBeUndefined(); act(() => { - // @ts-ignore + // @ts-expect-error hook.result.current.setState(); }); expect(hook.result.current.state).toBeUndefined(); diff --git a/packages/hooks/src/useCountDown/demo/demo3.tsx b/packages/hooks/src/useCountDown/demo/demo3.tsx index 4b503a1cb2..f7a41e97a0 100644 --- a/packages/hooks/src/useCountDown/demo/demo3.tsx +++ b/packages/hooks/src/useCountDown/demo/demo3.tsx @@ -6,7 +6,7 @@ * desc.zh-CN: 剩余时间毫秒数的倒计时 */ -import React from 'react'; +import type React from 'react'; import { useCountDown } from 'ahooks'; const App: React.FC = () => { diff --git a/packages/hooks/src/useEventEmitter/demo/demo1.tsx b/packages/hooks/src/useEventEmitter/demo/demo1.tsx index aadf732cf6..4bd26aaecb 100644 --- a/packages/hooks/src/useEventEmitter/demo/demo1.tsx +++ b/packages/hooks/src/useEventEmitter/demo/demo1.tsx @@ -8,29 +8,27 @@ import { useRef, type FC } from 'react'; import { useEventEmitter } from 'ahooks'; -import { EventEmitter } from 'ahooks/lib/useEventEmitter'; +import type { EventEmitter } from 'ahooks/lib/useEventEmitter'; const MessageBox: FC<{ focus$: EventEmitter; -}> = function (props) { - return ( -
-

You received a message

- -
- ); -}; +}> = (props) => ( +
+

You received a message

+ +
+); const InputBox: FC<{ focus$: EventEmitter; -}> = function (props) { +}> = (props) => { const inputRef = useRef(null); props.focus$.useSubscription(() => { inputRef.current?.focus(); diff --git a/packages/hooks/src/useFullscreen/demo/demo2.tsx b/packages/hooks/src/useFullscreen/demo/demo2.tsx index 398b9badd7..adcca9a1c2 100644 --- a/packages/hooks/src/useFullscreen/demo/demo2.tsx +++ b/packages/hooks/src/useFullscreen/demo/demo2.tsx @@ -5,7 +5,7 @@ */ import { useFullscreen } from 'ahooks'; -// @ts-ignore - Image import +// @ts-expect-error - Image import import img from './react-hooks.jpg'; export default () => { diff --git a/packages/hooks/src/useInfiniteScroll/__tests__/index.spec.ts b/packages/hooks/src/useInfiniteScroll/__tests__/index.spec.ts index ca6ec5763b..5863fc4751 100644 --- a/packages/hooks/src/useInfiniteScroll/__tests__/index.spec.ts +++ b/packages/hooks/src/useInfiniteScroll/__tests__/index.spec.ts @@ -391,7 +391,7 @@ describe('useInfiniteScroll', () => { }); test('list can be null or undefined', async () => { - // @ts-ignore + // @ts-expect-error const { result } = setup(async () => { await sleep(1000); count++; diff --git a/packages/hooks/src/useInterval/demo/demo2.tsx b/packages/hooks/src/useInterval/demo/demo2.tsx index cb528341c9..3f7cc62c2d 100644 --- a/packages/hooks/src/useInterval/demo/demo2.tsx +++ b/packages/hooks/src/useInterval/demo/demo2.tsx @@ -21,10 +21,7 @@ export default () => {

count: {count}

interval: {interval}

- -
-); +}> = function (props) { + return ( +
+

You received a message

+ +
+ ); +}; const InputBox: FC<{ focus$: EventEmitter; -}> = (props) => { +}> = function (props) { const inputRef = useRef(null); props.focus$.useSubscription(() => { inputRef.current?.focus(); diff --git a/packages/hooks/src/useFullscreen/demo/demo2.tsx b/packages/hooks/src/useFullscreen/demo/demo2.tsx index adcca9a1c2..398b9badd7 100644 --- a/packages/hooks/src/useFullscreen/demo/demo2.tsx +++ b/packages/hooks/src/useFullscreen/demo/demo2.tsx @@ -5,7 +5,7 @@ */ import { useFullscreen } from 'ahooks'; -// @ts-expect-error - Image import +// @ts-ignore - Image import import img from './react-hooks.jpg'; export default () => { diff --git a/packages/hooks/src/useInfiniteScroll/__tests__/index.spec.ts b/packages/hooks/src/useInfiniteScroll/__tests__/index.spec.ts index 5863fc4751..ca6ec5763b 100644 --- a/packages/hooks/src/useInfiniteScroll/__tests__/index.spec.ts +++ b/packages/hooks/src/useInfiniteScroll/__tests__/index.spec.ts @@ -391,7 +391,7 @@ describe('useInfiniteScroll', () => { }); test('list can be null or undefined', async () => { - // @ts-expect-error + // @ts-ignore const { result } = setup(async () => { await sleep(1000); count++; diff --git a/packages/hooks/src/useInterval/demo/demo2.tsx b/packages/hooks/src/useInterval/demo/demo2.tsx index 3f7cc62c2d..cb528341c9 100644 --- a/packages/hooks/src/useInterval/demo/demo2.tsx +++ b/packages/hooks/src/useInterval/demo/demo2.tsx @@ -21,7 +21,10 @@ export default () => {

count: {count}

interval: {interval}

-