From 5757c296652e16095618627c9457e5e5690eef48 Mon Sep 17 00:00:00 2001
From: "yevhen.demchenko@allianz.de" <yevhen.demchenko@allianz.com>
Date: Mon, 11 Jul 2022 14:19:00 +0200
Subject: [PATCH] feat(dynamic-table): add column styles (#626)

---
 .../dynamic-table/dynamic-table-example.css      |  3 +++
 .../dynamic-table/dynamic-table-example.ts       |  8 +++++++-
 .../dynamic-table/dynamic-table.component.html   | 11 ++++++++---
 .../dynamic-table.component.spec.ts              | 16 +++++++++++++++-
 .../src/dynamic-table/dynamic-table.models.ts    |  8 ++++++++
 5 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/projects/ng-aquila/documentation/examples/dynamic-table/dynamic-table/dynamic-table-example.css b/projects/ng-aquila/documentation/examples/dynamic-table/dynamic-table/dynamic-table-example.css
index e69de29bb..03181522a 100644
--- a/projects/ng-aquila/documentation/examples/dynamic-table/dynamic-table/dynamic-table-example.css
+++ b/projects/ng-aquila/documentation/examples/dynamic-table/dynamic-table/dynamic-table-example.css
@@ -0,0 +1,3 @@
+::ng-deep .text-underline {
+    text-decoration: underline !important;
+}
diff --git a/projects/ng-aquila/documentation/examples/dynamic-table/dynamic-table/dynamic-table-example.ts b/projects/ng-aquila/documentation/examples/dynamic-table/dynamic-table/dynamic-table-example.ts
index b40db18e5..ce726ba39 100755
--- a/projects/ng-aquila/documentation/examples/dynamic-table/dynamic-table/dynamic-table-example.ts
+++ b/projects/ng-aquila/documentation/examples/dynamic-table/dynamic-table/dynamic-table-example.ts
@@ -58,7 +58,13 @@ export class DynamicTableExampleComponent {
         },
     ];
     displayedColumns: NxDynamicTableColumnDefinition[] = [
-        { title: 'Code', key: 'code', type: 'string' },
+        {
+            title: 'Code',
+            key: 'code',
+            type: 'string',
+            headerCellClass: 'text-underline',
+            cellStyle: { 'font-weight': 600 },
+        },
         { title: 'Company', key: 'company', type: 'string' },
         { title: 'Price', key: 'price', type: 'numeric' },
         { title: 'Change Percent', key: 'changePercent', type: 'numeric' },
diff --git a/projects/ng-aquila/src/dynamic-table/dynamic-table.component.html b/projects/ng-aquila/src/dynamic-table/dynamic-table.component.html
index f498174a4..5b1a61aea 100644
--- a/projects/ng-aquila/src/dynamic-table/dynamic-table.component.html
+++ b/projects/ng-aquila/src/dynamic-table/dynamic-table.component.html
@@ -3,15 +3,20 @@
         <cdk-table [dataSource]="dataSource" class="nx-table">
             <!-- Column Definition -->
             <ng-container *ngFor="let element of displayedColumns" cdkColumnDef="{{ element.key }}">
-                <cdk-header-cell *cdkHeaderCellDef class="nx-table__header-cell" [ngClass]="{ 'nx-table__header-cell--number': isNumeric(element) }">
-                    <div class="nx-table__header-title--block">
+                <cdk-header-cell
+                    *cdkHeaderCellDef
+                    class="nx-table__header-cell"
+                    [ngClass]="[element.headerCellClass ?? '', isNumeric(element) ? 'nx-table__header-cell--number' : '']"
+                    [ngStyle]="element.headerCellStyle || null"
+                    ><div class="nx-table__header-title--block">
                         <span class="nx-table__header-title"> {{ element.title }}</span>
                     </div>
                 </cdk-header-cell>
                 <cdk-cell
                     *cdkCellDef="let row"
                     class="nx-table__cell"
-                    [ngClass]="{ 'nx-table__cell--number': isNumeric(element) }"
+                    [ngClass]="[element.cellClass ?? '', isNumeric(element) ? 'nx-table__cell--number' : '']"
+                    [ngStyle]="element.cellStyle ?? null"
                     [innerHTML]="row[element.key]"
                 ></cdk-cell>
             </ng-container>
diff --git a/projects/ng-aquila/src/dynamic-table/dynamic-table.component.spec.ts b/projects/ng-aquila/src/dynamic-table/dynamic-table.component.spec.ts
index 877e9b13d..72f679da8 100644
--- a/projects/ng-aquila/src/dynamic-table/dynamic-table.component.spec.ts
+++ b/projects/ng-aquila/src/dynamic-table/dynamic-table.component.spec.ts
@@ -16,7 +16,14 @@ abstract class DynamicTableTest {
     ];
     displayedColumns: NxDynamicTableColumnDefinition[] = [
         { title: 'User Name', key: 'name', type: 'string' },
-        { title: 'Phone Number', key: 'phone', type: 'string' },
+        {
+            title: 'Phone Number',
+            key: 'phone',
+            type: 'string',
+            headerCellClass: 'column-header-class',
+            headerCellStyle: { 'width.px': 100 },
+            cellClass: 'column-class',
+        },
     ];
     handleRowClick = jasmine.createSpy('handleRowClickSpy');
     style = '';
@@ -87,6 +94,13 @@ describe('NxDynamicTableComponent', () => {
             fixture.detectChanges();
             expect(rowElements).toHaveSize(0);
         });
+
+        it('sets column styles', () => {
+            createTestComponent(BasicDynamicTable);
+            expect(headerCellElements[1].classList.contains('column-header-class')).toBeTrue();
+            expect(headerCellElements[1].style.width).toEqual('100px');
+            expect(fixture.nativeElement.querySelector('.column-class')).toBeTruthy();
+        });
     });
 
     describe('with events', () => {
diff --git a/projects/ng-aquila/src/dynamic-table/dynamic-table.models.ts b/projects/ng-aquila/src/dynamic-table/dynamic-table.models.ts
index 3f8413ce8..2a27619de 100644
--- a/projects/ng-aquila/src/dynamic-table/dynamic-table.models.ts
+++ b/projects/ng-aquila/src/dynamic-table/dynamic-table.models.ts
@@ -9,6 +9,14 @@ export interface NxDynamicTableColumnDefinition {
     title: string;
     /** Column display type. Defaults to 'string'. */
     type?: 'string' | 'numeric';
+    /** Add custom column header cell styles. */
+    headerCellStyle?: { [prop: string]: any };
+    /** Add custom column header cell class. */
+    headerCellClass?: string;
+    /** Add custom column cell styles. */
+    cellStyle?: { [prop: string]: any };
+    /** Add custom column cell class. */
+    cellClass?: string;
 }
 
 export class NxDynamicTableDataSource extends DataSource<any> {