Update from Vibe Studio

This commit is contained in:
Vibe Studio
2026-01-16 01:51:36 +00:00
parent a4605e311a
commit 58905d02c2
28599 changed files with 2179074 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
import type { ProFieldEmptyText } from '@ant-design/pro-field';
import type { ProFormFieldProps } from '@ant-design/pro-form';
import type { ProSchemaComponentTypes, UseEditableUtilType } from '@ant-design/pro-utils';
import { AnyObject } from 'antd/es/_util/type';
import React from 'react';
import type { ContainerType } from '../Store/Provide';
import type { ProColumnType } from '../index';
/**
* 拼接用于编辑的 key
*/
export declare const spellNamePath: (...rest: any[]) => React.Key[];
type CellRenderFromItemProps<T extends AnyObject> = {
text: string | number | (string | number)[];
valueType: ProColumnType['valueType'];
index: number;
rowData?: T;
columnEmptyText?: ProFieldEmptyText;
columnProps?: ProColumnType<T> & {
entity: T;
};
type?: ProSchemaComponentTypes;
recordKey?: React.Key;
mode: 'edit' | 'read';
/**
* If there is, use EditableTable in the Form
*/
prefixName?: string;
counter: ReturnType<ContainerType>;
proFieldProps: ProFormFieldProps;
subName: string[];
editableUtils: UseEditableUtilType;
};
/**
* 根据不同的类型来转化数值
*
* @param text
* @param valueType
*/
declare function cellRenderToFromItem<T extends AnyObject>(config: CellRenderFromItemProps<T>): React.ReactNode;
export default cellRenderToFromItem;

View File

