@cdmx/wappler_ag_grid 0.8.3 → 0.8.4

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
@@ -186,6 +186,16 @@ These configurations help you create organized and logical groupings of columns
186
186
 
187
187
  ---
188
188
 
189
+ ### Total Row Footer
190
+
191
+ The "Total Row Footer" feature allows you to define and display a footer row in a grid or table that shows the totals and counts of specified columns. This can be helpful for summarizing data in your grid and providing users with a quick overview of important statistics.
192
+
193
+ Configuration includes:
194
+ - **Columns To Count**: Specify the columns you want to count in the footer row. Separate column names with commas.
195
+ - **Columns To Sum**: Specify the columns you want to calculate the sum of in the footer row. Separate column names with commas.
196
+
197
+ ---
198
+
189
199
  # Configure Actions Column
190
200
  The Configure Actions Column feature allows you to configure actions for the buttons in the Actions Column.
191
201
 
@@ -1141,6 +1141,42 @@
1141
1141
  }
1142
1142
  ]
1143
1143
  },
1144
+ {
1145
+ "group": "📒 Total Row Footer",
1146
+ "variables": [
1147
+ {
1148
+ "name": "totalRowFooter",
1149
+ "title": "Total Row Footer",
1150
+ "attribute": "total_row_footer",
1151
+ "type": "boolean",
1152
+ "defaultValue": false,
1153
+ "display": "fieldset",
1154
+ "show": [
1155
+ "columnsToCount",
1156
+ "columnsToSum"
1157
+ ],
1158
+ "noChangeOnHide": true,
1159
+ "groupEnabler": true,
1160
+ "help": "Define the Columns to Count and Sum in the Footer row"
1161
+ "children": [
1162
+ {
1163
+ "name": "columnsToCount",
1164
+ "attribute": "columns_to_count",
1165
+ "title": "Columns To Count",
1166
+ "type": "text",
1167
+ "initDisplay": "none"
1168
+ },
1169
+ {
1170
+ "name": "columnsToSum",
1171
+ "attribute": "columns_to_sum",
1172
+ "title": "Columns To Sum",
1173
+ "type": "text",
1174
+ "initDisplay": "none"
1175
+ }
1176
+ ]
1177
+ }
1178
+ ]
1179
+ },
1144
1180
  {
1145
1181
  "group": "📒 Configure Actions Column",
1146
1182
  "variables": [
package/dmx-ag-grid.js CHANGED
@@ -140,7 +140,9 @@ dmx.Component('ag-grid', {
140
140
  compact_view: { type: Boolean, default: false },
141
141
  compact_view_grid_size: { type: Number, default: 3 },
142
142
  compact_view_item_height: { type: Number, default: 20 },
143
- group_config: { type: Array, default: [] }
143
+ group_config: { type: Array, default: [] },
144
+ columns_to_count: { type: String, default: null },
145
+ columns_to_sum: { type: String, default: null }
144
146
  },
145
147
 
146
148
  methods: {
@@ -1000,6 +1002,42 @@ dmx.Component('ag-grid', {
1000
1002
  actionsRenderer: actionsRenderer
1001
1003
  }
1002
1004
  };
1005
+ const totalRow = function (api, columnsToSum, columnsToCount) {
1006
+ if (!columnsToSum && !columnsToCount) {
1007
+ return;
1008
+ }
1009
+ let rowData = [];
1010
+ api.forEachNodeAfterFilter(node => {
1011
+ rowData.push({ "data": node.data, "index": node.childIndex });
1012
+ });
1013
+ let result = [{}];
1014
+
1015
+ if (columnsToSum) {
1016
+ // Initialize and calculate sum columns
1017
+ columnsToSum.forEach(function (col) {
1018
+ result[0][col] = 0;
1019
+ rowData.forEach(function (line) {
1020
+ if (line.index < rowData.length) {
1021
+ result[0][col] += parseFloat(line.data[col]) || line.data[col];
1022
+ }
1023
+ });
1024
+ });
1025
+ }
1026
+
1027
+ if (columnsToCount) {
1028
+ // Initialize and calculate count columns
1029
+ columnsToCount.forEach(function (col) {
1030
+ result[0][col] = 0;
1031
+ rowData.forEach(function (line) {
1032
+ if (line.index < rowData.length) {
1033
+ result[0][col]++;
1034
+ }
1035
+ });
1036
+ });
1037
+ }
1038
+ api.setPinnedBottomRowData(result);
1039
+ }
1040
+
1003
1041
  const gridDiv = document.getElementById(options.id+'-grid');
1004
1042
 
1005
1043
 
@@ -1017,6 +1055,21 @@ dmx.Component('ag-grid', {
1017
1055
  rowData: rowData,
1018
1056
  ...gridOptions
1019
1057
  };
1058
+ // Conditionally add event listeners based on whether columnsToSum or columnsToCount are defined
1059
+ if ((options.columns_to_sum && options.columns_to_sum.split(',').length > 0) || (options.columns_to_count && options.columns_to_count.split(',').length > 0)) {
1060
+ let columnsToSum = options.columns_to_sum ? options.columns_to_sum.split(',') : [];
1061
+ let columnsToCount = options.columns_to_count ? options.columns_to_count.split(',') : [];
1062
+
1063
+ gridConfig.onFilterChanged = function (e) {
1064
+ totalRow(e.api, columnsToSum, columnsToCount);
1065
+ };
1066
+ gridConfig.onFirstDataRendered = function (e) {
1067
+ totalRow(e.api, columnsToSum, columnsToCount);
1068
+ };
1069
+ gridConfig.postSortRows = function (e) {
1070
+ totalRow(e.api, columnsToSum, columnsToCount);
1071
+ };
1072
+ }
1020
1073
  // Create ag-Grid instance
1021
1074
  gridInstance = new agGrid.Grid(gridDiv, gridConfig);
1022
1075
  const gridElement = document.getElementById(options.id+'-grid');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdmx/wappler_ag_grid",
3
- "version": "0.8.3",
3
+ "version": "0.8.4",
4
4
  "type": "module",
5
5
  "description": "App Connect module for AG Grid Table Generation.",
6
6
  "license": "MIT",