Update from Vibe Studio

This commit is contained in:
Vibe Studio
2026-01-09 14:52:46 +00:00
parent 42a0efe70b
commit 47fa6d98b2
28661 changed files with 2421771 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
import type { ProCoreActionType, ProFieldValueType, ProSchema, ProSchemaComponentTypes, RowEditableConfig, UseEditableMapUtilType } from '@ant-design/pro-utils';
import type { DescriptionsProps, FormProps } from 'antd';
import type { LabelTooltipType } from 'antd/lib/form/FormItemLabel';
import React from 'react';
import type { RequestData } from './useFetchData';
import type { ProFieldFCMode } from '@ant-design/pro-provider';
import 'antd/lib/descriptions/style';
export interface DescriptionsItemProps {
prefixCls?: string;
className?: string;
style?: React.CSSProperties;
label?: React.ReactNode;
labelStyle?: React.CSSProperties;
contentStyle?: React.CSSProperties;
children: React.ReactNode;
span?: number;
}
/**
* 定义列表属性的类型定义,用于定义列表的一列
* @typedef {Object} ProDescriptionsItemProps
* @property {ProSchema} schema - 用于生成表格项的 schema 配置对象
* @property {boolean} [hide] - 是否隐藏该列,可用于权限控制
* @property {boolean} [plain] - 是否只展示文本,不展示标签
* @property {boolean} [copyable] - 是否可以拷贝该列的内容
* @property {boolean | { showTitle?: boolean }} [ellipsis] - 是否展示省略号,如果是一个对象,可以设置鼠标悬浮时是否展示完整的内容
* @property {ProFieldFCMode} [mode] - ProField 组件的模式
* @property {React.ReactNode} [children] - 表格项的子组件
* @property {number} [order] - 表格项的排序
* @property {number} [index] - 表格项的索引
* @template T - 表格数据的类型
* @template ValueType - 表格项的值类型
*/
export type ProDescriptionsItemProps<T = Record<string, any>, ValueType = 'text'> = ProSchema<T, Omit<DescriptionsItemProps, 'children'> & {
hide?: boolean;
plain?: boolean;
copyable?: boolean;
ellipsis?: boolean | {
showTitle?: boolean;
};
mode?: ProFieldFCMode;
children?: React.ReactNode;
/**
* 子项的排序
*/
order?: number;
/**
* 子项的索引
*/
index?: number;
}, ProSchemaComponentTypes, ValueType>;
export type ProDescriptionsActionType = ProCoreActionType;
export type ProDescriptionsProps<RecordType = Record<string, any>, ValueType = 'text'> = DescriptionsProps & {
/** Params 参数 params 改变的时候会触发 reload */
params?: Record<string, any>;
/** 网络请求报错 */
onRequestError?: (e: Error) => void;
/** 获取数据的方法 */
request?: (params: Record<string, any> | undefined) => Promise<RequestData>;
columns?: ProDescriptionsItemProps<RecordType, ValueType>[];
/** 一些简单的操作 */
actionRef?: React.MutableRefObject<ProCoreActionType<any> | undefined>;
loading?: boolean;
onLoadingChange?: (loading?: boolean) => void;
tooltip?: LabelTooltipType | string;
/** @deprecated 你可以使用 tooltip这个更改是为了与 antd 统一 */
tip?: string;
/** Form props 的相关配置 */
formProps?: FormProps;
/** @name 编辑相关的配置 */
editable?: RowEditableConfig<RecordType>;
/** 默认的数据源 */
dataSource?: RecordType;
/** 受控数据源改变 */
onDataSourceChange?: (value: RecordType) => void;
/**
*为空时候的默认值
*/
emptyText?: React.ReactNode;
};
/**
* 这里会处理编辑的功能
*
* @param props
*/
export declare const FieldRender: React.FC<ProDescriptionsItemProps<any> & {
text: any;
valueType: ProFieldValueType;
entity: any;
action: ProCoreActionType<any>;
index: number;
editableUtils?: UseEditableMapUtilType;
emptyText?: React.ReactNode;
}>;
declare const ProDescriptions: {
<RecordType extends Record<string, any>, ValueType = "text">(props: ProDescriptionsProps<RecordType, ValueType>): import("react/jsx-runtime").JSX.Element;
Item: React.FC<ProDescriptionsItemProps<Record<string, any>, "text">>;
};
export { ProDescriptions };
export default ProDescriptions;

