UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

36 lines (35 loc) 1.1 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true, }); Object.defineProperty(exports, 'useControlledState', { enumerable: true, get: function () { return useControlledState; }, }); const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard'); const _react = /*#__PURE__*/ _interop_require_wildcard._(require('react')); const _useLatestRef = require('./useLatestRef.js'); const useControlledState = ( initialValue, controlledState, setControlledState, ) => { let [uncontrolledState, setUncontrolledState] = _react.useState(initialValue); let state = _react.useMemo( () => (void 0 !== controlledState ? controlledState : uncontrolledState), [controlledState, uncontrolledState], ); let oldState = (0, _useLatestRef.useLatestRef)(state); let setState = _react.useCallback( (value) => { if (value === oldState.current) return; oldState.current = value; setUncontrolledState(value); setControlledState?.(value); }, [oldState, setControlledState], ); return [state, setState]; };