-
Notifications
You must be signed in to change notification settings - Fork 177
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
TypeScript: convert HistoryProvider
#12674
Conversation
Plugin builds for 12693f6 are ready 🛎️!
|
Size Change: +271 B (0%) Total Size: 2.72 MB
ℹ️ View Unchanged
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A bunch of comments.
@@ -31,7 +31,10 @@ import type { DependencyList } from 'react'; | |||
* @param [deps] The optional callback dependencies. | |||
* @return The memoized batching function. | |||
*/ | |||
function useBatchingCallback<T extends (...args: unknown[]) => unknown>( | |||
function useBatchingCallback< | |||
T extends (...args: [event: KeyboardEvent]) => void |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't it just always return type T
? Wouldn't that work?
function useBatchingCallback<T extends (...args: unknown[]) => void>(
callback: T,
deps: DependencyList
): T {
This pull request introduces 1 alert when merging 9f9f11f into 00df91d - view on LGTM.com new alerts:
Heads-up: LGTM.com's PR analysis will be disabled on the 5th of December, and LGTM.com will be shut down ⏻ completely on the 16th of December 2022. Please enable GitHub code scanning, which uses the same CodeQL engine ⚙️ that powers LGTM.com. For more information, please check out our post on the GitHub blog. |
? () => () => undefined | ||
: usePreventWindowUnload; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is this needed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Are you asking why is the change {}
to undefined
needed?
Since {}
is not allowed by the linting rules then using undefined
instead. Originally I ignored the eslint error but Morten had the idea of using undefined
instead. It doesn't really change anything.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great, let's get this one in!
@@ -31,7 +31,10 @@ import type { DependencyList } from 'react'; | |||
* @param [deps] The optional callback dependencies. | |||
* @return The memoized batching function. | |||
*/ | |||
function useBatchingCallback<T extends (...args: unknown[]) => unknown>( | |||
function useBatchingCallback< | |||
T extends (...args: [event: KeyboardEvent]) => void |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm, not sure why that doesn't work, but this does. I don't know if we ever need callbacks with more than one argument, but if we do, this supports up to three args (and it's butt-ugly):
function useBatchingCallback<T>(
callback: (arg: T) => void,
deps: DependencyList
): (arg: T) => void;
function useBatchingCallback<T, U>(
callback: (arg1: T, arg2: U) => void,
deps: DependencyList
): (arg1: T, arg2: U) => void;
function useBatchingCallback<T, U, V>(
callback: (arg1: T, arg2: U, arg3: V) => void,
deps: DependencyList
): (arg1: T, arg2: U, arg3: V) => void;
function useBatchingCallback<T extends (...args: unknown[]) => void>(
callback: T,
deps: DependencyList
) {
return useCallback(
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- Just passing through
(...args) => batchedUpdates(() => callback(...args)),
// eslint-disable-next-line react-hooks/exhaustive-deps -- Pass through provided deps.
deps
);
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me
Context
Converts
historyProvider
into TypeScriptSummary
Relevant Technical Choices
Ignoresdesign-system
import for now. Is there a better option?To-do
User-facing changes
Testing Instructions
This PR can be tested by following these steps:
Reviews
Does this PR have a security-related impact?
Does this PR change what data or activity we track or use?
Does this PR have a legal-related impact?
Checklist
Type: XYZ
label to the PRFixes #12666