@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
76 lines (75 loc) • 3.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "Segmented", {
enumerable: true,
get: function() {
return Segmented;
}
});
var _interop_require_default = require("@swc/helpers/_/_interop_require_default");
var _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
var _define_property = require("@swc/helpers/_/_define_property");
var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
var _type_of = require("@swc/helpers/_/_type_of");
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
var _classnames = /*#__PURE__*/ _interop_require_default._(require("classnames"));
var _usepropsvalue = require("../../hooks/use-props-value");
var _mergeprops = require("../../utils/merge-props");
var defaultProps = {
options: [],
onChange: function onChange(value) {}
};
var Segmented = function Segmented(props) {
var classPrefix = 'nut-segmented';
var itemClassPrefix = 'nut-segmented-item';
var mergedProps = (0, _mergeprops.mergeProps)(defaultProps, props);
var options = mergedProps.options, onChange = mergedProps.onChange;
var _usePropsValue = (0, _sliced_to_array._)((0, _usepropsvalue.usePropsValue)({
value: mergedProps.value,
defaultValue: mergedProps.defaultValue,
finalValue: 0,
onChange: mergedProps.onChange
}), 2), value = _usePropsValue[0], setValue = _usePropsValue[1];
var renderItems = (0, _react.useCallback)(function(options, value) {
return options.map(function(option, index) {
var optionType = typeof option === "undefined" ? "undefined" : (0, _type_of._)(option);
switch(optionType){
case 'object':
// eslint-disable-next-line no-case-declarations
var opt = option;
var _obj;
return /*#__PURE__*/ _react.default.createElement("div", {
className: (0, _classnames.default)(itemClassPrefix, (_obj = {}, (0, _define_property._)(_obj, "".concat(itemClassPrefix, "-active"), opt.value === value), (0, _define_property._)(_obj, "".concat(opt.className), !!opt.className), _obj)),
key: opt.value,
onClick: function onClick() {
if (opt.disabled) return;
setValue(opt.value);
}
}, opt.icon ? /*#__PURE__*/ _react.default.createElement("span", {
className: "nut-segmented-icon"
}, opt.icon) : null, opt.label);
default:
{
if (typeof option !== 'string' && typeof option !== 'number') {
console.warn('Unsupported option type:', optionType);
}
return /*#__PURE__*/ _react.default.createElement("div", {
className: (0, _classnames.default)(itemClassPrefix, (0, _define_property._)({}, "".concat(itemClassPrefix, "-active"), index === value)),
key: option.toString(),
onClick: function onClick() {
setValue(index);
}
}, option);
}
}
});
}, [
value
]);
return /*#__PURE__*/ _react.default.createElement("div", {
className: (0, _classnames.default)(classPrefix),
style: mergedProps.style
}, renderItems(options, value));
};