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 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/pivottable.css';
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/pivottable.css';
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/pivottable.css';
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/pivottable.css';
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 un fork mantenido de `react-pivottable` con el objetivo de proporcionar una experiencia de usuario superior y compatibilidad con las últimas versiones de React.
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
- Esta versión moderna y extendida (`react-pivottable-plus`) ha sido desarrollada y mantenida por **Jasp402**, quien ha liderado la implementación de las nuevas interfaces (Tailwind, Shadcn, Radix), la actualización a React 18/19 y la optimización del motor de arrastre y filtrado.
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.
@@ -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
- // eslint can't see inherited propTypes!
27
- var PivotTable = /*#__PURE__*/function (_React$PureComponent) {
28
- function PivotTable() {
29
- _classCallCheck(this, PivotTable);
30
- return _callSuper(this, PivotTable, arguments);
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)
@@ -1 +1 @@
1
- {"version":3,"file":"PivotTable.js","names":["_react","_interopRequireDefault","require","_propTypes","_Utilities","_TableRenderers","e","__esModule","_classCallCheck","a","n","TypeError","_defineProperties","r","t","length","o","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","_createClass","prototype","i","_toPrimitive","_typeof","Symbol","toPrimitive","call","String","Number","_callSuper","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","constructor","apply","_assertThisInitialized","ReferenceError","Boolean","valueOf","setPrototypeOf","getPrototypeOf","bind","__proto__","_inherits","create","value","_setPrototypeOf","PivotTable","_React$PureComponent","arguments","render","Renderer","props","renderers","rendererName","keys","createElement","React","PureComponent","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// eslint can't see inherited propTypes!\n\nclass PivotTable extends React.PureComponent {\n render() {\n const Renderer = this.props.renderers[\n this.props.rendererName in this.props.renderers\n ? this.props.rendererName\n : Object.keys(this.props.renderers)[0]\n ];\n return <Renderer {...this.props} />;\n }\n}\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":"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","ignoreList":[]}
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":[]}
@@ -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: toda la lógica de datos y props fluye a través del 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
- // ─── Estado local solo para UI (no pertenece al Core) ─────────────────────────
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 desde el Core ──────────────────────────────────────────────────
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 Zones ────────────────────────────────────────────────────────────────
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(_ref5) {
399
- var active = _ref5.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(_ref6) {
497
+ var handleDragOver = function handleDragOver(_ref8) {
403
498
  var _over$data$current$so, _over$data;
404
- var active = _ref6.active,
405
- over = _ref6.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
- getUpdaterByZone(activeZone)(activeList);
420
- getUpdaterByZone(overZone)(overList);
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(_ref7) {
524
+ var handleDragEnd = function handleDragEnd(_ref9) {
423
525
  var _over$data$current$so2, _over$data2;
424
- var active = _ref7.active,
425
- over = _ref7.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) getUpdaterByZone(activeZone)((0, _sortable.arrayMove)(list, 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
- // ─── Dropdowns y controles ────────────────────────────────────────────────────
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(Dropdown, {
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(Dropdown, {
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(Dropdown, {
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(Dropdown, {
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("td", {
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,