2024-08-20 23:25:37 +04:00

114 lines
3.8 KiB
JavaScript

"use client";
import * as React from 'react';
import CheckCircleFilled from "@ant-design/icons/es/icons/CheckCircleFilled";
import CloseCircleFilled from "@ant-design/icons/es/icons/CloseCircleFilled";
import ExclamationCircleFilled from "@ant-design/icons/es/icons/ExclamationCircleFilled";
import WarningFilled from "@ant-design/icons/es/icons/WarningFilled";
import classNames from 'classnames';
import { devUseWarning } from '../_util/warning';
import { ConfigContext } from '../config-provider';
import noFound from './noFound';
import serverError from './serverError';
import useStyle from './style';
import unauthorized from './unauthorized';
export const IconMap = {
success: CheckCircleFilled,
error: CloseCircleFilled,
info: ExclamationCircleFilled,
warning: WarningFilled
};
export const ExceptionMap = {
'404': noFound,
'500': serverError,
'403': unauthorized
};
// ExceptionImageMap keys
const ExceptionStatus = Object.keys(ExceptionMap);
const Icon = _ref => {
let {
prefixCls,
icon,
status
} = _ref;
const className = classNames(`${prefixCls}-icon`);
if (process.env.NODE_ENV !== 'production') {
const warning = devUseWarning('Result');
process.env.NODE_ENV !== "production" ? warning(!(typeof icon === 'string' && icon.length > 2), 'breaking', `\`icon\` is using ReactNode instead of string naming in v4. Please check \`${icon}\` at https://ant.design/components/icon`) : void 0;
}
if (ExceptionStatus.includes(`${status}`)) {
const SVGComponent = ExceptionMap[status];
return /*#__PURE__*/React.createElement("div", {
className: `${className} ${prefixCls}-image`
}, /*#__PURE__*/React.createElement(SVGComponent, null));
}
const iconNode = /*#__PURE__*/React.createElement(IconMap[status]);
if (icon === null || icon === false) {
return null;
}
return /*#__PURE__*/React.createElement("div", {
className: className
}, icon || iconNode);
};
const Extra = _ref2 => {
let {
prefixCls,
extra
} = _ref2;
if (!extra) {
return null;
}
return /*#__PURE__*/React.createElement("div", {
className: `${prefixCls}-extra`
}, extra);
};
const Result = _ref3 => {
let {
prefixCls: customizePrefixCls,
className: customizeClassName,
rootClassName,
subTitle,
title,
style,
children,
status = 'info',
icon,
extra
} = _ref3;
const {
getPrefixCls,
direction,
result
} = React.useContext(ConfigContext);
const prefixCls = getPrefixCls('result', customizePrefixCls);
// Style
const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls);
const className = classNames(prefixCls, `${prefixCls}-${status}`, customizeClassName, result === null || result === void 0 ? void 0 : result.className, rootClassName, {
[`${prefixCls}-rtl`]: direction === 'rtl'
}, hashId, cssVarCls);
const mergedStyle = Object.assign(Object.assign({}, result === null || result === void 0 ? void 0 : result.style), style);
return wrapCSSVar( /*#__PURE__*/React.createElement("div", {
className: className,
style: mergedStyle
}, /*#__PURE__*/React.createElement(Icon, {
prefixCls: prefixCls,
status: status,
icon: icon
}), /*#__PURE__*/React.createElement("div", {
className: `${prefixCls}-title`
}, title), subTitle && /*#__PURE__*/React.createElement("div", {
className: `${prefixCls}-subtitle`
}, subTitle), /*#__PURE__*/React.createElement(Extra, {
prefixCls: prefixCls,
extra: extra
}), children && /*#__PURE__*/React.createElement("div", {
className: `${prefixCls}-content`
}, children)));
};
Result.PRESENTED_IMAGE_403 = ExceptionMap['403'];
Result.PRESENTED_IMAGE_404 = ExceptionMap['404'];
Result.PRESENTED_IMAGE_500 = ExceptionMap['500'];
if (process.env.NODE_ENV !== 'production') {
Result.displayName = 'Result';
}
export default Result;