Files
video-gen/video-gen-admin/node_modules/@rc-component/steps/es/Step.js
T
2026-05-25 17:08:18 +08:00

170 lines
5.2 KiB
JavaScript

function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
/* eslint react/prop-types: 0 */
import * as React from 'react';
import { clsx } from 'clsx';
import KeyCode from "@rc-component/util/es/KeyCode";
import Rail from "./Rail";
import { UnstableContext } from "./UnstableContext";
import StepIcon, { StepIconSemanticContext } from "./StepIcon";
import { StepsContext } from "./Context";
function hasContent(value) {
return value !== undefined && value !== null;
}
export default function Step(props) {
const {
// style
prefixCls,
classNames,
styles,
// data
data,
last,
nextStatus,
active,
index,
// render
itemRender,
iconRender,
itemWrapperRender,
// events
onClick
} = props;
const itemCls = `${prefixCls}-item`;
// ======================== Contexts ========================
const {
railFollowPrevStatus
} = React.useContext(UnstableContext);
const {
ItemComponent
} = React.useContext(StepsContext);
// ========================== Data ==========================
const {
onClick: onItemClick,
title,
subTitle,
content,
description,
disabled,
icon,
status,
className,
style,
classNames: itemClassNames = {},
styles: itemStyles = {},
...restItemProps
} = data;
const mergedContent = content ?? description;
const renderInfo = {
item: {
...data,
content: mergedContent
},
index,
active
};
// ========================= Click ==========================
const clickable = !!(onClick || onItemClick) && !disabled;
const accessibilityProps = {};
if (clickable) {
accessibilityProps.role = 'button';
accessibilityProps.tabIndex = 0;
accessibilityProps.onClick = e => {
onItemClick?.(e);
onClick(index);
};
accessibilityProps.onKeyDown = e => {
const {
which
} = e;
if (which === KeyCode.ENTER || which === KeyCode.SPACE) {
onClick(index);
}
};
}
// ========================= Render =========================
const mergedStatus = status || 'wait';
const hasTitle = hasContent(title);
const hasSubTitle = hasContent(subTitle);
const classString = clsx(itemCls, `${itemCls}-${mergedStatus}`, {
[`${itemCls}-custom`]: icon,
[`${itemCls}-active`]: active,
[`${itemCls}-disabled`]: disabled === true,
[`${itemCls}-empty-header`]: !hasTitle && !hasSubTitle
}, className, classNames.item, itemClassNames.root);
let iconNode = /*#__PURE__*/React.createElement(StepIcon, null);
if (iconRender) {
iconNode = iconRender(iconNode, {
...renderInfo,
components: {
Icon: StepIcon
}
});
}
const wrapperNode = /*#__PURE__*/React.createElement("div", {
className: clsx(`${itemCls}-wrapper`, classNames.itemWrapper, itemClassNames.wrapper),
style: {
...styles.itemWrapper,
...itemStyles.wrapper
}
}, /*#__PURE__*/React.createElement(StepIconSemanticContext.Provider, {
value: {
className: itemClassNames.icon,
style: itemStyles.icon
}
}, iconNode), /*#__PURE__*/React.createElement("div", {
className: clsx(`${itemCls}-section`, classNames.itemSection, itemClassNames.section),
style: {
...styles.itemSection,
...itemStyles.section
}
}, /*#__PURE__*/React.createElement("div", {
className: clsx(`${itemCls}-header`, classNames.itemHeader, itemClassNames.header),
style: {
...styles.itemHeader,
...itemStyles.header
}
}, hasTitle && /*#__PURE__*/React.createElement("div", {
className: clsx(`${itemCls}-title`, classNames.itemTitle, itemClassNames.title),
style: {
...styles.itemTitle,
...itemStyles.title
}
}, title), hasSubTitle && /*#__PURE__*/React.createElement("div", {
title: typeof subTitle === 'string' ? subTitle : undefined,
className: clsx(`${itemCls}-subtitle`, classNames.itemSubtitle, itemClassNames.subtitle),
style: {
...styles.itemSubtitle,
...itemStyles.subtitle
}
}, subTitle), !last && /*#__PURE__*/React.createElement(Rail, {
prefixCls: itemCls,
className: clsx(classNames.itemRail, itemClassNames.rail),
style: {
...styles.itemRail,
...itemStyles.rail
},
status: railFollowPrevStatus ? status : nextStatus
})), hasContent(mergedContent) && /*#__PURE__*/React.createElement("div", {
className: clsx(`${itemCls}-content`, classNames.itemContent, itemClassNames.content),
style: {
...styles.itemContent,
...itemStyles.content
}
}, mergedContent)));
let stepNode = /*#__PURE__*/React.createElement(ItemComponent, _extends({}, restItemProps, accessibilityProps, {
className: classString,
style: {
...styles.item,
...itemStyles.root,
...style
}
}), itemWrapperRender ? itemWrapperRender(wrapperNode) : wrapperNode);
if (itemRender) {
stepNode = itemRender(stepNode, renderInfo) || null;
}
return stepNode;
}