@@ -0,0 +1,215 @@
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
var _excluded = ["children"];
import { FieldContext, ProForm, ProFormField } from '@ant-design/pro-form';
import { InlineErrorFormItem, getFieldPropsOrFormItemProps, runFunction } from '@ant-design/pro-utils';
import { Form } from 'antd';
import get from "rc-util/es/utils/get";
import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';
import { jsx as _jsx } from "react/jsx-runtime";
import { Fragment as _Fragment } from "react/jsx-runtime";
var SHOW_EMPTY_TEXT_LIST = ['', null, undefined];
/**
* 拼接用于编辑的 key
*/
export var spellNamePath = function spellNamePath() {
for (var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
}
return rest.filter(function (index) {
return index !== undefined;
}).map(function (item) {
if (typeof item === 'number') {
return item.toString();
}
return item;
}).flat(1);
};
var CellRenderFromItem = function CellRenderFromItem(props) {
var formContext = useContext(FieldContext);
var columnProps = props.columnProps,
prefixName = props.prefixName,
text = props.text,
counter = props.counter,
rowData = props.rowData,
index = props.index,
recordKey = props.recordKey,
subName = props.subName,
proFieldProps = props.proFieldProps,
editableUtils = props.editableUtils;
var editableForm = ProForm.useFormInstance();
var key = recordKey || index;
var realIndex = useMemo(function () {
var _editableUtils$getRea, _editableUtils$getRea2;
return (_editableUtils$getRea = editableUtils === null || editableUtils === void 0 || (_editableUtils$getRea2 = editableUtils.getRealIndex) === null || _editableUtils$getRea2 === void 0 ? void 0 : _editableUtils$getRea2.call(editableUtils, rowData)) !== null && _editableUtils$getRea !== void 0 ? _editableUtils$getRea : index;
}, [editableUtils, index, rowData]);
var _useState = useState(function () {
var _ref, _columnProps$key;
return spellNamePath(prefixName, prefixName ? subName : [], prefixName ? realIndex : key, (_ref = (_columnProps$key = columnProps === null || columnProps === void 0 ? void 0 : columnProps.key) !== null && _columnProps$key !== void 0 ? _columnProps$key : columnProps === null || columnProps === void 0 ? void 0 : columnProps.dataIndex) !== null && _ref !== void 0 ? _ref : index);
}),
_useState2 = _slicedToArray(_useState, 2),
formItemName = _useState2[0],
setName = _useState2[1];
var rowName = useMemo(function () {
return formItemName.slice(0, -1);
}, [formItemName]);
useEffect(function () {
var _ref2, _columnProps$key2;
var value = spellNamePath(prefixName, prefixName ? subName : [], prefixName ? realIndex : key, (_ref2 = (_columnProps$key2 = columnProps === null || columnProps === void 0 ? void 0 : columnProps.key) !== null && _columnProps$key2 !== void 0 ? _columnProps$key2 : columnProps === null || columnProps === void 0 ? void 0 : columnProps.dataIndex) !== null && _ref2 !== void 0 ? _ref2 : index);
if (value.join('-') !== formItemName.join('-')) setName(value);
}, [columnProps === null || columnProps === void 0 ? void 0 : columnProps.dataIndex, columnProps === null || columnProps === void 0 ? void 0 : columnProps.key, index, recordKey, prefixName, key, subName, formItemName, realIndex]);
var needProps = useMemo(function () {
return [editableForm, _objectSpread(_objectSpread({}, columnProps), {}, {
rowKey: rowName,
rowIndex: index,
isEditable: true
})];
}, [columnProps, editableForm, index, rowName]);
var InlineItem = useCallback(function (_ref3) {
var children = _ref3.children,
restProps = _objectWithoutProperties(_ref3, _excluded);
return /*#__PURE__*/_jsx(InlineErrorFormItem, _objectSpread(_objectSpread({
popoverProps: {
getPopupContainer: formContext.getPopupContainer || function () {
return counter.rootDomRef.current || document.body;
}
},
errorType: "popover",
name: formItemName
}, restProps), {}, {
children: children
}), key);
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[key, formItemName]);
var generateFormItem = useCallback(function () {
var _ref4, _ref5;
var formItemProps = _objectSpread({}, getFieldPropsOrFormItemProps.apply(void 0, [columnProps === null || columnProps === void 0 ? void 0 : columnProps.formItemProps].concat(_toConsumableArray(needProps))));
formItemProps.messageVariables = _objectSpread({
label: (columnProps === null || columnProps === void 0 ? void 0 : columnProps.title) || '此项',
type: (columnProps === null || columnProps === void 0 ? void 0 : columnProps.valueType) || '文本'
}, formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.messageVariables);
formItemProps.initialValue = (_ref4 = (_ref5 = prefixName ? null : text) !== null && _ref5 !== void 0 ? _ref5 : formItemProps === null || formItemProps === void 0 ? void 0 : formItemProps.initialValue) !== null && _ref4 !== void 0 ? _ref4 : columnProps === null || columnProps === void 0 ? void 0 : columnProps.initialValue;
var fieldDom = /*#__PURE__*/_jsx(ProFormField, _objectSpread({
cacheForSwr: true,
name: formItemName,
proFormFieldKey: key,
ignoreFormItem: true,
fieldProps: getFieldPropsOrFormItemProps.apply(void 0, [columnProps === null || columnProps === void 0 ? void 0 : columnProps.fieldProps].concat(_toConsumableArray(needProps)))
}, proFieldProps), formItemName.join('-'));
/**
* 如果没有自定义直接返回
*/
if (columnProps !== null && columnProps !== void 0 && columnProps.renderFormItem) {
fieldDom = columnProps.renderFormItem(_objectSpread(_objectSpread({}, columnProps), {}, {
index: index,
isEditable: true,
type: 'table'
}), {
defaultRender: function defaultRender() {
return /*#__PURE__*/_jsx(_Fragment, {
children: fieldDom
});
},
type: 'form',
recordKey: recordKey,
record: _objectSpread(_objectSpread({}, rowData), editableForm === null || editableForm === void 0 ? void 0 : editableForm.getFieldValue([key])),
isEditable: true
}, editableForm, props.editableUtils);
// 如果需要完全自定义可以不要name
if (columnProps.ignoreFormItem) return /*#__PURE__*/_jsx(_Fragment, {
children: fieldDom
});
}
return /*#__PURE__*/_jsx(InlineItem, _objectSpread(_objectSpread({}, formItemProps), {}, {
children: fieldDom
}), formItemName.join('-'));
}, [columnProps, needProps, prefixName, text, key, formItemName, proFieldProps, InlineItem, index, recordKey, rowData, editableForm, props.editableUtils]);
if (formItemName.length === 0) return null;
if (typeof (columnProps === null || columnProps === void 0 ? void 0 : columnProps.renderFormItem) === 'function' || typeof (columnProps === null || columnProps === void 0 ? void 0 : columnProps.fieldProps) === 'function' || typeof (columnProps === null || columnProps === void 0 ? void 0 : columnProps.formItemProps) === 'function') {
return /*#__PURE__*/_jsx(Form.Item, {
noStyle: true,
shouldUpdate: function shouldUpdate(pre, next) {
if (pre === next) return false;
var shouldName = [rowName].flat(1);
try {
return JSON.stringify(get(pre, shouldName)) !== JSON.stringify(get(next, shouldName));
} catch (error) {
return true;
}
},
children: function children() {
return generateFormItem();
}
});
}
return generateFormItem();
};
/**
* 根据不同的类型来转化数值
*
* @param text
* @param valueType
*/
function cellRenderToFromItem(config) {
var _columnProps$dataInde, _config$recordKey;
var text = config.text,
valueType = config.valueType,
rowData = config.rowData,
columnProps = config.columnProps,
index = config.index;
// 如果 valueType === text ,没必要多走一次 render
if ((!valueType || ['textarea', 'text'].includes(valueType.toString())) &&
// valueEnum 存在说明是个select
!(columnProps !== null && columnProps !== void 0 && columnProps.valueEnum) && config.mode === 'read') {
// 如果是''、null、undefined 显示columnEmptyText
return SHOW_EMPTY_TEXT_LIST.includes(text) ? config.columnEmptyText : text;
}
if (typeof valueType === 'function' && rowData) {
// 防止valueType是函数,并且text是''、null、undefined跳过显式设置的columnEmptyText
return cellRenderToFromItem(_objectSpread(_objectSpread({}, config), {}, {
valueType: valueType(rowData, config.type) || 'text'
}));
}
var columnKey = (columnProps === null || columnProps === void 0 ? void 0 : columnProps.key) || (columnProps === null || columnProps === void 0 || (_columnProps$dataInde = columnProps.dataIndex) === null || _columnProps$dataInde === void 0 ? void 0 : _columnProps$dataInde.toString());
var dependencies = columnProps !== null && columnProps !== void 0 && columnProps.dependencies ? [config.prefixName, config.prefixName ? index === null || index === void 0 ? void 0 : index.toString() : (_config$recordKey = config.recordKey) === null || _config$recordKey === void 0 ? void 0 : _config$recordKey.toString(), columnProps === null || columnProps === void 0 ? void 0 : columnProps.dependencies].filter(Boolean).flat(1) : [];
/**
* 生成公用的 proField dom 配置
*/
var proFieldProps = {
valueEnum: runFunction(columnProps === null || columnProps === void 0 ? void 0 : columnProps.valueEnum, rowData),
request: columnProps === null || columnProps === void 0 ? void 0 : columnProps.request,
dependencies: columnProps !== null && columnProps !== void 0 && columnProps.dependencies ? [dependencies] : undefined,
originDependencies: columnProps !== null && columnProps !== void 0 && columnProps.dependencies ? [columnProps === null || columnProps === void 0 ? void 0 : columnProps.dependencies] : undefined,
params: runFunction(columnProps === null || columnProps === void 0 ? void 0 : columnProps.params, rowData, columnProps),
readonly: columnProps === null || columnProps === void 0 ? void 0 : columnProps.readonly,
text: valueType === 'index' || valueType === 'indexBorder' ? config.index : text,
mode: config.mode,
renderFormItem: undefined,
valueType: valueType,
// @ts-ignore
record: rowData,
proFieldProps: {
emptyText: config.columnEmptyText,
proFieldKey: columnKey ? "table-field-".concat(columnKey) : undefined
}
};
/** 只读模式直接返回就好了,不需要处理 formItem */
if (config.mode !== 'edit') {
return /*#__PURE__*/_jsx(ProFormField, _objectSpread({
mode: "read",
ignoreFormItem: true,
fieldProps: getFieldPropsOrFormItemProps(columnProps === null || columnProps === void 0 ? void 0 : columnProps.fieldProps, null, columnProps)
}, proFieldProps));
}
return /*#__PURE__*/_jsx(CellRenderFromItem, _objectSpread(_objectSpread({}, config), {}, {
proFieldProps: proFieldProps
}), config.recordKey);
}
export default cellRenderToFromItem;

View File

@@ -0,0 +1,41 @@
import type { ProFieldEmptyText } from '@ant-design/pro-field';
import type { ProSchemaComponentTypes, UseEditableUtilType } from '@ant-design/pro-utils';
import { AnyObject } from 'antd/es/_util/type';
import React from 'react';
import type { ContainerType } from '../Store/Provide';
import type { ProColumns } from '../typing';
/** 转化列的定义 */
type ColumnRenderInterface<T> = {
columnProps: ProColumns<T>;
text: any;
rowData: T;
index: number;
columnEmptyText?: ProFieldEmptyText;
type: ProSchemaComponentTypes;
counter: ReturnType<ContainerType>;
editableUtils: UseEditableUtilType;
subName: string[];
marginSM?: number;
};
/**
* 增加了 icon 的功能 render title
*
* @param item
*/
export declare const renderColumnsTitle: (item: ProColumns<any>) => string | number | boolean | Iterable<React.ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
/**
* 默认的 filter 方法
*
* @param value
* @param record
* @param dataIndex
* @returns
*/
export declare const defaultOnFilter: (value: string, record: any, dataIndex: string | string[]) => boolean;
/**
* 这个组件负责单元格的具体渲染
*
* @param param0
*/
export declare function columnRender<T extends AnyObject>({ columnProps, text, rowData, index, columnEmptyText, counter, type, subName, marginSM, editableUtils, }: ColumnRenderInterface<T>): any;
export {};

View File

@@ -0,0 +1,148 @@
import _typeof from "@babel/runtime/helpers/esm/typeof";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import { LabelIconTip, genCopyable, isNil } from '@ant-design/pro-utils';
import get from "rc-util/es/utils/get";
import React from 'react';
import { isMergeCell } from '.';
import cellRenderToFromItem from "./cellRenderToFromItem";
/** 转化列的定义 */
import { jsx as _jsx } from "react/jsx-runtime";
/**
* 增加了 icon 的功能 render title
*
* @param item
*/
export var renderColumnsTitle = function renderColumnsTitle(item) {
var _item$ellipsis;
var title = item.title;
var ellipsis = typeof (item === null || item === void 0 ? void 0 : item.ellipsis) === 'boolean' ? item === null || item === void 0 ? void 0 : item.ellipsis : item === null || item === void 0 || (_item$ellipsis = item.ellipsis) === null || _item$ellipsis === void 0 ? void 0 : _item$ellipsis.showTitle;
if (title && typeof title === 'function') {
return title(item, 'table', /*#__PURE__*/_jsx(LabelIconTip, {
label: null,
tooltip: item.tooltip || item.tip
}));
}
return /*#__PURE__*/_jsx(LabelIconTip, {
label: title,
tooltip: item.tooltip || item.tip,
ellipsis: ellipsis
});
};
/** 判断是否为不可编辑的单元格 */
function isNotEditableCell(text, rowData, index, editable) {
if (typeof editable === 'boolean') {
return editable === false;
}
return (editable === null || editable === void 0 ? void 0 : editable(text, rowData, index)) === false;
}
/**
* 默认的 filter 方法
*
* @param value
* @param record
* @param dataIndex
* @returns
*/
export var defaultOnFilter = function defaultOnFilter(value, record, dataIndex) {
var recordElement = Array.isArray(dataIndex) ? get(record, dataIndex) : record[dataIndex];
var itemValue = String(recordElement);
return String(itemValue) === String(value);
};
/**
* 这个组件负责单元格的具体渲染
*
* @param param0
*/
export function columnRender(_ref) {
var columnProps = _ref.columnProps,
text = _ref.text,
rowData = _ref.rowData,
index = _ref.index,
columnEmptyText = _ref.columnEmptyText,
counter = _ref.counter,
type = _ref.type,
subName = _ref.subName,
marginSM = _ref.marginSM,
editableUtils = _ref.editableUtils;
var action = counter.action,
prefixName = counter.prefixName;
var _editableUtils$isEdit = editableUtils.isEditable(_objectSpread(_objectSpread({}, rowData), {}, {
index: index
})),
isEditable = _editableUtils$isEdit.isEditable,
recordKey = _editableUtils$isEdit.recordKey;
var _columnProps$renderTe = columnProps.renderText,
renderText = _columnProps$renderTe === void 0 ? function (val) {
return val;
} : _columnProps$renderTe;
var renderTextStr = renderText(text, rowData, index, action);
var mode = isEditable && !isNotEditableCell(text, rowData, index, columnProps === null || columnProps === void 0 ? void 0 : columnProps.editable) ? 'edit' : 'read';
var textDom = cellRenderToFromItem({
text: renderTextStr,
valueType: columnProps.valueType || 'text',
index: index,
rowData: rowData,
subName: subName,
columnProps: _objectSpread(_objectSpread({}, columnProps), {}, {
// 为了兼容性,原来写了个错别字
// @ts-ignore
entry: rowData,
entity: rowData
}),
counter: counter,
columnEmptyText: columnEmptyText,
type: type,
recordKey: recordKey,
mode: mode,
prefixName: prefixName,
editableUtils: editableUtils
});
var dom = mode === 'edit' ? textDom : genCopyable(textDom, columnProps, renderTextStr);
/** 如果是编辑模式,并且 renderFormItem 存在直接走 renderFormItem */
if (mode === 'edit') {
if (columnProps.valueType === 'option') {
return /*#__PURE__*/_jsx("div", {
style: {
display: 'flex',
alignItems: 'center',
gap: marginSM,
justifyContent: columnProps.align === 'center' ? 'center' : 'flex-start'
},
children: editableUtils.actionRender(_objectSpread(_objectSpread({}, rowData), {}, {
index: columnProps.index || index
}))
});
}
return dom;
}
if (!columnProps.render) {
var isReactRenderNode = /*#__PURE__*/React.isValidElement(dom) || ['string', 'number'].includes(_typeof(dom));
return !isNil(dom) && isReactRenderNode ? dom : null;
}
var renderDom = columnProps.render(dom, rowData, index, _objectSpread(_objectSpread({}, action), editableUtils), _objectSpread(_objectSpread({}, columnProps), {}, {
isEditable: isEditable,
type: 'table'
}));
// 如果是合并单元格的,直接返回对象
if (isMergeCell(renderDom)) {
return renderDom;
}
if (renderDom && columnProps.valueType === 'option' && Array.isArray(renderDom)) {
return /*#__PURE__*/_jsx("div", {
style: {
display: 'flex',
alignItems: 'center',
justifyContent: 'flex-start',
gap: 8
},
children: renderDom
});
}
return renderDom;
}

View File

@@ -0,0 +1,2 @@
import type { ColumnsState } from '../Store/Provide';
export declare const columnSort: (columnsMap: Record<string, ColumnsState>) => (a: any, b: any) => number;

View File

@@ -0,0 +1,23 @@
export var columnSort = function columnSort(columnsMap) {
return function (a, b) {
var _columnsMap$aKey, _columnsMap$bKey;
var aFixed = a.fixed,
aIndex = a.index;
var bFixed = b.fixed,
bIndex = b.index;
if (aFixed === 'left' && bFixed !== 'left' || bFixed === 'right' && aFixed !== 'right') {
return -2;
}
if (bFixed === 'left' && aFixed !== 'left' || aFixed === 'right' && bFixed !== 'right') {
return 2;
}
// 如果没有index在 dataIndex 或者 key 不存在的时候他会报错
var aKey = a.key || "".concat(aIndex);
var bKey = b.key || "".concat(bIndex);
if ((_columnsMap$aKey = columnsMap[aKey]) !== null && _columnsMap$aKey !== void 0 && _columnsMap$aKey.order || (_columnsMap$bKey = columnsMap[bKey]) !== null && _columnsMap$bKey !== void 0 && _columnsMap$bKey.order) {
var _columnsMap$aKey2, _columnsMap$bKey2;
return (((_columnsMap$aKey2 = columnsMap[aKey]) === null || _columnsMap$aKey2 === void 0 ? void 0 : _columnsMap$aKey2.order) || 0) - (((_columnsMap$bKey2 = columnsMap[bKey]) === null || _columnsMap$bKey2 === void 0 ? void 0 : _columnsMap$bKey2.order) || 0);
}
return (a.index || 0) - (b.index || 0);
};
};

View File

@@ -0,0 +1,30 @@
import type { ProFieldEmptyText } from '@ant-design/pro-field';
import type { ProSchemaComponentTypes, UseEditableUtilType } from '@ant-design/pro-utils';
import type { TableColumnType, TableProps } from 'antd';
import { AnyObject } from 'antd/es/_util/type';
import { SortOrder } from 'antd/lib/table/interface';
import type { ContainerType } from '../Store/Provide';
import type { ProColumns } from '../typing';
type ColumnToColumnReturnType<T> = (TableColumnType<T> & {
index?: number;
})[];
type ColumnToColumnParams<T> = {
columns: ProColumns<T, any>[];
counter: ReturnType<ContainerType>;
columnEmptyText: ProFieldEmptyText;
type: ProSchemaComponentTypes;
editableUtils: UseEditableUtilType;
proFilter: Record<string, (string | number)[] | null>;
proSort: Record<string, SortOrder>;
} & Pick<TableProps<T>, 'rowKey' | 'childrenColumnName'>;
/**
* 转化 columns 到 pro 的格式 主要是 render 方法的自行实现
*
* @param columns
* @param map
* @param columnEmptyText
*/
export declare function genProColumnToColumn<T extends AnyObject>(params: ColumnToColumnParams<T> & {
marginSM: number;
}, parents?: ProColumns<T, any>): ColumnToColumnReturnType<T>;
export {};

View File

@@ -0,0 +1,129 @@
import _typeof from "@babel/runtime/helpers/esm/typeof";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import { proFieldParsingValueEnumToArray } from '@ant-design/pro-field';
import { omitBoolean, omitUndefinedAndEmptyArr, runFunction } from '@ant-design/pro-utils';
import { Table } from 'antd';
import { columnRender, defaultOnFilter, renderColumnsTitle } from "./columnRender";
import { genColumnKey } from "./index";
/**
* 转化 columns 到 pro 的格式 主要是 render 方法的自行实现
*
* @param columns
* @param map
* @param columnEmptyText
*/
export function genProColumnToColumn(params, parents) {
var _columns$map;
var columns = params.columns,
counter = params.counter,
columnEmptyText = params.columnEmptyText,
type = params.type,
editableUtils = params.editableUtils,
marginSM = params.marginSM,
_params$rowKey = params.rowKey,
rowKey = _params$rowKey === void 0 ? 'id' : _params$rowKey,
_params$childrenColum = params.childrenColumnName,
childrenColumnName = _params$childrenColum === void 0 ? 'children' : _params$childrenColum,
_params$proFilter = params.proFilter,
proFilter = _params$proFilter === void 0 ? {} : _params$proFilter,
proSort = params.proSort;
var subNameRecord = new Map();
return columns === null || columns === void 0 || (_columns$map = columns.map(function (columnProps, columnsIndex) {
if (columnProps === Table.EXPAND_COLUMN) return columnProps;
if (columnProps === Table.SELECTION_COLUMN) return columnProps;
var _ref = columnProps,
key = _ref.key,
dataIndex = _ref.dataIndex,
valueEnum = _ref.valueEnum,
_ref$valueType = _ref.valueType,
valueType = _ref$valueType === void 0 ? 'text' : _ref$valueType,
children = _ref.children,
onFilter = _ref.onFilter,
_ref$filters = _ref.filters,
filters = _ref$filters === void 0 ? [] : _ref$filters,
sorter = _ref.sorter,
columnFilteredValue = _ref.filteredValue;
var columnKey = genColumnKey(key || (dataIndex === null || dataIndex === void 0 ? void 0 : dataIndex.toString()), [parents === null || parents === void 0 ? void 0 : parents.key, columnsIndex].filter(Boolean).join('-'));
// 这些都没有,说明是普通的表格不需要 pro 管理
var noNeedPro = !valueEnum && !valueType && !children;
if (noNeedPro) {
return _objectSpread({
index: columnsIndex
}, columnProps);
}
var config = counter.columnsMap[columnKey] || {
fixed: columnProps.fixed
};
var genOnFilter = function genOnFilter() {
if (onFilter === true) {
return function (value, row) {
return defaultOnFilter(value, row, dataIndex);
};
}
return omitBoolean(onFilter);
};
// 对应筛选值,用作双向绑定
var filteredValue = columnKey && (proFilter === null || proFilter === void 0 ? void 0 : proFilter[columnKey]) !== undefined ? proFilter === null || proFilter === void 0 ? void 0 : proFilter[columnKey] : null;
// 对应排序值,用作双向绑定
var sortOrder = columnKey && proSort[columnKey] !== undefined ? proSort[columnKey] : null;
var keyName = rowKey;
var tempColumns = _objectSpread(_objectSpread({
index: columnsIndex,
key: columnKey
}, columnProps), {}, {
title: renderColumnsTitle(columnProps),
valueEnum: valueEnum,
filters: filters === true ? proFieldParsingValueEnumToArray(runFunction(valueEnum, undefined)).filter(function (valueItem) {
return valueItem && valueItem.value !== 'all';
}) : filters,
onFilter: genOnFilter(),
filteredValue:
// 优先使用用户明确设置的 filteredValue
columnFilteredValue !== undefined ? columnFilteredValue :
// 否则,只有在服务端筛选时才使用计算的 filteredValue
filters && genOnFilter() == null ? filteredValue : undefined,
sortOrder: sorter === true ? sortOrder : undefined,
fixed: config.fixed,
width: columnProps.width || (columnProps.fixed ? 200 : undefined),
children: columnProps.children ? genProColumnToColumn(_objectSpread(_objectSpread({}, params), {}, {
columns: (columnProps === null || columnProps === void 0 ? void 0 : columnProps.children) || []
}), _objectSpread(_objectSpread({}, columnProps), {}, {
key: columnKey
})) : undefined,
render: function render(text, rowData, index) {
if (typeof rowKey === 'function') {
keyName = rowKey(rowData, index);
}
var uniqueKey;
if (_typeof(rowData) === 'object' && rowData !== null && Reflect.has(rowData, keyName)) {
var _childrenColumnName;
uniqueKey = rowData[keyName];
var parentInfo = subNameRecord.get(uniqueKey) || [];
(_childrenColumnName = rowData[childrenColumnName]) === null || _childrenColumnName === void 0 || _childrenColumnName.forEach(function (item) {
var itemUniqueKey = item[keyName];
if (!subNameRecord.has(itemUniqueKey)) {
subNameRecord.set(itemUniqueKey, parentInfo.concat([index, childrenColumnName]));
}
});
}
var renderProps = {
columnProps: columnProps,
text: text,
rowData: rowData,
index: index,
columnEmptyText: columnEmptyText,
counter: counter,
type: type,
marginSM: marginSM,
subName: subNameRecord.get(uniqueKey),
editableUtils: editableUtils
};
return columnRender(renderProps);
}
});
return omitUndefinedAndEmptyArr(tempColumns);
})) === null || _columns$map === void 0 ? void 0 : _columns$map.filter(function (item) {
return !item.hideInTable;
});
}

64
node_modules/@ant-design/pro-table/es/utils/index.d.ts generated vendored Normal file
View File

@@ -0,0 +1,64 @@
import type { IntlType } from '@ant-design/pro-provider';
import type { UseEditableUtilType } from '@ant-design/pro-utils';
import type { TablePaginationConfig } from 'antd';
import type { SortOrder } from 'antd/lib/table/interface';
import type React from 'react';
import { Key } from 'react';
import type { ActionType, Bordered, BorderedType, ProColumns, UseFetchDataAction } from '../typing';
/**
* 检查值是否存在 为了 避开 0 和 false
*
* @param value
*/
export declare const checkUndefinedOrNull: (value: any) => boolean;
/**
* 合并用户 props 和 预设的 props
*
* @param pagination
* @param action
* @param intl
*/
export declare function mergePagination<T>(pagination: TablePaginationConfig | boolean | undefined, pageInfo: UseFetchDataAction<T>['pageInfo'] & {
setPageInfo: any;
}, intl: IntlType): TablePaginationConfig | false | undefined;
/**
* 获取用户的 action 信息
*
* @param actionRef
* @param counter
* @param onCleanSelected
*/
export declare function useActionType<T>(ref: React.MutableRefObject<ActionType | undefined>, action: UseFetchDataAction<T>, props: {
fullScreen: () => void;
onCleanSelected: () => void;
resetAll: () => void;
editableUtils: UseEditableUtilType;
}): void;
type PostDataType<T> = (data: T) => T;
/**
* 一个转化的 pipeline 列表
*
* @param data
* @param pipeline
*/
export declare function postDataPipeline<T>(data: T, pipeline: PostDataType<T>[]): T;
export declare const isBordered: (borderType: BorderedType, border?: Bordered) => boolean | undefined;
export declare const isMergeCell: (dom: any) => any;
/**
* 根据 key 和 dataIndex 生成唯一 id
*
* @param key 用户设置的 key
* @param dataIndex 在对象中的数据
* @param index 序列号,理论上唯一
*/
export declare const genColumnKey: (key?: string | number | Key, index?: number | string) => string;
/**
* 从 ProColumns 数组中取出默认的排序和筛选数据
*
* @param columns ProColumns
*/
export declare function parseDefaultColumnConfig<T, Value>(columns: ProColumns<T, Value>[]): {
sort: Record<string, SortOrder>;
filter: Record<string, (string | number)[] | null>;
};
export {};

244
node_modules/@ant-design/pro-table/es/utils/index.js generated vendored Normal file
View File

@@ -0,0 +1,244 @@
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _typeof from "@babel/runtime/helpers/esm/typeof";
/**
* 检查值是否存在 为了 避开 0 和 false
*
* @param value
*/
export var checkUndefinedOrNull = function checkUndefinedOrNull(value) {
return value !== undefined && value !== null;
};
/**
* 合并用户 props 和 预设的 props
*
* @param pagination
* @param action
* @param intl
*/
export function mergePagination(pagination, pageInfo, intl) {
var _pagination$current, _pagination$pageSize;
if (pagination === false) {
return false;
}
var total = pageInfo.total,
current = pageInfo.current,
pageSize = pageInfo.pageSize,
setPageInfo = pageInfo.setPageInfo;
var defaultPagination = _typeof(pagination) === 'object' ? pagination : {};
return _objectSpread(_objectSpread({
showTotal: function showTotal(all, range) {
return "".concat(intl.getMessage('pagination.total.range', '第'), " ").concat(range[0], "-").concat(range[1], " ").concat(intl.getMessage('pagination.total.total', '条/总共'), " ").concat(all, " ").concat(intl.getMessage('pagination.total.item', '条'));
},
total: total
}, defaultPagination), {}, {
current: pagination !== true && pagination ? (_pagination$current = pagination.current) !== null && _pagination$current !== void 0 ? _pagination$current : current : current,
pageSize: pagination !== true && pagination ? (_pagination$pageSize = pagination.pageSize) !== null && _pagination$pageSize !== void 0 ? _pagination$pageSize : pageSize : pageSize,
onChange: function onChange(page, newPageSize) {
var _ref = pagination,
onChange = _ref.onChange;
onChange === null || onChange === void 0 || onChange(page, newPageSize || 20);
// pageSize 改变之后就没必要切换页码
if (newPageSize !== pageSize || current !== page) {
setPageInfo({
pageSize: newPageSize,
current: page
});
}
}
});
}
/**
* 获取用户的 action 信息
*
* @param actionRef
* @param counter
* @param onCleanSelected
*/
export function useActionType(ref, action, props) {
/** 这里生成action的映射保证 action 总是使用的最新 只需要渲染一次即可 */
var userAction = _objectSpread(_objectSpread({}, props.editableUtils), {}, {
pageInfo: action.pageInfo,
reload: function () {
var _reload = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(resetPageIndex) {
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
if (!resetPageIndex) {
_context.next = 3;
break;
}
_context.next = 3;
return action.setPageInfo({
current: 1
});
case 3:
_context.next = 5;
return action === null || action === void 0 ? void 0 : action.reload();
case 5:
case "end":
return _context.stop();
}
}, _callee);
}));
function reload(_x) {
return _reload.apply(this, arguments);
}
return reload;
}(),
reloadAndRest: function () {
var _reloadAndRest = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
// reload 之后大概率会切换数据,清空一下选择。
props.onCleanSelected();
_context2.next = 3;
return action.setPageInfo({
current: 1
});
case 3:
_context2.next = 5;
return action === null || action === void 0 ? void 0 : action.reload();
case 5:
case "end":
return _context2.stop();
}
}, _callee2);
}));
function reloadAndRest() {
return _reloadAndRest.apply(this, arguments);
}
return reloadAndRest;
}(),
reset: function () {
var _reset = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
var _action$reset;
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return props.resetAll();
case 2:
_context3.next = 4;
return action === null || action === void 0 || (_action$reset = action.reset) === null || _action$reset === void 0 ? void 0 : _action$reset.call(action);
case 4:
_context3.next = 6;
return action === null || action === void 0 ? void 0 : action.reload();
case 6:
case "end":
return _context3.stop();
}
}, _callee3);
}));
function reset() {
return _reset.apply(this, arguments);
}
return reset;
}(),
fullScreen: function fullScreen() {
return props.fullScreen();
},
clearSelected: function clearSelected() {
return props.onCleanSelected();
},
setPageInfo: function setPageInfo(rest) {
return action.setPageInfo(rest);
}
});
// eslint-disable-next-line no-param-reassign
ref.current = userAction;
}
/**
* 一个转化的 pipeline 列表
*
* @param data
* @param pipeline
*/
export function postDataPipeline(data, pipeline) {
if (pipeline.filter(function (item) {
return item;
}).length < 1) {
return data;
}
return pipeline.reduce(function (pre, postData) {
return postData(pre);
}, data);
}
export var isBordered = function isBordered(borderType, border) {
if (border === undefined) {
return false;
}
if (typeof border === 'boolean') {
return border;
}
return border[borderType];
};
export var isMergeCell = function isMergeCell(dom // 如果是合并单元格的,直接返回对象
) {
var _dom$props;
return dom && _typeof(dom) === 'object' && (dom === null || dom === void 0 || (_dom$props = dom.props) === null || _dom$props === void 0 ? void 0 : _dom$props.colSpan);
};
/**
* 根据 key 和 dataIndex 生成唯一 id
*
* @param key 用户设置的 key
* @param dataIndex 在对象中的数据
* @param index 序列号,理论上唯一
*/
export var genColumnKey = function genColumnKey(key, index) {
if (key) {
return Array.isArray(key) ? key.join('-') : key.toString();
}
return "".concat(index);
};
/**
* 将 ProTable - column - dataIndex 转为字符串形式
*
* @param dataIndex Column 中的 dataIndex
*/
function parseDataIndex(dataIndex) {
if (Array.isArray(dataIndex)) {
return dataIndex.join(',');
}
return dataIndex === null || dataIndex === void 0 ? void 0 : dataIndex.toString();
}
/**
* 从 ProColumns 数组中取出默认的排序和筛选数据
*
* @param columns ProColumns
*/
export function parseDefaultColumnConfig(columns) {
var filter = {};
var sort = {};
columns.forEach(function (column) {
// 转换 dataIndex
var dataIndex = parseDataIndex(column.dataIndex);
if (!dataIndex) {
return;
}
// 当 column 启用 filters 功能时,取出默认的筛选值
if (column.filters) {
var defaultFilteredValue = column.defaultFilteredValue;
if (defaultFilteredValue === undefined) {
filter[dataIndex] = null;
} else {
filter[dataIndex] = column.defaultFilteredValue;
}
}
// 当 column 启用 sorter 功能时,取出默认的排序值
if (column.sorter && column.defaultSortOrder) {
sort[dataIndex] = column.defaultSortOrder;
}
});
return {
sort: sort,
filter: filter
};
}

