Compare commits

..

22 Commits

Author SHA1 Message Date
dehernandezm
fbb9f311b3 cambio de value en input checkbox 2025-02-17 07:57:07 -06:00
dehernandezm
e41e00d045 remove usar this props showsubtotales 2025-02-17 07:51:51 -06:00
dehernandezm
1dc4db6456 test remover cambio de state solo cambio por prop updater 2025-02-17 07:38:37 -06:00
dehernandezm
e66bc1d059 test cambio de asignacion state 2025-02-17 07:27:18 -06:00
dehernandezm
2e486233b5 agregar elementos vacios para el caso en que hay más de 2 campos en las agrupaciones de fila 2025-02-14 16:51:00 -06:00
dehernandezm
540d3d4d51 cambio de valor por defecto de mostrar subtotales a false 2025-02-14 16:17:18 -06:00
dehernandezm
b6b3ac4396 test cambiar de usar props a usar state 2025-02-14 16:07:53 -06:00
dehernandezm
3ef6000f5c corregir propiedad a actualizar al cambiar el check 2025-02-14 15:45:38 -06:00
dehernandezm
a35cbaa5f2 test prevent error ordenar con elemento subtotales en lisa de atributos filas, agregar input checkbox para bandera mostrar subtotales 2025-02-14 15:37:26 -06:00
dehernandezm
b3ad82be5a test agregar slot dentro de sortable row attrs 2025-02-14 12:44:58 -06:00
dehernandezm
e0c4ce0d19 agregar console log test para agregar check de mostrar subtotales 2025-02-14 11:48:36 -06:00
dehernandezm
33314359bf agregar nueva clase de subtotal, se agregará en vcomponents, sub total de total fila 2025-02-14 10:51:46 -06:00
dehernandezm
dba0d7970d corregir funcion de cálculo, remover this de la función 2025-02-14 10:26:56 -06:00
dehernandezm
84c65f2b8d validar si aggregator.format es una funcion 2025-02-14 10:19:52 -06:00
dehernandezm
dccd627f1b test usar funcion anterior 2025-02-14 09:55:35 -06:00
dehernandezm
ce6379108b mover función de cálculo de subtotales a pivottable envolviendo la funcion de utilities 2025-02-14 09:43:25 -06:00
dehernandezm
df604e3069 retornar aggregator en utilities 2025-02-11 15:30:47 -06:00
dehernandezm
45bdad3d8c test calcular subtotales por grupo de filas 2025-02-11 15:18:37 -06:00
dehernandezm
be3b66ebae test corregir error undefined 2025-02-10 12:51:31 -06:00
dehernandezm
d18996f82b test corregir error undefined 2025-02-10 12:43:59 -06:00
dehernandezm
6f4e0dcada console.log agregar item row subtotal test 2025-02-10 12:32:46 -06:00
dehernandezm
a3b3b8db64 agregar console.log para revisar si se pueden agregar subtotales entre tabla 2025-02-09 21:59:21 -06:00
5 changed files with 130 additions and 17 deletions

View File

