@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
34 lines (33 loc) • 1.18 kB
JavaScript
"use client";
import { useCallback, useEffect, useReducer, useRef } from 'react';
export function useSegmentedFieldValues({
inputs,
defaultValues
}) {
const valuesRef = useRef(defaultValues ? defaultValues : createDefaultValues(inputs));
const [, forceUpdate] = useReducer(() => ({}), {});
const previousDefaultValuesRef = useRef(defaultValues);
useEffect(() => {
if (defaultValues && defaultValues !== previousDefaultValuesRef.current) {
const previousValues = previousDefaultValuesRef.current;
const hasChanges = !previousValues || Object.keys(defaultValues).some(key => previousValues[key] !== defaultValues[key]);
if (hasChanges) {
valuesRef.current = defaultValues;
forceUpdate();
}
previousDefaultValuesRef.current = defaultValues;
}
}, [defaultValues]);
const onChange = useCallback(updatedValues => {
valuesRef.current = updatedValues;
forceUpdate();
}, []);
return [valuesRef.current, onChange];
}
function createDefaultValues(inputs) {
return inputs.reduce((values, input) => {
values[input.id] = '';
return values;
}, {});
}
//# sourceMappingURL=useSegmentedFieldValues.js.map