450
node_modules/@ant-design/pro-descriptions/lib/index.js generated vendored Normal file
View File

@@ -0,0 +1,450 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.ProDescriptions = exports.FieldRender = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _icons = require("@ant-design/icons");
var _proForm = _interopRequireWildcard(require("@ant-design/pro-form"));
var _proSkeleton = _interopRequireDefault(require("@ant-design/pro-skeleton"));
var _proUtils = require("@ant-design/pro-utils");
var _antd = require("antd");
var _toArray = _interopRequireDefault(require("rc-util/lib/Children/toArray"));
var _get = _interopRequireDefault(require("rc-util/lib/utils/get"));
var _react = _interopRequireWildcard(require("react"));
var _useFetchData = _interopRequireDefault(require("./useFetchData"));
var _proProvider = require("@ant-design/pro-provider");
require("antd/lib/descriptions/style");
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["valueEnum", "render", "renderText", "mode", "plain", "dataIndex", "request", "params", "editable"],
_excluded2 = ["request", "columns", "params", "dataSource", "onDataSourceChange", "formProps", "editable", "loading", "onLoadingChange", "actionRef", "onRequestError", "emptyText", "contentStyle"]; // 兼容代码-----------
//----------------------
// todo remove it
/**
* 定义列表属性的类型定义,用于定义列表的一列
* @typedef {Object} ProDescriptionsItemProps
* @property {ProSchema} schema - 用于生成表格项的 schema 配置对象
* @property {boolean} [hide] - 是否隐藏该列,可用于权限控制
* @property {boolean} [plain] - 是否只展示文本,不展示标签
* @property {boolean} [copyable] - 是否可以拷贝该列的内容
* @property {boolean | { showTitle?: boolean }} [ellipsis] - 是否展示省略号,如果是一个对象,可以设置鼠标悬浮时是否展示完整的内容
* @property {ProFieldFCMode} [mode] - ProField 组件的模式
* @property {React.ReactNode} [children] - 表格项的子组件
* @property {number} [order] - 表格项的排序
* @property {number} [index] - 表格项的索引
* @template T - 表格数据的类型
* @template ValueType - 表格项的值类型
*/
/**
* 根据 dataIndex 获取值,支持 dataIndex 为数组
*
* @param item
* @param entity
*/
var getDataFromConfig = function getDataFromConfig(item, entity) {
var dataIndex = item.dataIndex;
if (dataIndex) {
var data = Array.isArray(dataIndex) ? (0, _get.default)(entity, dataIndex) : entity[dataIndex];
if (data !== undefined || data !== null) {
return data;
}
}
return item.children;
};
/**
* 这里会处理编辑的功能
*
* @param props
*/
var FieldRender = exports.FieldRender = function FieldRender(props) {
var _proTheme$useToken2;
var valueEnum = props.valueEnum,
action = props.action,
index = props.index,
text = props.text,
entity = props.entity,
mode = props.mode,
render = props.render,
editableUtils = props.editableUtils,
valueType = props.valueType,
plain = props.plain,
dataIndex = props.dataIndex,
request = props.request,
renderFormItem = props.renderFormItem,
params = props.params,
emptyText = props.emptyText;
var form = _proForm.default.useFormInstance();
var _proTheme$useToken = (_proTheme$useToken2 = _proProvider.proTheme.useToken) === null || _proTheme$useToken2 === void 0 ? void 0 : _proTheme$useToken2.call(_proProvider.proTheme),
token = _proTheme$useToken.token;
var fieldConfig = {
text: text,
valueEnum: valueEnum,
mode: mode || 'read',
proFieldProps: {
emptyText: emptyText,
render: render ? function (finText) {
return render === null || render === void 0 ? void 0 : render(finText, entity, index, action, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
type: 'descriptions'
}));
} : undefined
},
ignoreFormItem: true,
valueType: valueType,
request: request,
params: params,
plain: plain
};
/** 如果是只读模式fieldProps 的 form是空的所以需要兜底处理 */
if (mode === 'read' || !mode || valueType === 'option') {
var fieldProps = (0, _proUtils.getFieldPropsOrFormItemProps)(props.fieldProps, undefined, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
rowKey: dataIndex,
isEditable: false
}));
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_proForm.ProFormField, (0, _objectSpread2.default)((0, _objectSpread2.default)({
name: dataIndex
}, fieldConfig), {}, {
fieldProps: fieldProps
}));
}
var renderDom = function renderDom() {
var _editableUtils$action;
var formItemProps = (0, _proUtils.getFieldPropsOrFormItemProps)(props.formItemProps, form, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
rowKey: dataIndex,
isEditable: true
}));
var fieldProps = (0, _proUtils.getFieldPropsOrFormItemProps)(props.fieldProps, form, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
rowKey: dataIndex,
isEditable: true
}));
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
style: {
display: 'flex',
gap: token.marginXS,
alignItems: 'baseline'
},
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_proUtils.InlineErrorFormItem, (0, _objectSpread2.default)((0, _objectSpread2.default)({
name: dataIndex
}, formItemProps), {}, {
style: (0, _objectSpread2.default)({
margin: 0
}, (formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.style) || {}),
initialValue: text || (formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.initialValue),
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_proForm.ProFormField, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, fieldConfig), {}, {
// @ts-ignore
proFieldProps: (0, _objectSpread2.default)({}, fieldConfig.proFieldProps),
renderFormItem: renderFormItem ? function () {
return renderFormItem === null || renderFormItem === void 0 ? void 0 : renderFormItem((0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
type: 'descriptions'
}), {
isEditable: true,
recordKey: dataIndex,
record: form.getFieldValue([dataIndex].flat(1)),
defaultRender: function defaultRender() {
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_proForm.ProFormField, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, fieldConfig), {}, {
fieldProps: fieldProps
}));
},
type: 'descriptions'
}, form);
} : undefined,
fieldProps: fieldProps
}))
})), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
style: {
display: 'flex',
maxHeight: token.controlHeight,
alignItems: 'center',
gap: token.marginXS
},
children: editableUtils === null || editableUtils === void 0 || (_editableUtils$action = editableUtils.actionRender) === null || _editableUtils$action === void 0 ? void 0 : _editableUtils$action.call(editableUtils, dataIndex || index, {
cancelText: /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.CloseOutlined, {}),
saveText: /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.CheckOutlined, {}),
deleteText: false
})
})]
});
};
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
style: {
marginTop: -5,
marginBottom: -5,
marginLeft: 0,
marginRight: 0
},
children: renderDom()
});
};
var schemaToDescriptionsItem = function schemaToDescriptionsItem(items, entity, action, editableUtils, emptyText) {
var _items$map;
var options = [];
var isBigger58 = (0, _proUtils.compareVersions)(_antd.version, '5.8.0') >= 0;
// 因为 Descriptions 只是个语法糖children 是不会执行的,所以需要这里处理一下
var children = items === null || items === void 0 || (_items$map = items.map) === null || _items$map === void 0 ? void 0 : _items$map.call(items, function (item, index) {
var _getDataFromConfig, _restItem$label, _restItem$label2;
if ( /*#__PURE__*/_react.default.isValidElement(item)) {
return isBigger58 ? {
children: item
} : item;
}
var _ref = item,
valueEnum = _ref.valueEnum,
render = _ref.render,
renderText = _ref.renderText,
mode = _ref.mode,
plain = _ref.plain,
dataIndex = _ref.dataIndex,
request = _ref.request,
params = _ref.params,
editable = _ref.editable,
restItem = (0, _objectWithoutProperties2.default)(_ref, _excluded);
var defaultData = (_getDataFromConfig = getDataFromConfig(item, entity)) !== null && _getDataFromConfig !== void 0 ? _getDataFromConfig : restItem.children;
var text = renderText ? renderText(defaultData, entity, index, action) : defaultData;
var title = typeof restItem.title === 'function' ? restItem.title(item, 'descriptions', null) : restItem.title;
// dataIndex 无所谓是否存在
// 有些时候不需要 dataIndex 可以直接 render
var valueType = typeof restItem.valueType === 'function' ? restItem.valueType(entity || {}, 'descriptions') : restItem.valueType;
var isEditable = editableUtils === null || editableUtils === void 0 ? void 0 : editableUtils.isEditable(dataIndex || index);
var fieldMode = mode || isEditable ? 'edit' : 'read';
var showEditIcon = editableUtils && fieldMode === 'read' && editable !== false && (editable === null || editable === void 0 ? void 0 : editable(text, entity, index)) !== false;
var Component = showEditIcon ? _antd.Space : _react.default.Fragment;
var contentDom = fieldMode === 'edit' ? text : (0, _proUtils.genCopyable)(text, item, text);
var field = isBigger58 && valueType !== 'option' ? (0, _objectSpread2.default)((0, _objectSpread2.default)({}, restItem), {}, {
key: restItem.key || ((_restItem$label = restItem.label) === null || _restItem$label === void 0 ? void 0 : _restItem$label.toString()) || index,
label: (title || restItem.label || restItem.tooltip) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_proUtils.LabelIconTip, {
label: title || restItem.label,
tooltip: restItem.tooltip,
ellipsis: item.ellipsis
}),
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(Component, {
children: [/*#__PURE__*/(0, _react.createElement)(FieldRender, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
key: item === null || item === void 0 ? void 0 : item.key,
dataIndex: item.dataIndex || index,
mode: fieldMode,
text: contentDom,
valueType: valueType,
entity: entity,
index: index,
emptyText: emptyText,
action: action,
editableUtils: editableUtils
})), showEditIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.EditOutlined, {
onClick: function onClick() {
editableUtils === null || editableUtils === void 0 || editableUtils.startEditable(dataIndex || index);
}
})]
})
}) : /*#__PURE__*/(0, _react.createElement)(_antd.Descriptions.Item, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, restItem), {}, {
key: restItem.key || ((_restItem$label2 = restItem.label) === null || _restItem$label2 === void 0 ? void 0 : _restItem$label2.toString()) || index,
label: (title || restItem.label || restItem.tooltip) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_proUtils.LabelIconTip, {
label: title || restItem.label,
tooltip: restItem.tooltip,
ellipsis: item.ellipsis
})
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(Component, {
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(FieldRender, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
dataIndex: item.dataIndex || index,
mode: fieldMode,
text: contentDom,
valueType: valueType,
entity: entity,
index: index,
action: action,
editableUtils: editableUtils
})), showEditIcon && valueType !== 'option' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.EditOutlined, {
onClick: function onClick() {
editableUtils === null || editableUtils === void 0 || editableUtils.startEditable(dataIndex || index);
}
})]
}));
// 如果类型是 option 自动放到右上角
if (valueType === 'option') {
options.push(field);
return null;
}
return field;
}).filter(function (item) {
return item;
});
return {
// 空数组传递还是会被判定为有值
options: options !== null && options !== void 0 && options.length ? options : null,
children: children
};
};
var ProDescriptionsItem = function ProDescriptionsItem(props) {
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Descriptions.Item, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
children: props.children
}));
};
ProDescriptionsItem.displayName = 'ProDescriptionsItem';
var DefaultProDescriptionsDom = function DefaultProDescriptionsDom(dom) {
return dom.children;
};
var ProDescriptions = exports.ProDescriptions = function ProDescriptions(props) {
var _props$editable;
var request = props.request,
columns = props.columns,
params = props.params,
dataSource = props.dataSource,
onDataSourceChange = props.onDataSourceChange,
formProps = props.formProps,
editable = props.editable,
loading = props.loading,
onLoadingChange = props.onLoadingChange,
actionRef = props.actionRef,
onRequestError = props.onRequestError,
emptyText = props.emptyText,
contentStyle = props.contentStyle,
rest = (0, _objectWithoutProperties2.default)(props, _excluded2);
var context = (0, _react.useContext)(_antd.ConfigProvider.ConfigContext);
var action = (0, _useFetchData.default)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
var data;
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
if (!request) {
_context.next = 6;
break;
}
_context.next = 3;
return request(params || {});
case 3:
_context.t0 = _context.sent;
_context.next = 7;
break;
case 6:
_context.t0 = {
data: {}
};
case 7:
data = _context.t0;
return _context.abrupt("return", data);
case 9:
case "end":
return _context.stop();
}
}, _callee);
})), {
onRequestError: onRequestError,
effects: [(0, _proUtils.stringify)(params)],
manual: !request,
dataSource: dataSource,
loading: loading,
onLoadingChange: onLoadingChange,
onDataSourceChange: onDataSourceChange
});
/*
* 可编辑行的相关配置
*/
var editableUtils = (0, _proUtils.useEditableMap)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, props.editable), {}, {
childrenColumnName: undefined,
dataSource: action.dataSource,
setDataSource: action.setDataSource
}));
/** 支持 reload 的功能 */
(0, _react.useEffect)(function () {
if (actionRef) {
actionRef.current = (0, _objectSpread2.default)({
reload: action.reload
}, editableUtils);
}
}, [action, actionRef, editableUtils]);
// loading 时展示
// loading = undefined 但是 request 存在时也应该展示
if (action.loading || action.loading === undefined && request) {
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_proSkeleton.default, {
type: "descriptions",
list: false,
pageHeader: false
});
}
var getColumns = function getColumns() {
// 因为 Descriptions 只是个语法糖children 是不会执行的,所以需要这里处理一下
var childrenColumns = (0, _toArray.default)(props.children).filter(Boolean).map(function (item) {
if (! /*#__PURE__*/_react.default.isValidElement(item)) {
return item;
}
var _ref3 = item === null || item === void 0 ? void 0 : item.props,
valueEnum = _ref3.valueEnum,
valueType = _ref3.valueType,
dataIndex = _ref3.dataIndex,
ellipsis = _ref3.ellipsis,
copyable = _ref3.copyable,
itemRequest = _ref3.request;
if (!valueType && !valueEnum && !dataIndex && !itemRequest && !ellipsis && !copyable &&
// @ts-ignore
item.type.displayName !== 'ProDescriptionsItem') {
return item;
}
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item === null || item === void 0 ? void 0 : item.props), {}, {
entity: dataSource
});
});
return [].concat((0, _toConsumableArray2.default)(columns || []), (0, _toConsumableArray2.default)(childrenColumns)).filter(function (item) {
if (!item) return false;
if (item !== null && item !== void 0 && item.valueType && ['index', 'indexBorder'].includes(item === null || item === void 0 ? void 0 : item.valueType)) {
return false;
}
return !(item !== null && item !== void 0 && item.hideInDescriptions);
}).sort(function (a, b) {
if (b.order || a.order) {
return (b.order || 0) - (a.order || 0);
}
return (b.index || 0) - (a.index || 0);
});
};
var _schemaToDescriptions = schemaToDescriptionsItem(getColumns(), action.dataSource || {}, (actionRef === null || actionRef === void 0 ? void 0 : actionRef.current) || action, editable ? editableUtils : undefined, props.emptyText),
options = _schemaToDescriptions.options,
children = _schemaToDescriptions.children;
/** 如果不是可编辑模式,没必要注入 ProForm */
var FormComponent = editable ? _proForm.default : DefaultProDescriptionsDom;
/** 即使组件返回null了, 在传递的过程中还是会被Description检测到为有值 */
var title = null;
if (rest.title || rest.tooltip || rest.tip) {
title = /*#__PURE__*/(0, _jsxRuntime.jsx)(_proUtils.LabelIconTip, {
label: rest.title,
tooltip: rest.tooltip || rest.tip
});
}
var className = context.getPrefixCls('pro-descriptions');
var isBigger58 = (0, _proUtils.compareVersions)(_antd.version, '5.8.0') >= 0;
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_proUtils.ErrorBoundary, {
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(FormComponent, (0, _objectSpread2.default)((0, _objectSpread2.default)({
form: (_props$editable = props.editable) === null || _props$editable === void 0 ? void 0 : _props$editable.form,
component: false,
submitter: false
}, formProps), {}, {
onFinish: undefined,
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_antd.Descriptions, (0, _objectSpread2.default)((0, _objectSpread2.default)({
className: className
}, rest), {}, {
contentStyle: (0, _objectSpread2.default)({
minWidth: 0
}, contentStyle || {}),
extra: rest.extra ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_antd.Space, {
children: [options, rest.extra]
}) : options,
title: title,
items: isBigger58 ? children : undefined,
children: isBigger58 ? null : children
}))
}), "form")
});
};
ProDescriptions.Item = ProDescriptionsItem;
var _default = exports.default = ProDescriptions;

