@razorpay/blade
Version:
The Design System that powers Razorpay
102 lines (99 loc) • 3.49 kB
JavaScript
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
import React__default from 'react';
import isUndefined from '../../utils/lodashButBetter/isUndefined.js';
import { useControllableState } from '../../utils/useControllable.js';
import { useId } from '../../utils/useId.js';
var useChipGroup = function useChipGroup(_ref) {
var value = _ref.value,
defaultValue = _ref.defaultValue,
isDisabled = _ref.isDisabled,
isRequired = _ref.isRequired,
_onChange = _ref.onChange,
name = _ref.name,
size = _ref.size,
color = _ref.color,
selectionType = _ref.selectionType,
necessityIndicator = _ref.necessityIndicator,
validationState = _ref.validationState;
var idBase = useId('chip-group');
var labelId = "".concat(idBase, "-label");
var fallbackName = name !== null && name !== void 0 ? name : idBase;
var _useControllableState = useControllableState({
value: value && selectionType === 'single' ? [value] : value,
// If selectionType is single, we need to convert the value to an array
defaultValue: defaultValue && selectionType === 'single' ? [defaultValue] : defaultValue || [],
onChange: function onChange(values) {
return _onChange === null || _onChange === void 0 ? void 0 : _onChange({
values: values,
name: fallbackName
});
}
}),
_useControllableState2 = _slicedToArray(_useControllableState, 2),
checkedValues = _useControllableState2[0],
setValues = _useControllableState2[1];
var state = React__default.useMemo(function () {
return {
value: checkedValues,
isChecked: function isChecked(value) {
if (selectionType === 'single') {
if (isUndefined(value) || isUndefined(checkedValues)) return false;
return checkedValues[0] === value;
}
return checkedValues.includes(value);
},
addValue: function addValue(value) {
if (isDisabled) {
return;
}
if (selectionType === 'single') {
setValues(function () {
return [value];
});
}
if (selectionType === 'multiple' && !checkedValues.includes(value)) {
setValues(function () {
return checkedValues.concat(value);
});
}
},
removeValue: function removeValue(value) {
if (isDisabled) {
return;
}
if (selectionType === 'single') {
setValues(undefined);
}
if (selectionType === 'multiple' && Array.isArray(checkedValues) && checkedValues.includes(value)) {
setValues(function () {
return checkedValues.filter(function (existingValue) {
return existingValue !== value;
});
});
}
}
};
}, [checkedValues, isDisabled, setValues, selectionType]);
var contextValue = React__default.useMemo(function () {
return {
isDisabled: isDisabled,
isRequired: isRequired,
necessityIndicator: necessityIndicator,
validationState: validationState,
name: name,
state: state,
size: size,
color: color,
selectionType: selectionType
};
}, [isDisabled, isRequired, necessityIndicator, validationState, name, state, size, color, selectionType]);
return {
state: state,
contextValue: contextValue,
ids: {
labelId: labelId
}
};
};
export { useChipGroup };
//# sourceMappingURL=useChipGroup.js.map