@nutui/nutui-react-taro
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
103 lines (102 loc) • 4.32 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 React, { useCallback, useContext, useMemo } from "react";
import classNames from "classnames";
import { View } from "@tarojs/components";
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 _$_object_spread = _object_spread({}, defaultProps, props), type = _$_object_spread.type, title = _$_object_spread.title, description = _$_object_spread.description, value = _$_object_spread.value, icon = _$_object_spread.icon, className = _$_object_spread.className, style = _$_object_spread.style;
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,
status
]);
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,
description,
classPrefix
]);
// 头部渲染
var renderHeadType = useMemo(function() {
switch(type || parentType){
case 'text':
return /*#__PURE__*/ React.createElement(View, {
className: "".concat(classPrefix, "-head-text")
}, value);
case 'dot':
return /*#__PURE__*/ React.createElement(View, {
className: "".concat(classPrefix, "-head-dot")
});
case 'icon':
return /*#__PURE__*/ React.createElement(View, {
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(View, {
className: "".concat(classPrefix, "-main")
}, title && /*#__PURE__*/ React.createElement(View, {
className: "".concat(classPrefix, "-title")
}, title), description && /*#__PURE__*/ React.createElement(View, {
className: "".concat(classPrefix, "-description")
}, description));
}, [
title,
description
]);
return /*#__PURE__*/ React.createElement(View, {
className: classes,
style: style,
onClick: handleClickStep
}, /*#__PURE__*/ React.createElement(View, {
className: "".concat(classPrefix, "-head")
}, /*#__PURE__*/ React.createElement(View, {
className: "".concat(classPrefix, "-head-").concat(type || parentType, "-wrap")
}, renderHeadType)), /*#__PURE__*/ React.createElement(View, {
className: "".concat(classPrefix, "-line")
}, /*#__PURE__*/ React.createElement(View, {
className: "".concat(classPrefix, "-line-inner")
})), renderContent);
};
Step.displayName = 'NutStep';