react-pivottable-plus 1.0.20 → 1.1.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/README.md +30 -6
- package/dist/PivotTable.js +6 -28
- package/dist/PivotTable.js.map +1 -1
- package/dist/PivotTableUI.js +168 -162
- package/dist/PivotTableUI.js.map +1 -1
- package/dist/TableRenderers.js +616 -490
- package/dist/TableRenderers.js.map +1 -1
- package/dist/Utilities.js +50 -55
- package/dist/Utilities.js.map +1 -1
- package/dist/__tests__/Modules.test.js +227 -0
- package/dist/__tests__/Modules.test.js.map +1 -0
- package/dist/__tests__/PivotEngine.test.js +176 -0
- package/dist/__tests__/PivotEngine.test.js.map +1 -0
- package/dist/__tests__/PivotTableUI-test.js +4 -175
- package/dist/__tests__/PivotTableUI-test.js.map +1 -1
- package/dist/core/PivotCore.js +3 -252
- package/dist/core/PivotCore.js.map +1 -1
- package/dist/core/api/GridApi.js +25 -0
- package/dist/core/api/GridApi.js.map +1 -1
- package/dist/core/index.js +0 -7
- package/dist/core/index.js.map +1 -1
- package/dist/hooks/usePivot.js +20 -2
- package/dist/hooks/usePivot.js.map +1 -1
- package/package.json +17 -8
- /package/{pivottable.css → react_pivottable_plus.css} +0 -0
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ npm install react-pivottable-plus
|
|
|
37
37
|
```jsx
|
|
38
38
|
import React, { useState } from 'react';
|
|
39
39
|
import PivotTableUI from 'react-pivottable-plus';
|
|
40
|
-
import 'react-pivottable-plus/
|
|
40
|
+
import 'react-pivottable-plus/react_pivottable_plus.css';
|
|
41
41
|
|
|
42
42
|
const data = [
|
|
43
43
|
{ producto: "Manzana", categoria: "Fruta", ventas: 100 },
|
|
@@ -71,7 +71,7 @@ Crea un componente cliente dedicado para encapsular el pivot table:
|
|
|
71
71
|
|
|
72
72
|
import React, { useState } from 'react';
|
|
73
73
|
import PivotTableUI from 'react-pivottable-plus';
|
|
74
|
-
import 'react-pivottable-plus/
|
|
74
|
+
import 'react-pivottable-plus/react_pivottable_plus.css';
|
|
75
75
|
|
|
76
76
|
export default function PivotWrapper({ data }) {
|
|
77
77
|
const [state, setState] = useState({});
|
|
@@ -107,7 +107,7 @@ export default function Page() {
|
|
|
107
107
|
```jsx
|
|
108
108
|
// pages/dashboard.jsx
|
|
109
109
|
import dynamic from 'next/dynamic';
|
|
110
|
-
import 'react-pivottable-plus/
|
|
110
|
+
import 'react-pivottable-plus/react_pivottable_plus.css';
|
|
111
111
|
|
|
112
112
|
// Importación dinámica para evitar errores de SSR
|
|
113
113
|
const PivotTableUI = dynamic(
|
|
@@ -150,6 +150,30 @@ const nextConfig = {
|
|
|
150
150
|
module.exports = nextConfig;
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 🛠️ Solución de Problemas (Troubleshooting)
|
|
156
|
+
|
|
157
|
+
### ❌ Error: `Module not found: Can't resolve 'react-pivottable-plus/react_pivottable_plus.css'`
|
|
158
|
+
|
|
159
|
+
Este error suele ocurrir en versiones antiguas o por confusión con el fork original. **react-pivottable-plus** ha estandarizado su archivo de estilos para que coincida con la identidad de la librería.
|
|
160
|
+
|
|
161
|
+
**Solución Oficial:**
|
|
162
|
+
Asegúrate de estar usando la ruta oficial que ahora coincide con el nombre de la librería para evitar confusiones:
|
|
163
|
+
|
|
164
|
+
```js
|
|
165
|
+
import 'react-pivottable-plus/react_pivottable_plus.css';
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
> [!NOTE]
|
|
169
|
+
> Aunque `pivottable.css` sigue funcionando como alias por compatibilidad, recomendamos migrar a `react_pivottable_plus.css`.
|
|
170
|
+
|
|
171
|
+
### ❌ Error: `ReferenceError: window is not defined`
|
|
172
|
+
El componente debe cargarse únicamente en el cliente. Asegúrate de añadir la directiva `"use client"` al inicio de tu archivo o usar importación dinámica con `ssr: false`.
|
|
173
|
+
|
|
174
|
+
### ❌ Estilos no se aplican correctamente
|
|
175
|
+
Si los estilos se ven básicos o desordenados, verifica que has importado el CSS obligatorio en tu punto de entrada principal.
|
|
176
|
+
|
|
153
177
|
## 🌈 Uso de Renderizadores Modernos
|
|
154
178
|
|
|
155
179
|
```jsx
|
|
@@ -157,7 +181,7 @@ module.exports = nextConfig;
|
|
|
157
181
|
|
|
158
182
|
import PivotTableUI from 'react-pivottable-plus';
|
|
159
183
|
import { TailwindUI } from 'react-pivottable-plus/renderers/TailwindUI';
|
|
160
|
-
import 'react-pivottable-plus/
|
|
184
|
+
import 'react-pivottable-plus/react_pivottable_plus.css';
|
|
161
185
|
|
|
162
186
|
<PivotTableUI
|
|
163
187
|
data={data}
|
|
@@ -183,7 +207,7 @@ import 'react-pivottable-plus/pivottable.css';
|
|
|
183
207
|
|
|
184
208
|
---
|
|
185
209
|
|
|
186
|
-
Este proyecto es
|
|
210
|
+
Este proyecto es la evolución profesional de las tablas dinámicas en React, diseñado para proporcionar una experiencia de usuario superior, rendimiento de grado industrial y compatibilidad total con el stack moderno (React 18/19, Next.js, Tailwind).
|
|
187
211
|
|
|
188
212
|
## ✍️ Créditos y Autoría
|
|
189
|
-
|
|
213
|
+
**react-pivottable-plus** ha sido desarrollado y es mantenido por **Jasp402**, quien ha liderado la re-arquitectura del motor, la implementación de interfaces premium (Tailwind, Shadcn, Radix UI) y la optimización de rendimiento para grandes volúmenes de datos.
|
package/dist/PivotTable.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
@@ -10,34 +9,13 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
10
9
|
var _Utilities = require("./Utilities");
|
|
11
10
|
var _TableRenderers = _interopRequireDefault(require("./TableRenderers"));
|
|
12
11
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
13
|
-
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
14
|
-
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
15
|
-
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
16
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
17
|
-
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
18
|
-
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
19
|
-
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
|
|
20
|
-
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
|
21
|
-
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
22
|
-
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
|
|
23
|
-
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
|
24
|
-
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
25
12
|
/* eslint-disable react/prop-types */
|
|
26
|
-
|
|
27
|
-
var PivotTable = /*#__PURE__*/function (
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
_inherits(PivotTable, _React$PureComponent);
|
|
33
|
-
return _createClass(PivotTable, [{
|
|
34
|
-
key: "render",
|
|
35
|
-
value: function render() {
|
|
36
|
-
var Renderer = this.props.renderers[this.props.rendererName in this.props.renderers ? this.props.rendererName : Object.keys(this.props.renderers)[0]];
|
|
37
|
-
return /*#__PURE__*/_react["default"].createElement(Renderer, this.props);
|
|
38
|
-
}
|
|
39
|
-
}]);
|
|
40
|
-
}(_react["default"].PureComponent);
|
|
13
|
+
|
|
14
|
+
var PivotTable = /*#__PURE__*/_react["default"].memo(function PivotTable(props) {
|
|
15
|
+
var Renderer = props.renderers[props.rendererName in props.renderers ? props.rendererName : Object.keys(props.renderers)[0]];
|
|
16
|
+
return /*#__PURE__*/_react["default"].createElement(Renderer, props);
|
|
17
|
+
});
|
|
18
|
+
PivotTable.displayName = 'PivotTable';
|
|
41
19
|
PivotTable.propTypes = Object.assign({}, _Utilities.PivotData.propTypes, {
|
|
42
20
|
rendererName: _propTypes["default"].string,
|
|
43
21
|
renderers: _propTypes["default"].objectOf(_propTypes["default"].func)
|
package/dist/PivotTable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PivotTable.js","names":["_react","_interopRequireDefault","require","_propTypes","_Utilities","_TableRenderers","e","__esModule","
|
|
1
|
+
{"version":3,"file":"PivotTable.js","names":["_react","_interopRequireDefault","require","_propTypes","_Utilities","_TableRenderers","e","__esModule","PivotTable","React","memo","props","Renderer","renderers","rendererName","Object","keys","createElement","displayName","propTypes","assign","PivotData","PropTypes","string","objectOf","func","defaultProps","TableRenderers","_default","exports"],"sources":["../src/PivotTable.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { PivotData } from './Utilities';\nimport TableRenderers from './TableRenderers';\n\n/* eslint-disable react/prop-types */\n\nconst PivotTable = React.memo(function PivotTable(props) {\n const Renderer = props.renderers[\n props.rendererName in props.renderers\n ? props.rendererName\n : Object.keys(props.renderers)[0]\n ];\n return <Renderer {...props} />;\n});\n\nPivotTable.displayName = 'PivotTable';\n\nPivotTable.propTypes = Object.assign({}, PivotData.propTypes, {\n rendererName: PropTypes.string,\n renderers: PropTypes.objectOf(PropTypes.func),\n});\n\nPivotTable.defaultProps = Object.assign({}, PivotData.defaultProps, {\n rendererName: 'Table',\n renderers: TableRenderers,\n});\n\nexport default PivotTable;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAA8C,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,gBAAAA,CAAA;AAE9C;;AAEA,IAAME,UAAU,gBAAGC,iBAAK,CAACC,IAAI,CAAC,SAASF,UAAUA,CAACG,KAAK,EAAE;EACvD,IAAMC,QAAQ,GAAGD,KAAK,CAACE,SAAS,CAC9BF,KAAK,CAACG,YAAY,IAAIH,KAAK,CAACE,SAAS,GACjCF,KAAK,CAACG,YAAY,GAClBC,MAAM,CAACC,IAAI,CAACL,KAAK,CAACE,SAAS,CAAC,CAAC,CAAC,CAAC,CACpC;EACD,oBAAOb,MAAA,YAAAiB,aAAA,CAACL,QAAQ,EAAKD,KAAQ,CAAC;AAChC,CAAC,CAAC;AAEFH,UAAU,CAACU,WAAW,GAAG,YAAY;AAErCV,UAAU,CAACW,SAAS,GAAGJ,MAAM,CAACK,MAAM,CAAC,CAAC,CAAC,EAAEC,oBAAS,CAACF,SAAS,EAAE;EAC5DL,YAAY,EAAEQ,qBAAS,CAACC,MAAM;EAC9BV,SAAS,EAAES,qBAAS,CAACE,QAAQ,CAACF,qBAAS,CAACG,IAAI;AAC9C,CAAC,CAAC;AAEFjB,UAAU,CAACkB,YAAY,GAAGX,MAAM,CAACK,MAAM,CAAC,CAAC,CAAC,EAAEC,oBAAS,CAACK,YAAY,EAAE;EAClEZ,YAAY,EAAE,OAAO;EACrBD,SAAS,EAAEc;AACb,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,cAEYrB,UAAU","ignoreList":[]}
|
package/dist/PivotTableUI.js
CHANGED
|
@@ -273,15 +273,112 @@ var DnDCell = function DnDCell(_ref4) {
|
|
|
273
273
|
});
|
|
274
274
|
}))));
|
|
275
275
|
};
|
|
276
|
+
|
|
277
|
+
// ─── Extracted Helper: Renderer Dropdown ────────────────────────────────────────
|
|
278
|
+
var RendererDropdown = function RendererDropdown(_ref5) {
|
|
279
|
+
var rendererName = _ref5.rendererName,
|
|
280
|
+
renderers = _ref5.renderers,
|
|
281
|
+
isOpen = _ref5.isOpen,
|
|
282
|
+
uiState = _ref5.uiState,
|
|
283
|
+
setUiState = _ref5.setUiState;
|
|
284
|
+
return /*#__PURE__*/_react["default"].createElement("td", {
|
|
285
|
+
className: "pvtRenderers"
|
|
286
|
+
}, /*#__PURE__*/_react["default"].createElement(Dropdown, {
|
|
287
|
+
current: rendererName,
|
|
288
|
+
values: Object.keys(renderers),
|
|
289
|
+
open: isOpen('renderer'),
|
|
290
|
+
zIndex: isOpen('renderer') ? uiState.maxZIndex + 1 : 1,
|
|
291
|
+
toggle: function toggle() {
|
|
292
|
+
return setUiState(function (s) {
|
|
293
|
+
return _objectSpread(_objectSpread({}, s), {}, {
|
|
294
|
+
openDropdown: isOpen('renderer') ? false : 'renderer'
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
},
|
|
298
|
+
setValue: function setValue(v) {
|
|
299
|
+
return rendererName._updateProp('rendererName', v);
|
|
300
|
+
}
|
|
301
|
+
}));
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
// ─── Extracted Helper: Aggregator + Sort + Vals Controls ────────────────────────
|
|
305
|
+
var AggregatorControls = function AggregatorControls(_ref6) {
|
|
306
|
+
var aggregatorName = _ref6.aggregatorName,
|
|
307
|
+
aggregators = _ref6.aggregators,
|
|
308
|
+
vals = _ref6.vals,
|
|
309
|
+
pivotState = _ref6.pivotState,
|
|
310
|
+
hiddenAttributes = _ref6.hiddenAttributes,
|
|
311
|
+
hiddenFromAggregators = _ref6.hiddenFromAggregators,
|
|
312
|
+
isOpen = _ref6.isOpen,
|
|
313
|
+
uiState = _ref6.uiState,
|
|
314
|
+
setUiState = _ref6.setUiState,
|
|
315
|
+
actions = _ref6.actions,
|
|
316
|
+
rowOrder = _ref6.rowOrder,
|
|
317
|
+
colOrder = _ref6.colOrder,
|
|
318
|
+
sortIcons = _ref6.sortIcons,
|
|
319
|
+
numValsAllowed = _ref6.numValsAllowed;
|
|
320
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(Dropdown, {
|
|
321
|
+
current: aggregatorName,
|
|
322
|
+
values: Object.keys(aggregators),
|
|
323
|
+
open: isOpen('aggregators'),
|
|
324
|
+
zIndex: isOpen('aggregators') ? uiState.maxZIndex + 1 : 1,
|
|
325
|
+
toggle: function toggle() {
|
|
326
|
+
return setUiState(function (s) {
|
|
327
|
+
return _objectSpread(_objectSpread({}, s), {}, {
|
|
328
|
+
openDropdown: isOpen('aggregators') ? false : 'aggregators'
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
},
|
|
332
|
+
setValue: function setValue(v) {
|
|
333
|
+
return actions.updateProp('aggregatorName', v);
|
|
334
|
+
}
|
|
335
|
+
}), /*#__PURE__*/_react["default"].createElement("a", {
|
|
336
|
+
role: "button",
|
|
337
|
+
className: "pvtRowOrder",
|
|
338
|
+
onClick: function onClick() {
|
|
339
|
+
return actions.updateProp('rowOrder', sortIcons[rowOrder].next);
|
|
340
|
+
}
|
|
341
|
+
}, sortIcons[rowOrder].rowSymbol), /*#__PURE__*/_react["default"].createElement("a", {
|
|
342
|
+
role: "button",
|
|
343
|
+
className: "pvtColOrder",
|
|
344
|
+
onClick: function onClick() {
|
|
345
|
+
return actions.updateProp('colOrder', sortIcons[colOrder].next);
|
|
346
|
+
}
|
|
347
|
+
}, sortIcons[colOrder].colSymbol), numValsAllowed > 0 && /*#__PURE__*/_react["default"].createElement("br", null), new Array(numValsAllowed).fill(null).map(function (_, i) {
|
|
348
|
+
return [/*#__PURE__*/_react["default"].createElement(Dropdown, {
|
|
349
|
+
key: i,
|
|
350
|
+
current: vals[i],
|
|
351
|
+
values: Object.keys(pivotState.attrValues).filter(function (e) {
|
|
352
|
+
return !hiddenAttributes.includes(e) && !hiddenFromAggregators.includes(e);
|
|
353
|
+
}),
|
|
354
|
+
open: isOpen("val".concat(i)),
|
|
355
|
+
zIndex: isOpen("val".concat(i)) ? uiState.maxZIndex + 1 : 1,
|
|
356
|
+
toggle: function toggle() {
|
|
357
|
+
return setUiState(function (s) {
|
|
358
|
+
return _objectSpread(_objectSpread({}, s), {}, {
|
|
359
|
+
openDropdown: isOpen("val".concat(i)) ? false : "val".concat(i)
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
},
|
|
363
|
+
setValue: function setValue(value) {
|
|
364
|
+
var newVals = _toConsumableArray(vals);
|
|
365
|
+
newVals[i] = value;
|
|
366
|
+
actions.updateProp('vals', newVals);
|
|
367
|
+
}
|
|
368
|
+
}), i + 1 !== numValsAllowed ? /*#__PURE__*/_react["default"].createElement("br", {
|
|
369
|
+
key: "br".concat(i)
|
|
370
|
+
}) : null];
|
|
371
|
+
}));
|
|
372
|
+
};
|
|
276
373
|
var PivotTableUI = function PivotTableUI(props) {
|
|
277
374
|
var _aggregators$aggregat, _aggregators$aggregat2;
|
|
278
|
-
// ─── Headless Core
|
|
375
|
+
// ─── Headless Core ───
|
|
279
376
|
var _usePivot = (0, _usePivot2.usePivot)(props),
|
|
280
377
|
pivotProps = _usePivot.props,
|
|
281
378
|
pivotState = _usePivot.state,
|
|
282
379
|
actions = _usePivot.actions;
|
|
283
380
|
|
|
284
|
-
// ───
|
|
381
|
+
// ─── UI State local ───
|
|
285
382
|
var _useState5 = (0, _react.useState)({
|
|
286
383
|
zIndices: {},
|
|
287
384
|
maxZIndex: 1000,
|
|
@@ -294,8 +391,6 @@ var PivotTableUI = function PivotTableUI(props) {
|
|
|
294
391
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
295
392
|
activeId = _useState8[0],
|
|
296
393
|
setActiveId = _useState8[1];
|
|
297
|
-
|
|
298
|
-
// ─── Helpers de UI local ──────────────────────────────────────────────────────
|
|
299
394
|
var moveFilterBoxToTop = (0, _react.useCallback)(function (attribute) {
|
|
300
395
|
setUiState(function (s) {
|
|
301
396
|
return _objectSpread(_objectSpread({}, s), {}, {
|
|
@@ -305,7 +400,7 @@ var PivotTableUI = function PivotTableUI(props) {
|
|
|
305
400
|
});
|
|
306
401
|
}, []);
|
|
307
402
|
|
|
308
|
-
// ─── Derivados
|
|
403
|
+
// ─── Derivados ───
|
|
309
404
|
var _pivotProps$rows = pivotProps.rows,
|
|
310
405
|
rows = _pivotProps$rows === void 0 ? [] : _pivotProps$rows,
|
|
311
406
|
_pivotProps$cols = pivotProps.cols,
|
|
@@ -365,7 +460,7 @@ var PivotTableUI = function PivotTableUI(props) {
|
|
|
365
460
|
return e && e.trim() !== '' && !hiddenAttributes.includes(e) && !hiddenFromDragDrop.includes(e);
|
|
366
461
|
});
|
|
367
462
|
|
|
368
|
-
// ─── DnD
|
|
463
|
+
// ─── DnD ───
|
|
369
464
|
var getZoneOfItem = function getZoneOfItem(id) {
|
|
370
465
|
if (rowAttrs.includes(id)) return 'rows';
|
|
371
466
|
if (colAttrs.includes(id)) return 'cols';
|
|
@@ -395,14 +490,14 @@ var PivotTableUI = function PivotTableUI(props) {
|
|
|
395
490
|
distance: 5
|
|
396
491
|
}
|
|
397
492
|
}));
|
|
398
|
-
var handleDragStart = function handleDragStart(
|
|
399
|
-
var active =
|
|
493
|
+
var handleDragStart = function handleDragStart(_ref7) {
|
|
494
|
+
var active = _ref7.active;
|
|
400
495
|
return setActiveId(active.id);
|
|
401
496
|
};
|
|
402
|
-
var handleDragOver = function handleDragOver(
|
|
497
|
+
var handleDragOver = function handleDragOver(_ref8) {
|
|
403
498
|
var _over$data$current$so, _over$data;
|
|
404
|
-
var active =
|
|
405
|
-
over =
|
|
499
|
+
var active = _ref8.active,
|
|
500
|
+
over = _ref8.over;
|
|
406
501
|
if (!over) return;
|
|
407
502
|
var activeZone = getZoneOfItem(active.id);
|
|
408
503
|
var overZone = (_over$data$current$so = (_over$data = over.data) === null || _over$data === void 0 || (_over$data = _over$data.current) === null || _over$data === void 0 || (_over$data = _over$data.sortable) === null || _over$data === void 0 ? void 0 : _over$data.containerId) !== null && _over$data$current$so !== void 0 ? _over$data$current$so : getZoneOfItem(over.id);
|
|
@@ -416,13 +511,20 @@ var PivotTableUI = function PivotTableUI(props) {
|
|
|
416
511
|
activeList.splice(activeIndex, 1);
|
|
417
512
|
var insertAt = overIndex >= 0 ? overIndex : overList.length;
|
|
418
513
|
overList.splice(insertAt, 0, active.id);
|
|
419
|
-
|
|
420
|
-
|
|
514
|
+
|
|
515
|
+
// ── Construir el patch atómico para evitar múltiples re-renders ──
|
|
516
|
+
// Problema: dos llamadas separadas (updateProp + updateProp) disparaban dos
|
|
517
|
+
// notificaciones de estado consecutivas, causando el React error #185
|
|
518
|
+
// (Maximum update depth exceeded). batchUpdate aplica ambos cambios en uno.
|
|
519
|
+
var patch = {};
|
|
520
|
+
if (activeZone === 'rows') patch.rows = activeList;else if (activeZone === 'cols') patch.cols = activeList;else if (activeZone === 'unused') patch.unusedOrder = activeList;
|
|
521
|
+
if (overZone === 'rows') patch.rows = overList;else if (overZone === 'cols') patch.cols = overList;else if (overZone === 'unused') patch.unusedOrder = overList;
|
|
522
|
+
actions.batchUpdate(patch);
|
|
421
523
|
};
|
|
422
|
-
var handleDragEnd = function handleDragEnd(
|
|
524
|
+
var handleDragEnd = function handleDragEnd(_ref9) {
|
|
423
525
|
var _over$data$current$so2, _over$data2;
|
|
424
|
-
var active =
|
|
425
|
-
over =
|
|
526
|
+
var active = _ref9.active,
|
|
527
|
+
over = _ref9.over;
|
|
426
528
|
setActiveId(null);
|
|
427
529
|
if (!over) return;
|
|
428
530
|
var activeZone = getZoneOfItem(active.id);
|
|
@@ -432,11 +534,16 @@ var PivotTableUI = function PivotTableUI(props) {
|
|
|
432
534
|
var list = getListByZone(activeZone);
|
|
433
535
|
var oldIndex = list.indexOf(active.id);
|
|
434
536
|
var newIndex = list.indexOf(over.id);
|
|
435
|
-
if (oldIndex !== newIndex)
|
|
537
|
+
if (oldIndex !== newIndex) {
|
|
538
|
+
var reordered = (0, _sortable.arrayMove)(list, oldIndex, newIndex);
|
|
539
|
+
var patch = {};
|
|
540
|
+
if (activeZone === 'rows') patch.rows = reordered;else if (activeZone === 'cols') patch.cols = reordered;else if (activeZone === 'unused') patch.unusedOrder = reordered;
|
|
541
|
+
actions.batchUpdate(patch);
|
|
542
|
+
}
|
|
436
543
|
}
|
|
437
544
|
};
|
|
438
545
|
|
|
439
|
-
// ───
|
|
546
|
+
// ─── Controls ───
|
|
440
547
|
var isOpen = function isOpen(dropdown) {
|
|
441
548
|
return uiState.openDropdown === dropdown;
|
|
442
549
|
};
|
|
@@ -459,8 +566,6 @@ var PivotTableUI = function PivotTableUI(props) {
|
|
|
459
566
|
next: 'key_a_to_z'
|
|
460
567
|
}
|
|
461
568
|
};
|
|
462
|
-
|
|
463
|
-
// Estado combinado para DnDCell (necesita zIndices del UI local + attrValues del Core)
|
|
464
569
|
var combinedState = {
|
|
465
570
|
attrValues: pivotState.attrValues,
|
|
466
571
|
zIndices: uiState.zIndices,
|
|
@@ -563,6 +668,43 @@ var PivotTableUI = function PivotTableUI(props) {
|
|
|
563
668
|
}, n, " / p\xE1g");
|
|
564
669
|
}))));
|
|
565
670
|
};
|
|
671
|
+
|
|
672
|
+
// ─── Shared renderer/aggregator controls ───
|
|
673
|
+
var rendererDropdown = /*#__PURE__*/_react["default"].createElement(Dropdown, {
|
|
674
|
+
current: actualRendererName,
|
|
675
|
+
values: Object.keys(renderers),
|
|
676
|
+
open: isOpen('renderer'),
|
|
677
|
+
zIndex: isOpen('renderer') ? uiState.maxZIndex + 1 : 1,
|
|
678
|
+
toggle: function toggle() {
|
|
679
|
+
return setUiState(function (s) {
|
|
680
|
+
return _objectSpread(_objectSpread({}, s), {}, {
|
|
681
|
+
openDropdown: isOpen('renderer') ? false : 'renderer'
|
|
682
|
+
});
|
|
683
|
+
});
|
|
684
|
+
},
|
|
685
|
+
setValue: function setValue(v) {
|
|
686
|
+
return actions.updateProp('rendererName', v);
|
|
687
|
+
}
|
|
688
|
+
});
|
|
689
|
+
var aggControls = /*#__PURE__*/_react["default"].createElement(AggregatorControls, {
|
|
690
|
+
aggregatorName: aggregatorName,
|
|
691
|
+
aggregators: aggregators,
|
|
692
|
+
vals: vals,
|
|
693
|
+
pivotState: pivotState,
|
|
694
|
+
hiddenAttributes: hiddenAttributes,
|
|
695
|
+
hiddenFromAggregators: hiddenFromAggregators,
|
|
696
|
+
isOpen: isOpen,
|
|
697
|
+
uiState: uiState,
|
|
698
|
+
setUiState: setUiState,
|
|
699
|
+
actions: actions,
|
|
700
|
+
rowOrder: rowOrder,
|
|
701
|
+
colOrder: colOrder,
|
|
702
|
+
sortIcons: sortIcons,
|
|
703
|
+
numValsAllowed: numValsAllowed
|
|
704
|
+
});
|
|
705
|
+
var outputCell = /*#__PURE__*/_react["default"].createElement("td", {
|
|
706
|
+
className: "pvtOutput"
|
|
707
|
+
}, /*#__PURE__*/_react["default"].createElement(_PivotTable["default"], componentProps), pagination && renderFooter());
|
|
566
708
|
return /*#__PURE__*/_react["default"].createElement(_core.DndContext, {
|
|
567
709
|
sensors: sensors,
|
|
568
710
|
collisionDetection: _core.closestCorners,
|
|
@@ -581,80 +723,14 @@ var PivotTableUI = function PivotTableUI(props) {
|
|
|
581
723
|
}
|
|
582
724
|
}, horizUnused ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", {
|
|
583
725
|
className: "pvtRenderers"
|
|
584
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
585
|
-
current: actualRendererName,
|
|
586
|
-
values: Object.keys(renderers),
|
|
587
|
-
open: isOpen('renderer'),
|
|
588
|
-
zIndex: isOpen('renderer') ? uiState.maxZIndex + 1 : 1,
|
|
589
|
-
toggle: function toggle() {
|
|
590
|
-
return setUiState(function (s) {
|
|
591
|
-
return _objectSpread(_objectSpread({}, s), {}, {
|
|
592
|
-
openDropdown: isOpen('renderer') ? false : 'renderer'
|
|
593
|
-
});
|
|
594
|
-
});
|
|
595
|
-
},
|
|
596
|
-
setValue: function setValue(v) {
|
|
597
|
-
return actions.updateProp('rendererName', v);
|
|
598
|
-
}
|
|
599
|
-
})), /*#__PURE__*/_react["default"].createElement(DnDCell, _extends({
|
|
726
|
+
}, rendererDropdown), /*#__PURE__*/_react["default"].createElement(DnDCell, _extends({
|
|
600
727
|
id: "unused",
|
|
601
728
|
items: unusedAttrs,
|
|
602
729
|
classes: "pvtAxisContainer pvtUnused pvtHorizList",
|
|
603
730
|
isHorizontal: true
|
|
604
731
|
}, sharedCellProps))), /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", {
|
|
605
732
|
className: "pvtVals"
|
|
606
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
607
|
-
current: aggregatorName,
|
|
608
|
-
values: Object.keys(aggregators),
|
|
609
|
-
open: isOpen('aggregators'),
|
|
610
|
-
zIndex: isOpen('aggregators') ? uiState.maxZIndex + 1 : 1,
|
|
611
|
-
toggle: function toggle() {
|
|
612
|
-
return setUiState(function (s) {
|
|
613
|
-
return _objectSpread(_objectSpread({}, s), {}, {
|
|
614
|
-
openDropdown: isOpen('aggregators') ? false : 'aggregators'
|
|
615
|
-
});
|
|
616
|
-
});
|
|
617
|
-
},
|
|
618
|
-
setValue: function setValue(v) {
|
|
619
|
-
return actions.updateProp('aggregatorName', v);
|
|
620
|
-
}
|
|
621
|
-
}), /*#__PURE__*/_react["default"].createElement("a", {
|
|
622
|
-
role: "button",
|
|
623
|
-
className: "pvtRowOrder",
|
|
624
|
-
onClick: function onClick() {
|
|
625
|
-
return actions.updateProp('rowOrder', sortIcons[rowOrder].next);
|
|
626
|
-
}
|
|
627
|
-
}, sortIcons[rowOrder].rowSymbol), /*#__PURE__*/_react["default"].createElement("a", {
|
|
628
|
-
role: "button",
|
|
629
|
-
className: "pvtColOrder",
|
|
630
|
-
onClick: function onClick() {
|
|
631
|
-
return actions.updateProp('colOrder', sortIcons[colOrder].next);
|
|
632
|
-
}
|
|
633
|
-
}, sortIcons[colOrder].colSymbol), numValsAllowed > 0 && /*#__PURE__*/_react["default"].createElement("br", null), new Array(numValsAllowed).fill(null).map(function (_, i) {
|
|
634
|
-
return [/*#__PURE__*/_react["default"].createElement(Dropdown, {
|
|
635
|
-
key: i,
|
|
636
|
-
current: vals[i],
|
|
637
|
-
values: Object.keys(pivotState.attrValues).filter(function (e) {
|
|
638
|
-
return !hiddenAttributes.includes(e) && !hiddenFromAggregators.includes(e);
|
|
639
|
-
}),
|
|
640
|
-
open: isOpen("val".concat(i)),
|
|
641
|
-
zIndex: isOpen("val".concat(i)) ? uiState.maxZIndex + 1 : 1,
|
|
642
|
-
toggle: function toggle() {
|
|
643
|
-
return setUiState(function (s) {
|
|
644
|
-
return _objectSpread(_objectSpread({}, s), {}, {
|
|
645
|
-
openDropdown: isOpen("val".concat(i)) ? false : "val".concat(i)
|
|
646
|
-
});
|
|
647
|
-
});
|
|
648
|
-
},
|
|
649
|
-
setValue: function setValue(value) {
|
|
650
|
-
var newVals = _toConsumableArray(vals);
|
|
651
|
-
newVals[i] = value;
|
|
652
|
-
actions.updateProp('vals', newVals);
|
|
653
|
-
}
|
|
654
|
-
}), i + 1 !== numValsAllowed ? /*#__PURE__*/_react["default"].createElement("br", {
|
|
655
|
-
key: "br".concat(i)
|
|
656
|
-
}) : null];
|
|
657
|
-
})), /*#__PURE__*/_react["default"].createElement(DnDCell, _extends({
|
|
733
|
+
}, aggControls), /*#__PURE__*/_react["default"].createElement(DnDCell, _extends({
|
|
658
734
|
id: "cols",
|
|
659
735
|
items: colAttrs,
|
|
660
736
|
classes: "pvtAxisContainer pvtHorizList pvtCols",
|
|
@@ -664,79 +740,11 @@ var PivotTableUI = function PivotTableUI(props) {
|
|
|
664
740
|
items: rowAttrs,
|
|
665
741
|
classes: "pvtAxisContainer pvtVertList pvtRows",
|
|
666
742
|
isHorizontal: false
|
|
667
|
-
}, sharedCellProps)), /*#__PURE__*/_react["default"].createElement("td", {
|
|
668
|
-
className: "pvtOutput"
|
|
669
|
-
}, /*#__PURE__*/_react["default"].createElement(_PivotTable["default"], componentProps), pagination && renderFooter()))) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", {
|
|
743
|
+
}, sharedCellProps)), outputCell)) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", {
|
|
670
744
|
className: "pvtRenderers"
|
|
671
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
672
|
-
current: actualRendererName,
|
|
673
|
-
values: Object.keys(renderers),
|
|
674
|
-
open: isOpen('renderer'),
|
|
675
|
-
zIndex: isOpen('renderer') ? uiState.maxZIndex + 1 : 1,
|
|
676
|
-
toggle: function toggle() {
|
|
677
|
-
return setUiState(function (s) {
|
|
678
|
-
return _objectSpread(_objectSpread({}, s), {}, {
|
|
679
|
-
openDropdown: isOpen('renderer') ? false : 'renderer'
|
|
680
|
-
});
|
|
681
|
-
});
|
|
682
|
-
},
|
|
683
|
-
setValue: function setValue(v) {
|
|
684
|
-
return actions.updateProp('rendererName', v);
|
|
685
|
-
}
|
|
686
|
-
})), /*#__PURE__*/_react["default"].createElement("td", {
|
|
745
|
+
}, rendererDropdown), /*#__PURE__*/_react["default"].createElement("td", {
|
|
687
746
|
className: "pvtVals"
|
|
688
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
689
|
-
current: aggregatorName,
|
|
690
|
-
values: Object.keys(aggregators),
|
|
691
|
-
open: isOpen('aggregators'),
|
|
692
|
-
zIndex: isOpen('aggregators') ? uiState.maxZIndex + 1 : 1,
|
|
693
|
-
toggle: function toggle() {
|
|
694
|
-
return setUiState(function (s) {
|
|
695
|
-
return _objectSpread(_objectSpread({}, s), {}, {
|
|
696
|
-
openDropdown: isOpen('aggregators') ? false : 'aggregators'
|
|
697
|
-
});
|
|
698
|
-
});
|
|
699
|
-
},
|
|
700
|
-
setValue: function setValue(v) {
|
|
701
|
-
return actions.updateProp('aggregatorName', v);
|
|
702
|
-
}
|
|
703
|
-
}), /*#__PURE__*/_react["default"].createElement("a", {
|
|
704
|
-
role: "button",
|
|
705
|
-
className: "pvtRowOrder",
|
|
706
|
-
onClick: function onClick() {
|
|
707
|
-
return actions.updateProp('rowOrder', sortIcons[rowOrder].next);
|
|
708
|
-
}
|
|
709
|
-
}, sortIcons[rowOrder].rowSymbol), /*#__PURE__*/_react["default"].createElement("a", {
|
|
710
|
-
role: "button",
|
|
711
|
-
className: "pvtColOrder",
|
|
712
|
-
onClick: function onClick() {
|
|
713
|
-
return actions.updateProp('colOrder', sortIcons[colOrder].next);
|
|
714
|
-
}
|
|
715
|
-
}, sortIcons[colOrder].colSymbol), numValsAllowed > 0 && /*#__PURE__*/_react["default"].createElement("br", null), new Array(numValsAllowed).fill(null).map(function (_, i) {
|
|
716
|
-
return [/*#__PURE__*/_react["default"].createElement(Dropdown, {
|
|
717
|
-
key: i,
|
|
718
|
-
current: vals[i],
|
|
719
|
-
values: Object.keys(pivotState.attrValues).filter(function (e) {
|
|
720
|
-
return !hiddenAttributes.includes(e) && !hiddenFromAggregators.includes(e);
|
|
721
|
-
}),
|
|
722
|
-
open: isOpen("val".concat(i)),
|
|
723
|
-
zIndex: isOpen("val".concat(i)) ? uiState.maxZIndex + 1 : 1,
|
|
724
|
-
toggle: function toggle() {
|
|
725
|
-
return setUiState(function (s) {
|
|
726
|
-
return _objectSpread(_objectSpread({}, s), {}, {
|
|
727
|
-
openDropdown: isOpen("val".concat(i)) ? false : "val".concat(i)
|
|
728
|
-
});
|
|
729
|
-
});
|
|
730
|
-
},
|
|
731
|
-
setValue: function setValue(value) {
|
|
732
|
-
var newVals = _toConsumableArray(vals);
|
|
733
|
-
newVals[i] = value;
|
|
734
|
-
actions.updateProp('vals', newVals);
|
|
735
|
-
}
|
|
736
|
-
}), i + 1 !== numValsAllowed ? /*#__PURE__*/_react["default"].createElement("br", {
|
|
737
|
-
key: "br".concat(i)
|
|
738
|
-
}) : null];
|
|
739
|
-
})), /*#__PURE__*/_react["default"].createElement(DnDCell, _extends({
|
|
747
|
+
}, aggControls), /*#__PURE__*/_react["default"].createElement(DnDCell, _extends({
|
|
740
748
|
id: "cols",
|
|
741
749
|
items: colAttrs,
|
|
742
750
|
classes: "pvtAxisContainer pvtHorizList pvtCols",
|
|
@@ -751,9 +759,7 @@ var PivotTableUI = function PivotTableUI(props) {
|
|
|
751
759
|
items: rowAttrs,
|
|
752
760
|
classes: "pvtAxisContainer pvtVertList pvtRows",
|
|
753
761
|
isHorizontal: false
|
|
754
|
-
}, sharedCellProps)), /*#__PURE__*/_react["default"].createElement("
|
|
755
|
-
className: "pvtOutput"
|
|
756
|
-
}, /*#__PURE__*/_react["default"].createElement(_PivotTable["default"], componentProps), pagination && renderFooter()))))), /*#__PURE__*/_react["default"].createElement(_core.DragOverlay, null, activeId ? /*#__PURE__*/_react["default"].createElement("ul", {
|
|
762
|
+
}, sharedCellProps)), outputCell)))), /*#__PURE__*/_react["default"].createElement(_core.DragOverlay, null, activeId ? /*#__PURE__*/_react["default"].createElement("ul", {
|
|
757
763
|
style: {
|
|
758
764
|
listStyle: 'none',
|
|
759
765
|
padding: 0,
|