View File

@@ -0,0 +1,14 @@
import type { TableComponents } from 'rc-table/lib/interface';
import React from 'react';
export interface UseDragSortOptions<T> {
dataSource?: T[];
onDragSortEnd?: (beforeIndex: number, afterIndex: number, newDataSource: T[]) => Promise<void> | void;
dragSortKey?: string;
components?: TableComponents<T>;
rowKey: any;
DragHandle: React.FC<any>;
}
export declare function useDragSort<T>(props: UseDragSortOptions<T>): {
DndContext: (contextProps: any) => import("react/jsx-runtime").JSX.Element;
components: TableComponents<T>;
};

View File

@@ -0,0 +1,158 @@
import _objectDestructuringEmpty from "@babel/runtime/helpers/esm/objectDestructuringEmpty";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
var _excluded = ["DragHandle", "dragSortKey"],
_excluded2 = ["dragSortKey"];
import { useRefFunction } from '@ant-design/pro-utils';
import { rectIntersection, DndContext, MouseSensor, PointerSensor, useSensor, useSensors } from '@dnd-kit/core';
import { restrictToVerticalAxis } from '@dnd-kit/modifiers';
import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';
import { CSS } from '@dnd-kit/utilities';
import React, { createContext, useCallback, useContext, useMemo } from 'react';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
var SortableItemContextValue = /*#__PURE__*/createContext({
handle: null
});
/**
* 拖拽排序表格的行,
* 如果有 DragHandle 回给 dragSortKey 所在的行注入 provide 和 handle
* 如果没有整个行都支持拖拽
* @param props
* @returns
*/
var SortableRow = function SortableRow(props) {
var _useSortable = useSortable({
id: props.id
}),
attributes = _useSortable.attributes,
listeners = _useSortable.listeners,
setNodeRef = _useSortable.setNodeRef,
transform = _useSortable.transform,
transition = _useSortable.transition;
var style = _objectSpread({
transform: CSS.Transform.toString(transform),
transition: transition
}, props === null || props === void 0 ? void 0 : props.style);
var DragHandle = props.DragHandle,
dragSortKey = props.dragSortKey,
rest = _objectWithoutProperties(props, _excluded);
if (dragSortKey) {
var doms = [];
React.Children.forEach(rest.children, function (child, index) {
if (child.key === dragSortKey) {
var _child$props, _child$props2;
doms.push( /*#__PURE__*/_jsx(SortableItemContextValue.Provider, {
value: {
handle: /*#__PURE__*/_jsx(DragHandle, _objectSpread(_objectSpread({
rowData: child === null || child === void 0 || (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.record,
index: child === null || child === void 0 || (_child$props2 = child.props) === null || _child$props2 === void 0 ? void 0 : _child$props2.index
}, listeners), attributes))
},
children: child
}, child.key || index));
return;
}
doms.push(child);
});
return /*#__PURE__*/_jsx("tr", _objectSpread(_objectSpread({}, rest), {}, {
ref: setNodeRef,
style: style,
children: doms
}));
}
return /*#__PURE__*/_jsx("tr", _objectSpread(_objectSpread(_objectSpread({}, rest), {}, {
ref: setNodeRef,
style: style
}, attributes), listeners));
};
/**
* 拖拽排序表格的 cell用与判断要不要展示 handle
*/
var SortableItemCell = /*#__PURE__*/React.memo(function (props) {
var dragSortKey = props.dragSortKey,
rest = _objectWithoutProperties(props, _excluded2);
var _useContext = useContext(SortableItemContextValue),
handle = _useContext.handle;
if (handle) {
return /*#__PURE__*/_jsx("td", _objectSpread(_objectSpread({}, rest), {}, {
children: /*#__PURE__*/_jsxs("div", {
style: {
display: 'flex',
alignItems: 'center'
},
children: [handle, " ", rest.children]
})
}));
}
return /*#__PURE__*/_jsx("td", _objectSpread({}, rest));
});
var SortContainer = function SortContainer(p) {
return /*#__PURE__*/_jsx("tbody", _objectSpread({}, p));
};
export function useDragSort(props) {
var _props$dataSource = props.dataSource,
dataSource = _props$dataSource === void 0 ? [] : _props$dataSource,
onDragSortEnd = props.onDragSortEnd,
DragHandle = props.DragHandle,
dragSortKey = props.dragSortKey;
var sensors = useSensors(useSensor(PointerSensor), useSensor(MouseSensor));
var handleDragEnd = useCallback(function (event) {
var _over$id;
var active = event.active,
over = event.over;
if (over !== null && over !== void 0 && (_over$id = over.id) !== null && _over$id !== void 0 && _over$id.toString() && active.id !== (over === null || over === void 0 ? void 0 : over.id)) {
var newData = arrayMove(dataSource || [], parseInt(active.id), parseInt(over.id));
onDragSortEnd === null || onDragSortEnd === void 0 || onDragSortEnd(parseInt(active.id), parseInt(over.id), newData || []);
}
}, [dataSource, onDragSortEnd]);
var DraggableContainer = useRefFunction(function (p) {
return /*#__PURE__*/_jsx(SortableContext, {
items: dataSource.map(function (_, index) {
return index === null || index === void 0 ? void 0 : index.toString();
}),
strategy: verticalListSortingStrategy,
children: /*#__PURE__*/_jsx(SortContainer, _objectSpread({}, p))
});
});
var DraggableBodyRow = useRefFunction(function (p) {
var _dataSource$findIndex;
var restProps = Object.assign({}, (_objectDestructuringEmpty(p), p));
// function findIndex base on Table rowKey props and should always be a right array index
var index = (_dataSource$findIndex = dataSource.findIndex(function (item) {
var _props$rowKey;
return item[(_props$rowKey = props.rowKey) !== null && _props$rowKey !== void 0 ? _props$rowKey : 'index'] === restProps['data-row-key'];
})) === null || _dataSource$findIndex === void 0 ? void 0 : _dataSource$findIndex.toString();
return /*#__PURE__*/_jsx(SortableRow, _objectSpread({
id: index,
dragSortKey: dragSortKey,
DragHandle: DragHandle
}, restProps), index);
});
var components = props.components || {};
if (dragSortKey) {
var _props$components;
components.body = _objectSpread({
wrapper: DraggableContainer,
row: DraggableBodyRow,
cell: SortableItemCell
}, ((_props$components = props.components) === null || _props$components === void 0 ? void 0 : _props$components.body) || {});
}
var memoDndContext = useMemo(function () {
return function (contextProps) {
return /*#__PURE__*/_jsx(DndContext, {
modifiers: [restrictToVerticalAxis],
sensors: sensors,
collisionDetection: rectIntersection,
onDragEnd: handleDragEnd,
children: contextProps.children
});
};
}, [handleDragEnd, sensors]);
return {
DndContext: memoDndContext,
components: components
};
}