@ -364,6 +364,7 @@ var PivotTableUI = function (_React$PureComponent2) {
attrValues: {}, attrValues: {},
materializedInput: [], materializedInput: [],
hideConfiguration: false, hideConfiguration: false,
showSubtotales: false,
headerClass: '', headerClass: '',
stylesHeaders: {} stylesHeaders: {}
}; };
@ -572,27 +573,34 @@ var PivotTableUI = function (_React$PureComponent2) {
} }
}, { }, {
key: 'makeDnDCell', key: 'makeDnDCell',
value: function makeDnDCell(items, onChange, classes) { value: function makeDnDCell(items, _onChange, classes, headSlot) {
var _this7 = this; var _this7 = this;
var onChange = function onChange(newArr) {
var _resultArr = newArr.filter(function (item) {
return item !== '[:sub-total:]';
});
_onChange(_resultArr);
};
return _react2.default.createElement( return _react2.default.createElement(
_reactSortablejs2.default, _reactSortablejs2.default,
{ {
options: { options: {
group: 'shared', group: 'shared',
ghostClass: 'pvtPlaceholder', ghostClass: 'pvtPlaceholder',
filter: '.pvtFilterBox', filter: '.pvtFilterBox, .pvtSubtotalCheck',
preventOnFilter: false preventOnFilter: false
}, },
tag: 'td', tag: 'td',
className: classes, className: classes,
onChange: onChange onChange: onChange
}, },
headSlot && typeof headSlot === 'function' && items.length > 1 && headSlot(),
items.map(function (x) { items.map(function (x) {
return _react2.default.createElement(DraggableAttribute, { return _react2.default.createElement(DraggableAttribute, {
name: x, name: x,
key: x, key: x,
attrValues: _this7.state.attrValues[x], attrValues: _this7.state.attrValues[x] || {},
valueFilter: _this7.props.valueFilter[x] || {}, valueFilter: _this7.props.valueFilter[x] || {},
sorter: (0, _Utilities.getSort)(_this7.props.sorters, x), sorter: (0, _Utilities.getSort)(_this7.props.sorters, x),
menuLimit: _this7.props.menuLimit, menuLimit: _this7.props.menuLimit,
@ -732,7 +740,35 @@ var PivotTableUI = function (_React$PureComponent2) {
var rowAttrs = this.props.rows.filter(function (e) { var rowAttrs = this.props.rows.filter(function (e) {
return !_this8.props.hiddenAttributes.includes(e) && !_this8.props.hiddenFromDragDrop.includes(e); return !_this8.props.hiddenAttributes.includes(e) && !_this8.props.hiddenFromDragDrop.includes(e);
}); });
var rowAttrsCell = this.makeDnDCell(rowAttrs, this.propUpdater('rows'), 'pvtAxisContainer pvtVertList pvtRows'); var toggleSubTotales = function toggleSubTotales() {
var _showSubt = _this8.props.showSubtotales === true ? true : false;
_this8.propUpdater('showSubtotales')(!_showSubt);
// this.setState({ showSubtotales: !_showSubt })
};
var renderCheckSubtotal = function renderCheckSubtotal() {
return _react2.default.createElement(
'li',
{ className: 'pvtSubtotalCheck cursor-default', 'data-id': '[:sub-total:]' },
_react2.default.createElement(
'span',
{ className: 'pvtAttr' },
_react2.default.createElement(
'span',
{ className: 'pvtAttrTitle' },
'Subtotales'
),
_react2.default.createElement('input', {
type: 'checkbox',
checked: _this8.props.showSubtotales === true,
className: 'via-checkbox h-5 w-5 cursor-pointer',
onChange: function onChange() {
toggleSubTotales();
}
})
)
);
};
var rowAttrsCell = this.makeDnDCell(rowAttrs, this.propUpdater('rows'), 'pvtAxisContainer pvtVertList pvtRows', renderCheckSubtotal);
var outputCell = _react2.default.createElement( var outputCell = _react2.default.createElement(
'td', 'td',
{ className: 'pvtOutput' }, { className: 'pvtOutput' },
@ -850,6 +886,7 @@ PivotTableUI.propTypes = Object.assign({}, _PivotTable2.default.propTypes, {
unusedOrientationCutoff: _propTypes2.default.number, unusedOrientationCutoff: _propTypes2.default.number,
menuLimit: _propTypes2.default.number, menuLimit: _propTypes2.default.number,
hideConfiguration: _propTypes2.default.bool, hideConfiguration: _propTypes2.default.bool,
showSubtotales: _propTypes2.default.bool,
headerClass: _propTypes2.default.string, headerClass: _propTypes2.default.string,
stylesHeaders: _propTypes2.default.object stylesHeaders: _propTypes2.default.object
}); });
@ -860,7 +897,8 @@ PivotTableUI.defaultProps = Object.assign({}, _PivotTable2.default.defaultProps,
hiddenFromDragDrop: [], hiddenFromDragDrop: [],
unusedOrientationCutoff: 85, unusedOrientationCutoff: 85,
menuLimit: 500, menuLimit: 500,
hideConfiguration: true hideConfiguration: true,
showSubtotales: false
}); });
exports.default = PivotTableUI; exports.default = PivotTableUI;

File diff suppressed because one or more lines are too long

View File

@ -90,6 +90,32 @@ function makeRenderer() {
var rowAttrs = pivotData.props.rows; var rowAttrs = pivotData.props.rows;
var rowKeys = pivotData.getRowKeys(); var rowKeys = pivotData.getRowKeys();
var colKeys = pivotData.getColKeys(); var colKeys = pivotData.getColKeys();
var rowKeysSub = [];
if (this.props.showSubtotales === true && rowAttrs !== null && rowAttrs.length > 1) {
var beforeFirstKey = null;
for (var idx = 0; idx < rowKeys.length; idx++) {
var arrRowKeys = rowKeys[idx];
var emptyElements = arrRowKeys.length - 2;
var arrEmptyElements = [];
for (var idxEmpt = 0; idxEmpt < emptyElements; idxEmpt++) {
arrEmptyElements.push('');
}
var currentFirstKey = arrRowKeys[0];
if (beforeFirstKey === null) {
beforeFirstKey = currentFirstKey;
}
if (beforeFirstKey !== currentFirstKey) {
rowKeysSub.push([beforeFirstKey].concat(arrEmptyElements, ['[:sub-total:]']));
beforeFirstKey = currentFirstKey;
}
rowKeysSub.push(arrRowKeys);
if (idx === rowKeys.length - 1) {
rowKeysSub.push([currentFirstKey].concat(arrEmptyElements, ['[:sub-total:]']));
}
}
} else {
rowKeysSub = pivotData.getRowKeys();
}
var grandTotalAggregator = pivotData.getAggregator([], []); var grandTotalAggregator = pivotData.getAggregator([], []);
var getStylesHeaders = function getStylesHeaders() { var getStylesHeaders = function getStylesHeaders() {
@ -265,7 +291,7 @@ function makeRenderer() {
var getFormatedValue = function getFormatedValue(aggregator) { var getFormatedValue = function getFormatedValue(aggregator) {
var valToFormat = aggregator.value(); var valToFormat = aggregator.value();
var resultValue = aggregator.format(valToFormat); var resultValue = typeof aggregator.format === 'function' ? aggregator.format(valToFormat) : valToFormat;
var keyColumnaCalculo = isNotNullish(_this2.props.vals) && _this2.props.vals.length ? _this2.props.vals[0] : null; var keyColumnaCalculo = isNotNullish(_this2.props.vals) && _this2.props.vals.length ? _this2.props.vals[0] : null;
if (_this2.props.aggregatorName === 'Conteo') { if (_this2.props.aggregatorName === 'Conteo') {
resultValue = isNotNullish(_this2.props.functions) ? _this2.props.functions.formatedValue(valToFormat, '0,0', 'number', false) : resultValue; resultValue = isNotNullish(_this2.props.functions) ? _this2.props.functions.formatedValue(valToFormat, '0,0', 'number', false) : resultValue;
@ -297,6 +323,54 @@ function makeRenderer() {
return ''; return '';
}; };
var getSubAggregator = function getSubAggregator(rowKey, colKey) {
if (rowKey.includes('[:sub-total:]')) {
var _resultAgg = {};
var _arrRowKeys = rowKeys.filter(function (itmRk) {
return itmRk[0] === rowKey[0];
});
var subTotalBruto = 0;
var subTotalCount = _arrRowKeys.length;
var subTotalMin = null;
var subTotalMax = null;
for (var _idx = 0; _idx < subTotalCount; _idx++) {
var _rowKey = _arrRowKeys[_idx];
var _agg = pivotData.getAggregator(_rowKey, colKey);
var _aggValue = _agg.value();
subTotalBruto = subTotalBruto + _aggValue;
if (_idx === 0) {
subTotalMin = _aggValue;
subTotalMax = _aggValue;
} else {
subTotalMin = _aggValue < subTotalMin ? _aggValue : subTotalMin;
subTotalMax = _aggValue > subTotalMax ? _aggValue : subTotalMax;
}
}
_resultAgg.sum = subTotalBruto;
_resultAgg.count = subTotalCount;
_resultAgg.format = function () {
return 'f';
};
_resultAgg.value = function () {
if (_this2.props.aggregatorName === 'Suma' || _this2.props.aggregatorName === 'Conteo') {
return subTotalBruto;
}
if (_this2.props.aggregatorName === 'Promedio') {
return subTotalBruto / subTotalCount;
}
if (_this2.props.aggregatorName === 'Mínimo') {
return subTotalMin;
}
if (_this2.props.aggregatorName === 'Máximo') {
return subTotalMax;
}
return 0;
};
return _resultAgg;
}
return pivotData.getAggregator(rowKey, colKey);
};
return _react2.default.createElement( return _react2.default.createElement(
'table', 'table',
{ className: 'pvtTable' }, { className: 'pvtTable' },
@ -361,13 +435,14 @@ function makeRenderer() {
_react2.default.createElement( _react2.default.createElement(
'tbody', 'tbody',
null, null,
rowKeys.map(function (rowKey, i) { rowKeysSub.map(function (rowKey, i) {
var totalAggregator = pivotData.getAggregator(rowKey, []); var isSubTotal = rowKey.includes('[:sub-total:]');
var totalAggregator = getSubAggregator(rowKey, []);
return _react2.default.createElement( return _react2.default.createElement(
'tr', 'tr',
{ key: 'rowKeyRow' + i }, { key: 'rowKeyRow' + i + ' ' + (isSubTotal ? ' bg-sky-50 ' : '') },
rowKey.map(function (txt, j) { rowKey.map(function (txt, j) {
var x = spanSize(rowKeys, i, j); var x = spanSize(rowKeysSub, i, j);
if (x === -1) { if (x === -1) {
return null; return null;
} }
@ -380,15 +455,15 @@ function makeRenderer() {
rowSpan: x, rowSpan: x,
colSpan: j === rowAttrs.length - 1 && colAttrs.length !== 0 ? 2 : 1 colSpan: j === rowAttrs.length - 1 && colAttrs.length !== 0 ? 2 : 1
}, },
txt isSubTotal ? 'SubTotal' : txt
); );
}), }),
colKeys.map(function (colKey, j) { colKeys.map(function (colKey, j) {
var aggregator = pivotData.getAggregator(rowKey, colKey); var aggregator = getSubAggregator(rowKey, colKey);
return _react2.default.createElement( return _react2.default.createElement(
'td', 'td',
{ {
className: 'pvtVal ' + getValueClass(aggregator), className: 'pvtVal ' + (isSubTotal ? '' : getValueClass(aggregator)) + ' ' + (isSubTotal ? 'pvtSubTotal' : ''),
key: 'pvtVal' + i + '-' + j, key: 'pvtVal' + i + '-' + j,
onClick: getClickHandler && getClickHandler(aggregator.value(), rowKey, colKey), onClick: getClickHandler && getClickHandler(aggregator.value(), rowKey, colKey),
style: valueCellColors(rowKey, colKey, aggregator.value()) style: valueCellColors(rowKey, colKey, aggregator.value())
@ -399,7 +474,7 @@ function makeRenderer() {
_react2.default.createElement( _react2.default.createElement(
'td', 'td',
{ {
className: 'pvtTotal', className: ' pvtTotal ' + (isSubTotal ? 'pvtSubTotal' : '') + ' ',
onClick: getClickHandler && getClickHandler(totalAggregator.value(), rowKey, [null]), onClick: getClickHandler && getClickHandler(totalAggregator.value(), rowKey, [null]),
style: colTotalColors(totalAggregator.value()) style: colTotalColors(totalAggregator.value())
}, },

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{ {
"name": "v-react-pivottable", "name": "v-react-pivottable",
"version": "0.11.47", "version": "0.11.70",
"description": "A React-based pivot table", "description": "A React-based pivot table",
"main": "PivotTableUI.js", "main": "PivotTableUI.js",
"files": [ "files": [