@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
108 lines (107 loc) • 4.46 kB
JavaScript
import { _ as _define_property } from "@swc/helpers/_/_define_property";
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
import React, { useContext, useMemo, useCallback } from "react";
import classNames from "classnames";
import { DataContext } from "../steps/context";
import { ComponentDefaults } from "../../utils/typings";
var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), {
title: '',
description: '',
value: 0,
icon: null
});
export var Step = function(props) {
var _ref = _object_spread({}, defaultProps, props), type = _ref.type, children = _ref.children, title = _ref.title, description = _ref.description, value = _ref.value, icon = _ref.icon, className = _ref.className, restProps = _object_without_properties(_ref, [
"type",
"children",
"title",
"description",
"value",
"icon",
"className"
]);
var parent = useContext(DataContext);
var _parent_propSteps = parent.propSteps, parentType = _parent_propSteps.type, parentValue = _parent_propSteps.value, status = _parent_propSteps.status, parentIcon = _parent_propSteps.icon, onStepClick = _parent_propSteps.onStepClick;
var currentStatus = useMemo(function() {
if ([
'default',
'business'
].includes(status)) {
return status;
}
if (value < +parentValue) return 'finish';
return value === +parentValue ? 'process' : 'wait';
}, [
value,
parentValue
]);
var handleClickStep = useCallback(function() {
onStepClick === null || onStepClick === void 0 ? void 0 : onStepClick(value);
}, [
onStepClick,
value
]);
var classPrefix = "nut-step";
// className计算
var classes = useMemo(function() {
var _obj;
return classNames(classPrefix, (_obj = {}, _define_property(_obj, "".concat(classPrefix, "-").concat(currentStatus), true), _define_property(_obj, "".concat(classPrefix, "-").concat(type || parentType), true), _define_property(_obj, "".concat(classPrefix, "-special"), description), _obj), className);
}, [
currentStatus,
type,
className
]);
// 头部渲染
var renderHeadType = useMemo(function() {
switch(type || parentType){
case 'text':
return /*#__PURE__*/ React.createElement("span", {
className: "".concat(classPrefix, "-head-text")
}, value);
case 'dot':
return /*#__PURE__*/ React.createElement("span", {
className: "".concat(classPrefix, "-head-dot")
});
case 'icon':
return /*#__PURE__*/ React.createElement("span", {
className: "".concat(classPrefix, "-head-icon")
}, icon || parentIcon);
default:
return null;
}
}, [
type,
value,
icon
]);
// 内容渲染
var renderContent = useMemo(function() {
if (!title && !description) return null;
return /*#__PURE__*/ React.createElement("div", {
className: "".concat(classPrefix, "-main")
}, title && /*#__PURE__*/ React.createElement("span", {
className: "".concat(classPrefix, "-title")
}, title), description && /*#__PURE__*/ React.createElement("span", {
className: "".concat(classPrefix, "-description")
}, description));
}, [
title,
description
]);
return /*#__PURE__*/ React.createElement("div", _object_spread_props(_object_spread({
className: classes
}, restProps), {
onClick: handleClickStep
}), /*#__PURE__*/ React.createElement("div", {
className: "".concat(classPrefix, "-head")
}, /*#__PURE__*/ React.createElement("div", {
className: "".concat(classPrefix, "-head-").concat(type || parentType, "-wrap")
}, renderHeadType)), /*#__PURE__*/ React.createElement("div", {
className: "".concat(classPrefix, "-line")
}, /*#__PURE__*/ React.createElement("div", {
className: "".concat(classPrefix, "-line-inner")
})), renderContent);
};
Step.displayName = 'NutStep';