@teamias/rex-design 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +43 -0
  3. package/dist/components/action-buttons/action-buttons.d.ts +2 -0
  4. package/dist/components/action-buttons/action-buttons.js +182 -0
  5. package/dist/components/action-buttons/demo/index.d.ts +2 -0
  6. package/dist/components/action-buttons/demo/index.js +69 -0
  7. package/dist/components/action-buttons/index.d.ts +3 -0
  8. package/dist/components/action-buttons/index.js +3 -0
  9. package/dist/components/action-buttons/modules/handlerFilter.d.ts +2 -0
  10. package/dist/components/action-buttons/modules/handlerFilter.js +62 -0
  11. package/dist/components/action-buttons/types.d.ts +96 -0
  12. package/dist/components/action-buttons/types.js +3 -0
  13. package/dist/components/base-form/base-form.d.ts +3 -0
  14. package/dist/components/base-form/base-form.js +260 -0
  15. package/dist/components/base-form/demo/index.d.ts +4 -0
  16. package/dist/components/base-form/demo/index.js +515 -0
  17. package/dist/components/base-form/index.d.ts +4 -0
  18. package/dist/components/base-form/index.js +4 -0
  19. package/dist/components/base-form/locales/en-US.json +21 -0
  20. package/dist/components/base-form/locales/zh-CN.json +21 -0
  21. package/dist/components/base-form/locales.index.d.ts +42 -0
  22. package/dist/components/base-form/locales.index.js +4 -0
  23. package/dist/components/base-form/modules/dependencyUtils.d.ts +13 -0
  24. package/dist/components/base-form/modules/dependencyUtils.js +43 -0
  25. package/dist/components/base-form/modules/handlerData.d.ts +8 -0
  26. package/dist/components/base-form/modules/handlerData.js +59 -0
  27. package/dist/components/base-form/modules/renderComponentNode.d.ts +11 -0
  28. package/dist/components/base-form/modules/renderComponentNode.js +607 -0
  29. package/dist/components/base-form/modules/valuesToFields.d.ts +10 -0
  30. package/dist/components/base-form/modules/valuesToFields.js +18 -0
  31. package/dist/components/base-form/style/index.d.ts +3 -0
  32. package/dist/components/base-form/style/index.js +8 -0
  33. package/dist/components/base-form/types.d.ts +181 -0
  34. package/dist/components/base-form/types.js +10 -0
  35. package/dist/components/base-list-table/base-list-table.d.ts +33 -0
  36. package/dist/components/base-list-table/base-list-table.js +292 -0
  37. package/dist/components/base-list-table/demo/BasicBaseListTable.d.ts +2 -0
  38. package/dist/components/base-list-table/demo/BasicBaseListTable.js +1469 -0
  39. package/dist/components/base-list-table/demo/NoData.d.ts +2 -0
  40. package/dist/components/base-list-table/demo/NoData.js +55 -0
  41. package/dist/components/base-list-table/demo/TableMaxRowCount.d.ts +2 -0
  42. package/dist/components/base-list-table/demo/TableMaxRowCount.js +1696 -0
  43. package/dist/components/base-list-table/demo/VirtualDemo.d.ts +2 -0
  44. package/dist/components/base-list-table/demo/VirtualDemo.js +548 -0
  45. package/dist/components/base-list-table/index.d.ts +1 -0
  46. package/dist/components/base-list-table/index.js +1 -0
  47. package/dist/components/base-list-table/style/index.d.ts +5 -0
  48. package/dist/components/base-list-table/style/index.js +17 -0
  49. package/dist/components/base-table/base-table.d.ts +51 -0
  50. package/dist/components/base-table/base-table.js +291 -0
  51. package/dist/components/base-table/components/BaseTableRow.d.ts +1 -0
  52. package/dist/components/base-table/components/BaseTableRow.js +129 -0
  53. package/dist/components/base-table/demo/BaseTableAll.d.ts +2 -0
  54. package/dist/components/base-table/demo/BaseTableAll.js +66 -0
  55. package/dist/components/base-table/demo/BaseTableBasic.d.ts +2 -0
  56. package/dist/components/base-table/demo/BaseTableBasic.js +58 -0
  57. package/dist/components/base-table/demo/BaseTableIndex.d.ts +2 -0
  58. package/dist/components/base-table/demo/BaseTableIndex.js +57 -0
  59. package/dist/components/base-table/demo/BaseTableRowSelect.d.ts +2 -0
  60. package/dist/components/base-table/demo/BaseTableRowSelect.js +45 -0
  61. package/dist/components/base-table/demo/tableData.d.ts +332 -0
  62. package/dist/components/base-table/demo/tableData.js +293 -0
  63. package/dist/components/base-table/index.d.ts +1 -0
  64. package/dist/components/base-table/index.js +1 -0
  65. package/dist/components/base-table/style/index.d.ts +3 -0
  66. package/dist/components/base-table/style/index.js +9 -0
  67. package/dist/components/data-cell/data-cell.d.ts +3 -0
  68. package/dist/components/data-cell/data-cell.js +17 -0
  69. package/dist/components/data-cell/demo/index.d.ts +2 -0
  70. package/dist/components/data-cell/demo/index.js +332 -0
  71. package/dist/components/data-cell/index.d.ts +2 -0
  72. package/dist/components/data-cell/index.js +2 -0
  73. package/dist/components/data-cell/modules/cellItemMap.d.ts +3 -0
  74. package/dist/components/data-cell/modules/cellItemMap.js +374 -0
  75. package/dist/components/data-cell/style/index.d.ts +7 -0
  76. package/dist/components/data-cell/style/index.js +23 -0
  77. package/dist/components/data-cell/types.d.ts +192 -0
  78. package/dist/components/data-cell/types.js +1 -0
  79. package/dist/components/icons/assets/icon-park--arrow-up.svg +7 -0
  80. package/dist/components/icons/assets/index.d.ts +4 -0
  81. package/dist/components/icons/assets/index.js +9 -0
  82. package/dist/components/icons/assets/svg-spinners--blocks-shuffle-3.svg +21 -0
  83. package/dist/components/icons/demo/index.d.ts +2 -0
  84. package/dist/components/icons/demo/index.js +43 -0
  85. package/dist/components/icons/icons.d.ts +39 -0
  86. package/dist/components/icons/icons.js +251 -0
  87. package/dist/components/icons/index.d.ts +1 -0
  88. package/dist/components/icons/index.js +1 -0
  89. package/dist/components/icons/style/index.d.ts +2 -0
  90. package/dist/components/icons/style/index.js +5 -0
  91. package/dist/components/media-viewer/demo/index.d.ts +2 -0
  92. package/dist/components/media-viewer/demo/index.js +23 -0
  93. package/dist/components/media-viewer/index.d.ts +1 -0
  94. package/dist/components/media-viewer/index.js +1 -0
  95. package/dist/components/media-viewer/media-viewer.d.ts +48 -0
  96. package/dist/components/media-viewer/media-viewer.js +119 -0
  97. package/dist/components/media-viewer/style/index.d.ts +6 -0
  98. package/dist/components/media-viewer/style/index.js +31 -0
  99. package/dist/hooks/request-fields-container/demo/index.d.ts +2 -0
  100. package/dist/hooks/request-fields-container/demo/index.js +36 -0
  101. package/dist/hooks/request-fields-container/index.d.ts +4 -0
  102. package/dist/hooks/request-fields-container/index.js +3 -0
  103. package/dist/hooks/request-fields-container/request-fields-container-context-provider.d.ts +22 -0
  104. package/dist/hooks/request-fields-container/request-fields-container-context-provider.js +134 -0
  105. package/dist/hooks/request-fields-container/request-fields-container-context.d.ts +39 -0
  106. package/dist/hooks/request-fields-container/request-fields-container-context.js +5 -0
  107. package/dist/hooks/request-fields-container/request-fields-container-hoc.d.ts +4 -0
  108. package/dist/hooks/request-fields-container/request-fields-container-hoc.js +31 -0
  109. package/dist/hooks/request-fields-container/use-request-fields-container.d.ts +22 -0
  110. package/dist/hooks/request-fields-container/use-request-fields-container.js +131 -0
  111. package/dist/hooks/rex-pro-config-provider/demo/index.d.ts +2 -0
  112. package/dist/hooks/rex-pro-config-provider/demo/index.js +61 -0
  113. package/dist/hooks/rex-pro-config-provider/index.d.ts +2 -0
  114. package/dist/hooks/rex-pro-config-provider/index.js +2 -0
  115. package/dist/hooks/rex-pro-config-provider/rex-pro-config-context.d.ts +27 -0
  116. package/dist/hooks/rex-pro-config-provider/rex-pro-config-context.js +33 -0
  117. package/dist/hooks/rex-pro-config-provider/rex-pro-config-provider.d.ts +6 -0
  118. package/dist/hooks/rex-pro-config-provider/rex-pro-config-provider.js +24 -0
  119. package/dist/hooks/rex-pro-config-provider/use-rex-pro-config-provider.d.ts +2 -0
  120. package/dist/hooks/rex-pro-config-provider/use-rex-pro-config-provider.js +11 -0
  121. package/dist/hooks/use-state-data/demo/index.d.ts +2 -0
  122. package/dist/hooks/use-state-data/demo/index.js +135 -0
  123. package/dist/hooks/use-state-data/index.d.ts +1 -0
  124. package/dist/hooks/use-state-data/index.js +1 -0
  125. package/dist/hooks/use-state-data/use-state-data.d.ts +11 -0
  126. package/dist/hooks/use-state-data/use-state-data.js +64 -0
  127. package/dist/index.d.ts +10 -0
  128. package/dist/index.js +10 -0
  129. package/dist/types/svg.d.ts +4 -0
  130. package/dist/utils/locales/en-US.json +13 -0
  131. package/dist/utils/locales/index.d.ts +26 -0
  132. package/dist/utils/locales/index.js +4 -0
  133. package/dist/utils/locales/zh-CN.json +13 -0
  134. package/package.json +90 -0
