feat(react): add generic type parameter to useIonModal and useIonPopover#31182
feat(react): add generic type parameter to useIonModal and useIonPopover#31182EduardF1 wants to merge 1 commit into
Conversation
Add overloaded function signatures to useIonModal and useIonPopover so that TypeScript can infer componentProps type from the component argument. When a React ComponentClass or FC is provided, componentProps is typed as that component's props type (P). When a JSX.Element is passed, any is used to preserve existing behaviour. The default for P remains any to avoid breaking changes. Resolves ionic-team#28680 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
@EduardF1 is attempting to deploy a commit to the Ionic Team on Vercel. A member of the Team first needs to authorize it. |
|
It looks like the only failing check here is the Vercel preview deployment ( All other current CI checks are passing. A maintainer can re-run/authorize the Vercel deployment if needed, or treat this preview check as non-blocking / not required for merge. |
|
Quick follow-up: I do not see any maintainer reply yet. From my side this still looks ready apart from the Vercel authorization gate, which external contributors cannot unblock directly. Happy to address any code feedback once someone has a chance to review. |
Summary
Adds generic type parameters to
useIonModalanduseIonPopoverso TypeScript can infer the correct type forcomponentPropsbased on the component argument.Motivation
Currently both hooks accept
componentProps?: any, providing no type safety. This causes undetected typos in prop names and incorrect types at compile time.Changes
useIonModalanduseIonPopovernow have two overloaded signatures:React.ComponentClass<T>orReact.FC<T>is passed,componentPropsis typed asTJSX.Elementis passed,componentPropsremainsany(component: ReactComponentOrElement, componentProps?: any)for backward compatibility// TODO(FW-2959): typescomment is removed as this resolves that TODORecord<string, any>to preserve backward compatibility when no generic is specifiedTesting
No runtime behavior changes — this is a type-only change. Existing tests should continue to pass.
Closes #28680