fix(input-otp): autofocus (#4296)

* fix: autofocus the input-otp when auto-focus prop is passed

* fix: adding marcus' suggestions
This commit is contained in:
Maharshi Alpesh 2024-12-09 21:26:53 +05:30 committed by GitHub
parent 11eae5cc80
commit 1485eca48f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 28 additions and 0 deletions

View File

@ -0,0 +1,5 @@
---
"@nextui-org/input-otp": patch
---
Fixing the autofocus functionality in input-otp component(#4250)

View File

@ -303,6 +303,12 @@ You can customize the styles of the `InputOtp` component using the `classNames`
description: "Allows to set custom class names for the Input slots.",
default: "-"
},
{
attribute: "autoFocus",
type: "boolean",
description: "Whether the element should receive focus on render.",
default: "false"
},
{
attribute: "textAlign",
type: "left | center | right",

View File

@ -168,6 +168,21 @@ describe("InputOtp Component", () => {
expect(onComplete).toHaveBeenCalledTimes(2);
expect(onComplete).toHaveBeenCalledWith("1234");
});
it("should autofocus when autofocus prop is passed.", () => {
// eslint-disable-next-line jsx-a11y/no-autofocus
render(<InputOtp autoFocus length={4} />);
const segments = screen.getAllByRole("presentation");
expect(segments[0]).toHaveAttribute("data-focus", "true");
});
it("should not autofocus when autofocus prop is not passed.", () => {
render(<InputOtp length={4} />);
const segments = screen.getAllByRole("presentation");
expect(segments[0]).not.toHaveAttribute("data-focus", "true");
});
});
describe("InputOtp with react-hook-form", () => {

View File

@ -230,6 +230,7 @@ export function useInputOtp(originalProps: UseInputOtpProps) {
ref: inputRef,
name: name,
value: value,
autoFocus,
onChange: setValue,
onBlur: chain(focusProps.onBlur, props?.onBlur),
onComplete: onComplete,
@ -254,6 +255,7 @@ export function useInputOtp(originalProps: UseInputOtpProps) {
setValue,
props.onBlur,
onComplete,
autoFocus,
],
);