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

53
node_modules/@ant-design/pro-descriptions/README.md generated vendored Normal file
View File

@@ -0,0 +1,53 @@
# @ant-design/pro-descriptions
> Advanced description list component, providing a more convenient and faster solution to build description lists.
See our website [@ant-design/pro-descriptions](https://procomponent.ant.design/) for more information.
ProDescriptions was created to solve the problem of having to write a lot of sample code for Descriptions in a project, so it encapsulates a lot of common logic in it. Writing a Descriptions in React inevitably requires defining some of the same properties. So ProDescriptions by default encapsulates the logic of requesting network, columns display.
For example, if ProDescriptions encapsulates the behavior of the request network, ProDescriptions will bring the data in props.params into the request by default, and if the interface happens to be the same as our definition, it will be very easy to implement a query.
```tsx | pure
import request from 'umi-request';
const fetchData = (params) =>
request<{
data: T{};
}>('https://proapi.azurewebsites.net/github/issues', {
params,
});
const keyWords = "Ant Design"
<ProDescriptions<T,U> request={fetchData} />;
```
We agree that request has one parameter and `params` will take its own `params` in props. The type is as follows:
```tsx | pure
(params: U) => RequestData;
```
There are also conventions for ProDescriptions with the results of the request back, of the following type.
```tsx | pure
interface RequestData {
data: Datum{};
success: boolean;
}
```
## Install
Using npm:
```bash
$ npm install --save @ant-design/pro-descriptions
```
or using yarn:
```bash
$ yarn add @ant-design/pro-descriptions
```

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/es/index.js generated vendored Normal file
View File

@@ -0,0 +1,450 @@
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
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"];
import { CheckOutlined, CloseOutlined, EditOutlined } from '@ant-design/icons';
import ProForm, { ProFormField } from '@ant-design/pro-form';
import ProSkeleton from '@ant-design/pro-skeleton';
import { ErrorBoundary, InlineErrorFormItem, LabelIconTip, compareVersions, genCopyable, getFieldPropsOrFormItemProps, stringify, useEditableMap } from '@ant-design/pro-utils';
import { ConfigProvider, Descriptions, Space, version } from 'antd';
import toArray from "rc-util/es/Children/toArray";
import get from "rc-util/es/utils/get";
import React, { useContext, useEffect } from 'react';
import useFetchData from "./useFetchData";
// 兼容代码-----------
import { proTheme } from '@ant-design/pro-provider';
import "antd/es/descriptions/style";
//----------------------
// 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 - 表格项的值类型
*/
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
import { createElement as _createElement } from "react";
/**
* 根据 dataIndex 获取值,支持 dataIndex 为数组
*
* @param item
* @param entity
*/
var getDataFromConfig = function getDataFromConfig(item, entity) {
var dataIndex = item.dataIndex;
if (dataIndex) {
var data = Array.isArray(dataIndex) ? get(entity, dataIndex) : entity[dataIndex];
if (data !== undefined || data !== null) {
return data;
}
}
return item.children;
};
/**
* 这里会处理编辑的功能
*
* @param props
*/
export var 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.useFormInstance();
var _proTheme$useToken = (_proTheme$useToken2 = proTheme.useToken) === null || _proTheme$useToken2 === void 0 ? void 0 : _proTheme$useToken2.call(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, _objectSpread(_objectSpread({}, props), {}, {
type: 'descriptions'
}));
} : undefined
},
ignoreFormItem: true,
valueType: valueType,
request: request,
params: params,
plain: plain
};
/** 如果是只读模式fieldProps 的 form是空的所以需要兜底处理 */
if (mode === 'read' || !mode || valueType === 'option') {
var fieldProps = getFieldPropsOrFormItemProps(props.fieldProps, undefined, _objectSpread(_objectSpread({}, props), {}, {
rowKey: dataIndex,
isEditable: false
}));
return /*#__PURE__*/_jsx(ProFormField, _objectSpread(_objectSpread({
name: dataIndex
}, fieldConfig), {}, {
fieldProps: fieldProps
}));
}
var renderDom = function renderDom() {
var _editableUtils$action;
var formItemProps = getFieldPropsOrFormItemProps(props.formItemProps, form, _objectSpread(_objectSpread({}, props), {}, {
rowKey: dataIndex,
isEditable: true
}));
var fieldProps = getFieldPropsOrFormItemProps(props.fieldProps, form, _objectSpread(_objectSpread({}, props), {}, {
rowKey: dataIndex,
isEditable: true
}));
return /*#__PURE__*/_jsxs("div", {
style: {
display: 'flex',
gap: token.marginXS,
alignItems: 'baseline'
},
children: [/*#__PURE__*/_jsx(InlineErrorFormItem, _objectSpread(_objectSpread({
name: dataIndex
}, formItemProps), {}, {
style: _objectSpread({
margin: 0
}, (formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.style) || {}),
initialValue: text || (formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.initialValue),
children: /*#__PURE__*/_jsx(ProFormField, _objectSpread(_objectSpread({}, fieldConfig), {}, {
// @ts-ignore
proFieldProps: _objectSpread({}, fieldConfig.proFieldProps),
renderFormItem: renderFormItem ? function () {
return renderFormItem === null || renderFormItem === void 0 ? void 0 : renderFormItem(_objectSpread(_objectSpread({}, props), {}, {
type: 'descriptions'
}), {
isEditable: true,
recordKey: dataIndex,
record: form.getFieldValue([dataIndex].flat(1)),
defaultRender: function defaultRender() {
return /*#__PURE__*/_jsx(ProFormField, _objectSpread(_objectSpread({}, fieldConfig), {}, {
fieldProps: fieldProps
}));
},
type: 'descriptions'
}, form);
} : undefined,
fieldProps: fieldProps
}))
})), /*#__PURE__*/_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__*/_jsx(CloseOutlined, {}),
saveText: /*#__PURE__*/_jsx(CheckOutlined, {}),
deleteText: false
})
})]
});
};
return /*#__PURE__*/_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 = compareVersions(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.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 = _objectWithoutProperties(_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 ? Space : React.Fragment;
var contentDom = fieldMode === 'edit' ? text : genCopyable(text, item, text);
var field = isBigger58 && valueType !== 'option' ? _objectSpread(_objectSpread({}, 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__*/_jsx(LabelIconTip, {
label: title || restItem.label,
tooltip: restItem.tooltip,
ellipsis: item.ellipsis
}),
children: /*#__PURE__*/_jsxs(Component, {
children: [/*#__PURE__*/_createElement(FieldRender, _objectSpread(_objectSpread({}, 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__*/_jsx(EditOutlined, {
onClick: function onClick() {
editableUtils === null || editableUtils === void 0 || editableUtils.startEditable(dataIndex || index);
}
})]
})
}) : /*#__PURE__*/_createElement(Descriptions.Item, _objectSpread(_objectSpread({}, 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__*/_jsx(LabelIconTip, {
label: title || restItem.label,
tooltip: restItem.tooltip,
ellipsis: item.ellipsis
})
}), /*#__PURE__*/_jsxs(Component, {
children: [/*#__PURE__*/_jsx(FieldRender, _objectSpread(_objectSpread({}, item), {}, {
dataIndex: item.dataIndex || index,
mode: fieldMode,
text: contentDom,
valueType: valueType,
entity: entity,
index: index,
action: action,
editableUtils: editableUtils
})), showEditIcon && valueType !== 'option' && /*#__PURE__*/_jsx(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__*/_jsx(Descriptions.Item, _objectSpread(_objectSpread({}, props), {}, {
children: props.children
}));
};
ProDescriptionsItem.displayName = 'ProDescriptionsItem';
var DefaultProDescriptionsDom = function DefaultProDescriptionsDom(dom) {
return dom.children;
};
var 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 = _objectWithoutProperties(props, _excluded2);
var context = useContext(ConfigProvider.ConfigContext);
var action = useFetchData( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
var data;
return _regeneratorRuntime().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: [stringify(params)],
manual: !request,
dataSource: dataSource,
loading: loading,
onLoadingChange: onLoadingChange,
onDataSourceChange: onDataSourceChange
});
/*
* 可编辑行的相关配置
*/
var editableUtils = useEditableMap(_objectSpread(_objectSpread({}, props.editable), {}, {
childrenColumnName: undefined,
dataSource: action.dataSource,
setDataSource: action.setDataSource
}));
/** 支持 reload 的功能 */
useEffect(function () {
if (actionRef) {
actionRef.current = _objectSpread({
reload: action.reload
}, editableUtils);
}
}, [action, actionRef, editableUtils]);
// loading 时展示
// loading = undefined 但是 request 存在时也应该展示
if (action.loading || action.loading === undefined && request) {
return /*#__PURE__*/_jsx(ProSkeleton, {
type: "descriptions",
list: false,
pageHeader: false
});
}
var getColumns = function getColumns() {
// 因为 Descriptions 只是个语法糖children 是不会执行的,所以需要这里处理一下
var childrenColumns = toArray(props.children).filter(Boolean).map(function (item) {
if (! /*#__PURE__*/React.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 _objectSpread(_objectSpread({}, item === null || item === void 0 ? void 0 : item.props), {}, {
entity: dataSource
});
});
return [].concat(_toConsumableArray(columns || []), _toConsumableArray(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 : DefaultProDescriptionsDom;
/** 即使组件返回null了, 在传递的过程中还是会被Description检测到为有值 */
var title = null;
if (rest.title || rest.tooltip || rest.tip) {
title = /*#__PURE__*/_jsx(LabelIconTip, {
label: rest.title,
tooltip: rest.tooltip || rest.tip
});
}
var className = context.getPrefixCls('pro-descriptions');
var isBigger58 = compareVersions(version, '5.8.0') >= 0;
return /*#__PURE__*/_jsx(ErrorBoundary, {
children: /*#__PURE__*/_jsx(FormComponent, _objectSpread(_objectSpread({
form: (_props$editable = props.editable) === null || _props$editable === void 0 ? void 0 : _props$editable.form,
component: false,
submitter: false
}, formProps), {}, {
onFinish: undefined,
children: /*#__PURE__*/_jsx(Descriptions, _objectSpread(_objectSpread({
className: className
}, rest), {}, {
contentStyle: _objectSpread({
minWidth: 0
}, contentStyle || {}),
extra: rest.extra ? /*#__PURE__*/_jsxs(Space, {
children: [options, rest.extra]
}) : options,
title: title,
items: isBigger58 ? children : undefined,
children: isBigger58 ? null : children
}))
}), "form")
});
};
ProDescriptions.Item = ProDescriptionsItem;
export { ProDescriptions };
export 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,108 @@
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import useMergedState from "rc-util/es/hooks/useMergedState";
import { useEffect } from '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 = useMergedState(defaultDataSource, {
value: dataSource,
onChange: onDataSourceChange
}),
_useMergedState2 = _slicedToArray(_useMergedState, 2),
entity = _useMergedState2[0],
setEntity = _useMergedState2[1];
var _useMergedState3 = useMergedState(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 = _slicedToArray(_useMergedState3, 2),
loading = _useMergedState4[0],
setLoading = _useMergedState4[1];
var updateDataAndLoading = function updateDataAndLoading(data) {
setEntity(data);
setLoading(false);
};
/** 请求数据 */
var fetchList = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
var _ref3, data, success;
return _regeneratorRuntime().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);
};
}();
useEffect(function () {
if (manual) {
return;
}
fetchList();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [].concat(_toConsumableArray(effects || []), [manual]));
return {
dataSource: entity,
setDataSource: setEntity,
loading: loading,
reload: function reload() {
return fetchList();
}
};
};
export default useFetchData;

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;

View File

@@ -0,0 +1,21 @@
## 0.5.0
- support `theme="dark|light"`.
## 0.4.0
- support `columnLayout`.
- support `backgroundColor`.
## 0.3.0
- support `style` and `className` for footer column and footer item.
- support `LinkComponent` for footer item.
## 0.2.0
- Fix `lib` and `es` folders missing.
## 0.1.0
- First release.

View File

@@ -0,0 +1,9 @@
The MIT License (MIT)
Copyright (c) 2019-present afc163
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1,67 @@
# rc-resize-observer
[![NPM version][npm-image]][npm-url]
[![build status][travis-image]][travis-url]
[![Codecov][codecov-image]][codecov-url]
[![david deps][david-image]][david-url]
[![david devDeps][david-dev-image]][david-dev-url]
[![npm download][download-image]][download-url]
[npm-image]: http://img.shields.io/npm/v/rc-resize-observer.svg?style=flat-square
[npm-url]: http://npmjs.org/package/rc-resize-observer
[travis-image]: https://img.shields.io/travis/com/react-component/resize-observer.svg?style=flat-square
[travis-url]: https://travis-ci.com/react-component/resize-observer
[codecov-image]: https://img.shields.io/codecov/c/github/react-component/resize-observer/master.svg?style=flat-square
[codecov-url]: https://codecov.io/gh/react-component/resize-observer/branch/master
[david-image]: https://david-dm.org/react-component/resize-observer/status.svg?style=flat-square
[david-dev-url]: https://david-dm.org/react-component/resize-observer?type=dev
[david-dev-image]: https://david-dm.org/react-component/resize-observer/dev-status.svg?style=flat-square
[david-url]: https://david-dm.org/react-component/resize-observer
[download-image]: https://img.shields.io/npm/dm/rc-resize-observer.svg?style=flat-square
[download-url]: https://npmjs.org/package/rc-resize-observer
Resize observer for React.
## Live Demo
https://react-component.github.io/resize-observer/
## Install
[![rc-resize-observer](https://nodei.co/npm/rc-resize-observer.png)](https://npmjs.org/package/rc-resize-observer)
## Usage
```js
import ResizeObserver from 'rc-resize-observer';
import { render } from 'react-dom';
render(
<ResizeObserver
onResize={() => {
console.log('resized!');
}}
>
<textarea />
</ResizeObserver>,
mountNode,
);
```
## API
| Property | Type | Default | Description |
| -------- | --------------------------- | ------- | ------------------------------- |
| disabled | boolean | false | |
| onResize | ({ width, height }) => void | - | Trigger when child node resized |
## Development
```
npm install
npm start
```
## License
rc-resize-observer is released under the MIT license.

View File

@@ -0,0 +1,112 @@
.rc-footer {
position: relative;
clear: both;
color: rgba(255, 255, 255, 0.4);
font-size: 14px;
line-height: 1.5;
background-color: #000;
}
.rc-footer a {
transition: all 0.3s;
color: rgba(255, 255, 255, 0.9);
text-decoration: none;
}
.rc-footer a:hover {
color: #40a9ff;
}
.rc-footer-container {
width: 100%;
max-width: 1200px;
padding: 80px 0;
margin: auto;
}
.rc-footer-columns {
display: flex;
justify-content: space-around;
}
.rc-footer-column h2 {
position: relative;
margin: 0 auto 24px;
font-weight: 500;
font-size: 16px;
color: #fff;
}
.rc-footer-column-icon {
margin-right: 0.5em;
width: 22px;
display: inline-block;
vertical-align: middle;
top: -1px;
position: relative;
text-align: center;
}
.rc-footer-column-icon > span,
.rc-footer-column-icon > svg,
.rc-footer-column-icon img {
width: 100%;
display: block;
}
.rc-footer-item {
margin: 12px 0;
}
.rc-footer-item-icon {
margin-right: 0.4em;
width: 16px;
display: inline-block;
vertical-align: middle;
top: -1px;
position: relative;
text-align: center;
}
.rc-footer-item-icon > span,
.rc-footer-item-icon > svg,
.rc-footer-item-icon img {
width: 100%;
display: block;
}
.rc-footer-item-separator {
margin: 0 0.3em;
}
.rc-footer-bottom-container {
border-top: 1px solid rgba(255, 255, 255, 0.25);
width: 100%;
max-width: 1200px;
text-align: center;
margin: 0 auto;
padding: 16px 0;
line-height: 32px;
font-size: 16px;
}
.rc-footer-light {
background-color: transparent;
color: rgba(0, 0, 0, 0.85);
}
.rc-footer-light h2,
.rc-footer-light a {
color: rgba(0, 0, 0, 0.85);
}
.rc-footer-light .rc-footer-bottom-container {
border-top-color: #e8e8e8;
}
.rc-footer-light .rc-footer-item-separator,
.rc-footer-light .rc-footer-item-description {
color: rgba(0, 0, 0, 0.45);
}
@media only screen and (max-width: 767.99px) {
.rc-footer {
text-align: center;
}
.rc-footer-container {
padding: 40px 0;
}
.rc-footer-columns {
display: block;
}
.rc-footer-column {
display: block;
margin-bottom: 40px;
}
.rc-footer-column:last-child {
margin-bottom: 0;
}
}

View File

@@ -0,0 +1,139 @@
@footer-prefix-cls: rc-footer;
.@{footer-prefix-cls} {
position: relative;
clear: both;
color: rgba(255, 255, 255, .4);
font-size: 14px;
line-height: 1.5;
background-color: #000;
a {
transition: all .3s;
color: rgba(255, 255, 255, .9);
text-decoration: none;
&:hover {
color: #40a9ff;
}
}
&-container {
width: 100%;
max-width: 1200px;
padding: 80px 0;
margin: auto;
}
&-columns {
display: flex;
justify-content: space-around;
}
&-column {
h2 {
position: relative;
margin: 0 auto 24px;
font-weight: 500;
font-size: 16px;
color: #fff;
}
&-icon {
margin-right: .5em;
width: 22px;
display: inline-block;
vertical-align: middle;
top: -1px;
position: relative;
text-align: center;
> span,
> svg,
img {
width: 100%;
display: block;
}
}
}
&-item {
margin: 12px 0;
&-icon {
margin-right: .4em;
width: 16px;
display: inline-block;
vertical-align: middle;
top: -1px;
position: relative;
text-align: center;
> span,
> svg,
img {
width: 100%;
display: block;
}
}
&-separator {
margin: 0 .3em;
}
}
&-bottom {
&-container {
border-top: 1px solid rgba(255, 255, 255, .25);
width: 100%;
max-width: 1200px;
text-align: center;
margin: 0 auto;
padding: 16px 0;
line-height: 32px;
font-size: 16px;
}
}
&-light {
background-color: transparent;
color: rgba(0, 0, 0, .85);
h2,
a {
color: rgba(0, 0, 0, .85);
}
}
&-light &-bottom-container {
border-top-color: #e8e8e8;
}
&-light &-item-separator,
&-light &-item-description {
color: rgba(0, 0, 0, .45);
}
}
@media only screen and (max-width: 767.99px) {
.@{footer-prefix-cls} {
text-align: center;
&-container {
padding: 40px 0;
}
&-columns {
display: block;
}
&-column {
display: block;
margin-bottom: 40px;
&:last-child {
margin-bottom: 0;
}
}
}
}

View File

@@ -0,0 +1,41 @@
import * as React from 'react';
import ResizeObserver from 'resize-observer-polyfill';
export interface ResizeObserverProps {
children: React.ReactNode;
disabled?: boolean;
/** Trigger if element resized. Will always trigger when first time render. */
onResize?: (size: {
width: number;
height: number;
offsetWidth: number;
offsetHeight: number;
}) => void;
}
interface ResizeObserverState {
height: number;
width: number;
offsetHeight: number;
offsetWidth: number;
}
declare type RefNode = React.ReactInstance | HTMLElement | null;
declare class ReactResizeObserver extends React.Component<ResizeObserverProps, ResizeObserverState> {
static displayName: string;
resizeObserver: ResizeObserver | null;
childNode: RefNode;
currentElement: Element | null;
state: {
width: number;
height: number;
offsetHeight: number;
offsetWidth: number;
};
componentDidMount(): void;
componentDidUpdate(): void;
componentWillUnmount(): void;
onComponentUpdated(): void;
onResize: ResizeObserverCallback;
setChildNode: (node: RefNode) => void;
destroyObserver(): void;
render(): React.ReactElement<any, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)>) | (new (props: any) => React.Component<any, any, any>)> | React.ReactElement<unknown, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)>) | (new (props: any) => React.Component<any, any, any>)>[];
}
export default ReactResizeObserver;

View File

@@ -0,0 +1,168 @@
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
import _createClass from "@babel/runtime/helpers/esm/createClass";
import _inherits from "@babel/runtime/helpers/esm/inherits";
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
import * as React from 'react';
import findDOMNode from "rc-util/es/Dom/findDOMNode";
import toArray from "rc-util/es/Children/toArray";
import warning from "rc-util/es/warning";
import { composeRef, supportRef } from "rc-util/es/ref";
import ResizeObserver from 'resize-observer-polyfill';
var INTERNAL_PREFIX_KEY = 'rc-observer-key'; // Still need to be compatible with React 15, we use class component here
var ReactResizeObserver = /*#__PURE__*/function (_React$Component) {
_inherits(ReactResizeObserver, _React$Component);
var _super = _createSuper(ReactResizeObserver);
function ReactResizeObserver() {
var _this;
_classCallCheck(this, ReactResizeObserver);
_this = _super.apply(this, arguments);
_this.resizeObserver = null;
_this.childNode = null;
_this.currentElement = null;
_this.state = {
width: 0,
height: 0,
offsetHeight: 0,
offsetWidth: 0
};
_this.onResize = function (entries) {
var onResize = _this.props.onResize;
var target = entries[0].target;
var _target$getBoundingCl = target.getBoundingClientRect(),
width = _target$getBoundingCl.width,
height = _target$getBoundingCl.height;
var offsetWidth = target.offsetWidth,
offsetHeight = target.offsetHeight;
/**
* Resize observer trigger when content size changed.
* In most case we just care about element size,
* let's use `boundary` instead of `contentRect` here to avoid shaking.
*/
var fixedWidth = Math.floor(width);
var fixedHeight = Math.floor(height);
if (_this.state.width !== fixedWidth || _this.state.height !== fixedHeight || _this.state.offsetWidth !== offsetWidth || _this.state.offsetHeight !== offsetHeight) {
var size = {
width: fixedWidth,
height: fixedHeight,
offsetWidth: offsetWidth,
offsetHeight: offsetHeight
};
_this.setState(size);
if (onResize) {
// defer the callback but not defer to next frame
Promise.resolve().then(function () {
onResize(_objectSpread(_objectSpread({}, size), {}, {
offsetWidth: offsetWidth,
offsetHeight: offsetHeight
}));
});
}
}
};
_this.setChildNode = function (node) {
_this.childNode = node;
};
return _this;
}
_createClass(ReactResizeObserver, [{
key: "componentDidMount",
value: function componentDidMount() {
this.onComponentUpdated();
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
this.onComponentUpdated();
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.destroyObserver();
}
}, {
key: "onComponentUpdated",
value: function onComponentUpdated() {
var disabled = this.props.disabled; // Unregister if disabled
if (disabled) {
this.destroyObserver();
return;
} // Unregister if element changed
var element = findDOMNode(this.childNode || this);
var elementChanged = element !== this.currentElement;
if (elementChanged) {
this.destroyObserver();
this.currentElement = element;
}
if (!this.resizeObserver && element) {
this.resizeObserver = new ResizeObserver(this.onResize);
this.resizeObserver.observe(element);
}
}
}, {
key: "destroyObserver",
value: function destroyObserver() {
if (this.resizeObserver) {
this.resizeObserver.disconnect();
this.resizeObserver = null;
}
}
}, {
key: "render",
value: function render() {
var children = this.props.children;
var childNodes = toArray(children);
if (childNodes.length > 1) {
warning(false, 'Find more than one child node with `children` in ResizeObserver. Will only observe first one.');
} else if (childNodes.length === 0) {
warning(false, '`children` of ResizeObserver is empty. Nothing is in observe.');
return null;
}
var childNode = childNodes[0];
if (React.isValidElement(childNode) && supportRef(childNode)) {
var ref = childNode.ref;
childNodes[0] = React.cloneElement(childNode, {
ref: composeRef(ref, this.setChildNode)
});
}
return childNodes.length === 1 ? childNodes[0] : childNodes.map(function (node, index) {
if (!React.isValidElement(node) || 'key' in node && node.key !== null) {
return node;
}
return React.cloneElement(node, {
key: "".concat(INTERNAL_PREFIX_KEY, "-").concat(index)
});
});
}
}]);
return ReactResizeObserver;
}(React.Component);
ReactResizeObserver.displayName = 'ResizeObserver';
export default ReactResizeObserver;

View File

@@ -0,0 +1,41 @@
import * as React from 'react';
import ResizeObserver from 'resize-observer-polyfill';
export interface ResizeObserverProps {
children: React.ReactNode;
disabled?: boolean;
/** Trigger if element resized. Will always trigger when first time render. */
onResize?: (size: {
width: number;
height: number;
offsetWidth: number;
offsetHeight: number;
}) => void;
}
interface ResizeObserverState {
height: number;
width: number;
offsetHeight: number;
offsetWidth: number;
}
declare type RefNode = React.ReactInstance | HTMLElement | null;
declare class ReactResizeObserver extends React.Component<ResizeObserverProps, ResizeObserverState> {
static displayName: string;
resizeObserver: ResizeObserver | null;
childNode: RefNode;
currentElement: Element | null;
state: {
width: number;
height: number;
offsetHeight: number;
offsetWidth: number;
};
componentDidMount(): void;
componentDidUpdate(): void;
componentWillUnmount(): void;
onComponentUpdated(): void;
onResize: ResizeObserverCallback;
setChildNode: (node: RefNode) => void;
destroyObserver(): void;
render(): React.ReactElement<any, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)>) | (new (props: any) => React.Component<any, any, any>)> | React.ReactElement<unknown, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)>) | (new (props: any) => React.Component<any, any, any>)>[];
}
export default ReactResizeObserver;

View File

@@ -0,0 +1,189 @@
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var React = _interopRequireWildcard(require("react"));
var _findDOMNode = _interopRequireDefault(require("rc-util/lib/Dom/findDOMNode"));
var _toArray = _interopRequireDefault(require("rc-util/lib/Children/toArray"));
var _warning = _interopRequireDefault(require("rc-util/lib/warning"));
var _ref = require("rc-util/lib/ref");
var _resizeObserverPolyfill = _interopRequireDefault(require("resize-observer-polyfill"));
var INTERNAL_PREFIX_KEY = 'rc-observer-key'; // Still need to be compatible with React 15, we use class component here
var ReactResizeObserver = /*#__PURE__*/function (_React$Component) {
(0, _inherits2.default)(ReactResizeObserver, _React$Component);
var _super = (0, _createSuper2.default)(ReactResizeObserver);
function ReactResizeObserver() {
var _this;
(0, _classCallCheck2.default)(this, ReactResizeObserver);
_this = _super.apply(this, arguments);
_this.resizeObserver = null;
_this.childNode = null;
_this.currentElement = null;
_this.state = {
width: 0,
height: 0,
offsetHeight: 0,
offsetWidth: 0
};
_this.onResize = function (entries) {
var onResize = _this.props.onResize;
var target = entries[0].target;
var _target$getBoundingCl = target.getBoundingClientRect(),
width = _target$getBoundingCl.width,
height = _target$getBoundingCl.height;
var offsetWidth = target.offsetWidth,
offsetHeight = target.offsetHeight;
/**
* Resize observer trigger when content size changed.
* In most case we just care about element size,
* let's use `boundary` instead of `contentRect` here to avoid shaking.
*/
var fixedWidth = Math.floor(width);
var fixedHeight = Math.floor(height);
if (_this.state.width !== fixedWidth || _this.state.height !== fixedHeight || _this.state.offsetWidth !== offsetWidth || _this.state.offsetHeight !== offsetHeight) {
var size = {
width: fixedWidth,
height: fixedHeight,
offsetWidth: offsetWidth,
offsetHeight: offsetHeight
};
_this.setState(size);
if (onResize) {
// defer the callback but not defer to next frame
Promise.resolve().then(function () {
onResize((0, _objectSpread2.default)((0, _objectSpread2.default)({}, size), {}, {
offsetWidth: offsetWidth,
offsetHeight: offsetHeight
}));
});
}
}
};
_this.setChildNode = function (node) {
_this.childNode = node;
};
return _this;
}
(0, _createClass2.default)(ReactResizeObserver, [{
key: "componentDidMount",
value: function componentDidMount() {
this.onComponentUpdated();
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
this.onComponentUpdated();
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.destroyObserver();
}
}, {
key: "onComponentUpdated",
value: function onComponentUpdated() {
var disabled = this.props.disabled; // Unregister if disabled
if (disabled) {
this.destroyObserver();
return;
} // Unregister if element changed
var element = (0, _findDOMNode.default)(this.childNode || this);
var elementChanged = element !== this.currentElement;
if (elementChanged) {
this.destroyObserver();
this.currentElement = element;
}
if (!this.resizeObserver && element) {
this.resizeObserver = new _resizeObserverPolyfill.default(this.onResize);
this.resizeObserver.observe(element);
}
}
}, {
key: "destroyObserver",
value: function destroyObserver() {
if (this.resizeObserver) {
this.resizeObserver.disconnect();
this.resizeObserver = null;
}
}
}, {
key: "render",
value: function render() {
var children = this.props.children;
var childNodes = (0, _toArray.default)(children);
if (childNodes.length > 1) {
(0, _warning.default)(false, 'Find more than one child node with `children` in ResizeObserver. Will only observe first one.');
} else if (childNodes.length === 0) {
(0, _warning.default)(false, '`children` of ResizeObserver is empty. Nothing is in observe.');
return null;
}
var childNode = childNodes[0];
if (React.isValidElement(childNode) && (0, _ref.supportRef)(childNode)) {
var ref = childNode.ref;
childNodes[0] = React.cloneElement(childNode, {
ref: (0, _ref.composeRef)(ref, this.setChildNode)
});
}
return childNodes.length === 1 ? childNodes[0] : childNodes.map(function (node, index) {
if (!React.isValidElement(node) || 'key' in node && node.key !== null) {
return node;
}
return React.cloneElement(node, {
key: "".concat(INTERNAL_PREFIX_KEY, "-").concat(index)
});
});
}
}]);
return ReactResizeObserver;
}(React.Component);
ReactResizeObserver.displayName = 'ResizeObserver';
var _default = ReactResizeObserver;
exports.default = _default;

View File

@@ -0,0 +1,79 @@
{
"name": "rc-resize-observer",
"version": "0.2.6",
"description": "Resize observer for React",
"keywords": [
"react",
"react-component",
"react-resize-observer",
"resize-observer"
],
"main": "./lib/index",
"module": "./es/index",
"files": [
"assets/*.css",
"assets/*.less",
"es",
"lib",
"dist"
],
"homepage": "https://react-component.github.io/resize-observer",
"repository": {
"type": "git",
"url": "git@github.com:react-component/resize-observer.git"
},
"bugs": {
"url": "http://github.com/react-component/resize-observer/issues"
},
"license": "MIT",
"scripts": {
"start": "cross-env NODE_ENV=development father doc dev --storybook",
"build": "father doc build --storybook",
"compile": "father build && lessc assets/index.less assets/index.css",
"gh-pages": "npm run build && father doc deploy",
"prepublishOnly": "npm run compile && np --no-cleanup --yolo --no-publish",
"postpublish": "npm run gh-pages",
"lint": "eslint src/ --ext .ts,.tsx,.jsx,.js,.md",
"prettier": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"",
"test": "father test",
"coverage": "father test --coverage",
"now-build": "npm run build"
},
"dependencies": {
"@babel/runtime": "^7.10.1",
"classnames": "^2.2.1",
"rc-util": "^5.0.0",
"resize-observer-polyfill": "^1.5.1"
},
"devDependencies": {
"@types/classnames": "^2.2.9",
"@types/jest": "^26.0.6",
"@types/react": "^16.9.2",
"@types/react-dom": "^16.9.0",
"@umijs/fabric": "^2.0.9",
"coveralls": "^3.0.6",
"cross-env": "^7.0.2",
"enzyme": "^3.0.0",
"enzyme-adapter-react-16": "^1.0.1",
"enzyme-to-json": "^3.4.0",
"father": "^2.13.4",
"less": "^3.10.3",
"np": "^6.2.4",
"prettier": "^2.1.1",
"pretty-quick": "^3.0.1",
"react": "^16.0.0",
"react-dom": "^16.0.0",
"react-test-renderer": "^16.0.0",
"regenerator-runtime": "^0.13.7"
},
"peerDependencies": {
"react": ">=16.9.0",
"react-dom": ">=16.9.0"
},
"cnpm": {
"mode": "npm"
},
"tnpm": {
"mode": "npm"
}
}

60
node_modules/@ant-design/pro-descriptions/package.json generated vendored Normal file
View File

@@ -0,0 +1,60 @@
{
"name": "@ant-design/pro-descriptions",
"version": "2.6.10",
"description": "@ant-design/pro-descriptions",
"keywords": [
"antd",
"admin",
"ant-design",
"ant-design-pro"
],
"homepage": "https://github.com/ant-design/pro-components/tree/master/packages/descriptions#readme",
"bugs": "http://github.com/umijs/plugins/issues",
"repository": {
"type": "git",
"url": "git+https://github.com/ant-design/pro-components.git"
},
"license": "MIT",
"sideEffects": false,
"main": "lib/index.js",
"module": "es/index.js",
"types": "es/index.d.ts",
"files": [
"es",
"dist",
"lib"
],
"scripts": {
"build": "father build"
},
"browserslist": [
"last 2 versions",
"Firefox ESR",
"> 1%",
"ie >= 11"
],
"dependencies": {
"@ant-design/pro-field": "3.1.0",
"@ant-design/pro-form": "2.32.0",
"@ant-design/pro-provider": "2.16.2",
"@ant-design/pro-skeleton": "2.2.1",
"@ant-design/pro-utils": "2.18.0",
"@babel/runtime": "^7.18.0",
"rc-resize-observer": "^0.2.3",
"rc-util": "^5.0.6"
},
"devDependencies": {
"typescript": "^5.0.4"
},
"peerDependencies": {
"antd": "^4.24.15 || ^5.11.2",
"react": ">=17.0.0"
},
"publishConfig": {
"access": "public"
},
"authors": [
"chencheng <sorrycc@gmail.com> (https://github.com/sorrycc)",
"chenshuai2144 <qixian.cs@outlook.om> (https://github.com/chenshuai2144)"
]
}