diff --git a/projects/demos/src/app/data-grid/data-grid-demo.component.html b/projects/demos/src/app/data-grid/data-grid-demo.component.html
index 8d6f059d..0c9ec352 100644
--- a/projects/demos/src/app/data-grid/data-grid-demo.component.html
+++ b/projects/demos/src/app/data-grid/data-grid-demo.component.html
@@ -104,4 +104,9 @@
Data Formatting
The name
field use a formatter.
+
+
+No Result
+
\ No newline at end of file
diff --git a/projects/extensions/data-grid/column-menu.component.html b/projects/extensions/data-grid/column-menu.component.html
new file mode 100755
index 00000000..8cb64282
--- /dev/null
+++ b/projects/extensions/data-grid/column-menu.component.html
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{col.label}}
+
+ {{col.label}}
+
\ No newline at end of file
diff --git a/projects/extensions/data-grid/column-selection.component.scss b/projects/extensions/data-grid/column-menu.component.scss
similarity index 71%
rename from projects/extensions/data-grid/column-selection.component.scss
rename to projects/extensions/data-grid/column-menu.component.scss
index f18e2e19..d62d0376 100755
--- a/projects/extensions/data-grid/column-selection.component.scss
+++ b/projects/extensions/data-grid/column-menu.component.scss
@@ -1,33 +1,33 @@
@import '~@angular/material/theming';
-.mtx-grid-column-selection {
+.mtx-grid-column-menu {
.mat-menu-content {
padding: 0;
}
}
-.mtx-grid-column-selection-inner {
+.mtx-grid-column-menu-inner {
padding: 16px;
}
-.mtx-grid-column-selection-list {
+.mtx-grid-column-menu-list {
display: block;
max-width: 100%;
&.cdk-drop-list-dragging {
- .mtx-grid-column-selection-item:not(.cdk-drag-placeholder) {
+ .mtx-grid-column-menu-item:not(.cdk-drag-placeholder) {
transition: transform 250ms cubic-bezier(0, 0, .2, 1);
}
}
&.cdk-drop-list {
- .mtx-grid-column-selection-label {
+ .mtx-grid-column-menu-item-label {
padding: 0 4px;
}
}
}
-.mtx-grid-column-selection-item {
+.mtx-grid-column-menu-item {
display: flex;
flex-direction: row;
align-items: center;
diff --git a/projects/extensions/data-grid/column-selection.component.ts b/projects/extensions/data-grid/column-menu.component.ts
similarity index 58%
rename from projects/extensions/data-grid/column-selection.component.ts
rename to projects/extensions/data-grid/column-menu.component.ts
index 1aad4502..4b55f466 100755
--- a/projects/extensions/data-grid/column-selection.component.ts
+++ b/projects/extensions/data-grid/column-menu.component.ts
@@ -11,20 +11,35 @@ import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';
import { MtxGridColumnSelectionItem } from './grid.interface';
@Component({
- selector: 'mtx-grid-column-selection',
- exportAs: 'mtxGridColumnSelection',
- templateUrl: './column-selection.component.html',
- styleUrls: ['./column-selection.component.scss'],
+ selector: 'mtx-grid-column-menu',
+ exportAs: 'mtxGridColumnMenu',
+ templateUrl: './column-menu.component.html',
+ styleUrls: ['./column-menu.component.scss'],
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush,
})
-export class MtxGridColumnSelectionComponent implements OnInit {
+export class MtxGridColumnMenuComponent implements OnInit {
@Input() columns = [];
@Input() selectable = true;
@Input() selectedType: 'show' | 'hide' = 'show';
@Input() sortable = true;
@Input() dndSortable = true;
+ @Input() get buttonText() {
+ const defaultText = `Column ${this.selectedType === 'show' ? 'Shown' : 'Hidden'}`;
+ const text = this._buttonText ? this._buttonText : defaultText;
+ return text;
+ }
+ set buttonText(value: string) {
+ this._buttonText = value;
+ }
+ private _buttonText = '';
+
+ @Input() buttonType: 'raised' | 'stroked' | 'flat' | 'icon' | 'fab' | 'mini-fab' | '' = 'stroked';
+ @Input() buttonColor: 'primary' | 'accent' | 'warn' | '' = '';
+ @Input() buttonClass = '';
+ @Input() buttonIcon = '';
+
@Output() selectionChange = new EventEmitter();
@Output() sortChange = new EventEmitter();
@@ -37,9 +52,9 @@ export class MtxGridColumnSelectionComponent implements OnInit {
return fields;
}
- constructor() { }
+ constructor() {}
- ngOnInit() { }
+ ngOnInit() {}
handleDrop(event: CdkDragDrop) {
moveItemInArray(this.columns, event.previousIndex, event.currentIndex);
diff --git a/projects/extensions/data-grid/column-selection.component.html b/projects/extensions/data-grid/column-selection.component.html
deleted file mode 100755
index 0befc937..00000000
--- a/projects/extensions/data-grid/column-selection.component.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
- {{col.label}}
-
- {{col.label}}
-
\ No newline at end of file
diff --git a/projects/extensions/data-grid/grid.component.html b/projects/extensions/data-grid/grid.component.html
index 39c2fe8f..6651a727 100755
--- a/projects/extensions/data-grid/grid.component.html
+++ b/projects/extensions/data-grid/grid.component.html
@@ -3,35 +3,42 @@
-
-
+
+
-
+
-
+ matColumnDef="MtxGridCheckboxColumnDef">
+
-
-
+ |
+
-
+ |
@@ -39,17 +46,17 @@
[sticky]="col.pinned==='left'"
[stickyEnd]="col.pinned==='right'">
-
+
- {{col.header}}
-
-
+ {{col.header}}
+ |
+
-
+ |
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+ |
-
-
+
+
-
+
+
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+ {{noResultText}}
+
\ No newline at end of file
diff --git a/projects/extensions/data-grid/grid.component.scss b/projects/extensions/data-grid/grid.component.scss
index 5ce1c0e8..dda23d98 100755
--- a/projects/extensions/data-grid/grid.component.scss
+++ b/projects/extensions/data-grid/grid.component.scss
@@ -61,7 +61,7 @@
.mat-header-cell:first-of-type {
padding-left: 24px;
- &.mat-checkbox-column-cell {
+ &.mtx-grid-checkbox-cell {
padding-left: 10px;
padding-right: 10px;
}
@@ -70,7 +70,7 @@
padding-left: 4px;
padding-right: 24px;
- &.mat-checkbox-column-cell {
+ &.mtx-grid-checkbox-cell {
padding-left: 10px;
padding-right: 10px;
}
@@ -111,11 +111,31 @@
}
}
- .mat-expanison-row {
+ .mtx-grid-expanison {
+ height: 0;
overflow: hidden;
+
+ .mat-cell {
+ padding-top: 0;
+ padding-bottom: 0;
+ }
+
+ &.collapsed {
+ .mat-cell {
+ border-bottom-width: 0;
+ transition: border-bottom-width 225ms cubic-bezier(.4, 0, .2, 1);
+ }
+ }
}
- .mat-expanison-placeholder {
+ .mtx-grid-expanison-detail {
+ display: flex;
+ align-items: center;
+ min-height: 48px;
+ overflow: hidden;
+ }
+
+ .mtx-grid-expanison-placeholder {
display: inline-block;
width: 40px;
height: 40px;
@@ -132,10 +152,6 @@
}
}
- .mat-row-last {
- border-bottom-width: 0;
- }
-
.mat-cell {
.mat-cell-img {
width: 30px;
@@ -180,7 +196,7 @@
display: flex;
}
- .mat-checkbox-column-cell {
+ .mtx-grid-checkbox-cell {
flex: none;
justify-content: center;
min-width: 40px;
@@ -190,4 +206,11 @@
margin-left: 0;
}
}
+
+ .mtx-grid-no-result {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ min-height: 150px;
+ }
}
diff --git a/projects/extensions/data-grid/grid.component.ts b/projects/extensions/data-grid/grid.component.ts
index d67c97f8..211533e5 100755
--- a/projects/extensions/data-grid/grid.component.ts
+++ b/projects/extensions/data-grid/grid.component.ts
@@ -42,16 +42,9 @@ import { MtxGridService } from './grid.service';
export class MtxGridComponent implements OnInit, OnChanges {
dataSource: MatTableDataSource;
- @Input() displayedColumns: string[];
-
@Input() columns: MtxGridColumn[] = [];
-
- columnSelectionData: MtxGridColumnSelectionItem[] = [];
-
+ @Input() displayedColumns: string[];
@Input() data = [];
-
- @Input() summary = [];
-
@Input() length = 0;
@Input() loading = false;
@@ -65,19 +58,12 @@ export class MtxGridComponent implements OnInit, OnChanges {
@ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;
@Input() showPaginator = true;
-
@Input() pageDisabled = false;
-
@Input() showFirstLastButtons = true;
-
@Input() pageIndex = 0;
-
@Input() pageSize = 10;
-
@Input() pageSizeOptions = [10, 50, 100];
-
@Input() hidePageSize = false;
-
@Output() page = new EventEmitter();
@Output() sortChange = new EventEmitter();
@@ -85,70 +71,80 @@ export class MtxGridComponent implements OnInit, OnChanges {
/** Hover & Striped style */
@Input() rowHover = false;
-
@Input() rowStriped = false;
/** Expandable row */
- @Input() expandable = false;
+ expansionRowStates = [];
+ @Input() expandable = false;
@Input() expansionTemplate: TemplateRef;
-
@Output() expansionChange = new EventEmitter();
- expansionRowStates = [];
-
/** Whether support multiple row/cell selection */
+
@Input() multiSelectable = true;
/** Row selection */
- @Input() rowSelectable = false;
-
- @Input() hideRowSelectionCheckbox = false;
-
private _selectedRow: any;
- @Output() rowSelectionChange = new EventEmitter();
-
rowSelection: SelectionModel;
+ @Input() rowSelectable = false;
+ @Input() hideRowSelectionCheckbox = false;
+ @Output() rowSelectionChange = new EventEmitter();
+
/** Cell selection */
cellSelection = [];
@Input() cellSelectable = true;
-
@Output() cellSelectionChange = new EventEmitter();
private _selectedCell: MtxGridCellSelectionDirective;
/** Toolbar */
+
@Input() showToolbar = false;
- @Input() columnHideable = true;
+ columnMenuData: MtxGridColumnSelectionItem[] = [];
+
+ @Input() columnMenuButton = false;
+ @Input() columnMenuButtonText = '';
+ @Input() columnMenuButtonType = 'stroked';
+ @Input() columnMenuButtonColor = '';
+ @Input() columnMenuButtonClass = '';
+ @Input() columnMenuButtonIcon = '';
+ @Input() columnHideable = true;
@Input() columnHidingChecked: 'show' | 'hide' = 'show';
+ @Output() columnHidingChange = new EventEmitter();
@Input() columnMovable = true;
+ @Output() columnMovingChange = new EventEmitter();
@Input() columnPinnable = true;
+ @Output() columnPinningChange = new EventEmitter();
- @Output() columnHidingChange = new EventEmitter();
+ // No Result
- @Output() columnMovingChange = new EventEmitter();
+ @Input() noResultText = 'No records found';
+ @Input() noResultTemplate: TemplateRef;
- @Output() columnPinningChange = new EventEmitter();
+ get hasNoResult() {
+ return this.data.length === 0 && !this.loading;
+ }
- constructor(private _dataGridSrv: MtxGridService) { }
+ constructor(private _dataGridSrv: MtxGridService) {}
- ngOnInit() { }
+ ngOnInit() {}
// Waiting for async data
ngOnChanges() {
this.displayedColumns = this.columns.filter(item => !item.hide).map(item => item.field);
- this.columnSelectionData = this.columns.map(item => {
+ this.columnMenuData = this.columns.map(item => {
return {
label: item.header,
field: item.field,
@@ -161,7 +157,7 @@ export class MtxGridComponent implements OnInit, OnChanges {
this.countPinnedPosition();
if (this.rowSelectable && !this.hideRowSelectionCheckbox) {
- this.displayedColumns.unshift('MatCheckboxColumnDef');
+ this.displayedColumns.unshift('MtxGridCheckboxColumnDef');
}
// We should copy each item of data for expansion data
@@ -287,7 +283,7 @@ export class MtxGridComponent implements OnInit, OnChanges {
this.displayedColumns = Object.assign([], columns);
if (this.rowSelectable && !this.hideRowSelectionCheckbox) {
- this.displayedColumns.unshift('MatCheckboxColumnDef');
+ this.displayedColumns.unshift('MtxGridCheckboxColumnDef');
}
}
@@ -297,7 +293,7 @@ export class MtxGridComponent implements OnInit, OnChanges {
this.displayedColumns = Object.assign([], columns);
if (this.rowSelectable && !this.hideRowSelectionCheckbox) {
- this.displayedColumns.unshift('MatCheckboxColumnDef');
+ this.displayedColumns.unshift('MtxGridCheckboxColumnDef');
}
}
diff --git a/projects/extensions/data-grid/grid.module.ts b/projects/extensions/data-grid/grid.module.ts
index 5b8565e9..d9f7a2c8 100755
--- a/projects/extensions/data-grid/grid.module.ts
+++ b/projects/extensions/data-grid/grid.module.ts
@@ -18,7 +18,7 @@ import { DragDropModule } from '@angular/cdk/drag-drop';
import { MtxDialogModule } from '@ng-matero/extensions/dialog';
import { MtxGridComponent } from './grid.component';
import { MtxGridCellComponent } from './cell.component';
-import { MtxGridColumnSelectionComponent } from './column-selection.component';
+import { MtxGridColumnMenuComponent } from './column-menu.component';
import { MtxGridExpansionToggleDirective } from './expansion-toggle.directive';
import { MtxGridCellSelectionDirective } from './cell-selection.directive';
import { MtxGridService } from './grid.service';
@@ -45,17 +45,17 @@ import { MtxGridService } from './grid.service';
exports: [
MtxGridComponent,
MtxGridCellComponent,
- MtxGridColumnSelectionComponent,
+ MtxGridColumnMenuComponent,
MtxGridExpansionToggleDirective,
MtxGridCellSelectionDirective,
],
declarations: [
MtxGridComponent,
MtxGridCellComponent,
- MtxGridColumnSelectionComponent,
+ MtxGridColumnMenuComponent,
MtxGridExpansionToggleDirective,
MtxGridCellSelectionDirective,
],
providers: [MtxGridService],
})
-export class MtxGridModule { }
+export class MtxGridModule {}
diff --git a/projects/extensions/data-grid/grid.service.ts b/projects/extensions/data-grid/grid.service.ts
index 8a455795..436fc21a 100755
--- a/projects/extensions/data-grid/grid.service.ts
+++ b/projects/extensions/data-grid/grid.service.ts
@@ -3,7 +3,7 @@ import { MtxGridColumn } from './grid.interface';
@Injectable()
export class MtxGridService {
- constructor() { }
+ constructor() {}
/**
* Get cell value from column key
diff --git a/projects/extensions/data-grid/public-api.ts b/projects/extensions/data-grid/public-api.ts
index 95d2f025..aca971c6 100644
--- a/projects/extensions/data-grid/public-api.ts
+++ b/projects/extensions/data-grid/public-api.ts
@@ -3,6 +3,6 @@ export * from './grid.service';
export * from './grid.module';
export * from './grid.component';
export * from './cell.component';
-export * from './column-selection.component';
+export * from './column-menu.component';
export * from './expansion-toggle.directive';
export * from './cell-selection.directive';