@creekjs/web-components 1.0.4 → 1.0.6
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.
- package/.turbo/turbo-father$colon$build.log +33 -17
- package/README.md +97 -18
- package/dist/creek-config-provider/CreekConfigContext.d.ts +4 -0
- package/dist/creek-config-provider/CreekConfigContext.d.ts.map +1 -0
- package/dist/creek-config-provider/CreekConfigContext.js.map +2 -2
- package/dist/creek-config-provider/CreekI18nProvider.d.ts +22 -0
- package/dist/creek-config-provider/CreekI18nProvider.d.ts.map +1 -0
- package/dist/creek-config-provider/CreekI18nProvider.js +92 -0
- package/dist/creek-config-provider/CreekI18nProvider.js.map +7 -0
- package/dist/creek-config-provider/index.d.ts +5 -3
- package/dist/creek-config-provider/index.d.ts.map +1 -0
- package/dist/creek-config-provider/index.js +47 -4
- package/dist/creek-config-provider/index.js.map +3 -3
- package/dist/creek-hooks/index.d.ts.map +1 -0
- package/dist/creek-hooks/useApp/DrawerHelper.d.ts.map +1 -0
- package/dist/creek-hooks/useApp/ModalHelper.d.ts.map +1 -0
- package/dist/creek-hooks/useApp/index.d.ts +3 -3
- package/dist/creek-hooks/useApp/index.d.ts.map +1 -0
- package/dist/creek-hooks/useApp/types.d.ts.map +1 -0
- package/dist/creek-hooks/useViewportHeight.d.ts.map +1 -0
- package/dist/creek-icon/index.d.ts.map +1 -0
- package/dist/creek-keep-alive/index.d.ts +24 -1
- package/dist/creek-keep-alive/index.d.ts.map +1 -0
- package/dist/creek-keep-alive/index.js +141 -4
- package/dist/creek-keep-alive/index.js.map +2 -2
- package/dist/creek-layout/ActionRender/FullScreen.d.ts.map +1 -0
- package/dist/creek-layout/{HeaderContent → ActionRender}/FullScreen.js +4 -2
- package/dist/creek-layout/ActionRender/FullScreen.js.map +7 -0
- package/dist/creek-layout/ActionRender/LayoutSettings.d.ts +5 -0
- package/dist/creek-layout/ActionRender/LayoutSettings.d.ts.map +1 -0
- package/dist/creek-layout/ActionRender/LayoutSettings.js +73 -0
- package/dist/creek-layout/ActionRender/LayoutSettings.js.map +7 -0
- package/dist/creek-layout/ActionRender/UserInfo.d.ts +8 -0
- package/dist/creek-layout/ActionRender/UserInfo.d.ts.map +1 -0
- package/dist/creek-layout/{HeaderContent → ActionRender}/UserInfo.js +7 -29
- package/dist/creek-layout/ActionRender/UserInfo.js.map +7 -0
- package/dist/creek-layout/ActionRender/index.d.ts +3 -0
- package/dist/creek-layout/ActionRender/index.d.ts.map +1 -0
- package/dist/creek-layout/ActionRender/index.js +36 -0
- package/dist/creek-layout/ActionRender/index.js.map +7 -0
- package/dist/creek-layout/CollapseButton.d.ts.map +1 -0
- package/dist/creek-layout/Exception/NotFound.d.ts.map +1 -0
- package/dist/creek-layout/Exception/NotFoundPage.d.ts.map +1 -0
- package/dist/creek-layout/Exception/index.d.ts.map +1 -0
- package/dist/creek-layout/index.d.ts +9 -2
- package/dist/creek-layout/index.d.ts.map +1 -0
- package/dist/creek-layout/index.js +96 -39
- package/dist/creek-layout/index.js.map +3 -3
- package/dist/creek-layout/useLayoutSettingsStore.d.ts +20 -0
- package/dist/creek-layout/useLayoutSettingsStore.d.ts.map +1 -0
- package/dist/creek-layout/useLayoutSettingsStore.js +45 -0
- package/dist/creek-layout/useLayoutSettingsStore.js.map +7 -0
- package/dist/creek-loading/index.d.ts.map +1 -0
- package/dist/creek-locale-button/index.d.ts +1 -0
- package/dist/creek-locale-button/index.d.ts.map +1 -0
- package/dist/creek-locale-button/index.js +66 -0
- package/dist/creek-locale-button/index.js.map +7 -0
- package/dist/creek-page-container/index.d.ts +4 -0
- package/dist/creek-page-container/index.d.ts.map +1 -0
- package/dist/creek-page-container/index.js +68 -0
- package/dist/creek-page-container/index.js.map +7 -0
- package/dist/creek-style/index.d.ts +1 -0
- package/dist/creek-style/index.d.ts.map +1 -0
- package/dist/creek-style/index.js +24 -0
- package/dist/creek-style/index.js.map +7 -0
- package/dist/creek-style/scrollbar.d.ts +2 -0
- package/dist/creek-style/scrollbar.d.ts.map +1 -0
- package/dist/creek-style/scrollbar.js +55 -0
- package/dist/creek-style/scrollbar.js.map +7 -0
- package/dist/creek-table/SearchTable.d.ts +9 -0
- package/dist/creek-table/SearchTable.d.ts.map +1 -0
- package/dist/creek-table/SearchTable.js +109 -72
- package/dist/creek-table/SearchTable.js.map +3 -3
- package/dist/creek-table/components/DensityIcon.d.ts +9 -0
- package/dist/creek-table/components/DensityIcon.d.ts.map +1 -0
- package/dist/creek-table/components/DensityIcon.js +77 -0
- package/dist/creek-table/components/DensityIcon.js.map +7 -0
- package/dist/creek-table/components/EllipsisTooltip.d.ts +9 -0
- package/dist/creek-table/components/EllipsisTooltip.d.ts.map +1 -0
- package/dist/creek-table/components/EllipsisTooltip.js +122 -0
- package/dist/creek-table/components/EllipsisTooltip.js.map +7 -0
- package/dist/creek-table/components/index.d.ts +2 -0
- package/dist/creek-table/components/index.d.ts.map +1 -0
- package/dist/creek-table/components/index.js +26 -0
- package/dist/creek-table/components/index.js.map +7 -0
- package/dist/creek-table/hooks/index.d.ts +5 -0
- package/dist/creek-table/hooks/index.d.ts.map +1 -0
- package/dist/creek-table/hooks/index.js +10 -0
- package/dist/creek-table/hooks/index.js.map +2 -2
- package/dist/creek-table/hooks/useAdaptiveToolBar.d.ts.map +1 -0
- package/dist/creek-table/hooks/useAutoWidthColumns.d.ts +1 -1
- package/dist/creek-table/hooks/useAutoWidthColumns.d.ts.map +1 -0
- package/dist/creek-table/hooks/useAutoWidthColumns.js +76 -17
- package/dist/creek-table/hooks/useAutoWidthColumns.js.map +2 -2
- package/dist/creek-table/hooks/useElementDistance.d.ts.map +1 -0
- package/dist/creek-table/hooks/useEllipsisColumns.d.ts +8 -0
- package/dist/creek-table/hooks/useEllipsisColumns.d.ts.map +1 -0
- package/dist/creek-table/hooks/useEllipsisColumns.js +58 -0
- package/dist/creek-table/hooks/useEllipsisColumns.js.map +7 -0
- package/dist/creek-table/hooks/useIndexColumn.d.ts +2 -0
- package/dist/creek-table/hooks/useIndexColumn.d.ts.map +1 -0
- package/dist/creek-table/hooks/useIndexColumn.js +52 -0
- package/dist/creek-table/hooks/useIndexColumn.js.map +7 -0
- package/dist/creek-table/hooks/useResizableColumns.d.ts +20 -0
- package/dist/creek-table/hooks/useResizableColumns.d.ts.map +1 -0
- package/dist/creek-table/hooks/useResizableColumns.js +279 -0
- package/dist/creek-table/hooks/useResizableColumns.js.map +7 -0
- package/dist/creek-table/hooks/useStatusColumns.d.ts +2 -0
- package/dist/creek-table/hooks/useStatusColumns.d.ts.map +1 -0
- package/dist/creek-table/hooks/useStatusColumns.js +215 -0
- package/dist/creek-table/hooks/useStatusColumns.js.map +7 -0
- package/dist/creek-table/hooks/useTableOptions.d.ts +15 -0
- package/dist/creek-table/hooks/useTableOptions.d.ts.map +1 -0
- package/dist/creek-table/hooks/useTableOptions.js +78 -0
- package/dist/creek-table/hooks/useTableOptions.js.map +7 -0
- package/dist/creek-table/hooks/useTableScrollHeight.d.ts +6 -1
- package/dist/creek-table/hooks/useTableScrollHeight.d.ts.map +1 -0
- package/dist/creek-table/hooks/useTableScrollHeight.js +44 -5
- package/dist/creek-table/hooks/useTableScrollHeight.js.map +2 -2
- package/dist/creek-table/index.d.ts.map +1 -0
- package/dist/creek-table/type.d.ts +4 -6
- package/dist/creek-table/type.d.ts.map +1 -0
- package/dist/creek-table/type.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +2 -2
- package/dist/locales/en-US.d.ts +25 -0
- package/dist/locales/en-US.d.ts.map +1 -0
- package/dist/locales/en-US.js +49 -0
- package/dist/locales/en-US.js.map +7 -0
- package/dist/locales/zh-CN.d.ts +25 -0
- package/dist/locales/zh-CN.d.ts.map +1 -0
- package/dist/locales/zh-CN.js +49 -0
- package/dist/locales/zh-CN.js.map +7 -0
- package/dist/utils/i18n.d.ts +2 -0
- package/dist/utils/i18n.d.ts.map +1 -0
- package/dist/utils/i18n.js +34 -0
- package/dist/utils/i18n.js.map +7 -0
- package/i18n.config.ts +27 -0
- package/package.json +17 -3
- package/src/creek-config-provider/CreekConfigContext.tsx +5 -1
- package/src/creek-config-provider/CreekI18nProvider.tsx +87 -0
- package/src/creek-config-provider/index.tsx +53 -4
- package/src/creek-keep-alive/index.tsx +225 -6
- package/src/creek-layout/{HeaderContent → ActionRender}/FullScreen.tsx +10 -6
- package/src/creek-layout/ActionRender/LayoutSettings.tsx +67 -0
- package/src/creek-layout/ActionRender/UserInfo.tsx +43 -0
- package/src/creek-layout/ActionRender/index.tsx +4 -0
- package/src/creek-layout/index.tsx +121 -53
- package/src/creek-layout/useLayoutSettingsStore.ts +25 -0
- package/src/creek-locale-button/index.tsx +42 -0
- package/src/creek-page-container/index.tsx +32 -0
- package/src/creek-style/index.ts +1 -0
- package/src/creek-style/scrollbar.ts +29 -0
- package/src/creek-table/SearchTable.tsx +125 -72
- package/src/creek-table/components/DensityIcon.tsx +63 -0
- package/src/creek-table/components/EllipsisTooltip.tsx +116 -0
- package/src/creek-table/components/index.tsx +3 -0
- package/src/creek-table/hooks/index.ts +5 -1
- package/src/creek-table/hooks/useAutoWidthColumns.tsx +93 -19
- package/src/creek-table/hooks/useEllipsisColumns.tsx +47 -0
- package/src/creek-table/hooks/useIndexColumn.tsx +27 -0
- package/src/creek-table/hooks/useResizableColumns.tsx +323 -0
- package/src/creek-table/hooks/useStatusColumns.tsx +252 -0
- package/src/creek-table/hooks/useTableOptions.tsx +81 -0
- package/src/creek-table/hooks/useTableScrollHeight.tsx +61 -6
- package/src/creek-table/type.ts +5 -7
- package/src/index.tsx +4 -0
- package/src/locales/en-US.ts +24 -0
- package/src/locales/zh-CN.ts +24 -0
- package/src/utils/i18n.ts +4 -0
- package/dist/creek-layout/HeaderContent/FullScreen.js.map +0 -7
- package/dist/creek-layout/HeaderContent/UserInfo.d.ts +0 -1
- package/dist/creek-layout/HeaderContent/UserInfo.js.map +0 -7
- package/dist/creek-layout/HeaderContent/index.d.ts +0 -1
- package/dist/creek-layout/HeaderContent/index.js +0 -49
- package/dist/creek-layout/HeaderContent/index.js.map +0 -7
- package/dist/creek-table/TableOptionRender.d.ts +0 -9
- package/dist/creek-table/TableOptionRender.js +0 -74
- package/dist/creek-table/TableOptionRender.js.map +0 -7
- package/dist/creek-table/toolBarRender.d.ts +0 -5
- package/dist/creek-table/toolBarRender.js +0 -58
- package/dist/creek-table/toolBarRender.js.map +0 -7
- package/src/creek-layout/HeaderContent/UserInfo.tsx +0 -54
- package/src/creek-layout/HeaderContent/index.tsx +0 -24
- package/src/creek-table/TableOptionRender.tsx +0 -57
- package/src/creek-table/toolBarRender.tsx +0 -28
- /package/dist/creek-layout/{HeaderContent → ActionRender}/FullScreen.d.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ProColumns } from '@ant-design/pro-components';
|
|
2
2
|
import { RefObject } from 'react';
|
|
3
|
-
export declare const useAutoWidthColumns: <T, ValueType>(columns: ProColumns<T, ValueType>[] | undefined, tableRef: RefObject<HTMLDivElement
|
|
3
|
+
export declare const useAutoWidthColumns: <T, ValueType>(columns: ProColumns<T, ValueType>[] | undefined, tableRef: RefObject<HTMLDivElement>, resizedWidths?: Record<string, number>, bordered?: boolean, size?: 'large' | 'middle' | 'small' | 'medium') => {
|
|
4
4
|
columns: ProColumns<T, ValueType>[] | undefined;
|
|
5
5
|
totalWidth: number | undefined;
|
|
6
6
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAutoWidthColumns.d.ts","sourceRoot":"","sources":["../../../src/creek-table/hooks/useAutoWidthColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,OAAO,EAAE,SAAS,EAAwC,MAAM,OAAO,CAAC;AA4FxE,eAAO,MAAM,mBAAmB,0BACrB,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,YACrC,UAAU,cAAc,CAAC,kBACnB,OAAO,MAAM,EAAE,MAAM,CAAC,aAC3B,OAAO,SACX,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ;aAClC,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS;gBAAc,MAAM,GAAG,SAAS;CAwLnF,CAAC"}
|
|
@@ -26,8 +26,9 @@ var import_ahooks = require("ahooks");
|
|
|
26
26
|
var import_antd = require("antd");
|
|
27
27
|
var import_react = require("react");
|
|
28
28
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
29
|
-
var
|
|
30
|
-
var
|
|
29
|
+
var DEFAULT_PADDING_WIDTH_SMALL = 16;
|
|
30
|
+
var DEFAULT_PADDING_WIDTH_LARGE = 24;
|
|
31
|
+
var estimateWidth = (text, padding) => {
|
|
31
32
|
let width = 0;
|
|
32
33
|
for (const char of text) {
|
|
33
34
|
if (/[\u4e00-\u9fa5]/.test(char)) {
|
|
@@ -36,7 +37,7 @@ var estimateWidth = (text) => {
|
|
|
36
37
|
width += 8;
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
|
-
return width +
|
|
40
|
+
return width + padding;
|
|
40
41
|
};
|
|
41
42
|
var getValueTypeWidth = (valueType) => {
|
|
42
43
|
switch (valueType) {
|
|
@@ -70,7 +71,8 @@ var MeasureWrapper = ({ children, onResize }) => {
|
|
|
70
71
|
onResize(ref.current.offsetWidth);
|
|
71
72
|
const observer = new ResizeObserver((entries) => {
|
|
72
73
|
for (const entry of entries) {
|
|
73
|
-
|
|
74
|
+
const width = entry.target.scrollWidth;
|
|
75
|
+
onResize(width);
|
|
74
76
|
}
|
|
75
77
|
});
|
|
76
78
|
observer.observe(ref.current);
|
|
@@ -78,18 +80,40 @@ var MeasureWrapper = ({ children, onResize }) => {
|
|
|
78
80
|
observer.disconnect();
|
|
79
81
|
};
|
|
80
82
|
}, []);
|
|
81
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
83
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
84
|
+
"div",
|
|
85
|
+
{
|
|
86
|
+
ref,
|
|
87
|
+
style: {
|
|
88
|
+
display: "inline-block",
|
|
89
|
+
whiteSpace: "nowrap",
|
|
90
|
+
width: "max-content",
|
|
91
|
+
// 确保宽度由内容决定
|
|
92
|
+
minWidth: "min-content"
|
|
93
|
+
},
|
|
94
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Space, { children })
|
|
95
|
+
}
|
|
96
|
+
);
|
|
82
97
|
};
|
|
83
|
-
var useAutoWidthColumns = (columns, tableRef) => {
|
|
98
|
+
var useAutoWidthColumns = (columns, tableRef, resizedWidths, bordered, size) => {
|
|
84
99
|
const [columnWidths, setColumnWidths] = (0, import_react.useState)({});
|
|
85
|
-
const [tableWidth, setTableWidth] = (0, import_react.useState)(
|
|
100
|
+
const [tableWidth, setTableWidth] = (0, import_react.useState)(() => {
|
|
101
|
+
if (tableRef.current) {
|
|
102
|
+
return tableRef.current.offsetWidth;
|
|
103
|
+
}
|
|
104
|
+
return 0;
|
|
105
|
+
});
|
|
86
106
|
(0, import_react.useEffect)(() => {
|
|
87
107
|
if (!tableRef.current)
|
|
88
108
|
return;
|
|
89
|
-
|
|
109
|
+
if (tableWidth === 0) {
|
|
110
|
+
setTableWidth(tableRef.current.offsetWidth);
|
|
111
|
+
}
|
|
90
112
|
let rafId;
|
|
91
113
|
let timerId;
|
|
92
114
|
const updateWidth = (width) => {
|
|
115
|
+
if (width === 0)
|
|
116
|
+
return;
|
|
93
117
|
cancelAnimationFrame(rafId);
|
|
94
118
|
clearTimeout(timerId);
|
|
95
119
|
rafId = requestAnimationFrame(() => {
|
|
@@ -130,26 +154,39 @@ var useAutoWidthColumns = (columns, tableRef) => {
|
|
|
130
154
|
if (!columns)
|
|
131
155
|
return { columns: void 0, totalWidth: void 0 };
|
|
132
156
|
const calculatedColumns = columns.map((col, index) => {
|
|
133
|
-
const colKey = col.
|
|
157
|
+
const colKey = col.key || col.dataIndex || `col-${index}`;
|
|
134
158
|
const measuredWidth = columnWidths[colKey];
|
|
135
|
-
let
|
|
159
|
+
let padding = DEFAULT_PADDING_WIDTH_SMALL;
|
|
160
|
+
if (size === "large") {
|
|
161
|
+
padding = DEFAULT_PADDING_WIDTH_LARGE;
|
|
162
|
+
}
|
|
163
|
+
let baseWidth;
|
|
136
164
|
if (col.width) {
|
|
137
|
-
|
|
165
|
+
baseWidth = typeof col.width === "number" ? col.width : 100;
|
|
138
166
|
} else if (col.valueType === "option" && measuredWidth) {
|
|
139
|
-
|
|
167
|
+
const extraPadding = bordered ? 4 : 0;
|
|
168
|
+
baseWidth = measuredWidth + padding + extraPadding;
|
|
140
169
|
} else {
|
|
141
|
-
|
|
170
|
+
baseWidth = Math.max(estimateWidth(col.title, padding), getValueTypeWidth(col.valueType));
|
|
171
|
+
}
|
|
172
|
+
let width = baseWidth;
|
|
173
|
+
if (resizedWidths && resizedWidths[colKey]) {
|
|
174
|
+
width = resizedWidths[colKey];
|
|
142
175
|
}
|
|
143
176
|
return {
|
|
144
177
|
...col,
|
|
145
178
|
_calculatedWidth: width,
|
|
179
|
+
_baseWidth: baseWidth,
|
|
180
|
+
// 新增 _baseWidth 用于后续 minWidth 限制
|
|
146
181
|
_colKey: colKey
|
|
147
182
|
};
|
|
148
183
|
});
|
|
149
184
|
const totalCalculatedWidth = calculatedColumns.reduce((acc, col) => acc + col._calculatedWidth, 0);
|
|
150
|
-
const
|
|
185
|
+
const hasResized = resizedWidths && Object.keys(resizedWidths).length > 0;
|
|
186
|
+
const isOverflow = totalCalculatedWidth > tableWidth || hasResized;
|
|
187
|
+
const shouldForceWidth = totalCalculatedWidth > tableWidth;
|
|
151
188
|
const processedColumns = calculatedColumns.map((col) => {
|
|
152
|
-
const { _calculatedWidth, _colKey, ...originalCol } = col;
|
|
189
|
+
const { _calculatedWidth, _baseWidth, _colKey, ...originalCol } = col;
|
|
153
190
|
if (col.valueType === "option") {
|
|
154
191
|
const originalRender = col.render;
|
|
155
192
|
return {
|
|
@@ -167,14 +204,36 @@ var useAutoWidthColumns = (columns, tableRef) => {
|
|
|
167
204
|
...originalCol,
|
|
168
205
|
// 只有当内容溢出(需要滚动)或者手动设置了宽度时,才应用计算出的宽度
|
|
169
206
|
// 否则不设置 width,让 Antd Table 自动布局占满剩余空间
|
|
170
|
-
width:
|
|
207
|
+
width: shouldForceWidth || col.width || resizedWidths && resizedWidths[_colKey] ? _calculatedWidth : void 0,
|
|
208
|
+
// 添加 calculatedWidth 以供后续 useResizableColumns 使用,这里使用 _baseWidth (即不受 resize 影响的宽度)
|
|
209
|
+
calculatedWidth: _baseWidth,
|
|
210
|
+
onHeaderCell: (column) => {
|
|
211
|
+
const originalProps = originalCol.onHeaderCell ? originalCol.onHeaderCell(column) : {};
|
|
212
|
+
return {
|
|
213
|
+
...originalProps,
|
|
214
|
+
style: {
|
|
215
|
+
...originalProps.style,
|
|
216
|
+
minWidth: _calculatedWidth
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
},
|
|
220
|
+
onCell: (record, index) => {
|
|
221
|
+
const originalProps = originalCol.onCell ? originalCol.onCell(record, index) : {};
|
|
222
|
+
return {
|
|
223
|
+
...originalProps,
|
|
224
|
+
style: {
|
|
225
|
+
...originalProps.style,
|
|
226
|
+
minWidth: _calculatedWidth
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
}
|
|
171
230
|
};
|
|
172
231
|
});
|
|
173
232
|
return {
|
|
174
233
|
columns: processedColumns,
|
|
175
234
|
totalWidth: isOverflow ? totalCalculatedWidth : void 0
|
|
176
235
|
};
|
|
177
|
-
}, [columns, columnWidths, tableWidth]);
|
|
236
|
+
}, [columns, columnWidths, tableWidth, resizedWidths]);
|
|
178
237
|
return {
|
|
179
238
|
columns: finalColumns,
|
|
180
239
|
totalWidth
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/creek-table/hooks/useAutoWidthColumns.tsx"],
|
|
4
|
-
"sourcesContent": ["import { ProColumns } from '@ant-design/pro-components';\nimport { useMemoizedFn } from 'ahooks';\nimport { Space } from 'antd';\nimport { RefObject, useEffect, useMemo, useRef, useState } from 'react';\n\nconst
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA8B;AAC9B,kBAAsB;AACtB,mBAAgE;
|
|
4
|
+
"sourcesContent": ["import { ProColumns } from '@ant-design/pro-components';\nimport { useMemoizedFn } from 'ahooks';\nimport { Space } from 'antd';\nimport { RefObject, useEffect, useMemo, useRef, useState } from 'react';\n\nconst DEFAULT_PADDING_WIDTH_SMALL = 16; // small size (compact)\nconst DEFAULT_PADDING_WIDTH_LARGE = 24; // large size (default)\n\n/**\n * 估算字符串宽度(简单估算:汉字 14px,非汉字 8px)\n */\nconst estimateWidth = (text: string, padding: number) => {\n let width = 0;\n for (const char of text) {\n if (/[\\u4e00-\\u9fa5]/.test(char)) {\n width += 14;\n } else {\n width += 8;\n }\n }\n return width + padding;\n};\n\n/**\n * 根据 valueType 获取默认宽度\n */\nconst getValueTypeWidth = (valueType: string | undefined): number => {\n switch (valueType) {\n case 'date':\n case 'dateRange':\n return 120;\n case 'dateTime':\n case 'dateTimeRange':\n return 180;\n case 'time':\n case 'timeRange':\n return 100;\n case 'index':\n case 'indexBorder':\n return 60;\n case 'money':\n return 100;\n case 'digit':\n return 100;\n case 'select':\n return 120;\n default:\n return 80; // 默认给 80\n }\n};\n\n/**\n * 一个用于测量的包裹组件\n */\nconst MeasureWrapper = ({ children, onResize }: { children: React.ReactNode; onResize: (width: number) => void }) => {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n\n // 初次测量\n onResize(ref.current.offsetWidth);\n\n // 监听变化\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n // 使用 scrollWidth 来获取完整内容宽度,防止被截断时的测量误差\n const width = (entry.target as HTMLElement).scrollWidth;\n onResize(width);\n }\n });\n\n observer.observe(ref.current);\n\n return () => {\n observer.disconnect();\n };\n }, []); // 依赖为空,只在挂载时设置监听\n\n // 使用 inline-block 和 nowrap 防止内容被父容器宽度挤压导致测量不准\n return (\n <div\n ref={ref}\n style={{\n display: 'inline-block',\n whiteSpace: 'nowrap',\n width: 'max-content', // 确保宽度由内容决定\n minWidth: 'min-content',\n }}\n >\n <Space>{children}</Space>\n </div>\n );\n};\n\nexport const useAutoWidthColumns = <T, ValueType>(\n columns: ProColumns<T, ValueType>[] | undefined,\n tableRef: RefObject<HTMLDivElement>,\n resizedWidths?: Record<string, number>,\n bordered?: boolean,\n size?: 'large' | 'middle' | 'small' | 'medium',\n): { columns: ProColumns<T, ValueType>[] | undefined; totalWidth: number | undefined } => {\n // 存储每个列的最大宽度:key 是 dataIndex 或 title,value 是最大宽度\n const [columnWidths, setColumnWidths] = useState<Record<string, number>>({});\n // 初始时尝试直接获取宽度,如果 tableRef 已经有值\n const [tableWidth, setTableWidth] = useState<number>(() => {\n if (tableRef.current) {\n return tableRef.current.offsetWidth;\n }\n return 0;\n });\n\n // 监听 table 容器宽度变化\n useEffect(() => {\n if (!tableRef.current) return;\n \n // 如果初始状态是0(因为ref.current可能在render时为null),这里补救一下\n if (tableWidth === 0) {\n setTableWidth(tableRef.current.offsetWidth);\n }\n\n // 使用 requestAnimationFrame + setTimeout 防抖\n let rafId: number;\n let timerId: NodeJS.Timeout;\n\n const updateWidth = (width: number) => {\n // 忽略 0 宽度的更新(通常是由于 display: none 引起的)\n if (width === 0) return;\n\n cancelAnimationFrame(rafId);\n clearTimeout(timerId);\n\n rafId = requestAnimationFrame(() => {\n timerId = setTimeout(() => {\n setTableWidth(width);\n }, 500);\n });\n };\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n updateWidth(entry.contentRect.width);\n }\n });\n\n observer.observe(tableRef.current);\n\n // 监听 window resize 作为后备\n const handleWindowResize = () => {\n if (tableRef.current) {\n updateWidth(tableRef.current.offsetWidth);\n }\n };\n window.addEventListener('resize', handleWindowResize);\n\n return () => {\n observer.disconnect();\n window.removeEventListener('resize', handleWindowResize);\n cancelAnimationFrame(rafId);\n clearTimeout(timerId);\n };\n }, [tableRef]);\n\n const handleResize = useMemoizedFn((key: string, width: number) => {\n setColumnWidths((prev) => {\n const currentMax = prev[key] || 0;\n if (width > currentMax) {\n return { ...prev, [key]: width };\n }\n return prev;\n });\n });\n\n const { columns: finalColumns, totalWidth } = useMemo(() => {\n if (!columns) return { columns: undefined, totalWidth: undefined };\n\n // 1. 先计算所有列的理想宽度(不考虑 table 宽度)\n const calculatedColumns = columns.map((col, index) => {\n const colKey = (col.key as string) || (col.dataIndex as string) || `col-${index}`;\n const measuredWidth = columnWidths[colKey];\n \n // 根据 size 确定 padding\n let padding = DEFAULT_PADDING_WIDTH_SMALL;\n if (size === 'large') {\n padding = DEFAULT_PADDING_WIDTH_LARGE;\n }\n \n let baseWidth: number;\n if (col.width) {\n baseWidth = typeof col.width === 'number' ? col.width : 100; // 暂时给个默认值如果手动设了 string width\n } else if (col.valueType === 'option' && measuredWidth) {\n // bordered 模式下,需要额外的宽度来容纳边框和视觉间距,避免换行\n const extraPadding = bordered ? 4: 0;\n baseWidth = measuredWidth + padding + extraPadding;\n } else {\n baseWidth = Math.max(estimateWidth(col.title as string, padding), getValueTypeWidth(col.valueType as string));\n }\n\n let width = baseWidth;\n if (resizedWidths && resizedWidths[colKey]) {\n width = resizedWidths[colKey];\n }\n\n return {\n ...col,\n _calculatedWidth: width,\n _baseWidth: baseWidth, // 新增 _baseWidth 用于后续 minWidth 限制\n _colKey: colKey,\n };\n });\n\n // 2. 计算所有列的总宽度\n const totalCalculatedWidth = calculatedColumns.reduce((acc, col) => acc + col._calculatedWidth, 0);\n\n // 3. 判断是否需要自适应\n // 如果总宽度小于 table 宽度,说明空间足够,除了 option 列,其他列可以不设宽度让 table 自动撑开\n // 但如果有任何列被用户手动 resize 了,我们认为用户希望精确控制,此时也应该返回 totalWidth\n const hasResized = resizedWidths && Object.keys(resizedWidths).length > 0;\n const isOverflow = totalCalculatedWidth > tableWidth || hasResized;\n\n // 只有在内容真实溢出(即总宽度 > 容器宽度)时,才强制给未设置宽度的列设置最小估算宽度。\n // 如果仅仅是用户调整了某列宽度但总宽度仍小于容器宽度,此时不应该限制其他列的宽度,\n // 而是利用 table 的自动布局特性让它们填充剩余空间。\n const shouldForceWidth = totalCalculatedWidth > tableWidth;\n\n const processedColumns = calculatedColumns.map((col) => {\n // 提取内部使用的字段\n const { _calculatedWidth, _baseWidth, _colKey, ...originalCol } = col;\n\n // 针对 valueType === 'option' (操作列),始终需要特殊处理(包裹测量组件)\n if (col.valueType === 'option') {\n const originalRender = col.render;\n return {\n ...originalCol,\n // 始终设置 option 列宽度\n width: _calculatedWidth,\n fixed: col.fixed ?? 'right',\n render: (dom: any, entity: any, index: any, action: any, schema: any) => {\n const originalRenderResult = originalRender ? (originalRender(dom, entity, index, action, schema) as React.ReactNode) : dom;\n return <MeasureWrapper onResize={(width) => handleResize(_colKey, width)}>{originalRenderResult}</MeasureWrapper>;\n },\n } as ProColumns<T, ValueType>;\n }\n\n // 非 option 列\n return {\n ...originalCol,\n // 只有当内容溢出(需要滚动)或者手动设置了宽度时,才应用计算出的宽度\n // 否则不设置 width,让 Antd Table 自动布局占满剩余空间\n width: shouldForceWidth || col.width || (resizedWidths && resizedWidths[_colKey]) ? _calculatedWidth : undefined,\n // 添加 calculatedWidth 以供后续 useResizableColumns 使用,这里使用 _baseWidth (即不受 resize 影响的宽度)\n calculatedWidth: _baseWidth,\n onHeaderCell: (column: any) => {\n const originalProps = originalCol.onHeaderCell ? originalCol.onHeaderCell(column) : {};\n return {\n ...originalProps,\n style: {\n ...originalProps.style,\n minWidth: _calculatedWidth,\n },\n };\n },\n onCell: (record: any, index: any) => {\n const originalProps = originalCol.onCell ? originalCol.onCell(record, index) : {};\n return {\n ...originalProps,\n style: {\n ...originalProps.style,\n minWidth: _calculatedWidth,\n },\n };\n },\n };\n });\n\n return {\n columns: processedColumns,\n totalWidth: isOverflow ? totalCalculatedWidth : undefined,\n };\n }, [columns, columnWidths, tableWidth, resizedWidths]);\n\n return {\n columns: finalColumns,\n totalWidth,\n };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useElementDistance.d.ts","sourceRoot":"","sources":["../../../src/creek-table/hooks/useElementDistance.tsx"],"names":[],"mappings":";AAGA,KAAK,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAO/C,UAAU,QAAQ;IAChB,CAAC,EAAE,MAAM,CAAC;CACX;AAeD,eAAO,MAAM,kBAAkB,wDAAuD,QAAQ,GAAG,IAoChG,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParamsType, ProColumns } from '@ant-design/pro-components';
|
|
2
|
+
/**
|
|
3
|
+
* 默认开启 ellipsis 的 Hook
|
|
4
|
+
* 1. 如果用户未配置 ellipsis,默认开启,并使用 Tooltip 显示完整内容
|
|
5
|
+
* 2. 如果是 option 列,默认不开启
|
|
6
|
+
* 3. 尊重用户配置
|
|
7
|
+
*/
|
|
8
|
+
export declare const useEllipsisColumns: <T extends ParamsType, ValueType = "text">(columns: ProColumns<T, ValueType>[] | undefined) => ProColumns<T, ValueType>[] | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEllipsisColumns.d.ts","sourceRoot":"","sources":["../../../src/creek-table/hooks/useEllipsisColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIzE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,sDACpB,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,2CAmChD,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/creek-table/hooks/useEllipsisColumns.tsx
|
|
20
|
+
var useEllipsisColumns_exports = {};
|
|
21
|
+
__export(useEllipsisColumns_exports, {
|
|
22
|
+
useEllipsisColumns: () => useEllipsisColumns
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(useEllipsisColumns_exports);
|
|
25
|
+
var import_react = require("react");
|
|
26
|
+
var import_components = require("../components");
|
|
27
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
28
|
+
var useEllipsisColumns = (columns) => {
|
|
29
|
+
const processedColumns = (0, import_react.useMemo)(() => {
|
|
30
|
+
return columns == null ? void 0 : columns.map((col) => {
|
|
31
|
+
if (col.valueType === "option") {
|
|
32
|
+
return col;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
...col,
|
|
36
|
+
// 关闭 Table 自带的 ellipsis title,因为我们要用自己的 Tooltip
|
|
37
|
+
// 但保留 ellipsis 属性以确保 Table 传递正确的样式给 cell(虽然我们的 EllipsisTooltip 也有样式)
|
|
38
|
+
// 实际上,为了让 EllipsisTooltip 占据 100% 宽度并生效,最好让 Table cell 也保持一定的约束
|
|
39
|
+
ellipsis: {
|
|
40
|
+
showTitle: false
|
|
41
|
+
},
|
|
42
|
+
render: (dom, entity, index, action, schema) => {
|
|
43
|
+
const originalRenderResult = col.render ? col.render(dom, entity, index, action, schema) : dom;
|
|
44
|
+
if (originalRenderResult === null || originalRenderResult === void 0 || originalRenderResult === "") {
|
|
45
|
+
return originalRenderResult;
|
|
46
|
+
}
|
|
47
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.EllipsisTooltip, { children: originalRenderResult });
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
}, [columns]);
|
|
52
|
+
return processedColumns;
|
|
53
|
+
};
|
|
54
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
55
|
+
0 && (module.exports = {
|
|
56
|
+
useEllipsisColumns
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=useEllipsisColumns.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/creek-table/hooks/useEllipsisColumns.tsx"],
|
|
4
|
+
"sourcesContent": ["import type { ParamsType, ProColumns } from '@ant-design/pro-components';\nimport React, { useMemo } from 'react';\nimport { EllipsisTooltip } from '../components';\n\n/**\n * 默认开启 ellipsis 的 Hook\n * 1. 如果用户未配置 ellipsis,默认开启,并使用 Tooltip 显示完整内容\n * 2. 如果是 option 列,默认不开启\n * 3. 尊重用户配置\n */\nexport const useEllipsisColumns = <T extends ParamsType, ValueType = 'text'>(\n columns: ProColumns<T, ValueType>[] | undefined,\n) => {\n const processedColumns = useMemo(() => {\n return columns?.map((col) => {\n // 对于操作列,默认不开启 ellipsis\n if (col.valueType === 'option') {\n return col;\n }\n // 其他列默认开启 ellipsis,并使用自定义渲染\n return {\n ...col,\n // 关闭 Table 自带的 ellipsis title,因为我们要用自己的 Tooltip\n // 但保留 ellipsis 属性以确保 Table 传递正确的样式给 cell(虽然我们的 EllipsisTooltip 也有样式)\n // 实际上,为了让 EllipsisTooltip 占据 100% 宽度并生效,最好让 Table cell 也保持一定的约束\n ellipsis: {\n showTitle: false,\n },\n render: (dom: React.ReactNode, entity: T, index: number, action: any, schema: any) => {\n const originalRenderResult = col.render ? (col.render(dom, entity, index, action, schema) as React.ReactNode) : dom;\n \n // 如果内容为空,直接返回\n if (originalRenderResult === null || originalRenderResult === undefined || originalRenderResult === '') {\n return originalRenderResult;\n }\n\n // 如果是简单的文本或数字,使用 EllipsisTooltip 包裹\n return (\n <EllipsisTooltip>{originalRenderResult}</EllipsisTooltip>\n );\n },\n } as ProColumns<T, ValueType>;\n });\n }, [columns]);\n\n return processedColumns;\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAA+B;AAC/B,wBAAgC;AAoCpB;AA5BL,IAAM,qBAAqB,CAChC,YACG;AACH,QAAM,uBAAmB,sBAAQ,MAAM;AACrC,WAAO,mCAAS,IAAI,CAAC,QAAQ;AAE3B,UAAI,IAAI,cAAc,UAAU;AAC9B,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,QACL,GAAG;AAAA;AAAA;AAAA;AAAA,QAIH,UAAU;AAAA,UACR,WAAW;AAAA,QACb;AAAA,QACA,QAAQ,CAAC,KAAsB,QAAW,OAAe,QAAa,WAAgB;AACpF,gBAAM,uBAAuB,IAAI,SAAU,IAAI,OAAO,KAAK,QAAQ,OAAO,QAAQ,MAAM,IAAwB;AAGhH,cAAI,yBAAyB,QAAQ,yBAAyB,UAAa,yBAAyB,IAAI;AACtG,mBAAO;AAAA,UACT;AAGA,iBACE,4CAAC,qCAAiB,gCAAqB;AAAA,QAE3C;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIndexColumn.d.ts","sourceRoot":"","sources":["../../../src/creek-table/hooks/useIndexColumn.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAKxD,eAAO,MAAM,cAAc,0CAA0C,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,cAAkB,OAAO,+BAqBvH,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/creek-table/hooks/useIndexColumn.tsx
|
|
20
|
+
var useIndexColumn_exports = {};
|
|
21
|
+
__export(useIndexColumn_exports, {
|
|
22
|
+
useIndexColumn: () => useIndexColumn
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(useIndexColumn_exports);
|
|
25
|
+
var import_react = require("react");
|
|
26
|
+
var import_i18n = require("../../utils/i18n");
|
|
27
|
+
var useIndexColumn = (columns = [], showIndex = true) => {
|
|
28
|
+
const t = (0, import_i18n.useT)();
|
|
29
|
+
return (0, import_react.useMemo)(() => {
|
|
30
|
+
if (!showIndex) {
|
|
31
|
+
return columns;
|
|
32
|
+
}
|
|
33
|
+
const indexColumn = {
|
|
34
|
+
title: t("creek-table.hooks.useIndexColumn.xuHao", "序号"),
|
|
35
|
+
dataIndex: "index",
|
|
36
|
+
width: 48,
|
|
37
|
+
fixed: "left",
|
|
38
|
+
disable: true,
|
|
39
|
+
hideInSearch: true,
|
|
40
|
+
render: (dom, entity, index, action, schema) => {
|
|
41
|
+
const { current = 1, pageSize = 20 } = (action == null ? void 0 : action.pageInfo) || {};
|
|
42
|
+
return (current - 1) * pageSize + index + 1;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
return [indexColumn, ...columns];
|
|
46
|
+
}, [columns, showIndex, t]);
|
|
47
|
+
};
|
|
48
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
49
|
+
0 && (module.exports = {
|
|
50
|
+
useIndexColumn
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=useIndexColumn.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/creek-table/hooks/useIndexColumn.tsx"],
|
|
4
|
+
"sourcesContent": ["import { ProColumns } from '@ant-design/pro-components';\nimport { useMemo } from 'react';\n\nimport { useT } from '@/utils/i18n';\n\nexport const useIndexColumn = <T = any, ValueType = 'text'>(columns: ProColumns<T, ValueType>[] = [], showIndex: boolean = true) => {\n const t = useT();\n\n return useMemo(() => {\n if (!showIndex) {\n return columns;\n }\n const indexColumn: ProColumns<T, ValueType> = {\n title: t('creek-table.hooks.useIndexColumn.xuHao', '序号'),\n dataIndex: 'index',\n width: 48,\n fixed: 'left',\n disable: true,\n hideInSearch: true,\n render: (dom, entity, index, action, schema) => {\n const { current = 1, pageSize = 20 } = action?.pageInfo || {};\n return (current - 1) * pageSize + index + 1;\n },\n };\n return [indexColumn, ...columns];\n }, [columns, showIndex, t]);\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAwB;AAExB,kBAAqB;AAEd,IAAM,iBAAiB,CAA8B,UAAsC,CAAC,GAAG,YAAqB,SAAS;AAClI,QAAM,QAAI,kBAAK;AAEf,aAAO,sBAAQ,MAAM;AACnB,QAAI,CAAC,WAAW;AACd,aAAO;AAAA,IACT;AACA,UAAM,cAAwC;AAAA,MAC5C,OAAO,EAAE,0CAA0C,IAAI;AAAA,MACvD,WAAW;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,cAAc;AAAA,MACd,QAAQ,CAAC,KAAK,QAAQ,OAAO,QAAQ,WAAW;AAC9C,cAAM,EAAE,UAAU,GAAG,WAAW,GAAG,KAAI,iCAAQ,aAAY,CAAC;AAC5D,gBAAQ,UAAU,KAAK,WAAW,QAAQ;AAAA,MAC5C;AAAA,IACF;AACA,WAAO,CAAC,aAAa,GAAG,OAAO;AAAA,EACjC,GAAG,CAAC,SAAS,WAAW,CAAC,CAAC;AAC5B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ProColumns } from '@ant-design/pro-components';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { ResizeCallbackData } from 'react-resizable';
|
|
4
|
+
interface ResizableTitleProps extends React.HTMLAttributes<HTMLTableCellElement> {
|
|
5
|
+
onResize?: (e: React.SyntheticEvent, data: ResizeCallbackData) => void;
|
|
6
|
+
onResizeStart?: (e: React.SyntheticEvent, data: ResizeCallbackData) => void;
|
|
7
|
+
onResizeStop?: (e: React.SyntheticEvent, data: ResizeCallbackData) => void;
|
|
8
|
+
width?: number | string;
|
|
9
|
+
minWidth?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const useResizableColumns: <T, ValueType>(columns: ProColumns<T, ValueType>[] | undefined, resizable?: boolean, resizedWidthsProp?: Record<string, number>, setResizedWidthsProp?: React.Dispatch<React.SetStateAction<Record<string, number>>>, tableRef?: React.RefObject<HTMLDivElement>) => {
|
|
12
|
+
columns: ProColumns<T, ValueType>[] | undefined;
|
|
13
|
+
components: {
|
|
14
|
+
header: {
|
|
15
|
+
cell: React.ComponentType<ResizableTitleProps>;
|
|
16
|
+
};
|
|
17
|
+
} | undefined;
|
|
18
|
+
resizedWidths: Record<string, number>;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResizableColumns.d.ts","sourceRoot":"","sources":["../../../src/creek-table/hooks/useResizableColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIxD,OAAO,KAAgE,MAAM,OAAO,CAAC;AACrF,OAAO,EAAa,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,UAAU,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC;IAC9E,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACvE,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5E,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC3E,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAgLD,eAAO,MAAM,mBAAmB,0BACrB,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,cACpC,OAAO,sBACE,OAAO,MAAM,EAAE,MAAM,CAAC,yBACnB,MAAM,QAAQ,CAAC,MAAM,cAAc,CAAC,OAAO,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,aACxE,MAAM,SAAS,CAAC,cAAc,CAAC;aAEjC,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS;gBACnC;QAAE,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,aAAa,CAAC,mBAAmB,CAAC,CAAA;SAAE,CAAA;KAAE,GAAG,SAAS;mBACvE,OAAO,MAAM,EAAE,MAAM,CAAC;CA4HtC,CAAC"}
|