View File

@@ -0,0 +1,22 @@
export type RequestData<T = any> = {
data?: T;
success?: boolean;
[key: string]: any;
} & Record<string, any>;
export type UseFetchDataAction<T extends RequestData> = {
dataSource: T['data'] | T;
setDataSource: (value: T['data'] | T) => void;
loading?: boolean;
reload: () => Promise<void>;
};
declare const useFetchData: <T extends RequestData<any>>(getData: () => Promise<T>, options?: {
effects?: any[] | undefined;
manual: boolean;
loading?: boolean | undefined;
onLoadingChange?: ((loading?: boolean) => void) | undefined;
onRequestError?: ((e: Error) => void) | undefined;
dataSource?: T["data"] | undefined;
defaultDataSource?: T["data"] | undefined;
onDataSourceChange?: ((value: T['data']) => void) | undefined;
} | undefined) => UseFetchDataAction<T>;
export default useFetchData;

View File

@@ -0,0 +1,115 @@
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _useMergedState5 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
var _react = require("react");
var useFetchData = function useFetchData(getData, options) {
var _ref = options || {},
onRequestError = _ref.onRequestError,
effects = _ref.effects,
manual = _ref.manual,
dataSource = _ref.dataSource,
defaultDataSource = _ref.defaultDataSource,
onDataSourceChange = _ref.onDataSourceChange;
var _useMergedState = (0, _useMergedState5.default)(defaultDataSource, {
value: dataSource,
onChange: onDataSourceChange
}),
_useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
entity = _useMergedState2[0],
setEntity = _useMergedState2[1];
var _useMergedState3 = (0, _useMergedState5.default)(options === null || options === void 0 ? void 0 : options.loading, {
value: options === null || options === void 0 ? void 0 : options.loading,
onChange: options === null || options === void 0 ? void 0 : options.onLoadingChange
}),
_useMergedState4 = (0, _slicedToArray2.default)(_useMergedState3, 2),
loading = _useMergedState4[0],
setLoading = _useMergedState4[1];
var updateDataAndLoading = function updateDataAndLoading(data) {
setEntity(data);
setLoading(false);
};
/** 请求数据 */
var fetchList = /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
var _ref3, data, success;
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
if (!loading) {
_context.next = 2;
break;
}
return _context.abrupt("return");
case 2:
setLoading(true);
_context.prev = 3;
_context.next = 6;
return getData();
case 6:
_context.t0 = _context.sent;
if (_context.t0) {
_context.next = 9;
break;
}
_context.t0 = {};
case 9:
_ref3 = _context.t0;
data = _ref3.data;
success = _ref3.success;
if (success !== false) {
updateDataAndLoading(data);
}
_context.next = 23;
break;
case 15:
_context.prev = 15;
_context.t1 = _context["catch"](3);
if (!(onRequestError === undefined)) {
_context.next = 21;
break;
}
throw new Error(_context.t1);
case 21:
onRequestError(_context.t1);
case 22:
setLoading(false);
case 23:
_context.prev = 23;
setLoading(false);
return _context.finish(23);
case 26:
case "end":
return _context.stop();
}
}, _callee, null, [[3, 15, 23, 26]]);
}));
return function fetchList() {
return _ref2.apply(this, arguments);
};
}();
(0, _react.useEffect)(function () {
if (manual) {
return;
}
fetchList();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [].concat((0, _toConsumableArray2.default)(effects || []), [manual]));
return {
dataSource: entity,
setDataSource: setEntity,
loading: loading,
reload: function reload() {
return fetchList();
}
};
};
var _default = exports.default = useFetchData;