@@ -0,0 +1,181 @@
1
+ import { ProForm, ProFormCascader, ProFormCheckbox, ProFormDateRangePicker, ProFormDigit, ProFormDigitRange, ProFormItemRender, ProFormRadio, ProFormSelect, ProFormSwitch, ProFormText, ProFormTextArea, ProFormTreeSelect, ProFormDatePicker } from '@ant-design/pro-components';
2
+ import { TButtonFilterItem } from "../..";
3
+ import { Form, GetProps } from 'antd';
4
+ import { ReactNode } from 'react';
5
+ /** 组件props */
6
+ export interface IBaseFormProps {
7
+ /** 字段配置 */
8
+ fields?: Array<TInputProps | TDateRangeProps | TSelectProps | TSelectInputProps | TSelectDimProps | TCustomProps | TSelectDateRangeProps | TCascaderProps | TTreeSelectProps | TCheckboxProps | TCheckboxGroupProps | TRadioGroupProps | TInputNumberProps | TInputNumberRangeProps | TTextAreaProps | TSelectRadioProps | TMultipleComponentsProps | TSwitchProps | TDatePickerProps>;
9
+ /** 字段对应的本地代码配置 */
10
+ fieldProps?: Record<string, Exclude<IBaseFormProps['fields'], undefined>[number]>;
11
+ /**
12
+ * 每个表单项宽度
13
+ * @default 20%
14
+ */
15
+ itemWidth?: number | string;
16
+ itemMarginBottom?: number | string;
17
+ /** 每个 label 宽度 */
18
+ labelWidth?: string;
19
+ /**
20
+ * 数据请求器
21
+ * - 不传的情况下用注入的请求器
22
+ */
23
+ requestOptions?: (api: string, params: Record<string, unknown>, rawItem: IBaseFormFieldItem) => Promise<Exclude<IBaseFormFieldItem['options'], undefined>>;
24
+ /** label 显示到输入框内 */
25
+ inlineLabel?: boolean;
26
+ }
27
+ type TOmitComponentItemType = 'width';
28
+ export type TInputProps = IBaseFormFieldItem<'input'> & Omit<GetProps<typeof ProFormText>, TOmitComponentItemType>;
29
+ export type TSelectProps = IBaseFormFieldItem<'select'> & Omit<GetProps<typeof ProFormSelect>, TOmitComponentItemType>;
30
+ export type TSelectDimProps = IBaseFormFieldItem<'selectDim'> & Omit<GetProps<typeof ProFormSelect>, TOmitComponentItemType>;
31
+ export type TDateRangeProps = IBaseFormFieldItem<'dateRange'> & Omit<GetProps<typeof ProFormDateRangePicker>, TOmitComponentItemType>;
32
+ export type TCascaderProps = IBaseFormFieldItem<'cascader'> & Omit<GetProps<typeof ProFormCascader>, TOmitComponentItemType>;
33
+ export type TTreeSelectProps = IBaseFormFieldItem<'treeSelect'> & Omit<GetProps<typeof ProFormTreeSelect>, TOmitComponentItemType>;
34
+ export type TCheckboxProps = IBaseFormFieldItem<'checkbox'> & Omit<GetProps<typeof ProFormCheckbox>, TOmitComponentItemType>;
35
+ export type TCheckboxGroupProps = IBaseFormFieldItem<'checkboxGroup'> & Omit<GetProps<typeof ProFormCheckbox.Group>, TOmitComponentItemType>;
36
+ export type TRadioGroupProps = IBaseFormFieldItem<'radioGroup'> & Omit<GetProps<typeof ProFormRadio>, TOmitComponentItemType>;
37
+ export type TInputNumberProps = IBaseFormFieldItem<'inputNumber'> & Omit<GetProps<typeof ProFormDigit>, TOmitComponentItemType>;
38
+ export type TInputNumberRangeProps = IBaseFormFieldItem<'inputNumberRange'> & Omit<GetProps<typeof ProFormDigitRange>, TOmitComponentItemType>;
39
+ export type TTextAreaProps = IBaseFormFieldItem<'textArea'> & Omit<GetProps<typeof ProFormTextArea>, TOmitComponentItemType>;
40
+ export type TSelectRadioProps = IBaseFormFieldItem<'selectRadio'> & Omit<GetProps<typeof ProFormSelect>, TOmitComponentItemType>;
41
+ export type TSwitchProps = IBaseFormFieldItem<'switch'> & Omit<GetProps<typeof ProFormSwitch>, TOmitComponentItemType>;
42
+ export type TDatePickerProps = IBaseFormFieldItem<'datePicker'> & Omit<GetProps<typeof ProFormDatePicker>, TOmitComponentItemType>;
43
+ export type TSelectInputProps = IBaseFormFieldItem<'selectInput'> & Omit<GetProps<typeof ProFormText>, TOmitComponentItemType>;
44
+ export type TSelectDateRangeProps = IBaseFormFieldItem<'selectDateRange'> & Omit<GetProps<typeof ProFormDateRangePicker>, TOmitComponentItemType>;
45
+ export type TMultipleComponentsProps = IBaseFormFieldItem<'multipleComponents'> & GetProps<typeof Form.Item> & {
46
+ /** 组合项 */
47
+ subItems: IBaseFormProps['fields'];
48
+ /** 组合模式,紧凑型 */
49
+ compact?: boolean;
50
+ formItemProps?: GetProps<typeof Form.Item>;
51
+ };
52
+ export type TCustomProps = IBaseFormFieldItem<'custom'> & GetProps<typeof Form.Item> & {
53
+ render: (props: Parameters<GetProps<typeof ProFormItemRender>['children']>[0], form?: ReturnType<typeof ProForm.useForm>[0]) => ReactNode;
54
+ formItemProps?: GetProps<typeof Form.Item>;
55
+ };
56
+ /** 后续可继续添加新类型 */
57
+ export type TDependencyAction = 'value' | 'search' | 'visible' | 'disabled';
58
+ /** 组件 fields 具体类型 */
59
+ export interface IBaseFormFieldItem<T extends TValueType = TValueType> {
60
+ /** 组件类型 */
61
+ valueType: T;
62
+ /** 组合功能时,限制每个组合控件宽度 */
63
+ childWidths?: Array<string | number>;
64
+ /**
65
+ * 每个表单项宽度
66
+ * @default 20%
67
+ */
68
+ itemWidth?: number | string;
69
+ /** label 宽度 */
70
+ labelWidth?: string;
71
+ /** 必填项 */
72
+ required?: boolean;
73
+ /** 文案 */
74
+ label?: string;
75
+ /**
76
+ * 单一组件,组合组件
77
+ * - valueType = multipleComponents 类型的时候不需要
78
+ */
79
+ field?: string | string[];
80
+ /**
81
+ * value 的情况只允许依赖单字段
82
+ * search 的情况只允许依赖多字段
83
+ * visible 的情况只允许依赖多字段
84
+ * disabled 的情况只允许依赖多字段
85
+ */
86
+ dependencies?: Array<{
87
+ field: string;
88
+ action: Extract<TDependencyAction, 'value'>;
89
+ } | {
90
+ field: string[];
91
+ action: Extract<TDependencyAction, 'search' | 'visible' | 'disabled'>;
92
+ }>;
93
+ dependenciesV2?: IDependenciesV2[];
94
+ /** 选择项 */
95
+ options?: Array<TOption>;
96
+ /** api接口 */
97
+ api?: string;
98
+ /**
99
+ * 请求方式
100
+ * @default post
101
+ */
102
+ apiMethod?: string;
103
+ /**
104
+ * api 搜索key定义
105
+ * - false 时候不会把 field 作为key传入
106
+ * - string 自定义key 传入
107
+ * - 目前 selectDim 使用到
108
+ */
109
+ apiSearchKey?: false | string;
110
+ /**
111
+ * api 以id作为搜索条件,指定的key
112
+ * - 更多是用于数据回显时候,使用id查询出对应数据
113
+ * - 目前 selectDim 使用到
114
+ */
115
+ apiSearchValueKey?: string;
116
+ /**
117
+ * 默认请求参数
118
+ * @deprecated 弃用,用回原生params
119
+ */
120
+ defaultParams?: Record<string, unknown>;
121
+ /** 默认请求参数 */
122
+ params?: Record<string, unknown>;
123
+ /** 多选 */
124
+ multiple?: boolean;
125
+ /**
126
+ * 对应 valueType 的props
127
+ * - TODO: 不清楚怎么设置这个泛型
128
+ */
129
+ fieldProps?: unknown;
130
+ /** 校验规则 */
131
+ rules?: Array<{
132
+ required?: boolean;
133
+ message?: string;
134
+ pattern?: RegExp;
135
+ validator?: (rule: any, value: any) => Promise<void>;
136
+ [key: string]: any;
137
+ }>;
138
+ /** 提示信息 */
139
+ tooltip?: string;
140
+ /**
141
+ * 字段对应默认值
142
+ * - 需要手动调用函数提取,再设置
143
+ * - 扩展,注入form.item 上
144
+ */
145
+ defaultValue?: string | string[] | boolean | number | number[];
146
+ /** 控制隐藏 */
147
+ hidden?: boolean;
148
+ /** 权限key */
149
+ permissionKey?: string;
150
+ }
151
+ type TOption = {
152
+ label: string;
153
+ value: string | number;
154
+ children?: TOption[];
155
+ };
156
+ export interface IDependenciesV2 extends Partial<Omit<TButtonFilterItem, 'original'>> {
157
+ /** 依赖字段 */
158
+ field: string;
159
+ /**
160
+ * 操作类型
161
+ * - 同时设置 hidden 和 show 的时候, hidden 优先级高于 show
162
+ */
163
+ action: 'clear' | 'updateData' | 'disabled' | 'hidden' | 'show' | 'syncValue';
164
+ /**
165
+ * 是否用户操作的才触发
166
+ * - 默认设置
167
+ * - true 类型: clear
168
+ * - false 类型: updateData disabled hidden show syncValue
169
+ */
170
+ isTouched?: boolean;
171
+ }
172
+ /** 控件类型 */
173
+ export type TValueType = 'input'
174
+ /** 一次性拉所有 或 配置options */
175
+ | 'select'
176
+ /**
177
+ * @desc 下拉框+输入框
178
+ * @deprecated 建议使用 multipleComponents 进行组合
179
+ */
180
+ | 'selectInput' | 'selectDim' | 'dateRange' | 'selectDateRange' | 'cascader' | 'treeSelect' | 'checkbox' | 'checkboxGroup' | 'radioGroup' | 'inputNumber' | 'inputNumberRange' | 'textArea' | 'selectRadio' | 'multipleComponents' | 'switch' | 'datePicker' | 'upload' | 'table' | 'custom';
181
+ export {};
@@ -0,0 +1,10 @@
1
+ /** 组件props */
2
+
3
+ /** 后续可继续添加新类型 */
4
+
5
+ /** 组件 fields 具体类型 */
6
+
7
+ ;
8
+
9
+ /** 控件类型 */
10
+ export {};
@@ -0,0 +1,33 @@
1
+ import React, { type ReactNode } from 'react';
2
+ import { Checkbox, GetProps } from 'antd';
3
+ import { IBaseTableProps } from "../base-table/base-table";
4
+ export declare const BaseListTable: <T extends object = object>({ fieldsConfig, requestFields, requestFieldsUrl, requestFieldsParams, scroll, virtual, titleRender, rowSelection, dataSource, headerRender, defaultExpandAllCollapse, tableMaxRowCount, ...tableProps }: BaseListTableProps<T>) => import("react/jsx-runtime").JSX.Element;
5
+ export interface BaseListTableProps<T extends object = object> extends Omit<IBaseTableProps<T>, 'rowSelection' | 'dataSource' | 'scroll'> {
6
+ /** 标题行自定以渲染 */
7
+ titleRender?: (item: T, index: number, originNode: {
8
+ checkboxNode: React.ReactNode;
9
+ dataNode: React.ReactNode;
10
+ }) => ReactNode;
11
+ /** 头渲染 */
12
+ headerRender?: (originNode: React.ReactNode) => ReactNode;
13
+ /** 选择,尽量保持和table的一致 */
14
+ rowSelection?: {
15
+ getCheckboxProps?: (record: T) => Omit<GetProps<typeof Checkbox>, 'checked' | 'onChange'>;
16
+ onChange?: (keys: React.Key[], items: T[]) => void;
17
+ selectedRowKeys?: React.Key[];
18
+ };
19
+ dataSource?: T[];
20
+ /** 默认加载展开Collapse */
21
+ defaultExpandAllCollapse?: boolean;
22
+ /** 滚动高度 */
23
+ scroll?: {
24
+ y?: number;
25
+ } | ((height?: number) => {
26
+ y?: number;
27
+ });
28
+ /**
29
+ * 内部table最大行数
30
+ * - 配置了才会生效
31
+ */
32
+ tableMaxRowCount?: number;
33
+ }
@@ -0,0 +1,292 @@
1
+ var _excluded = ["fieldsConfig", "requestFields", "requestFieldsUrl", "requestFieldsParams", "scroll", "virtual", "titleRender", "rowSelection", "dataSource", "headerRender", "defaultExpandAllCollapse", "tableMaxRowCount"];
2
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
4
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
5
+ import React from 'react';
6
+ import { Checkbox, Collapse, List, Skeleton } from 'antd';
7
+ import { CaretRightOutlined } from '@ant-design/icons';
8
+ import { useDebounceEffect, useDeepCompareEffect } from 'ahooks';
9
+ import classNames from "classnames";
10
+ import VirtualList from 'rc-virtual-list';
11
+ import { useStateData, useRequestFields, useRequestFieldsConfig, useRexProConfigProvider } from "../..";
12
+ import { Header, TableMoreData, TableTitle, Wrapper } from "./style";
13
+ import { BaseTable } from "../base-table/base-table";
14
+ import { DataCell } from "../data-cell/data-cell";
15
+ export var BaseListTable = function BaseListTable(_ref) {
16
+ var fieldsConfig = _ref.fieldsConfig,
17
+ requestFields = _ref.requestFields,
18
+ requestFieldsUrl = _ref.requestFieldsUrl,
19
+ requestFieldsParams = _ref.requestFieldsParams,
20
+ scroll = _ref.scroll,
21
+ virtual = _ref.virtual,
22
+ titleRender = _ref.titleRender,
23
+ rowSelection = _ref.rowSelection,
24
+ _ref$dataSource = _ref.dataSource,
25
+ dataSource = _ref$dataSource === void 0 ? [] : _ref$dataSource,
26
+ headerRender = _ref.headerRender,
27
+ defaultExpandAllCollapse = _ref.defaultExpandAllCollapse,
28
+ tableMaxRowCount = _ref.tableMaxRowCount,
29
+ tableProps = _objectWithoutProperties(_ref, _excluded);
30
+ var _useRexProConfigProvi = useRexProConfigProvider(),
31
+ formatMessage = _useRexProConfigProvi.intl.formatMessage;
32
+ var responseConfig = useRequestFieldsConfig();
33
+ var openCheckbox = !!rowSelection;
34
+ var _useStateData = useStateData(function () {
35
+ return {
36
+ tableRequestFieldsPromise: undefined,
37
+ /** 唯一key字段 */
38
+ keyField: 'key',
39
+ /** 选中 */
40
+ selected: [],
41
+ /** 选中数据 */
42
+ selectedItems: [],
43
+ /** checkbox props */
44
+ checkboxPropsMap: {},
45
+ /** checkbox 禁用 */
46
+ checkboxDisabled: [],
47
+ /** 行状态记录 */
48
+ recordStatus: {},
49
+ scrollHeight: 300,
50
+ listKey: "list-".concat(Date.now(), "-").concat(parseInt("".concat(Math.random() * 10000), 10))
51
+ };
52
+ }),
53
+ state = _useStateData.state,
54
+ update = _useStateData.update;
55
+ var _useRequestFields = useRequestFields({
56
+ request: requestFields,
57
+ requestFieldsUrl: requestFieldsUrl || responseConfig.tableHeaderUrl,
58
+ requestFieldsParams: requestFieldsParams || responseConfig.tableHeaderParams,
59
+ fieldsConfig: fieldsConfig || responseConfig.tableHeaderConfig
60
+ }),
61
+ loading = _useRequestFields.loading,
62
+ fields = _useRequestFields.fields;
63
+ var renderItem = function renderItem(item, index) {
64
+ var key = item[state.keyField];
65
+ var openMaxRowCountRow = typeof tableMaxRowCount === 'number';
66
+ var childrenDataSource = 'children' in item && Array.isArray(item.children) ? item.children : [];
67
+ state.recordStatus[key] = state.recordStatus[key] || {};
68
+ var config = state.recordStatus[key];
69
+ var children = childrenDataSource;
70
+ if (openMaxRowCountRow && !config.expandMoreData) {
71
+ children = childrenDataSource.slice(0, tableMaxRowCount);
72
+ }
73
+ var titleNode = function () {
74
+ var checkboxNode = openCheckbox ? /*#__PURE__*/React.createElement(Checkbox, _extends({}, state.checkboxPropsMap["".concat(key)], {
75
+ checked: state.selected.includes(key),
76
+ onChange: function onChange(e) {
77
+ if (e.target.checked) {
78
+ state.selected.push(key);
79
+ state.selectedItems.push(item);
80
+ } else {
81
+ state.selected = state.selected.filter(function (k) {
82
+ return k !== key;
83
+ });
84
+ state.selectedItems = dataSource.filter(function (k) {
85
+ return k !== item;
86
+ });
87
+ }
88
+ update();
89
+ }
90
+ })) : /*#__PURE__*/React.createElement(React.Fragment, null);
91
+ var dataNode = /*#__PURE__*/React.createElement(React.Fragment, null, Object.keys(item).map(function (inlineKey) {
92
+ var data = item[inlineKey];
93
+ if ([state.keyField, 'children'].includes(inlineKey) || !Array.isArray(data)) return /*#__PURE__*/React.createElement("span", {
94
+ style: {
95
+ display: 'none'
96
+ },
97
+ key: inlineKey
98
+ });
99
+ return /*#__PURE__*/React.createElement(DataCell, {
100
+ key: inlineKey,
101
+ items: data
102
+ });
103
+ }));
104
+ return /*#__PURE__*/React.createElement(TableTitle, {
105
+ className: "base-list-table-table-title"
106
+ }, titleRender ? titleRender(item, index, {
107
+ checkboxNode: checkboxNode,
108
+ dataNode: dataNode
109
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null, checkboxNode, dataNode));
110
+ }();
111
+ var bodyNode = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(BaseTable, _extends({
112
+ scroll: {
113
+ x: 1000
114
+ }
115
+ }, tableProps, {
116
+ dataSource: children,
117
+ fieldsConfig: fields,
118
+ pagination: false
119
+ })), openMaxRowCountRow && childrenDataSource.length > tableMaxRowCount ? /*#__PURE__*/React.createElement(TableMoreData, {
120
+ className: "base-list-table-more-data"
121
+ }, /*#__PURE__*/React.createElement("a", {
122
+ href: "void",
123
+ "aria-hidden": "true",
124
+ onClick: function onClick(e) {
125
+ e.preventDefault();
126
+ config.expandMoreData = !config.expandMoreData;
127
+ update();
128
+ }
129
+ }, config.expandMoreData ? formatMessage({
130
+ id: 'bit.data-display.base-list-table.expand-more-data-hide',
131
+ defaultMessage: '收起'
132
+ }) : formatMessage({
133
+ id: 'bit.data-display.base-list-table.expand-more-data',
134
+ defaultMessage: '还有{count}条数据未展示'
135
+ }, {
136
+ count: childrenDataSource.length - tableMaxRowCount
137
+ }))) : /*#__PURE__*/React.createElement(React.Fragment, null));
138
+ return /*#__PURE__*/React.createElement(List.Item, {
139
+ key: key
140
+ }, /*#__PURE__*/React.createElement(Collapse, {
141
+ size: "small",
142
+ collapsible: "icon",
143
+ destroyInactivePanel: true
144
+ // bordered={false}
145
+ ,
146
+ defaultActiveKey: defaultExpandAllCollapse && (typeof config.collapseActiveKey === 'undefined' || config.collapseActiveKey) ? [key] : []
147
+ // activeKey={config.collapseActiveKey ? [key as string] : []}
148
+ ,
149
+ expandIcon: function expandIcon(_ref2) {
150
+ var isActive = _ref2.isActive;
151
+ return /*#__PURE__*/React.createElement(CaretRightOutlined, {
152
+ rotate: isActive ? 90 : 0
153
+ });
154
+ },
155
+ items: [{
156
+ key: key,
157
+ label: titleNode,
158
+ children: bodyNode
159
+ }],
160
+ onChange: function onChange() {
161
+ config.collapseActiveKey = !config.collapseActiveKey;
162
+ // update();
163
+ }
164
+ }));
165
+ };
166
+
167
+ /** 处理数据 */
168
+ useDebounceEffect(function () {
169
+ state.recordStatus = {};
170
+ // if (!openCheckbox) {
171
+ // update();
172
+ // return;
173
+ // }
174
+ dataSource.forEach(function (item) {
175
+ var _rowSelection$getChec;
176
+ var key = item[state.keyField];
177
+ var checkboxProps = (rowSelection === null || rowSelection === void 0 || (_rowSelection$getChec = rowSelection.getCheckboxProps) === null || _rowSelection$getChec === void 0 ? void 0 : _rowSelection$getChec.call(rowSelection, item)) || {};
178
+ state.checkboxPropsMap["".concat(key)] = checkboxProps;
179
+ if (defaultExpandAllCollapse) {
180
+ state.recordStatus["".concat(key)] = {
181
+ collapseActiveKey: true
182
+ };
183
+ }
184
+ if (checkboxProps.disabled) {
185
+ state.checkboxDisabled.push(key);
186
+ }
187
+ });
188
+ update();
189
+ }, [dataSource], {
190
+ wait: 100
191
+ });
192
+
193
+ /** 回调选中值 */
194
+ useDebounceEffect(function () {
195
+ var _rowSelection$onChang;
196
+ rowSelection === null || rowSelection === void 0 || (_rowSelection$onChang = rowSelection.onChange) === null || _rowSelection$onChang === void 0 || _rowSelection$onChang.call(rowSelection, state.selected, state.selectedItems);
197
+ }, [state.selected, state.selected.length], {
198
+ wait: 0
199
+ });
200
+
201
+ /** 同步值 */
202
+ useDeepCompareEffect(function () {
203
+ if (!openCheckbox) return;
204
+ if (typeof rowSelection.selectedRowKeys === 'undefined') return;
205
+ state.selected = rowSelection.selectedRowKeys || [];
206
+ state.selectedItems = dataSource.filter(function (item) {
207
+ return state.selected.includes(item[state.keyField]);
208
+ });
209
+ update();
210
+ }, [rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.selectedRowKeys]);
211
+ useDebounceEffect(function () {
212
+ if (loading) return;
213
+ var timer = null;
214
+ var fn = function fn() {
215
+ var _document$querySelect, _document$querySelect2, _document$querySelect3;
216
+ var bodyEl = ((_document$querySelect = document.querySelector(".".concat(state.listKey))) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.querySelector('.rc-virtual-list')) || ((_document$querySelect2 = document.querySelector(".".concat(state.listKey))) === null || _document$querySelect2 === void 0 ? void 0 : _document$querySelect2.querySelector('ul')) || ((_document$querySelect3 = document.querySelector(".".concat(state.listKey))) === null || _document$querySelect3 === void 0 ? void 0 : _document$querySelect3.querySelector('.ant-spin-nested-loading')) || document.querySelector(".".concat(state.listKey));
217
+ // console.log(bodyEl);
218
+
219
+ if (!bodyEl) return;
220
+ if (timer) clearTimeout(timer);
221
+ timer = setTimeout(function () {
222
+ timer = null;
223
+ // 54: 底部padding + 分页高度 + 分页padding
224
+ state.scrollHeight = Math.max(window.innerHeight - bodyEl.getBoundingClientRect().top - 54, 300);
225
+ // console.log(state.scrollHeight);
226
+ update();
227
+ }, 0);
228
+ };
229
+ fn();
230
+ window.addEventListener('resize', fn);
231
+ return function () {
232
+ window.removeEventListener('resize', fn);
233
+ };
234
+ }, [loading], {
235
+ wait: 0
236
+ });
237
+ if (loading) {
238
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Skeleton, {
239
+ active: true
240
+ }), /*#__PURE__*/React.createElement(Skeleton, {
241
+ active: true
242
+ }));
243
+ }
244
+ return /*#__PURE__*/React.createElement(Wrapper, {
245
+ className: classNames("base-list-table-table-box", state.listKey)
246
+ }, /*#__PURE__*/React.createElement(Header, {
247
+ className: "base-list-table-table-header"
248
+ }, function () {
249
+ var originNode = openCheckbox ? /*#__PURE__*/React.createElement(Checkbox, {
250
+ disabled: dataSource.length === 0,
251
+ indeterminate: state.selected.length > 0 && state.selected.length < dataSource.length - state.checkboxDisabled.length,
252
+ checked: dataSource.length !== 0 && state.selected.length === dataSource.length - state.checkboxDisabled.length,
253
+ onChange: function onChange(e) {
254
+ if (e.target.checked) {
255
+ var baseArr = dataSource.filter(function (item) {
256
+ return !state.checkboxDisabled.includes(item[state.keyField]);
257
+ });
258
+ state.selected = baseArr.map(function (item) {
259
+ return item[state.keyField];
260
+ });
261
+ state.selectedItems = baseArr;
262
+ } else {
263
+ state.selected = [];
264
+ state.selectedItems = [];
265
+ }
266
+ update();
267
+ }
268
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null);
269
+ if (headerRender) return headerRender(originNode);
270
+ return originNode;
271
+ }()), virtual ? /*#__PURE__*/React.createElement(List, {
272
+ size: "small"
273
+ }, /*#__PURE__*/React.createElement(VirtualList, {
274
+ data: dataSource,
275
+ fullHeight: false,
276
+ height: typeof scroll === 'function' ? scroll(state.scrollHeight).y : scroll === null || scroll === void 0 ? void 0 : scroll.y,
277
+ itemHeight: 200,
278
+ itemKey: state.keyField
279
+ // onScroll={onScroll}
280
+ }, renderItem)) : /*#__PURE__*/React.createElement(List, {
281
+ style: {
282
+ maxHeight: typeof scroll === 'function' ? scroll(state.scrollHeight).y : scroll === null || scroll === void 0 ? void 0 : scroll.y,
283
+ overflow: 'auto'
284
+ },
285
+ dataSource: dataSource,
286
+ itemLayout: "vertical",
287
+ size: "small",
288
+ rowKey: state.keyField,
289
+ renderItem: renderItem
290
+ }));
291
+ };
292
+ ;
@@ -0,0 +1,2 @@
1
+ declare const _default: () => import("react/jsx-runtime").JSX.Element;
2
+ export default _default;