@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
50 lines (49 loc) • 1.61 kB
JavaScript
"use client";
import { useCallback, useContext, useEffect, useLayoutEffect as reactUseLayoutEffect, useRef } from 'react';
import InputMaskedContext from "../InputMaskedContext.js";
import TextMask from "../TextMask.js";
import { getSoftKeyboardAttributes } from "../InputMaskedUtils.js";
import { useMask } from "./useMask.js";
import { useMaskParams } from "./useMaskParams.js";
import { createNumberMask } from "./useNumberMask.js";
import { jsx as _jsx } from "react/jsx-runtime";
const useLayoutEffect = typeof window === 'undefined' ? useEffect : reactUseLayoutEffect;
export const useInputElement = () => {
const {
props
} = useContext(InputMaskedContext);
const {
ref: refProp,
allowOverflow,
overwriteMode
} = props;
const mask = useMask();
const {
showMask
} = useMaskParams();
const isFn = typeof refProp === 'function';
const refHook = useRef(null);
const ref = !isFn && refProp || refHook;
useLayoutEffect(() => {
if (isFn) {
refProp?.(ref.current);
}
}, [refProp, isFn, ref]);
const inputElementRef = useRef(_jsx("input", {
ref: ref
}));
return useCallback((params, inputRef) => {
inputRef.current = ref.current;
return _jsx(TextMask, {
inputRef: ref,
inputElement: inputElementRef.current,
mask: mask || createNumberMask(),
showMask: showMask,
allowOverflow: allowOverflow,
overwriteMode: overwriteMode,
...(getSoftKeyboardAttributes(mask) || {}),
...params
});
}, [allowOverflow, mask, overwriteMode, ref, showMask]);
};
//# sourceMappingURL=useInputElement.js.map