Skip to content

Commit ec8c79f

Browse files
committed
cog menu
1 parent 0deafa3 commit ec8c79f

File tree

12 files changed

+114
-11
lines changed

12 files changed

+114
-11
lines changed
Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
import { NgModule } from '@angular/core';
2-
import { Routes, RouterModule } from '@angular/router';
3-
4-
5-
const routes: Routes = [];
62

73
@NgModule({
8-
imports: [RouterModule.forRoot(routes)],
9-
exports: [RouterModule]
4+
imports: [],
5+
exports: []
106
})
117
export class AppRoutingModule { }

projects/angular-datatable-advanced-examples/src/app/app.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
[displayedColumns]="['Title', 'Year', 'Released']"
55
[rowsLoader]="booksLoader()"
66
[columns]="columns"
7+
[cogMenu]="cogMenu"
78
>
89
</ada-table>

projects/angular-datatable-advanced-examples/src/app/app.component.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Component } from '@angular/core';
22
import {HttpClient, HttpParams} from '@angular/common/http';
33
import {map} from 'rxjs/operators';
4-
import {RowsLoader} from '../../../angular-datatable-advanced/src/lib/model/models';
4+
import {CogMenu, RowsLoader} from '../../../angular-datatable-advanced/src/lib/model/models';
55
import {Column} from '../../../angular-datatable-advanced/src/lib/model/column';
66
import {FilterIn} from '../../../angular-datatable-advanced/src/lib/model/filter-in';
77
import {Observable, of} from 'rxjs';
@@ -41,6 +41,7 @@ export class AppComponent {
4141
columnKey: 'geolocation.type',
4242
columnName: 'Geolocation type'
4343
}, {
44+
columnKey: 'coords',
4445
columnName: 'Coordinates',
4546
cellRender: (row) => row.geolocation && row.geolocation.coordinates
4647
? `LNG: ${row.geolocation.coordinates[0]}, LAT: ${row.geolocation.coordinates[1]}`
@@ -70,6 +71,23 @@ export class AppComponent {
7071
}
7172
];
7273

74+
cogMenu: CogMenu[] = [
75+
{
76+
name: 'Button 1',
77+
onClick: item => alert('Click on Button 1')
78+
},
79+
{
80+
name: 'Invalidate',
81+
renderCheck: item => item.nametype === 'Valid',
82+
onClick: item => item.nametype = 'Invalid'
83+
},
84+
{
85+
name: 'Validate',
86+
renderCheck: item => item.nametype === 'Invalid',
87+
onClick: item => item.nametype = 'Valid'
88+
}
89+
];
90+
7391
constructor(private http: HttpClient) {}
7492

