@@ -132,31 +124,8 @@ import Paginator from '../paginator/Paginator';
import RowRadioButton from './RowRadioButton';
import RowCheckbox from './RowCheckbox.vue';
import HeaderCheckbox from './HeaderCheckbox.vue';
-
-const ColumnSlot = {
- functional: true,
- props: {
- column: {
- type: null,
- default: null
- },
- data: {
- type: null,
- default: null
- },
- type: {
- type: String,
- default: null
- }
- },
- render(createElement, context) {
- const content = context.props.column.$scopedSlots[context.props.type]({
- 'data': context.props.data,
- 'column': context.props.column
- });
- return [content];
- }
-};
+import ColumnSlot from './ColumnSlot.vue';
+import BodyCell from './BodyCell.vue';
export default {
props: {
@@ -299,6 +268,14 @@ export default {
collapsedRowIcon: {
type: String,
default: 'pi-chevron-right'
+ },
+ rowGroupMode: {
+ type: String,
+ default: null
+ },
+ groupRowsBy: {
+ type: [Array,String],
+ default: null
}
},
data() {
@@ -1228,7 +1205,8 @@ export default {
this.onRowDragEnd(event);
event.preventDefault();
},
- toggleRow(event, rowData) {
+ toggleRow(event) {
+ let rowData = event.data;
let expanded;
let expandedRowIndex;
let _expandedRows = this.expandedRows ? [...this.expandedRows] : [];
@@ -1247,18 +1225,29 @@ export default {
}
_expandedRows.splice(expandedRowIndex, 1);
this.$emit('update:expandedRows', _expandedRows);
- this.$emit('row-collapse', {originalEvent: event,data: rowData});
+ this.$emit('row-collapse', event);
}
else {
_expandedRows.push(rowData);
this.$emit('update:expandedRows', _expandedRows);
- this.$emit('row-expand', {originalEvent: event,data: rowData});
+ this.$emit('row-expand', event);
}
},
rowTogglerIcon(rowData) {
const icon = this.isRowExpanded(rowData) ? this.expandedRowIcon : this.collapsedRowIcon;
return ['p-row-toggler-icon pi pi-fw p-clickable', icon];
},
+ shouldRenderRowGroupHeader(value, rowData, i) {
+ if (i === 0) {
+ return true;
+ }
+ else {
+ let currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.groupRowsBy);
+ let previousRowFieldData = ObjectUtils.resolveFieldData(value[i - 1], this.groupRowsBy);
+
+ return currentRowFieldData !== previousRowFieldData;
+ }
+ }
},
computed: {
containerClass() {
@@ -1410,7 +1399,8 @@ export default {
'DTPaginator': Paginator,
'DTRadioButton': RowRadioButton,
'DTCheckbox': RowCheckbox,
- 'DTHeaderCheckbox': HeaderCheckbox
+ 'DTHeaderCheckbox': HeaderCheckbox,
+ 'DTBodyCell': BodyCell
}
}
diff --git a/src/router.js b/src/router.js
index 6426eb441..7332fda54 100644
--- a/src/router.js
+++ b/src/router.js
@@ -151,6 +151,11 @@ export default new Router({
name: 'datatablereorder',
component: () => import('./views/datatable/DataTableReorderDemo.vue')
},
+ {
+ path: '/datatable/rowgroup',
+ name: 'datatablerowgroup',
+ component: () => import('./views/datatable/DataTableRowGroupDemo.vue')
+ },
{
path: '/datatable/responsive',
name: 'datatableresponsive',
diff --git a/src/views/datatable/DataTableRowGroupDemo.vue b/src/views/datatable/DataTableRowGroupDemo.vue
new file mode 100644
index 000000000..ef471d1d0
--- /dev/null
+++ b/src/views/datatable/DataTableRowGroupDemo.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+ DataTable - Row Grouping
+ Rows can either be grouped by a separate grouping row or using rowspan.
+
+
+
+
+
+
+ Subheader Grouping
+
+
+
+
+
+
+ {{slotProps.data.brand}}
+
+
+ Total Price |
+ 20000 |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/datatable/DataTableSubMenu.vue b/src/views/datatable/DataTableSubMenu.vue
index 98b92f71c..cd56a20d9 100644
--- a/src/views/datatable/DataTableSubMenu.vue
+++ b/src/views/datatable/DataTableSubMenu.vue
@@ -13,6 +13,7 @@
● ColToggle
● ColResize
● Reorder
+ ● RowGroup
● Responsive
● Export
● Crud
|