UNPKG

@gravity-ui/uikit

Version:

Gravity UI base styling and components

40 lines (39 loc) 1.37 kB
import * as React from 'react'; const prepareParams = (selectedById) => Object.entries(selectedById).reduce((acc, [id, value]) => { if (value) { acc.push(id); } return acc; }, []); export const useControlledValue = ({ defaultValue = [], value: valueProps, onUpdate, }) => { const [innerValue, setInnerValue] = React.useState(defaultValue); const value = valueProps ?? innerValue; const uncontrolled = !valueProps; const result = React.useMemo(() => { const selectedById = value.reduce((acc, val) => { acc[val] = true; return acc; }, {}); const setSelected = (payload) => { const nextValue = typeof payload === 'function' ? payload(selectedById) : payload; const preparedValue = prepareParams(nextValue); if (uncontrolled) { setInnerValue(preparedValue); } else { onUpdate?.(preparedValue); } }; return { value, selectedById, setSelected, /** * Available only if `uncontrolled` component valiant */ setInnerValue: uncontrolled ? setInnerValue : undefined, }; }, [onUpdate, uncontrolled, value]); return result; }; //# sourceMappingURL=useControlledValue.js.map