chore(input): rollback PR3533 (#3720)

This commit is contained in:
աӄա 2024-09-06 10:13:18 +08:00 committed by GitHub
parent 123b7fbc9f
commit 485b8653de
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 2 additions and 60 deletions

View File

@ -1,5 +0,0 @@
---
"@nextui-org/input": patch
---
syncs changes to ref value to internal (state) value (#3024, #3436)

View File

@ -126,26 +126,6 @@ describe("Input", () => {
expect(ref.current?.value)?.toBe(value);
});
it("setting ref should sync the internal value", () => {
const ref = React.createRef<HTMLInputElement>();
const {container} = render(<Input ref={ref} type="text" />);
if (!ref.current) {
throw new Error("ref is null");
}
ref.current!.value = "value";
const input = container.querySelector("input")!;
input.focus();
const internalValue = input.value;
expect(ref.current?.value)?.toBe(internalValue);
});
it("should clear the value and onClear is triggered", async () => {
const onClear = jest.fn();

View File

@ -15,7 +15,7 @@ import {useDOMRef, filterDOMProps} from "@nextui-org/react-utils";
import {useFocusWithin, useHover, usePress} from "@react-aria/interactions";
import {clsx, dataAttr, isEmpty, objectToDeps, safeAriaLabel, warn} from "@nextui-org/shared-utils";
import {useControlledState} from "@react-stately/utils";
import {useMemo, Ref, useCallback, useState, useImperativeHandle, useRef} from "react";
import {useMemo, Ref, useCallback, useState} from "react";
import {chain, mergeProps} from "@react-aria/utils";
import {useTextField} from "@react-aria/textfield";
@ -131,40 +131,7 @@ export function useInput<T extends HTMLInputElement | HTMLTextAreaElement = HTML
const disableAnimation =
originalProps.disableAnimation ?? globalContext?.disableAnimation ?? false;
const domRef = useRef<T>(null);
let proxy: T | undefined = undefined;
useImperativeHandle(
ref,
() => {
if (proxy === undefined) {
proxy = new Proxy(domRef.current!, {
get(target, prop) {
const value = target[prop];
if (value instanceof Function) {
return value.bind(target);
}
return value;
},
set(target, prop, value) {
target[prop] = value;
if (prop === "value") {
setInputValue(value);
}
return true;
},
});
}
return proxy;
},
[domRef.current],
);
const domRef = useDOMRef<T>(ref);
const baseDomRef = useDOMRef<HTMLDivElement>(baseRef);
const inputWrapperRef = useDOMRef<HTMLDivElement>(wrapperRef);