7593
public booksLoader(): RowsLoader {

projects/angular-datatable-advanced/src/lib/angular-datatable-advanced.component.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
<div>
22
<mat-table class="ada-table" [dataSource]="dataSource" matSort>
3+
<ng-container *ngIf="hasCogMenu()" matColumnDef="cogMenuColumn">
4+
<mat-header-cell class="ada-th ada-cog-header" *matHeaderCellDef></mat-header-cell>
5+
<mat-cell class="ada-td ada-cog-button" *matCellDef="let row">
6+
<ada-cog-menu [cogMenu]="cogMenu" [row]="row"></ada-cog-menu>
7+
</mat-cell>
8+
</ng-container>
39
<ng-container *ngFor="let column of extendedColumns" [matColumnDef]="column.id">
410
<mat-header-cell class="ada-th" *matHeaderCellDef>
511
{{column.column.columnName}}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.ada-cog-button, .ada-cog-header {
2+
flex: 0 0 35px;
3+
}
4+
.ada-cog-button {
5+
cursor: pointer;
6+
}

projects/angular-datatable-advanced/src/lib/angular-datatable-advanced.component.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ import {catchError, finalize, mergeAll, tap} from 'rxjs/operators';
44
import {MatSort} from '@angular/material/sort';
55
import {asapScheduler, BehaviorSubject, Observable, of, scheduled} from 'rxjs';
66
import {CollectionViewer, DataSource} from '@angular/cdk/collections';
7-
import {ColumnWithFilter, RowsLoader, Sort} from './model/models';
7+
import {CogMenu, ColumnWithFilter, RowsLoader, Sort} from './model/models';
88
import {Column, ExtendedColumn} from './model/column';
99
import {DomSanitizer} from '@angular/platform-browser';
1010

11+
const COG_MENU_COLUMN = 'cogMenuColumn';
12+
1113
@Component({
1214
selector: 'ada-table',
1315
templateUrl: './angular-datatable-advanced.component.html',
@@ -36,6 +38,8 @@ export class AngularDatatableAdvancedComponent implements OnInit, AfterViewInit,
3638
pageSizeOptions = [10, 20];
3739
@Input()
3840
rowsLoader: RowsLoader;
41+
@Input()
42+
cogMenu: Array<CogMenu>;
3943

4044
constructor(private sanitizer: DomSanitizer) {
4145
}
@@ -95,7 +99,15 @@ export class AngularDatatableAdvancedComponent implements OnInit, AfterViewInit,
9599
}
96100

97101
getColumns() {
98-
return this.extendedColumns.map(col => col.id);
102+
const columnIds = this.extendedColumns.map(col => col.id);
103+
if (this.hasCogMenu()) {
104+
columnIds.unshift(COG_MENU_COLUMN);
105+
}
106+
return columnIds;
107+
}
108+
109+
hasCogMenu() {
110+
return this.cogMenu && this.cogMenu.length > 0;
99111
}
100112

101113
/**

projects/angular-datatable-advanced/src/lib/angular-datatable-advanced.module.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ import { MatMenuModule } from '@angular/material/menu';
1212
import {FilterComponent, FilterSelectByKeyword} from './components/filter/filter.component';
1313
import {FormsModule} from '@angular/forms';
1414
import {FlatpickrModule} from 'angularx-flatpickr';
15+
import { CogMenuComponent } from './components/cog-menu/cog-menu.component';
1516

1617
@NgModule({
17-
declarations: [AngularDatatableAdvancedComponent, FilterComponent, FilterSelectByKeyword],
18+
declarations: [AngularDatatableAdvancedComponent, FilterComponent, FilterSelectByKeyword, CogMenuComponent],
1819
imports: [
1920
BrowserModule,
2021
BrowserAnimationsModule,
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<mat-icon [matMenuTriggerFor]="menu">more_vert</mat-icon>
2+
<mat-menu #menu class="ada-cog-menu 123" style="min-height: 10px;">
3+
<div
4+
class="ada-cog-menu-button"
5+
*ngFor="let menuItem of cogMenu"
6+
[style.display]="menuItem.renderCheck && !menuItem.renderCheck(row) ? 'none' : 'block'"
7+
(click)="handleClick(menuItem)">
8+
{{menuItem.name}}
9+
</div>
10+
</mat-menu>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
::ng-deep .mat-menu-panel.ada-cog-menu {
2+
min-height: 10px !important;
3+
}
4+
5+
.ada-cog-menu-button {
6+
cursor: pointer;
7+
text-align: center;
8+
align-content: center;
9+
padding: 5px;
10+
}
11+
12+
.ada-cog-menu-button:hover {
13+
background: rgba(0,0,0,.04);
14+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import {Component, Input } from '@angular/core';
2+
import {CogMenu} from '../../model/models';
3+
4+
@Component({
5+
selector: 'ada-cog-menu',
6+
templateUrl: './cog-menu.component.html',
7+
styleUrls: ['./cog-menu.component.scss']
8+
})
9+
export class CogMenuComponent {
10+
11+
@Input()
12+
cogMenu: CogMenu[];
13+
@Input()
14+
row: any;
15+
16+
constructor() { }
17+
18+
handleClick(menu: CogMenu) {
19+
if (menu.onClick) {
20+
menu.onClick(this.row);
21+
}
22+
}
23+
24+
}

0 commit comments

Comments
 (0)