-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Description
Provide a general summary of the issue here
Consider the following use of react-stately useOverlayTriggerState
:
function MyDialog(): React.ReactNode {
let { open } = useOverlayTriggerState({}); // lint error here
return (<div><button onPress={open}/></div>);
}
Typescript-eslint when configured with recommended typechecked config detects a potential error - unbound -method.
🤔 Expected Behavior?
No lint error.
😯 Current Behavior
Lint error unbound-method.
💁 Possible Solution
This is because the way the interface is written is akin to a class method:
export interface OverlayTriggerState {
readonly isOpen: boolean;
setOpen(isOpen: boolean): void;
open(): void;
close(): void;
toggle(): void;
}
In fact, if we imagine that useOverlayTriggerState
indeed return some class instance, say: new OverlayTriggerStateImpl
, destructuring the result in let { open } = useOverlayTriggerState({})
would indeed be erroneous as this
wouldn't be properly bound.
Granted, the actual implementation isn't a class and this
doesn't really matter. To correct this however, we should be writing the interface as:
export interface OverlayTriggerState {
readonly isOpen: boolean;
setOpen: (isOpen: boolean) => void;
open: () => void;
close: () => void;
toggle: () => void;
}
If it were written that way, then the unbound-method lint correctly passes.
🔦 Context
No response
🖥️ Steps to Reproduce
see summary
Version
@react-stately/overlays 3.6.18
What browsers are you seeing the problem on?
Other
If other, please specify.
No response
What operating system are you using?
n/a
🧢 Your Company/Team
No response
🕷 Tracking Issue
No response