Source: react/hook/useInputImperativeHandle.js

import { useImperativeHandle } from "@/import/react";

/**
 * Add getter functionality for id, to enable both a function call as a getter.
 * @param obj
 * @returns {*}
 */
const addIdGetter = (obj) =>
  new Proxy(obj, {
    get: function (target, prop, receiver) {
      if (prop === "id") {
        return obj.id();
      }
      return Reflect.get(obj, prop, receiver);
    },
  });

export default function useInputImperativeHandle(parentRef, inputRef) {
  useImperativeHandle(
    parentRef,
    () => {
      return addIdGetter({
        id(itemId) {
          if (itemId) {
            return inputRef.current?.get(itemId)?.id;
          }
          return inputRef.current?.id;
        },
        focus(itemId) {
          if (typeof itemId === "string") {
            inputRef.current?.get(itemId)?.focus?.();
          }
          inputRef.current?.focus?.(itemId);
        },
        scrollIntoView(itemId) {
          if (typeof itemId === "string") {
            inputRef.current?.get(itemId)?.scrollIntoView?.();
          }
          inputRef.current?.scrollIntoView?.();
        },
      });
    },
    []
  );
}