@canvas-components/react-pivot-table 0.2.16 → 0.2.17
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/dist/index.cjs +57 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +58 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createContext, forwardRef, useMemo, useRef, useState, useEffect, useImperativeHandle, useContext, Fragment as Fragment$1 } from 'react';
|
|
2
2
|
import { createEmptyPivotFieldLayout, createPivotFieldCatalog, resolvePivotDimensionKey, resolvePivotFieldLayoutOptions, PivotTable, loadPivotFieldLayout, DEFAULT_PIVOT_TABLE_DEBUG_OPTIONS, getValueByDataIndex, resolvePivotDimensionTitle, findPivotFieldArea, removePivotField, movePivotField, resolvePivotValueFieldTitle, savePivotFieldLayout, createPivotCellKey } from '@canvas-components/pivot-table';
|
|
3
|
-
import { ReactResizablePanels, ReactFilterPanel, ReactPopup, ReactCheckbox, ReactInput, ReactSelect, ReactInputNumber } from '@canvas-components/react-components';
|
|
3
|
+
import { ReactResizablePanels, ReactFilterPanel, ReactPopup, ReactCheckbox, ReactModal, ReactInput, ReactSelect, ReactInputNumber } from '@canvas-components/react-components';
|
|
4
4
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
5
5
|
import { createPortal } from 'react-dom';
|
|
6
6
|
import { CanvasChart } from '@canvas-components/chart';
|
|
@@ -690,6 +690,58 @@ function DataFormatMenu(props) {
|
|
|
690
690
|
}
|
|
691
691
|
);
|
|
692
692
|
}
|
|
693
|
+
function PivotExportNameDialog({
|
|
694
|
+
request
|
|
695
|
+
}) {
|
|
696
|
+
const extension = request.fileName.match(/\.(xlsx|csv)$/i)?.[0] ?? "";
|
|
697
|
+
const [fileName, setFileName] = useState(
|
|
698
|
+
extension ? request.fileName.slice(0, -extension.length) : request.fileName
|
|
699
|
+
);
|
|
700
|
+
const [invalid, setInvalid] = useState(false);
|
|
701
|
+
const confirm = () => {
|
|
702
|
+
if (!fileName.trim()) {
|
|
703
|
+
setInvalid(true);
|
|
704
|
+
return;
|
|
705
|
+
}
|
|
706
|
+
request.onConfirm(`${fileName.trim()}${extension}`);
|
|
707
|
+
};
|
|
708
|
+
return /* @__PURE__ */ jsxs(
|
|
709
|
+
ReactModal,
|
|
710
|
+
{
|
|
711
|
+
open: true,
|
|
712
|
+
title: "\u5BFC\u51FA\u6587\u4EF6",
|
|
713
|
+
width: 420,
|
|
714
|
+
fullscreenable: false,
|
|
715
|
+
onCancel: request.onCancel,
|
|
716
|
+
onOk: confirm,
|
|
717
|
+
okText: "\u5BFC\u51FA",
|
|
718
|
+
cancelText: "\u53D6\u6D88",
|
|
719
|
+
children: [
|
|
720
|
+
/* @__PURE__ */ jsxs("label", { style: { display: "flex", flexDirection: "column", gap: 8 }, children: [
|
|
721
|
+
"\u6587\u4EF6\u540D\u79F0",
|
|
722
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: 8 }, children: [
|
|
723
|
+
/* @__PURE__ */ jsx(
|
|
724
|
+
ReactInput,
|
|
725
|
+
{
|
|
726
|
+
autoFocus: true,
|
|
727
|
+
value: fileName,
|
|
728
|
+
placeholder: "\u8BF7\u8F93\u5165\u6587\u4EF6\u540D\u79F0",
|
|
729
|
+
onFocus: (event) => event.target.select(),
|
|
730
|
+
onChange: (event) => {
|
|
731
|
+
setFileName(event.target.value);
|
|
732
|
+
setInvalid(false);
|
|
733
|
+
},
|
|
734
|
+
onPressEnter: confirm
|
|
735
|
+
}
|
|
736
|
+
),
|
|
737
|
+
/* @__PURE__ */ jsx("span", { "aria-label": "\u6587\u4EF6\u540E\u7F00", style: { flexShrink: 0 }, children: extension })
|
|
738
|
+
] })
|
|
739
|
+
] }),
|
|
740
|
+
invalid ? /* @__PURE__ */ jsx("div", { role: "alert", style: { color: "#ff4d4f", marginTop: 8 }, children: "\u8BF7\u8F93\u5165\u6587\u4EF6\u540D\u79F0" }) : null
|
|
741
|
+
]
|
|
742
|
+
}
|
|
743
|
+
);
|
|
744
|
+
}
|
|
693
745
|
function PivotTooltip(props) {
|
|
694
746
|
const { request } = props;
|
|
695
747
|
if (!request) return null;
|
|
@@ -1710,6 +1762,7 @@ function ReactPivotTableInner(props, ref) {
|
|
|
1710
1762
|
const [densityOverride, setDensityOverride] = useState(null);
|
|
1711
1763
|
const [filterRequest, setFilterRequest] = useState(null);
|
|
1712
1764
|
const [contextMenuRequest, setContextMenuRequest] = useState(null);
|
|
1765
|
+
const [exportNameRequest, setExportNameRequest] = useState(null);
|
|
1713
1766
|
const [tooltipRequest, setTooltipRequest] = useState(null);
|
|
1714
1767
|
const panelOpen = customizationOptions?.open ?? internalPanelOpen;
|
|
1715
1768
|
const fieldLayout = customizationOptions?.layout ?? internalLayout;
|
|
@@ -1788,6 +1841,9 @@ function ReactPivotTableInner(props, ref) {
|
|
|
1788
1841
|
rowHeight: densityOverride == null ? tableOptions.rowHeight : resolveDensityRowHeight(densityOverride),
|
|
1789
1842
|
indicators: customizedOptions?.indicators ?? overriddenIndicators,
|
|
1790
1843
|
ui: {
|
|
1844
|
+
onExportNameRequest: (request) => {
|
|
1845
|
+
setExportNameRequest(request);
|
|
1846
|
+
},
|
|
1791
1847
|
onFilterPanelRequest: setFilterRequest,
|
|
1792
1848
|
onContextMenuRequest: (request) => {
|
|
1793
1849
|
if (request) {
|
|
@@ -2063,6 +2119,7 @@ function ReactPivotTableInner(props, ref) {
|
|
|
2063
2119
|
),
|
|
2064
2120
|
/* @__PURE__ */ jsx(ReactFilterPanel, { request: sharedFilterRequest }),
|
|
2065
2121
|
/* @__PURE__ */ jsx(PivotContextMenu, { request: contextMenuRequest }),
|
|
2122
|
+
exportNameRequest ? /* @__PURE__ */ jsx(PivotExportNameDialog, { request: exportNameRequest }) : null,
|
|
2066
2123
|
/* @__PURE__ */ jsx(PivotTooltip, { request: tooltipRequest })
|
|
2067
2124
|
] });
|
|
2068
2125
|
}
|