From 42569b3c81a6eff3a71311a7ddb66b90124c3be9 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Wed, 17 Jun 2020 12:11:14 -0500 Subject: [PATCH 01/25] bolier plate code for filter demo --- src/app/app-routing.module.ts | 4 ++++ src/app/app.component.html | 3 +++ .../grid-filter-demo-routing.module.ts | 15 +++++++++++++++ .../grid-filter-demo/grid-filter-demo.module.ts | 15 +++++++++++++++ .../grid-filter-demo.component.html | 1 + .../grid-filter-demo.component.scss | 0 .../grid-filter-demo.component.ts | 15 +++++++++++++++ 7 files changed, 53 insertions(+) create mode 100644 src/app/grid-filter-demo/grid-filter-demo-routing.module.ts create mode 100644 src/app/grid-filter-demo/grid-filter-demo.module.ts create mode 100644 src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html create mode 100644 src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.scss create mode 100644 src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index abeccd4..35a9564 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -27,6 +27,10 @@ const routes: Routes = [ { path: 'pagination-demo', loadChildren: ()=> import('./pagination-demo/pagination-demo.module').then(m => m.PaginationDemoModule) + }, + { + path: 'grid-filter', + loadChildren: ()=> import('./grid-filter-demo/grid-filter-demo.module').then(m => m.GridFilterDemoModule) } ]; diff --git a/src/app/app.component.html b/src/app/app.component.html index 1353de0..4f1ac53 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -21,6 +21,9 @@ +
diff --git a/src/app/grid-filter-demo/grid-filter-demo-routing.module.ts b/src/app/grid-filter-demo/grid-filter-demo-routing.module.ts new file mode 100644 index 0000000..e5f8f53 --- /dev/null +++ b/src/app/grid-filter-demo/grid-filter-demo-routing.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { GridFilterDemoComponent } from './grid-filter-demo/grid-filter-demo.component'; + + +const routes: Routes = [{ + path: '', + component: GridFilterDemoComponent +}]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class GridFilterDemoRoutingModule { } diff --git a/src/app/grid-filter-demo/grid-filter-demo.module.ts b/src/app/grid-filter-demo/grid-filter-demo.module.ts new file mode 100644 index 0000000..20e05c0 --- /dev/null +++ b/src/app/grid-filter-demo/grid-filter-demo.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { GridFilterDemoRoutingModule } from './grid-filter-demo-routing.module'; +import { GridFilterDemoComponent } from './grid-filter-demo/grid-filter-demo.component'; + + +@NgModule({ + declarations: [GridFilterDemoComponent], + imports: [ + CommonModule, + GridFilterDemoRoutingModule + ] +}) +export class GridFilterDemoModule { } diff --git a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html new file mode 100644 index 0000000..d40f2f4 --- /dev/null +++ b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html @@ -0,0 +1 @@ +

grid-filter-demo works!

diff --git a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.scss b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts new file mode 100644 index 0000000..0fbec20 --- /dev/null +++ b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'ps-grid-filter-demo', + templateUrl: './grid-filter-demo.component.html', + styleUrls: ['./grid-filter-demo.component.scss'] +}) +export class GridFilterDemoComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} From b08c007d56c32622c211397e1b73686c57e4cfda Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Wed, 17 Jun 2020 15:03:41 -0500 Subject: [PATCH 02/25] bolierplate code for text-filter --- .../confirm-modal/confirm-modal.component.ts | 3 +-- .../src/lib/grid-filter/grid-filter.module.ts | 14 ++++++++++++++ .../text-filter/text-filter.component.html | 1 + .../text-filter/text-filter.component.scss | 0 .../text-filter/text-filter.component.ts | 18 ++++++++++++++++++ .../ngx-bootstrap/src/public-api.ts | 4 +++- .../grid-filter-demo.module.ts | 5 +++-- .../grid-filter-demo.component.html | 1 + 8 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.scss create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal-components/confirm-modal/confirm-modal.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal-components/confirm-modal/confirm-modal.component.ts index 288bb69..7259d73 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal-components/confirm-modal/confirm-modal.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal-components/confirm-modal/confirm-modal.component.ts @@ -1,6 +1,5 @@ import { Component, OnInit, TemplateRef } from '@angular/core'; import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal'; -import { ConfirmModalService } from '../../confirm-modal.service'; import { Observer } from 'rxjs'; @@ -19,7 +18,7 @@ export class ConfirmModalComponent implements OnInit { noClass: string; observer: Observer; - constructor(private modelRef: BsModalRef, private actionService: ConfirmModalService) { + constructor(private modelRef: BsModalRef) { } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts new file mode 100644 index 0000000..da07370 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TextFilterComponent } from './text-filter/text-filter.component'; + + + +@NgModule({ + declarations: [TextFilterComponent], + imports: [ + CommonModule + ], + exports: [TextFilterComponent] +}) +export class GridFilterModule { } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html new file mode 100644 index 0000000..edfdfde --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html @@ -0,0 +1 @@ +

text-filter works!

diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.scss b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts new file mode 100644 index 0000000..581c269 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts @@ -0,0 +1,18 @@ +import { Component, OnInit, Input } from '@angular/core'; +import { IDataSource } from '@poweredsoft/data'; + +@Component({ + selector: 'psbx-ds-text-filter', + templateUrl: './text-filter.component.html', + styleUrls: ['./text-filter.component.scss'] +}) +export class TextFilterComponent implements OnInit { + + @Input() dataSource : IDataSource; + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/projects/poweredsoft/ngx-bootstrap/src/public-api.ts b/projects/poweredsoft/ngx-bootstrap/src/public-api.ts index 3be61ff..9f1849a 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/public-api.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/public-api.ts @@ -12,4 +12,6 @@ export * from './lib/confirm-modal/confirm-modal.module'; export * from './lib/confirm-modal/confirm-modal.service'; export * from './lib/confirm-modal/confirm-modal.directive'; export * from './lib/spinner/spinner.module'; -export * from './lib/spinner/spinner/spinner.component'; \ No newline at end of file +export * from './lib/spinner/spinner/spinner.component'; +export * from './lib/grid-filter/grid-filter.module'; +export * from './lib/grid-filter/text-filter/text-filter.component'; \ No newline at end of file diff --git a/src/app/grid-filter-demo/grid-filter-demo.module.ts b/src/app/grid-filter-demo/grid-filter-demo.module.ts index 20e05c0..bb0c762 100644 --- a/src/app/grid-filter-demo/grid-filter-demo.module.ts +++ b/src/app/grid-filter-demo/grid-filter-demo.module.ts @@ -3,13 +3,14 @@ import { CommonModule } from '@angular/common'; import { GridFilterDemoRoutingModule } from './grid-filter-demo-routing.module'; import { GridFilterDemoComponent } from './grid-filter-demo/grid-filter-demo.component'; - +import { GridFilterModule } from '@poweredsoft/ngx-bootstrap'; @NgModule({ declarations: [GridFilterDemoComponent], imports: [ CommonModule, - GridFilterDemoRoutingModule + GridFilterDemoRoutingModule, + GridFilterModule, ] }) export class GridFilterDemoModule { } diff --git a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html index d40f2f4..9025aa2 100644 --- a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html +++ b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html @@ -1 +1,2 @@

grid-filter-demo works!

+ \ No newline at end of file From 970cc152101bcb484dbf552cbd392b4d4183c6cc Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Sat, 20 Jun 2020 07:16:32 -0500 Subject: [PATCH 03/25] temp commit --- angular.json | 1 + .../datetime-filter.component.html | 24 ++++++ .../datetime-filter.component.scss | 0 .../datetime-filter.component.ts | 19 +++++ .../src/lib/grid-filter/grid-filter.module.ts | 15 +++- .../number-filter.component.html | 1 + .../number-filter.component.scss | 0 .../number-filter/number-filter.component.ts | 15 ++++ .../text-filter/text-filter.component.html | 7 +- .../text-filter/text-filter.component.ts | 36 ++++++++- .../ngx-bootstrap/src/public-api.ts | 4 +- .../src/lib/data-grid/data-grid.module.ts | 5 +- .../data-grid/data-grid.component.html | 3 + .../data-grid/data-grid.component.ts | 6 +- .../data-grid-cell-filter.directive.ts | 10 +++ .../poweredsoft/ngx-cdk-ui/src/public-api.ts | 3 +- src/app/app.module.ts | 4 +- .../grid-filter-demo.module.ts | 12 ++- .../grid-filter-demo.component.html | 76 ++++++++++++++++++- .../grid-filter-demo.component.ts | 27 ++++++- .../pagination/pagination-demo.component.html | 1 - .../pagination/pagination-demo.component.ts | 25 ------ src/styles.scss | 3 +- 23 files changed, 248 insertions(+), 49 deletions(-) create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.html create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.scss create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.ts create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.scss create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-cell-filter.directive.ts diff --git a/angular.json b/angular.json index c28fc2e..fad436f 100644 --- a/angular.json +++ b/angular.json @@ -28,6 +28,7 @@ "src/assets" ], "styles": [ + "node_modules/bootstrap/dist/css/bootstrap.min.css", "src/styles.scss" ], "scripts": [] diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.html new file mode 100644 index 0000000..0d17cb1 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.html @@ -0,0 +1,24 @@ +
+
+ +
+
+ +
+
+ + \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.scss b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.ts new file mode 100644 index 0000000..13ddad5 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.ts @@ -0,0 +1,19 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'psbx-datetime-filter', + templateUrl: './datetime-filter.component.html', + styleUrls: ['./datetime-filter.component.scss'] +}) +export class DatetimeFilterComponent { + + bsInlineValue = new Date(); + bsInlineRangeValue: Date[]; + maxDate = new Date(); + + constructor() { + this.maxDate.setDate(this.maxDate.getDate() + 7); + this.bsInlineRangeValue = [this.bsInlineValue, this.maxDate]; + } + +} diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts index da07370..2bb50c9 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts @@ -1,14 +1,23 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { TextFilterComponent } from './text-filter/text-filter.component'; +import { FormsModule } from '@angular/forms'; +import { NumberFilterComponent } from './number-filter/number-filter.component'; +import { DatetimeFilterComponent } from './datetime-filter/datetime-filter.component'; +import { BsDatepickerModule } from 'ngx-bootstrap/datepicker'; + + + @NgModule({ - declarations: [TextFilterComponent], + declarations: [TextFilterComponent, NumberFilterComponent,DatetimeFilterComponent], imports: [ - CommonModule + CommonModule, + FormsModule, + BsDatepickerModule.forRoot(), ], - exports: [TextFilterComponent] + exports: [TextFilterComponent, NumberFilterComponent,DatetimeFilterComponent] }) export class GridFilterModule { } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html new file mode 100644 index 0000000..0b4e9b1 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html @@ -0,0 +1 @@ +

number-filter works!

diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.scss b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts new file mode 100644 index 0000000..003cc8f --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'psbx-number-filter', + templateUrl: './number-filter.component.html', + styleUrls: ['./number-filter.component.scss'] +}) +export class NumberFilterComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html index edfdfde..8fd50e4 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html @@ -1 +1,6 @@ -

text-filter works!

+ + + + diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts index 581c269..5db9f84 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts @@ -1,18 +1,46 @@ -import { Component, OnInit, Input } from '@angular/core'; -import { IDataSource } from '@poweredsoft/data'; +import { Component, OnInit, Input, OnDestroy, Output,EventEmitter } from '@angular/core'; +import { IDataSource, IQueryExecutionResult, IQueryExecutionGroupResult } from '@poweredsoft/data'; +import { Subscription } from 'rxjs'; + @Component({ selector: 'psbx-ds-text-filter', templateUrl: './text-filter.component.html', styleUrls: ['./text-filter.component.scss'] }) -export class TextFilterComponent implements OnInit { +export class TextFilterComponent implements OnInit, OnDestroy { - @Input() dataSource : IDataSource; + @Input() dataSource : IDataSource; + @Output() filteredResults: EventEmitter = new EventEmitter(); + latestResult: IQueryExecutionResult & IQueryExecutionGroupResult; + + private _dataSubscription: Subscription; + private _searchTerm: string; + + + get searchTerm(): string { + return this._searchTerm; + } + + set searchTerm(value: string) { + this._searchTerm = value; + //this.filteredResults.emit(this.dataFilter(value)); + } + + // dataFilter(searchString: string) { + // return this.latestResult.data.filter(x => + // x.name.toLowerCase().indexOf(searchString.toLowerCase()) !== -1); + // } constructor() { } + ngOnDestroy(): void { + this._dataSubscription.unsubscribe(); + } ngOnInit(): void { + this._dataSubscription = this.dataSource.data$.subscribe(newData => { + this.latestResult = newData; + }); } } diff --git a/projects/poweredsoft/ngx-bootstrap/src/public-api.ts b/projects/poweredsoft/ngx-bootstrap/src/public-api.ts index 9f1849a..ec44aff 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/public-api.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/public-api.ts @@ -14,4 +14,6 @@ export * from './lib/confirm-modal/confirm-modal.directive'; export * from './lib/spinner/spinner.module'; export * from './lib/spinner/spinner/spinner.component'; export * from './lib/grid-filter/grid-filter.module'; -export * from './lib/grid-filter/text-filter/text-filter.component'; \ No newline at end of file +export * from './lib/grid-filter/text-filter/text-filter.component'; +export * from './lib/grid-filter/number-filter/number-filter.component'; +export * from './lib/grid-filter/datetime-filter/datetime-filter.component'; \ No newline at end of file diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid.module.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid.module.ts index f2fc2b8..fb03c9e 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid.module.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid.module.ts @@ -7,6 +7,7 @@ import { DataGridCellDirective } from './directives/data-grid-cell.directive'; import { DataGridFooterDirective } from './directives/data-grid-footer.directive'; import { DataGridHeaderDirective } from './directives/data-grid-header.directive'; import { DataGridLoaderDirective } from './directives/data-grid-loader.directive'; +import { DataGridCellFilterDirective } from './directives/data-grid-cell-filter.directive'; @@ -16,7 +17,7 @@ import { DataGridLoaderDirective } from './directives/data-grid-loader.directive declarations: [ DataGridComponent,DataGridColDirective,DataGridColHeaderDirective, DataGridCellDirective, DataGridFooterDirective, DataGridHeaderDirective, - DataGridLoaderDirective, + DataGridLoaderDirective, DataGridCellFilterDirective, ], imports: [ @@ -25,6 +26,6 @@ import { DataGridLoaderDirective } from './directives/data-grid-loader.directive exports: [ DataGridComponent,DataGridColDirective,DataGridColHeaderDirective, DataGridCellDirective,DataGridFooterDirective, DataGridHeaderDirective, - DataGridLoaderDirective] + DataGridLoaderDirective,DataGridCellFilterDirective] }) export class DataGridModule { } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html index 28017fa..3748a69 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html @@ -5,6 +5,9 @@ + + + diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.ts index 1022f05..f8a492c 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.ts @@ -5,6 +5,7 @@ import { DataGridHeaderDirective } from '../directives/data-grid-header.directiv import { DataGridFooterDirective } from '../directives/data-grid-footer.directive'; import { DataGridLoaderDirective } from '../directives/data-grid-loader.directive'; import { Subscription } from 'rxjs'; +import { DataGridCellFilterDirective } from '../directives/data-grid-cell-filter.directive'; @Component({ selector: 'ps-data-grid', @@ -20,9 +21,11 @@ export class DataGridComponent implements OnInit, OnDestroy { @ContentChildren(DataGridHeaderDirective) gridHeaders: QueryList; @ContentChildren(DataGridFooterDirective) gridFooters: QueryList; @ContentChildren(DataGridLoaderDirective) loaders: QueryList; + @ContentChildren(DataGridCellFilterDirective) filters: QueryList; @Input() dataSource: IDataSource; @Input() tableClasses: any; + @Input() headerClasses: any; @Input() noRecordsText: string; private _columns: string[]; @@ -69,8 +72,7 @@ export class DataGridComponent implements OnInit, OnDestroy { this.loading = isLoading; this.cdr.detectChanges(); }); - - console.log(this.loaders); + } getColumn(columnName: string) { diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-cell-filter.directive.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-cell-filter.directive.ts new file mode 100644 index 0000000..5b77b36 --- /dev/null +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-cell-filter.directive.ts @@ -0,0 +1,10 @@ +import { Directive, TemplateRef } from '@angular/core'; + +@Directive({ + selector: '[psDataGridCellFilter]' +}) +export class DataGridCellFilterDirective { + + constructor(public template: TemplateRef) { } + +} diff --git a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts index 6b98962..8560298 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts @@ -9,4 +9,5 @@ export * from './lib/data-grid/directives/data-grid-col.directive'; export * from './lib/data-grid/directives/data-grid-col-header.directive'; export * from './lib/data-grid/directives/data-grid-header.directive'; export * from './lib/data-grid/directives/data-grid-footer.directive'; -export * from './lib/data-grid/directives/data-grid-loader.directive'; \ No newline at end of file +export * from './lib/data-grid/directives/data-grid-loader.directive'; +export * from './lib/data-grid/directives/data-grid-cell-filter.directive'; \ No newline at end of file diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 07accdd..d4f35bf 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -10,6 +10,7 @@ import { HttpLink, HttpLinkModule } from 'apollo-angular-link-http'; import { DefaultOptions } from 'apollo-client'; import { InMemoryCache } from 'apollo-cache-inmemory'; import { HttpClientModule } from '@angular/common/http'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; export function app_Init(apollo: Apollo, httpLink: HttpLink) { return async () => { @@ -56,7 +57,8 @@ export function app_Init(apollo: Apollo, httpLink: HttpLink) { AppRoutingModule, HttpClientModule, ApolloModule, - HttpLinkModule + HttpLinkModule, + BrowserAnimationsModule ], providers: [ { diff --git a/src/app/grid-filter-demo/grid-filter-demo.module.ts b/src/app/grid-filter-demo/grid-filter-demo.module.ts index bb0c762..011dc30 100644 --- a/src/app/grid-filter-demo/grid-filter-demo.module.ts +++ b/src/app/grid-filter-demo/grid-filter-demo.module.ts @@ -3,14 +3,22 @@ import { CommonModule } from '@angular/common'; import { GridFilterDemoRoutingModule } from './grid-filter-demo-routing.module'; import { GridFilterDemoComponent } from './grid-filter-demo/grid-filter-demo.component'; -import { GridFilterModule } from '@poweredsoft/ngx-bootstrap'; +import { GridFilterModule, psbxPaginationModule, CommandModalModule, ConfirmModalModule, SpinnerModule } from '@poweredsoft/ngx-bootstrap'; +import { DataGridModule } from '@poweredsoft/ngx-cdk-ui'; +import { FormsModule } from '@angular/forms'; @NgModule({ declarations: [GridFilterDemoComponent], imports: [ CommonModule, GridFilterDemoRoutingModule, - GridFilterModule, + GridFilterModule, + psbxPaginationModule, + DataGridModule, + CommandModalModule, + ConfirmModalModule, + FormsModule, + SpinnerModule ] }) export class GridFilterDemoModule { } diff --git a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html index 9025aa2..7b0595a 100644 --- a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html +++ b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html @@ -1,2 +1,74 @@ -

grid-filter-demo works!

- \ No newline at end of file +

grid-filter-demo works!

+ + + + + + + + + + + + +
ID
+
{{model.id}}
+ + + +
+ + +
Name
+
{{model.name}}
+
+ + +
Address
+
{{model.address}}
+
+ + Actions + + + + + + + + +
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts index 0fbec20..01fdc7c 100644 --- a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts +++ b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts @@ -1,4 +1,8 @@ import { Component, OnInit } from '@angular/core'; +import { IDataSource } from '@poweredsoft/data'; +import { IMerchant } from 'src/app/data/services/IMerchant'; +import { MerchantService } from 'src/app/data/services/merchant.service'; +import { ConfirmModalService } from '@poweredsoft/ngx-bootstrap'; @Component({ selector: 'ps-grid-filter-demo', @@ -7,9 +11,26 @@ import { Component, OnInit } from '@angular/core'; }) export class GridFilterDemoComponent implements OnInit { - constructor() { } - - ngOnInit(): void { + columns = ['id','name', 'address','commands'] + merchantDataSource: IDataSource; + constructor(private merchantService: MerchantService){ + this.merchantDataSource = this.createDataSource(); + console.log(this.merchantDataSource); } + pages:any; + filteredResults:any; + + createDataSource(): IDataSource { + return this.merchantService.createDataSource(); + + } + + ngOnInit() { + this.merchantDataSource.refresh(); + } + + test(){ + console.log(this.filteredResults); + } } diff --git a/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.html b/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.html index fad970a..b7610a2 100644 --- a/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.html +++ b/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.html @@ -63,7 +63,6 @@ - { - // if(result){ - // this.merchantDataSource.executeCommandByName('removeMerchant', { - // id: id - // }).subscribe( - // res => { - // this.merchantDataSource.refresh(); - // }, - // err => { - // console.log(err); - // alert('failed'); - // } - // ); - // } - // }) - // } - createDataSource(): IDataSource { return this.merchantService.createDataSource(); diff --git a/src/styles.scss b/src/styles.scss index 5a3eeda..9d53205 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -1,2 +1,3 @@ /* You can add global styles to this file, and also import other style files */ -@import '~bootstrap/scss/bootstrap'; \ No newline at end of file +@import '~bootstrap/scss/bootstrap'; +@import '~ngx-bootstrap/datepicker/bs-datepicker.css'; \ No newline at end of file From c7584f250a0ebe569b73f1bd9a4db93cd25bd988 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Tue, 23 Jun 2020 11:55:51 -0500 Subject: [PATCH 04/25] text-filter working --- .../src/lib/grid-filter/grid-filter.module.ts | 6 +- .../text-filter/text-filter.component.html | 57 ++++++++++++++++++- .../text-filter/text-filter.component.ts | 43 +++++++------- .../ngx-bootstrap/src/lib/models/IFilter.ts | 9 +++ .../data-grid/data-grid.component.html | 6 +- .../grid-filter-demo.component.html | 5 +- .../grid-filter-demo.component.ts | 8 ++- 7 files changed, 99 insertions(+), 35 deletions(-) create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/models/IFilter.ts diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts index 2bb50c9..5b0c59a 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/grid-filter.module.ts @@ -5,8 +5,8 @@ import { FormsModule } from '@angular/forms'; import { NumberFilterComponent } from './number-filter/number-filter.component'; import { DatetimeFilterComponent } from './datetime-filter/datetime-filter.component'; import { BsDatepickerModule } from 'ngx-bootstrap/datepicker'; - - +import { PopoverModule } from 'ngx-bootstrap/popover'; +import { BsDropdownModule } from 'ngx-bootstrap/dropdown'; @@ -17,6 +17,8 @@ import { BsDatepickerModule } from 'ngx-bootstrap/datepicker'; CommonModule, FormsModule, BsDatepickerModule.forRoot(), + PopoverModule.forRoot(), + BsDropdownModule.forRoot() ], exports: [TextFilterComponent, NumberFilterComponent,DatetimeFilterComponent] }) diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html index 8fd50e4..1a3b870 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html @@ -1,6 +1,57 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts index 5db9f84..643eb8f 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit, Input, OnDestroy, Output,EventEmitter } from '@angular/core'; import { IDataSource, IQueryExecutionResult, IQueryExecutionGroupResult } from '@poweredsoft/data'; import { Subscription } from 'rxjs'; +import { IFilter, ISimpleFilter } from '../../models/IFilter'; @Component({ @@ -8,39 +9,35 @@ import { Subscription } from 'rxjs'; templateUrl: './text-filter.component.html', styleUrls: ['./text-filter.component.scss'] }) -export class TextFilterComponent implements OnInit, OnDestroy { +export class TextFilterComponent implements OnInit { @Input() dataSource : IDataSource; - @Output() filteredResults: EventEmitter = new EventEmitter(); - latestResult: IQueryExecutionResult & IQueryExecutionGroupResult; - - private _dataSubscription: Subscription; + @Output() onFilter: EventEmitter = new EventEmitter(); + title = 'Welcome word'; + content = 'Vivamus sagittis lacus vel augue laoreet rutrum faucibus.'; + private _searchTerm: string; + filterType: string = 'Contains'; + filterValue: string = null; - get searchTerm(): string { - return this._searchTerm; + get filterTypes(){ + return ["contains","equals","startsWith"] } - set searchTerm(value: string) { - this._searchTerm = value; - //this.filteredResults.emit(this.dataFilter(value)); - } - - // dataFilter(searchString: string) { - // return this.latestResult.data.filter(x => - // x.name.toLowerCase().indexOf(searchString.toLowerCase()) !== -1); - // } - constructor() { } - ngOnDestroy(): void { - this._dataSubscription.unsubscribe(); - } + ngOnInit(): void { - this._dataSubscription = this.dataSource.data$.subscribe(newData => { - this.latestResult = newData; - }); + } + applyFilter(){ + this.onFilter.emit({ + path: "name", + value: this.filterValue, + type: this.filterType, + and: true + }); + } } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/models/IFilter.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/models/IFilter.ts new file mode 100644 index 0000000..53534fc --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/models/IFilter.ts @@ -0,0 +1,9 @@ +export interface IFilter { + type: string; + and?: boolean; +} + +export interface ISimpleFilter extends IFilter { + path: string; + value: any; +} \ No newline at end of file diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html index 3748a69..4dec174 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html @@ -5,9 +5,6 @@ - - - @@ -16,6 +13,9 @@ + + + diff --git a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html index 7b0595a..5d9b044 100644 --- a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html +++ b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html @@ -1,6 +1,6 @@

grid-filter-demo works!

- + @@ -10,11 +10,12 @@ [dataSource]="merchantDataSource" command="addMerchant" [template]="theModal">Create Record - +
ID
{{model.id}}
+ diff --git a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts index 01fdc7c..a232ed8 100644 --- a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts +++ b/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.ts @@ -20,6 +20,7 @@ export class GridFilterDemoComponent implements OnInit { pages:any; filteredResults:any; + somefilter:any; createDataSource(): IDataSource { return this.merchantService.createDataSource(); @@ -28,9 +29,12 @@ export class GridFilterDemoComponent implements OnInit { ngOnInit() { this.merchantDataSource.refresh(); + } - test(){ - console.log(this.filteredResults); + filterMerchants(event){ + this.somefilter = event; + this.merchantDataSource.filters[0]=this.somefilter; + this.merchantDataSource.refresh(); } } From e018d4f96172334a0cd2f41c977b5aa6991edeb0 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Tue, 23 Jun 2020 15:14:07 -0500 Subject: [PATCH 05/25] sorting & filtering 1st version done --- .../number-filter.component.html | 58 +++++++++++++++++- .../number-filter/number-filter.component.ts | 30 ++++++++-- .../text-filter/text-filter.component.html | 27 ++++++--- .../text-filter/text-filter.component.ts | 53 ++++++++++------ .../lib/grid-sorting/grid-sorting.module.ts | 14 +++++ .../grid-sorting/grid-sorting.component.html | 4 ++ .../grid-sorting/grid-sorting.component.scss | 16 +++++ .../grid-sorting/grid-sorting.component.ts | 60 +++++++++++++++++++ .../ngx-bootstrap/src/public-api.ts | 4 +- .../src/lib/data-grid/data-grid.module.ts | 5 +- .../data-grid/data-grid.component.html | 29 ++++++--- .../data-grid/data-grid.component.scss | 8 +++ .../data-grid/data-grid.component.ts | 31 +++++++++- .../data-grid-col-sort.directive.ts | 10 ++++ .../directives/data-grid-col.directive.ts | 7 ++- .../poweredsoft/ngx-cdk-ui/src/public-api.ts | 3 +- src/app/app-routing.module.ts | 2 +- .../grid-filter-demo-routing.module.ts | 0 .../grid-filter-demo.module.ts | 5 +- .../grid-filter-demo.component.html | 12 +++- .../grid-filter-demo.component.scss | 0 .../grid-filter-demo.component.ts | 8 +-- 22 files changed, 327 insertions(+), 59 deletions(-) create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting.module.ts create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.scss create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-col-sort.directive.ts rename src/app/{grid-filter-demo => grid-filter&sorting-demo}/grid-filter-demo-routing.module.ts (100%) rename src/app/{grid-filter-demo => grid-filter&sorting-demo}/grid-filter-demo.module.ts (84%) rename src/app/{grid-filter-demo => grid-filter&sorting-demo}/grid-filter-demo/grid-filter-demo.component.html (78%) rename src/app/{grid-filter-demo => grid-filter&sorting-demo}/grid-filter-demo/grid-filter-demo.component.scss (100%) rename src/app/{grid-filter-demo => grid-filter&sorting-demo}/grid-filter-demo/grid-filter-demo.component.ts (82%) diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html index 0b4e9b1..20d809a 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html @@ -1 +1,57 @@ -

number-filter works!

+ + + + + + + + +{{columnName}} \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts index 003cc8f..1e46f80 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts @@ -1,4 +1,6 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; +import { IDataSource,IFilter } from '@poweredsoft/data'; +import { ISimpleFilter } from '../../models/IFilter'; @Component({ selector: 'psbx-number-filter', @@ -6,10 +8,30 @@ import { Component, OnInit } from '@angular/core'; styleUrls: ['./number-filter.component.scss'] }) export class NumberFilterComponent implements OnInit { + @Input() dataSource : IDataSource; + @Output() onFilter: EventEmitter = new EventEmitter(); + @Input() columnName:string; + + filterType: string = 'Contains'; + filterValue: string = null; - constructor() { } - - ngOnInit(): void { + get filterTypes(){ + return ["contains","equals","startsWith","GreaterThan","LessThan"] } + constructor() { } + + + ngOnInit(): void { + + } + + applyFilter(){ + this.onFilter.emit({ + path: this.columnName, + value: this.filterValue, + type: this.filterType, + and: true + }); + } } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html index 1a3b870..db9be7e 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html @@ -1,15 +1,24 @@ - - - +
+ +
+ +
+ - +
+ + + +
- - + \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts index 643eb8f..11c8fd8 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts @@ -1,7 +1,6 @@ -import { Component, OnInit, Input, OnDestroy, Output,EventEmitter } from '@angular/core'; -import { IDataSource, IQueryExecutionResult, IQueryExecutionGroupResult } from '@poweredsoft/data'; -import { Subscription } from 'rxjs'; -import { IFilter, ISimpleFilter } from '../../models/IFilter'; +import { Component, OnInit, Input } from '@angular/core'; +import { IDataSource} from '@poweredsoft/data'; +import { ISimpleFilter } from '../../models/IFilter'; @Component({ @@ -12,18 +11,11 @@ import { IFilter, ISimpleFilter } from '../../models/IFilter'; export class TextFilterComponent implements OnInit { @Input() dataSource : IDataSource; - @Output() onFilter: EventEmitter = new EventEmitter(); - title = 'Welcome word'; - content = 'Vivamus sagittis lacus vel augue laoreet rutrum faucibus.'; - - private _searchTerm: string; + @Input() path:string; filterType: string = 'Contains'; filterValue: string = null; - - get filterTypes(){ - return ["contains","equals","startsWith"] - } + filterTypes = ['contains', 'equal', 'startsWith','endsWith']; constructor() { } @@ -32,12 +24,35 @@ export class TextFilterComponent implements OnInit { } + clearFilter() { + const existingFilter = this.dataSource.filters.find(t => (t as ISimpleFilter).path == this.path) as ISimpleFilter; + if (existingFilter) { + this.dataSource.query({ + page: 1, + filters: this.dataSource.filters.filter(t => t != existingFilter) + }) + } + } + applyFilter(){ - this.onFilter.emit({ - path: "name", - value: this.filterValue, - type: this.filterType, - and: true - }); + + const filters = this.dataSource.filters; + const existingFilter = filters.find(t => (t as ISimpleFilter).path == this.path) as ISimpleFilter; + if (existingFilter) { + existingFilter.type = this.filterType; + existingFilter.value = this.filterValue; + } else { + filters.push({ + and: true, + type: this.filterType, + path: this.path, + value: this.filterValue + }) + } + + this.dataSource.query({ + filters: filters, + page: 1 + }) } } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting.module.ts new file mode 100644 index 0000000..91a05d8 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { GridSortingComponent } from './grid-sorting/grid-sorting.component'; + + + +@NgModule({ + declarations: [GridSortingComponent], + imports: [ + CommonModule + ], + exports:[GridSortingComponent] +}) +export class GridSortingModule { } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html new file mode 100644 index 0000000..197c9a4 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html @@ -0,0 +1,4 @@ +
+ + +
\ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.scss b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.scss new file mode 100644 index 0000000..57d27df --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.scss @@ -0,0 +1,16 @@ +:host span.dropdown-toggle.sort-asc{ + transform: rotate(180deg); + display: inline-block; +} + +:host span{ + margin: 10px; +} + +:host .not-sorting-state{ + opacity: 0.3; +} + +:host .not-sorting-state:hover{ + opacity: 1; +} \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts new file mode 100644 index 0000000..bba0f38 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts @@ -0,0 +1,60 @@ +import { Component, OnInit, Input } from '@angular/core'; +import { IDataSource } from '@poweredsoft/data'; + +@Component({ + selector: 'psbx-grid-sorting', + templateUrl: './grid-sorting.component.html', + styleUrls: ['./grid-sorting.component.scss'] +}) +export class GridSortingComponent implements OnInit { + + @Input() dataSource : IDataSource; + @Input() path:string; + isAscending:boolean; + isDescending:boolean; + constructor() { } + + ngOnInit(): void { + } + + ascending(){ + this.isAscending = true; + console.log("ascending result...") + const existingSort = this.dataSource.sorts.find(t => t.path == this.path); + if (existingSort){ + existingSort.ascending = true; + }else{ + this.dataSource.sorts.push({ + path: this.path, + ascending:true + }) + } + + this.dataSource.query({ + sorts: this.dataSource.sorts, + page: 1 + }) + this.isDescending = false; + } + + descending(){ + this.isDescending = true; + console.log("descending result...") + const existingSort = this.dataSource.sorts.find(t => t.path == this.path); + if (existingSort){ + existingSort.ascending = false; + }else{ + this.dataSource.sorts.push({ + path: this.path, + ascending:false + }) + } + + this.dataSource.query({ + sorts: this.dataSource.sorts, + page: 1 + }) + this.isAscending = false; + } + +} diff --git a/projects/poweredsoft/ngx-bootstrap/src/public-api.ts b/projects/poweredsoft/ngx-bootstrap/src/public-api.ts index ec44aff..3089598 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/public-api.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/public-api.ts @@ -16,4 +16,6 @@ export * from './lib/spinner/spinner/spinner.component'; export * from './lib/grid-filter/grid-filter.module'; export * from './lib/grid-filter/text-filter/text-filter.component'; export * from './lib/grid-filter/number-filter/number-filter.component'; -export * from './lib/grid-filter/datetime-filter/datetime-filter.component'; \ No newline at end of file +export * from './lib/grid-filter/datetime-filter/datetime-filter.component'; +export * from './lib/grid-sorting/grid-sorting.module'; +export * from './lib/grid-sorting/grid-sorting/grid-sorting.component'; \ No newline at end of file diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid.module.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid.module.ts index fb03c9e..40e579a 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid.module.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid.module.ts @@ -8,6 +8,7 @@ import { DataGridFooterDirective } from './directives/data-grid-footer.directive import { DataGridHeaderDirective } from './directives/data-grid-header.directive'; import { DataGridLoaderDirective } from './directives/data-grid-loader.directive'; import { DataGridCellFilterDirective } from './directives/data-grid-cell-filter.directive'; +import { DataGridColSortDirective } from './directives/data-grid-col-sort.directive'; @@ -17,7 +18,7 @@ import { DataGridCellFilterDirective } from './directives/data-grid-cell-filter. declarations: [ DataGridComponent,DataGridColDirective,DataGridColHeaderDirective, DataGridCellDirective, DataGridFooterDirective, DataGridHeaderDirective, - DataGridLoaderDirective, DataGridCellFilterDirective, + DataGridLoaderDirective, DataGridCellFilterDirective, DataGridColSortDirective, ], imports: [ @@ -26,6 +27,6 @@ import { DataGridCellFilterDirective } from './directives/data-grid-cell-filter. exports: [ DataGridComponent,DataGridColDirective,DataGridColHeaderDirective, DataGridCellDirective,DataGridFooterDirective, DataGridHeaderDirective, - DataGridLoaderDirective,DataGridCellFilterDirective] + DataGridLoaderDirective,DataGridCellFilterDirective,DataGridColSortDirective] }) export class DataGridModule { } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html index 4dec174..977b8f0 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html @@ -9,14 +9,27 @@ - - - - - - +
+
+ + + +
+ +
+ + + +
+ +
+ + + +
+
diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss index e69de29..e83d8bf 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss @@ -0,0 +1,8 @@ +:host .flex-container{ + display: flex; + justify-content: flex-start; +} + +:host .flex-item{ + margin-right: 1px; +} \ No newline at end of file diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.ts index f8a492c..7d9124f 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.ts @@ -6,6 +6,7 @@ import { DataGridFooterDirective } from '../directives/data-grid-footer.directiv import { DataGridLoaderDirective } from '../directives/data-grid-loader.directive'; import { Subscription } from 'rxjs'; import { DataGridCellFilterDirective } from '../directives/data-grid-cell-filter.directive'; +import { DataGridColSortDirective } from '../directives/data-grid-col-sort.directive'; @Component({ selector: 'ps-data-grid', @@ -21,7 +22,6 @@ export class DataGridComponent implements OnInit, OnDestroy { @ContentChildren(DataGridHeaderDirective) gridHeaders: QueryList; @ContentChildren(DataGridFooterDirective) gridFooters: QueryList; @ContentChildren(DataGridLoaderDirective) loaders: QueryList; - @ContentChildren(DataGridCellFilterDirective) filters: QueryList; @Input() dataSource: IDataSource; @Input() tableClasses: any; @@ -32,6 +32,8 @@ export class DataGridComponent implements OnInit, OnDestroy { private _dataSubscription: Subscription; private _loadingSubscription: Subscription; + _fiters:any + @Input() set columns(value: string[]) { this._columns = value; this.columnsChange.emit(value); @@ -75,8 +77,24 @@ export class DataGridComponent implements OnInit, OnDestroy { } + getSortingTemplate(columnName){ + const ret = this.getColumn(columnName); + if (ret && ret.sortTemplate) + return ret.sortTemplate.template; + + return null; + } + + getFilterTemplate(columnName){ + const ret = this.getColumn(columnName); + if (ret && ret.filterTemplate) + return ret.filterTemplate.template; + + return null; + } + getColumn(columnName: string) { - + if (!this.columnDefinitions) return null; @@ -88,6 +106,7 @@ export class DataGridComponent implements OnInit, OnDestroy { return ret; } + getColumnHeaderTemplate(columnName: string) { const ret = this.getColumn(columnName); if (ret && ret.headerTemplate) @@ -112,5 +131,13 @@ export class DataGridComponent implements OnInit, OnDestroy { return this.getColumnCellTemplate(columnName) ? true :false; } + hasFilterTemplate(columnName: string) { + return this.getFilterTemplate(columnName) ? true :false; + } + + hasSortingTemplate(columnName: string) { + return this.getSortingTemplate(columnName) ? true :false; + } + } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-col-sort.directive.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-col-sort.directive.ts new file mode 100644 index 0000000..c3eac1b --- /dev/null +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-col-sort.directive.ts @@ -0,0 +1,10 @@ +import { Directive, TemplateRef } from '@angular/core'; + +@Directive({ + selector: '[psDataGridColSort]' +}) +export class DataGridColSortDirective { + + constructor(public template: TemplateRef) { } + +} diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-col.directive.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-col.directive.ts index 545a5fb..a7e15c8 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-col.directive.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/directives/data-grid-col.directive.ts @@ -1,6 +1,9 @@ -import { Directive, Input, ContentChild } from '@angular/core'; +import { Directive, Input, ContentChild, ContentChildren } from '@angular/core'; import { DataGridColHeaderDirective } from './data-grid-col-header.directive'; import { DataGridCellDirective } from './data-grid-cell.directive'; +import { DataGridCellFilterDirective } from './data-grid-cell-filter.directive'; +import { DataGridColSortDirective } from './data-grid-col-sort.directive'; + @Directive({ selector: '[psDataGridCol]' @@ -10,6 +13,8 @@ export class DataGridColDirective { @Input('psDataGridCol') columnName:string; @ContentChild(DataGridColHeaderDirective) headerTemplate:DataGridColHeaderDirective; @ContentChild(DataGridCellDirective) cellTemplate:DataGridCellDirective; + @ContentChild(DataGridCellFilterDirective) filterTemplate: DataGridCellFilterDirective; + @ContentChild(DataGridColSortDirective) sortTemplate: DataGridColSortDirective; constructor() { } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts index 8560298..1a748a8 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts @@ -10,4 +10,5 @@ export * from './lib/data-grid/directives/data-grid-col-header.directive'; export * from './lib/data-grid/directives/data-grid-header.directive'; export * from './lib/data-grid/directives/data-grid-footer.directive'; export * from './lib/data-grid/directives/data-grid-loader.directive'; -export * from './lib/data-grid/directives/data-grid-cell-filter.directive'; \ No newline at end of file +export * from './lib/data-grid/directives/data-grid-cell-filter.directive'; +export * from './lib/data-grid/directives/data-grid-col-sort.directive'; \ No newline at end of file diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 35a9564..5544c4f 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -30,7 +30,7 @@ const routes: Routes = [ }, { path: 'grid-filter', - loadChildren: ()=> import('./grid-filter-demo/grid-filter-demo.module').then(m => m.GridFilterDemoModule) + loadChildren: ()=> import('./grid-filter&sorting-demo/grid-filter-demo.module').then(m => m.GridFilterDemoModule) } ]; diff --git a/src/app/grid-filter-demo/grid-filter-demo-routing.module.ts b/src/app/grid-filter&sorting-demo/grid-filter-demo-routing.module.ts similarity index 100% rename from src/app/grid-filter-demo/grid-filter-demo-routing.module.ts rename to src/app/grid-filter&sorting-demo/grid-filter-demo-routing.module.ts diff --git a/src/app/grid-filter-demo/grid-filter-demo.module.ts b/src/app/grid-filter&sorting-demo/grid-filter-demo.module.ts similarity index 84% rename from src/app/grid-filter-demo/grid-filter-demo.module.ts rename to src/app/grid-filter&sorting-demo/grid-filter-demo.module.ts index 011dc30..e3b3dc5 100644 --- a/src/app/grid-filter-demo/grid-filter-demo.module.ts +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo.module.ts @@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common'; import { GridFilterDemoRoutingModule } from './grid-filter-demo-routing.module'; import { GridFilterDemoComponent } from './grid-filter-demo/grid-filter-demo.component'; -import { GridFilterModule, psbxPaginationModule, CommandModalModule, ConfirmModalModule, SpinnerModule } from '@poweredsoft/ngx-bootstrap'; +import { GridFilterModule, psbxPaginationModule, CommandModalModule, ConfirmModalModule, SpinnerModule, GridSortingModule } from '@poweredsoft/ngx-bootstrap'; import { DataGridModule } from '@poweredsoft/ngx-cdk-ui'; import { FormsModule } from '@angular/forms'; @@ -18,7 +18,8 @@ import { FormsModule } from '@angular/forms'; CommandModalModule, ConfirmModalModule, FormsModule, - SpinnerModule + SpinnerModule, + GridSortingModule ] }) export class GridFilterDemoModule { } diff --git a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html similarity index 78% rename from src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html rename to src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html index 5d9b044..e567004 100644 --- a/src/app/grid-filter-demo/grid-filter-demo/grid-filter-demo.component.html +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html @@ -14,8 +14,11 @@
ID
+ +
{{model.id}}
- + + @@ -31,12 +34,16 @@
Name
-
{{model.name}}
+ + +
{{model.name}}
Address
{{model.address}}
+ +
Actions @@ -54,6 +61,7 @@ + - \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts index 11c8fd8..4c9b9ed 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts @@ -14,8 +14,15 @@ export class TextFilterComponent implements OnInit { @Input() path:string; filterType: string = 'Contains'; - filterValue: string = null; - filterTypes = ['contains', 'equal', 'startsWith','endsWith']; + filterValue: string = null; + isFiltering: boolean; + filterTypes = [ + {key:'contains', value: 'Contains'}, + {key:'equal', value: 'Equal'}, + {key:'startsWith', value: 'Starts With'}, + {key:'endsWith', value: 'Ends With'} + ]; + filterIsOpenned: boolean = false; constructor() { } @@ -25,6 +32,7 @@ export class TextFilterComponent implements OnInit { } clearFilter() { + this.isFiltering = false; const existingFilter = this.dataSource.filters.find(t => (t as ISimpleFilter).path == this.path) as ISimpleFilter; if (existingFilter) { this.dataSource.query({ @@ -35,7 +43,7 @@ export class TextFilterComponent implements OnInit { } applyFilter(){ - + this.isFiltering = true; const filters = this.dataSource.filters; const existingFilter = filters.find(t => (t as ISimpleFilter).path == this.path) as ISimpleFilter; if (existingFilter) { @@ -55,4 +63,8 @@ export class TextFilterComponent implements OnInit { page: 1 }) } + + showTooltip(){ + return "Filter by "+ this.path; + } } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html index 197c9a4..1ae48d3 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html @@ -1,4 +1,3 @@ -
- - -
\ No newline at end of file + + + \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.scss b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.scss index 57d27df..3194e43 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.scss +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.scss @@ -1,4 +1,4 @@ -:host span.dropdown-toggle.sort-asc{ +:host span.dropdown-toggle.sort-desc{ transform: rotate(180deg); display: inline-block; } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts index bba0f38..3a6f873 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts @@ -9,52 +9,31 @@ import { IDataSource } from '@poweredsoft/data'; export class GridSortingComponent implements OnInit { @Input() dataSource : IDataSource; - @Input() path:string; - isAscending:boolean; - isDescending:boolean; + @Input() path:string; + isSorting: boolean =false; + isAscending:boolean = false; constructor() { } ngOnInit(): void { } ascending(){ - this.isAscending = true; + this.isSorting = !this.isSorting; + this.isAscending = !this.isAscending; console.log("ascending result...") const existingSort = this.dataSource.sorts.find(t => t.path == this.path); if (existingSort){ - existingSort.ascending = true; + existingSort.ascending = (this.isAscending)? true : false; }else{ this.dataSource.sorts.push({ path: this.path, - ascending:true + ascending: (this.isAscending)? true : false }) } - this.dataSource.query({ sorts: this.dataSource.sorts, page: 1 }) - this.isDescending = false; - } - - descending(){ - this.isDescending = true; - console.log("descending result...") - const existingSort = this.dataSource.sorts.find(t => t.path == this.path); - if (existingSort){ - existingSort.ascending = false; - }else{ - this.dataSource.sorts.push({ - path: this.path, - ascending:false - }) - } - - this.dataSource.query({ - sorts: this.dataSource.sorts, - page: 1 - }) - this.isAscending = false; } } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html index 977b8f0..84bf7f8 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.html @@ -19,16 +19,16 @@
- - - -
- -
- - - -
+ + + + + + + + + + diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss index e83d8bf..54bb095 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss @@ -1,6 +1,7 @@ :host .flex-container{ display: flex; - justify-content: flex-start; + justify-content: space-between; + align-items: baseline; } :host .flex-item{ diff --git a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html index e567004..618f2ca 100644 --- a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html @@ -3,7 +3,7 @@ + tableClasses="table table-sm table-striped table-bordered"> + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.ts index 13ddad5..4b6ce79 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/datetime-filter/datetime-filter.component.ts @@ -1,4 +1,5 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, Input } from '@angular/core'; +import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; @Component({ selector: 'psbx-datetime-filter', @@ -7,6 +8,17 @@ import { Component, OnInit } from '@angular/core'; }) export class DatetimeFilterComponent { + @Input() path: string; + @Input() dataSource : IDataSource; + filterPopUpOpened: boolean = false; + isFiltering: boolean; + filterValue: Date = null; + filterType: string = 'Equal'; + filterTypes = [ + {key:'equal', value: 'Equal'}, + ]; + + bsInlineValue = new Date(); bsInlineRangeValue: Date[]; maxDate = new Date(); @@ -15,5 +27,31 @@ export class DatetimeFilterComponent { this.maxDate.setDate(this.maxDate.getDate() + 7); this.bsInlineRangeValue = [this.bsInlineValue, this.maxDate]; } + showTooltip(){ + return "Filter by "+ this.path; + } + + applyFilter(){debugger; + this.isFiltering = true; + const filters = this.dataSource.filters; + const existingFilter = filters.find(t => (t as ISimpleFilter).path == this.path) as ISimpleFilter; + if (existingFilter) { + existingFilter.type = this.filterType; + existingFilter.value = this.filterValue.toString() + } else { + filters.push({ + and: true, + type: this.filterType, + path: this.path, + value: this.filterValue.toString() + }) + } + + this.dataSource.query({ + filters: filters, + page: 1 + }) + } + } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html index 20d809a..8e56f6e 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.html @@ -1,57 +1,62 @@ - - - +
+ +
+ +
+ - +
+ + + + + +
- -{{columnName}} \ No newline at end of file + V263.612l165.018-148.48c3.608-3.247,5.662-7.878,5.649-12.732V17.067C477.871,7.641,470.23,0,460.804,0z"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts index 1e46f80..048d11b 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/number-filter/number-filter.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; +import { Component, OnInit, Input, Output, EventEmitter, ElementRef, ViewChild } from '@angular/core'; import { IDataSource,IFilter } from '@poweredsoft/data'; import { ISimpleFilter } from '../../models/IFilter'; @@ -9,29 +9,62 @@ import { ISimpleFilter } from '../../models/IFilter'; }) export class NumberFilterComponent implements OnInit { @Input() dataSource : IDataSource; - @Output() onFilter: EventEmitter = new EventEmitter(); - @Input() columnName:string; + @Input() path:string; - filterType: string = 'Contains'; - filterValue: string = null; - - get filterTypes(){ - return ["contains","equals","startsWith","GreaterThan","LessThan"] - } + filterType: string = 'Equals'; + filterValue: number = 0; + isFiltering: boolean; + filterTypes = [ + {key:'Equals', value: 'Equal'}, + {key:'Greater Than', value: 'GreaterThan'}, + {key:'Less Than', value: 'LessThan'}, + {key:'Greater Than Equal', value: 'GreaterThanOrEqual'}, + {key:'Less Than Equal', value: 'LessThanOrEqual'}, + ]; + filterIsOpenned: boolean = false; constructor() { } ngOnInit(): void { + } + clearFilter() { + this.isFiltering = false; + const existingFilter = this.dataSource.filters.find(t => (t as ISimpleFilter).path == this.path) as ISimpleFilter; + if (existingFilter) { + this.dataSource.query({ + page: 1, + filters: this.dataSource.filters.filter(t => t != existingFilter) + }) + } + } + applyFilter(){ - this.onFilter.emit({ - path: this.columnName, - value: this.filterValue, - type: this.filterType, - and: true - }); + this.isFiltering = true; + const filters = this.dataSource.filters; + const existingFilter = filters.find(t => (t as ISimpleFilter).path == this.path) as ISimpleFilter; + if (existingFilter) { + existingFilter.type = this.filterType; + existingFilter.value =this.filterValue.toString(); + } else { + filters.push({ + and: true, + type: this.filterType, + path: this.path, + value: this.filterValue.toString() + }) + } + + this.dataSource.query({ + filters: filters, + page: 1 + }) + } + + showTooltip(){ + return "Filter by "+ this.path; } } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html index 03b072a..ec73531 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.html @@ -2,7 +2,7 @@
diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts index 4c9b9ed..e2b8181 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-filter/text-filter/text-filter.component.ts @@ -17,10 +17,10 @@ export class TextFilterComponent implements OnInit { filterValue: string = null; isFiltering: boolean; filterTypes = [ - {key:'contains', value: 'Contains'}, - {key:'equal', value: 'Equal'}, - {key:'startsWith', value: 'Starts With'}, - {key:'endsWith', value: 'Ends With'} + {key:'Contains', value: 'Contains'}, + {key:'Equals', value: 'Equal'}, + {key:'Starts With', value: 'startsWith'}, + {key:'Ends With', value: 'endsWith'} ]; filterIsOpenned: boolean = false; diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html index 1ae48d3..b9e62bb 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.html @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts index 3a6f873..5043d26 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/grid-sorting/grid-sorting/grid-sorting.component.ts @@ -17,10 +17,9 @@ export class GridSortingComponent implements OnInit { ngOnInit(): void { } - ascending(){ - this.isSorting = !this.isSorting; + sorting(){ + this.isSorting = true; this.isAscending = !this.isAscending; - console.log("ascending result...") const existingSort = this.dataSource.sorts.find(t => t.path == this.path); if (existingSort){ existingSort.ascending = (this.isAscending)? true : false; diff --git a/src/app/data/services/IChangeMerchantNameCommand.ts b/src/app/data/services/IChangeMerchantCommand.ts similarity index 69% rename from src/app/data/services/IChangeMerchantNameCommand.ts rename to src/app/data/services/IChangeMerchantCommand.ts index 4cc391d..6a5d769 100644 --- a/src/app/data/services/IChangeMerchantNameCommand.ts +++ b/src/app/data/services/IChangeMerchantCommand.ts @@ -1,11 +1,13 @@ -export interface IChangeMerchantNameCommand { +export interface IChangeMerchantCommand { id: string; name: string; address: string; + ordering: number; } export interface IAddMerchantCommand { name: string; address: string; + ordering: number; } export interface IRemoveMerchantCommand { diff --git a/src/app/data/services/IMerchant.ts b/src/app/data/services/IMerchant.ts index 98cd34f..7785995 100644 --- a/src/app/data/services/IMerchant.ts +++ b/src/app/data/services/IMerchant.ts @@ -2,4 +2,6 @@ export interface IMerchant { id: string; name: string; address: string; + ordering:number; + openDate: Date; } diff --git a/src/app/data/services/merchant.service.ts b/src/app/data/services/merchant.service.ts index eaed80f..9e689c9 100644 --- a/src/app/data/services/merchant.service.ts +++ b/src/app/data/services/merchant.service.ts @@ -4,7 +4,7 @@ import { IDataSource, DataSource } from '@poweredsoft/data'; import { Apollo } from 'apollo-angular'; import gql from 'graphql-tag'; import { of } from 'rxjs'; -import { IChangeMerchantNameCommand, IAddMerchantCommand, IRemoveMerchantCommand } from './IChangeMerchantNameCommand'; +import { IChangeMerchantCommand as IChangeMerchantCommand, IAddMerchantCommand, IRemoveMerchantCommand } from './IChangeMerchantCommand'; import { IMerchant } from './IMerchant'; @Injectable({ @@ -23,7 +23,7 @@ export class MerchantService { >( 'merchants', 'GraphQLAdvanceQueryOfMerchantInput', - 'id, name, address', + 'id, name, address, ordering, openDate', (model) => model.id, { page: 1, @@ -31,8 +31,8 @@ export class MerchantService { }, true ); - - builder.addMutation( + + builder.addMutation( 'changeMerchant', //<-- command name 'changeMerchant', //<-- graph ql mutation name @@ -51,10 +51,11 @@ export class MerchantService { }, // viewModel -> transform to the form model for that command -> IChangeMerchantName - e => of({ + e => of({ id: e.model.id, name: e.model.name, - address: e.model.address + address: e.model.address, + ordering:e.model.ordering, }) ); @@ -80,7 +81,8 @@ export class MerchantService { // viewModel -> transform to the form model for that command -> IChangeMerchantName e => of({ name: 'A New merchant', - address: '' + address: '', + ordering: 11 }) ); diff --git a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html index 618f2ca..3116897 100644 --- a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html @@ -1,6 +1,4 @@

grid-filter-demo works!

- - @@ -10,11 +8,11 @@ [dataSource]="merchantDataSource" command="addMerchant" [template]="theModal">Create Record - - + +
ID
- +
{{model.id}}
@@ -34,50 +32,73 @@
Name
- +
{{model.name}}
- +
Address
{{model.address}}
- + +
+ + +
Priority
+
{{model.ordering}}
+ + + +
+ + +
Open Date
+
{{model.openDate}}
+ + + +
+ Actions - - + + - +
+ + + + + + + + + + + - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.ts b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.ts index 30b4e00..6bd9dd1 100644 --- a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.ts +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.ts @@ -11,7 +11,7 @@ import { ConfirmModalService } from '@poweredsoft/ngx-bootstrap'; }) export class GridFilterDemoComponent implements OnInit { - columns = ['id','name', 'address','commands'] + columns = ['id','name', 'address', 'ordering','openDate', 'commands'] merchantDataSource: IDataSource; constructor(private merchantService: MerchantService){ this.merchantDataSource = this.createDataSource(); From f3f24f8ed8f6c146d8e4e8ab770a9f38cae563b3 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Tue, 30 Jun 2020 10:21:02 -0500 Subject: [PATCH 08/25] bolierplate code for ngselect demo --- src/app/app-routing.module.ts | 4 ++++ src/app/app.component.html | 3 +++ .../grid-filter-demo.component.html | 5 ++++- .../ng-select-demo-routing.module.ts | 19 +++++++++++++++++++ .../ng-select-demo/ng-select-demo.module.ts | 15 +++++++++++++++ .../ng-select-demo.component.html | 0 .../ng-select-demo.component.scss | 0 .../ng-select-demo.component.ts | 15 +++++++++++++++ 8 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/app/ng-select-demo/ng-select-demo-routing.module.ts create mode 100644 src/app/ng-select-demo/ng-select-demo.module.ts create mode 100644 src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html create mode 100644 src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.scss create mode 100644 src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 5544c4f..0e892d8 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -31,6 +31,10 @@ const routes: Routes = [ { path: 'grid-filter', loadChildren: ()=> import('./grid-filter&sorting-demo/grid-filter-demo.module').then(m => m.GridFilterDemoModule) + }, + { + path: 'select', + loadChildren: ()=> import('./ng-select-demo/ng-select-demo.module').then(m => m.NgSelectDemoModule) } ]; diff --git a/src/app/app.component.html b/src/app/app.component.html index 4f1ac53..9e70e1b 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -24,6 +24,9 @@ +
diff --git a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html index 3116897..041acd5 100644 --- a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html @@ -101,4 +101,7 @@
- \ No newline at end of file + + + + diff --git a/src/app/ng-select-demo/ng-select-demo-routing.module.ts b/src/app/ng-select-demo/ng-select-demo-routing.module.ts new file mode 100644 index 0000000..d6cee6c --- /dev/null +++ b/src/app/ng-select-demo/ng-select-demo-routing.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from "@angular/core"; +import { RouterModule, Routes } from '@angular/router'; +import { NgSelectDemoComponent } from './ng-select-demo/ng-select-demo.component'; + + +const routes: Routes =[ + { + path: '', + component: NgSelectDemoComponent + } +] + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class NgSelectDemoRoutingModule { + +} \ No newline at end of file diff --git a/src/app/ng-select-demo/ng-select-demo.module.ts b/src/app/ng-select-demo/ng-select-demo.module.ts new file mode 100644 index 0000000..fae2d4c --- /dev/null +++ b/src/app/ng-select-demo/ng-select-demo.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgSelectDemoComponent } from './ng-select-demo/ng-select-demo.component'; +import { NgSelectDemoRoutingModule } from './ng-select-demo-routing.module'; + + + +@NgModule({ + declarations: [NgSelectDemoComponent], + imports: [ + CommonModule, + NgSelectDemoRoutingModule + ] +}) +export class NgSelectDemoModule { } diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.scss b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts new file mode 100644 index 0000000..ad5b580 --- /dev/null +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'ps-ng-select-demo', + templateUrl: './ng-select-demo.component.html', + styleUrls: ['./ng-select-demo.component.scss'] +}) +export class NgSelectDemoComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} From 88dd6bb922ff4c582787632c44615631aae05955 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Tue, 30 Jun 2020 14:09:53 -0500 Subject: [PATCH 09/25] ng-select installed --- package-lock.json | 8 ++++++++ package.json | 1 + src/app/ng-select-demo/ng-select-demo.module.ts | 4 ++++ src/styles.scss | 3 ++- 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index c3334f8..c5e468b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1644,6 +1644,14 @@ } } }, + "@ng-select/ng-select": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-4.0.1.tgz", + "integrity": "sha512-f5NzrKRvswOvxa8BzBgAUOpzl0B8SrlVQHQLB2zPymuZlzC2dWUi9mUhgu6s2igwdClmrZ8bysNBBNpgqHskyA==", + "requires": { + "tslib": "^1.10.0" + } + }, "@ngtools/webpack": { "version": "9.1.7", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-9.1.7.tgz", diff --git a/package.json b/package.json index 2d27be7..5ba2c3d 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@angular/platform-browser": "~9.1.4", "@angular/platform-browser-dynamic": "~9.1.4", "@angular/router": "~9.1.4", + "@ng-select/ng-select": "^4.0.1", "@poweredsoft/data": "0.0.26", "@poweredsoft/ngx-data": "0.0.13", "@poweredsoft/ngx-data-apollo": "0.0.8", diff --git a/src/app/ng-select-demo/ng-select-demo.module.ts b/src/app/ng-select-demo/ng-select-demo.module.ts index fae2d4c..5c9072b 100644 --- a/src/app/ng-select-demo/ng-select-demo.module.ts +++ b/src/app/ng-select-demo/ng-select-demo.module.ts @@ -2,6 +2,8 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { NgSelectDemoComponent } from './ng-select-demo/ng-select-demo.component'; import { NgSelectDemoRoutingModule } from './ng-select-demo-routing.module'; +import { NgSelectModule } from '@ng-select/ng-select'; +import { FormsModule } from '@angular/forms'; @@ -9,6 +11,8 @@ import { NgSelectDemoRoutingModule } from './ng-select-demo-routing.module'; declarations: [NgSelectDemoComponent], imports: [ CommonModule, + NgSelectModule, + FormsModule, NgSelectDemoRoutingModule ] }) diff --git a/src/styles.scss b/src/styles.scss index 9d53205..a013fb2 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -1,3 +1,4 @@ /* You can add global styles to this file, and also import other style files */ @import '~bootstrap/scss/bootstrap'; -@import '~ngx-bootstrap/datepicker/bs-datepicker.css'; \ No newline at end of file +@import '~ngx-bootstrap/datepicker/bs-datepicker.css'; +@import "~@ng-select/ng-select/themes/default.theme.css"; \ No newline at end of file From 7f75f35b2a3a04d720087ab9a56bedde88ce5c69 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Tue, 30 Jun 2020 15:48:41 -0500 Subject: [PATCH 10/25] ps-ng-select works one shot --- .../ng-multi-select.component.html | 1 + .../ng-multi-select.component.scss | 0 .../ng-multi-select.component.spec.ts | 25 +++++++ .../ng-multi-select.component.ts | 15 ++++ .../ng-select/ng-select.component.html | 9 +++ .../ng-select/ng-select.component.scss | 0 .../ng-select/ng-select.component.spec.ts | 25 +++++++ .../ng-select/ng-select.component.ts | 74 +++++++++++++++++++ .../lib/ps-selectors/ps-selectors.module.ts | 19 +++++ .../poweredsoft/ngx-cdk-ui/src/public-api.ts | 7 +- .../ng-select-demo/ng-select-demo.module.ts | 4 +- .../ng-select-demo.component.html | 4 + .../ng-select-demo.component.ts | 21 +++++- 13 files changed, 199 insertions(+), 5 deletions(-) create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.scss create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.spec.ts create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.scss create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.spec.ts create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html new file mode 100644 index 0000000..5955490 --- /dev/null +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html @@ -0,0 +1 @@ +

ng-multi-select works!

diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.scss b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.spec.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.spec.ts new file mode 100644 index 0000000..dd1f6e1 --- /dev/null +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { NgMultiSelectComponent } from './ng-multi-select.component'; + +describe('NgMultiSelectComponent', () => { + let component: NgMultiSelectComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ NgMultiSelectComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(NgMultiSelectComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts new file mode 100644 index 0000000..abf5717 --- /dev/null +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'ps-ng-multi-select', + templateUrl: './ng-multi-select.component.html', + styleUrls: ['./ng-multi-select.component.scss'] +}) +export class NgMultiSelectComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html new file mode 100644 index 0000000..3002f81 --- /dev/null +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html @@ -0,0 +1,9 @@ + + + +
Selected: {{selectedId | json }} \ No newline at end of file diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.scss b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.spec.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.spec.ts new file mode 100644 index 0000000..9dc9b61 --- /dev/null +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { NgSelectComponent } from './ng-select.component'; + +describe('NgSelectComponent', () => { + let component: NgSelectComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ NgSelectComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(NgSelectComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts new file mode 100644 index 0000000..0940e3e --- /dev/null +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts @@ -0,0 +1,74 @@ +import { Component, OnInit, Input, ChangeDetectorRef } from '@angular/core'; +import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; +import { Observable, Subject } from 'rxjs'; +import { distinctUntilChanged, debounceTime, map } from 'rxjs/operators'; + +@Component({ + selector: 'ps-ng-select', + templateUrl: './ng-select.component.html', + styleUrls: ['./ng-select.component.scss'] +}) +export class NgSelectComponent implements OnInit { + + @Input() dataSource: IDataSource; + + data$ : Observable; + selectedId:any; + isLoading:boolean = false; + searchInput$ = new Subject(); + + constructor(private cdr: ChangeDetectorRef) { } + + ngOnInit(): void { + this.dataFetching(); + this.detectLoading(); + this.searchOnServer(); + } + + + dataFetching(){ + this.data$ = this.dataSource.data$.pipe( + map(t => { + if (t == null) + return []; + return t.data; + }) + ); + } + + detectLoading(){ + this.dataSource.loading$.subscribe(loading => { + this.isLoading = loading; + this.cdr.detectChanges(); + }); + } + + searchOnServer(){ + this.searchInput$.pipe( + distinctUntilChanged(), // emit the difference from previous input + debounceTime(500) // this is for delaying searching speed + ).subscribe(searchTerm => this.refreshDataSource(searchTerm)); + + this.refreshDataSource(); //send the query to server to sorting & filtering by default + } + + refreshDataSource(searchTerm:any = null){ + let searchfilters:ISimpleFilter[] = null; + if(searchTerm){ + searchfilters = [{ + path: 'name', //Todo: add input variable for this filtering path + type: 'startsWith',//Todo: add input variable for this type, could be contains, startsWith, endswith, equal + value: searchTerm + }] + } + this.dataSource.query({ + page: 1, + pageSize: 50, + filters:searchfilters, + sorts:[ + {path: 'name', ascending: true} //Todo: add input variable for sorting path + ] + }) + } + +} diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts new file mode 100644 index 0000000..dc35df7 --- /dev/null +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgSelectComponent } from './ng-select/ng-select.component'; +import { NgMultiSelectComponent } from './ng-multi-select/ng-multi-select.component'; +import { FormsModule } from '@angular/forms'; +import { NgSelectModule } from '@ng-select/ng-select'; + + + +@NgModule({ + declarations: [NgSelectComponent, NgMultiSelectComponent], + imports: [ + CommonModule, + FormsModule, + NgSelectModule, + ], + exports:[NgSelectComponent,NgMultiSelectComponent] +}) +export class PsSelectorsModule { } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts index 1a748a8..d8531dd 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts @@ -11,4 +11,9 @@ export * from './lib/data-grid/directives/data-grid-header.directive'; export * from './lib/data-grid/directives/data-grid-footer.directive'; export * from './lib/data-grid/directives/data-grid-loader.directive'; export * from './lib/data-grid/directives/data-grid-cell-filter.directive'; -export * from './lib/data-grid/directives/data-grid-col-sort.directive'; \ No newline at end of file +export * from './lib/data-grid/directives/data-grid-col-sort.directive'; + +//ng selects +export * from './lib/ps-selectors/ps-selectors.module'; +export * from './lib/ps-selectors/ng-select/ng-select.component'; +export * from './lib/ps-selectors/ng-multi-select/ng-multi-select.component'; \ No newline at end of file diff --git a/src/app/ng-select-demo/ng-select-demo.module.ts b/src/app/ng-select-demo/ng-select-demo.module.ts index 5c9072b..59b05bc 100644 --- a/src/app/ng-select-demo/ng-select-demo.module.ts +++ b/src/app/ng-select-demo/ng-select-demo.module.ts @@ -4,6 +4,7 @@ import { NgSelectDemoComponent } from './ng-select-demo/ng-select-demo.component import { NgSelectDemoRoutingModule } from './ng-select-demo-routing.module'; import { NgSelectModule } from '@ng-select/ng-select'; import { FormsModule } from '@angular/forms'; +import { PsSelectorsModule } from '@poweredsoft/ngx-cdk-ui'; @@ -13,7 +14,8 @@ import { FormsModule } from '@angular/forms'; CommonModule, NgSelectModule, FormsModule, - NgSelectDemoRoutingModule + NgSelectDemoRoutingModule, + PsSelectorsModule //our ng select module ] }) export class NgSelectDemoModule { } diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html index e69de29..7a28c9c 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts index ad5b580..6e9d72e 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts @@ -1,4 +1,10 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ChangeDetectorRef } from '@angular/core'; +import { MerchantService } from 'src/app/data/services/merchant.service'; + +import { IMerchant } from 'src/app/data/services/IMerchant'; +import { Observable, Subject } from 'rxjs'; +import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators'; +import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; @Component({ selector: 'ps-ng-select-demo', @@ -7,9 +13,18 @@ import { Component, OnInit } from '@angular/core'; }) export class NgSelectDemoComponent implements OnInit { - constructor() { } + merchantDataSource: IDataSource; + - ngOnInit(): void { + constructor(private merchantService: MerchantService, + ) { + this.merchantDataSource = merchantService.createDataSource(); //Assign the dataSource } + ngOnInit(): void { + + } + + + } From f5ea037a88c12d8a339ed54b6ee32fc1960d0f0a Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Thu, 2 Jul 2020 10:16:13 -0500 Subject: [PATCH 11/25] ng-select basic done --- .../ng-select/ng-select.component.html | 2 +- .../ng-select/ng-select.component.ts | 39 +++++++++++++------ .../ng-select-demo.component.html | 5 +-- 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html index 3002f81..2423cae 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html @@ -1,5 +1,5 @@ ; + @Input() searchPath: string; + @Input() searchType: string = "Contains"; + @Input() sortingPath: string; + @Input() disableServer:boolean = false; + + @Input() bindLabel:string; + data$ : Observable; selectedId:any; isLoading:boolean = false; searchInput$ = new Subject(); + private _dataSubscription: Subscription; + constructor(private cdr: ChangeDetectorRef) { } + ngOnDestroy(): void { + this._dataSubscription.unsubscribe(); + } ngOnInit(): void { this.dataFetching(); this.detectLoading(); - this.searchOnServer(); + if(!this.disableServer){ + this.searchOnServer(); + }else{ + this.refreshDataSource(); + } } @@ -34,6 +50,7 @@ export class NgSelectComponent implements OnInit { return t.data; }) ); + this._dataSubscription = this.dataSource.data$.subscribe(); } detectLoading(){ @@ -47,26 +64,26 @@ export class NgSelectComponent implements OnInit { this.searchInput$.pipe( distinctUntilChanged(), // emit the difference from previous input debounceTime(500) // this is for delaying searching speed - ).subscribe(searchTerm => this.refreshDataSource(searchTerm)); + ).subscribe(searchTerm => this.refreshDataSource(searchTerm, 1, 50)); // page: 1, pageSize: 50 this.refreshDataSource(); //send the query to server to sorting & filtering by default } - refreshDataSource(searchTerm:any = null){ + refreshDataSource(searchTerm:any = null, page:number=null, pageSize:number=null){ let searchfilters:ISimpleFilter[] = null; if(searchTerm){ searchfilters = [{ - path: 'name', //Todo: add input variable for this filtering path - type: 'startsWith',//Todo: add input variable for this type, could be contains, startsWith, endswith, equal + path: this.searchPath, + type: this.searchType, // Default: Contains value: searchTerm }] } this.dataSource.query({ - page: 1, - pageSize: 50, + page: page, + pageSize: pageSize, filters:searchfilters, sorts:[ - {path: 'name', ascending: true} //Todo: add input variable for sorting path + {path: this.sortingPath, ascending: true} ] }) } diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html index 7a28c9c..f49b018 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file From dc93ae4d5b8381a583441ab2db1675bd1ce05af6 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Thu, 2 Jul 2020 11:40:11 -0500 Subject: [PATCH 12/25] multi-select basic --- .../ng-multi-select.component.html | 22 ++++- .../ng-multi-select.component.ts | 90 ++++++++++++++++++- .../ng-select/ng-select.component.ts | 2 +- .../ng-select-demo.component.html | 7 +- 4 files changed, 114 insertions(+), 7 deletions(-) diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html index 5955490..44df12c 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html @@ -1 +1,21 @@ -

ng-multi-select works!

+

Select multiple elements

+ + + + +
+ Selected value:
+
    +
  • {{item.name}}
  • +
+ + +
diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts index abf5717..f56cf51 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts @@ -1,15 +1,97 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, Input, ChangeDetectorRef, OnDestroy } from '@angular/core'; +import { Observable, Subscription, Subject } from 'rxjs'; +import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; +import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators'; @Component({ selector: 'ps-ng-multi-select', templateUrl: './ng-multi-select.component.html', styleUrls: ['./ng-multi-select.component.scss'] }) -export class NgMultiSelectComponent implements OnInit { +export class NgMultiSelectComponent implements OnInit, OnDestroy { - constructor() { } + @Input() dataSource: IDataSource; + @Input() searchPath: string; + @Input() searchType: string = "Contains"; + @Input() sortingPath: string; + @Input() disableServer:boolean = false; + @Input() bindLabel:string; - ngOnInit(): void { + data$ : Observable; + selectedId:any[]; + isLoading:boolean = false; + searchInput$ = new Subject(); + private _dataSubscription: Subscription; + + constructor(private cdr: ChangeDetectorRef) { } + ngOnDestroy(): void { + this._dataSubscription.unsubscribe(); + } + + ngOnInit() { + this.dataFetching(); + this.detectLoading(); + if(!this.disableServer){ + this.searchOnServer(); + }else{ + this.refreshDataSource(); + } + + } + + dataFetching(){ + this.data$ = this.dataSource.data$.pipe( + map(t => { + if (t == null) + return []; + return t.data; + }) + ); + this._dataSubscription = this.dataSource.data$.subscribe(); + } + + detectLoading(){ + this.dataSource.loading$.subscribe(loading => { + this.isLoading = loading; + this.cdr.detectChanges(); + }); + } + + searchOnServer(){ + this.searchInput$.pipe( + distinctUntilChanged(), // emit the difference from previous input + debounceTime(500) // this is for delaying searching speed + ).subscribe(searchTerm => this.refreshDataSource(searchTerm, 1, 50)); // page: 1, pageSize: 100 + + this.refreshDataSource(); //send the query to server to sorting & filtering by default + } + + refreshDataSource(searchTerm:any = null, page:number=null, pageSize:number=null){ + let searchfilters:ISimpleFilter[] = null; + if(searchTerm){ + searchfilters = [{ + path: this.searchPath, + type: this.searchType, // Default: Contains + value: searchTerm + }] + } + this.dataSource.query({ + page: page, + pageSize: pageSize, + filters:searchfilters, + sorts:[ + {path: this.sortingPath, ascending: true} + ] + }) + } + + clearModel() { + this.selectedId = []; +} + +changeModel() { + this.selectedId = [{ name: 'New person' }]; +} } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts index 46de87b..7bce209 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts @@ -64,7 +64,7 @@ export class NgSelectComponent implements OnInit, OnDestroy { this.searchInput$.pipe( distinctUntilChanged(), // emit the difference from previous input debounceTime(500) // this is for delaying searching speed - ).subscribe(searchTerm => this.refreshDataSource(searchTerm, 1, 50)); // page: 1, pageSize: 50 + ).subscribe(searchTerm => this.refreshDataSource(searchTerm, 1, 100)); // page: 1, pageSize: 50 this.refreshDataSource(); //send the query to server to sorting & filtering by default } diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html index f49b018..bd5c98c 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html @@ -1 +1,6 @@ - \ No newline at end of file +

Single Select Demo

+ + + +

Multi-Select Demo

+ \ No newline at end of file From 58f2ec48d01ee783a2638c0010ac557eebb70794 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Mon, 6 Jul 2020 10:25:52 -0500 Subject: [PATCH 13/25] temp commit the ng-select before removing --- .../ng-select/ng-select.component.html | 22 +++-- .../ng-select/ng-select.component.ts | 86 +++++++++++++++---- .../lib/ps-selectors/ps-selectors.module.ts | 7 +- .../select-option-template.directive.ts | 10 +++ .../poweredsoft/ngx-cdk-ui/src/public-api.ts | 3 +- .../ng-select-demo/ng-select-demo.module.ts | 3 +- .../ng-select-demo.component.html | 35 +++++++- .../ng-select-demo.component.ts | 9 +- 8 files changed, 143 insertions(+), 32 deletions(-) create mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/select-option-template.directive.ts diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html index 2423cae..feb5be1 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html @@ -1,9 +1,17 @@ - + [typeahead] = "searchInput$" + [trackByFn]="trackFn" + (change)="valueChanged($event)"> + + + + + - -
Selected: {{selectedId | json }} \ No newline at end of file diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts index 7bce209..4cb4f62 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts @@ -1,47 +1,86 @@ -import { Component, OnInit, Input, ChangeDetectorRef, OnDestroy } from '@angular/core'; +import { Component, OnInit, Input, ChangeDetectorRef, OnDestroy, ContentChild, QueryList, ContentChildren, ViewChild, forwardRef, EventEmitter, Output } from '@angular/core'; import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; import { Observable, Subject, Subscription } from 'rxjs'; import { distinctUntilChanged, debounceTime, map } from 'rxjs/operators'; +import { SelectOptionTemplateDirective } from '../select-option-template.directive'; +import { NgSelectComponent as SelectComponent } from '@ng-select/ng-select'; +import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms'; @Component({ selector: 'ps-ng-select', templateUrl: './ng-select.component.html', + providers: [{ + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => NgSelectComponent), + multi: true +}], styleUrls: ['./ng-select.component.scss'] }) -export class NgSelectComponent implements OnInit, OnDestroy { +export class NgSelectComponent implements OnInit, OnDestroy, ControlValueAccessor { + @ContentChild(SelectOptionTemplateDirective) selectTemplate: SelectOptionTemplateDirective; + @ViewChild(SelectComponent, { static: true }) selectComponent: SelectComponent; @Input() dataSource: IDataSource; @Input() searchPath: string; - @Input() searchType: string = "Contains"; + @Input() searchType: string; @Input() sortingPath: string; - @Input() disableServer:boolean = false; - + @Input() serverFiltering:boolean; @Input() bindLabel:string; + @Input() bindValue: string; + @Output('change') changeEvent = new EventEmitter(); + trackFn: (item: any) => any; data$ : Observable; - selectedId:any; isLoading:boolean = false; searchInput$ = new Subject(); - private _dataSubscription: Subscription; + private _loadingSubscription: Subscription; + + constructor(private cdr: ChangeDetectorRef) { + this.trackFn = this.trackBy.bind(this); + + } + + valueChanged(event) { + this.changeEvent.emit(event); + } + + writeValue(obj: any): void { + this.selectComponent.writeValue(obj); + } + registerOnChange(fn: any): void { + this.selectComponent.registerOnChange(fn); + } + registerOnTouched(fn: any): void { + this.selectComponent.registerOnTouched(fn); + } + setDisabledState?(isDisabled: boolean): void { + if (this.selectComponent.setDisabledState) + this.selectComponent.setDisabledState(isDisabled); + } + + trackBy(item: any) { + return this.dataSource.resolveIdField(item); + } - constructor(private cdr: ChangeDetectorRef) { } ngOnDestroy(): void { - this._dataSubscription.unsubscribe(); + this._loadingSubscription.unsubscribe(); } ngOnInit(): void { this.dataFetching(); this.detectLoading(); - if(!this.disableServer){ + + console.log(this.serverFiltering); + + if(this.serverFiltering){ this.searchOnServer(); }else{ this.refreshDataSource(); } } - dataFetching(){ this.data$ = this.dataSource.data$.pipe( map(t => { @@ -50,11 +89,10 @@ export class NgSelectComponent implements OnInit, OnDestroy { return t.data; }) ); - this._dataSubscription = this.dataSource.data$.subscribe(); } detectLoading(){ - this.dataSource.loading$.subscribe(loading => { + this._loadingSubscription = this.dataSource.loading$.subscribe(loading => { this.isLoading = loading; this.cdr.detectChanges(); }); @@ -69,12 +107,16 @@ export class NgSelectComponent implements OnInit, OnDestroy { this.refreshDataSource(); //send the query to server to sorting & filtering by default } - refreshDataSource(searchTerm:any = null, page:number=null, pageSize:number=null){ + get selectedModel() { + return this.selectComponent.hasValue ? this.selectComponent.selectedItems[0].value : null; + } + + refreshDataSource(searchTerm:any = null, page:number = null, pageSize:number = null){ let searchfilters:ISimpleFilter[] = null; if(searchTerm){ searchfilters = [{ - path: this.searchPath, - type: this.searchType, // Default: Contains + path: this.searchPath || this.bindLabel, + type: this.searchType || 'Contains', // Default: Contains value: searchTerm }] } @@ -83,9 +125,19 @@ export class NgSelectComponent implements OnInit, OnDestroy { pageSize: pageSize, filters:searchfilters, sorts:[ - {path: this.sortingPath, ascending: true} + {path: this.sortingPath || this.bindLabel, ascending: true} ] }) } + get hasOptionTemplate() { + return this.selectTemplate ? true : false; + } + + get selectOptionTemplate(){ + if (this.selectTemplate) + return this.selectTemplate.template; + return null; + } + } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts index dc35df7..e399722 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts @@ -2,18 +2,19 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { NgSelectComponent } from './ng-select/ng-select.component'; import { NgMultiSelectComponent } from './ng-multi-select/ng-multi-select.component'; -import { FormsModule } from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { NgSelectModule } from '@ng-select/ng-select'; +import { SelectOptionTemplateDirective } from './select-option-template.directive'; @NgModule({ - declarations: [NgSelectComponent, NgMultiSelectComponent], + declarations: [NgSelectComponent, NgMultiSelectComponent, SelectOptionTemplateDirective], imports: [ CommonModule, FormsModule, NgSelectModule, ], - exports:[NgSelectComponent,NgMultiSelectComponent] + exports:[NgSelectComponent,NgMultiSelectComponent,SelectOptionTemplateDirective] }) export class PsSelectorsModule { } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/select-option-template.directive.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/select-option-template.directive.ts new file mode 100644 index 0000000..ef1381d --- /dev/null +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/select-option-template.directive.ts @@ -0,0 +1,10 @@ +import { Directive, TemplateRef } from '@angular/core'; + +@Directive({ + selector: '[psSelectOptionTemplate]' +}) +export class SelectOptionTemplateDirective { + + constructor(public template: TemplateRef) { } + +} diff --git a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts index d8531dd..04015df 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts @@ -16,4 +16,5 @@ export * from './lib/data-grid/directives/data-grid-col-sort.directive'; //ng selects export * from './lib/ps-selectors/ps-selectors.module'; export * from './lib/ps-selectors/ng-select/ng-select.component'; -export * from './lib/ps-selectors/ng-multi-select/ng-multi-select.component'; \ No newline at end of file +export * from './lib/ps-selectors/ng-multi-select/ng-multi-select.component'; +export * from './lib/ps-selectors/select-option-template.directive'; \ No newline at end of file diff --git a/src/app/ng-select-demo/ng-select-demo.module.ts b/src/app/ng-select-demo/ng-select-demo.module.ts index 59b05bc..ffa7b5e 100644 --- a/src/app/ng-select-demo/ng-select-demo.module.ts +++ b/src/app/ng-select-demo/ng-select-demo.module.ts @@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common'; import { NgSelectDemoComponent } from './ng-select-demo/ng-select-demo.component'; import { NgSelectDemoRoutingModule } from './ng-select-demo-routing.module'; import { NgSelectModule } from '@ng-select/ng-select'; -import { FormsModule } from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { PsSelectorsModule } from '@poweredsoft/ngx-cdk-ui'; @@ -14,6 +14,7 @@ import { PsSelectorsModule } from '@poweredsoft/ngx-cdk-ui'; CommonModule, NgSelectModule, FormsModule, + ReactiveFormsModule, NgSelectDemoRoutingModule, PsSelectorsModule //our ng select module ] diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html index bd5c98c..9cf5f05 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html @@ -1,6 +1,37 @@

Single Select Demo

- + +
+ {{ item.name }} - {{ item.address }} +
+

Multi-Select Demo

- \ No newline at end of file + + + + +
+ +
+ {{ item.name }} - {{ item.address }} +
+
+
+ +{{ myForm.value | json }} + + + +
+ {{ item.name }} - {{ item.address }} +
+
+ +{{ myValue | json }} \ No newline at end of file diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts index 6e9d72e..5ad4d3b 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts @@ -5,6 +5,7 @@ import { IMerchant } from 'src/app/data/services/IMerchant'; import { Observable, Subject } from 'rxjs'; import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators'; import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; +import { FormBuilder, FormGroup } from '@angular/forms'; @Component({ selector: 'ps-ng-select-demo', @@ -15,10 +16,16 @@ export class NgSelectDemoComponent implements OnInit { merchantDataSource: IDataSource; + selectedValue: IMerchant; + myForm: FormGroup; + myValue: string; - constructor(private merchantService: MerchantService, + constructor(private merchantService: MerchantService, private fb: FormBuilder ) { this.merchantDataSource = merchantService.createDataSource(); //Assign the dataSource + this.myForm = fb.group({ + 'merchantId': [null, null] + }) } ngOnInit(): void { From 420c2c18b6ee12f5b050fcccb075114da589cf4f Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Mon, 6 Jul 2020 12:21:52 -0500 Subject: [PATCH 14/25] seperate ng-select into a ng-select lib --- angular.json | 40 +++++ projects/poweredsoft/ng-select/README.md | 24 +++ projects/poweredsoft/ng-select/karma.conf.js | 32 ++++ .../poweredsoft/ng-select/ng-package.json | 7 + projects/poweredsoft/ng-select/package.json | 11 ++ .../multi-select/multi-select.component.html | 1 + .../multi-select/multi-select.component.scss | 0 .../multi-select/multi-select.component.ts | 15 ++ .../ng-select/ng-select.component.html | 17 +++ .../ng-select/ng-select.component.scss | 0 .../ng-select/ng-select.component.ts | 143 ++++++++++++++++++ .../ps-ng-selectors/ps-ng-selectors.module.ts | 24 +++ .../select-label-template.directive.spec.ts | 8 + .../select-label-template.directive.ts | 10 ++ .../poweredsoft/ng-select/src/public-api.ts | 11 ++ projects/poweredsoft/ng-select/src/test.ts | 26 ++++ .../poweredsoft/ng-select/tsconfig.lib.json | 23 +++ .../ng-select/tsconfig.lib.prod.json | 6 + .../poweredsoft/ng-select/tsconfig.spec.json | 17 +++ projects/poweredsoft/ng-select/tslint.json | 17 +++ .../ng-select/ng-select.component.html | 17 --- src/app/app.module.ts | 2 + .../ng-select-demo/ng-select-demo.module.ts | 5 +- .../ng-select-demo.component.html | 16 +- tsconfig.json | 4 + 25 files changed, 450 insertions(+), 26 deletions(-) create mode 100644 projects/poweredsoft/ng-select/README.md create mode 100644 projects/poweredsoft/ng-select/karma.conf.js create mode 100644 projects/poweredsoft/ng-select/ng-package.json create mode 100644 projects/poweredsoft/ng-select/package.json create mode 100644 projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html create mode 100644 projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.scss create mode 100644 projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts create mode 100644 projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.html create mode 100644 projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.scss create mode 100644 projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.ts create mode 100644 projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ps-ng-selectors.module.ts create mode 100644 projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.spec.ts create mode 100644 projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.ts create mode 100644 projects/poweredsoft/ng-select/src/public-api.ts create mode 100644 projects/poweredsoft/ng-select/src/test.ts create mode 100644 projects/poweredsoft/ng-select/tsconfig.lib.json create mode 100644 projects/poweredsoft/ng-select/tsconfig.lib.prod.json create mode 100644 projects/poweredsoft/ng-select/tsconfig.spec.json create mode 100644 projects/poweredsoft/ng-select/tslint.json diff --git a/angular.json b/angular.json index fad436f..c83e8ec 100644 --- a/angular.json +++ b/angular.json @@ -204,6 +204,46 @@ } } } + }, + "@poweredsoft/ng-select": { + "projectType": "library", + "root": "projects/poweredsoft/ng-select", + "sourceRoot": "projects/poweredsoft/ng-select/src", + "prefix": "ps-ng", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "projects/poweredsoft/ng-select/tsconfig.lib.json", + "project": "projects/poweredsoft/ng-select/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/poweredsoft/ng-select/tsconfig.lib.prod.json" + } + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "projects/poweredsoft/ng-select/src/test.ts", + "tsConfig": "projects/poweredsoft/ng-select/tsconfig.spec.json", + "karmaConfig": "projects/poweredsoft/ng-select/karma.conf.js" + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "projects/poweredsoft/ng-select/tsconfig.lib.json", + "projects/poweredsoft/ng-select/tsconfig.spec.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + } }}, "defaultProject": "ngx-cdk-ui" } diff --git a/projects/poweredsoft/ng-select/README.md b/projects/poweredsoft/ng-select/README.md new file mode 100644 index 0000000..26c0003 --- /dev/null +++ b/projects/poweredsoft/ng-select/README.md @@ -0,0 +1,24 @@ +# NgSelect + +This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.9. + +## Code scaffolding + +Run `ng generate component component-name --project ng-select` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ng-select`. +> Note: Don't forget to add `--project ng-select` or else it will be added to the default project in your `angular.json` file. + +## Build + +Run `ng build ng-select` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Publishing + +After building your library with `ng build ng-select`, go to the dist folder `cd dist/ng-select` and run `npm publish`. + +## Running unit tests + +Run `ng test ng-select` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). diff --git a/projects/poweredsoft/ng-select/karma.conf.js b/projects/poweredsoft/ng-select/karma.conf.js new file mode 100644 index 0000000..1b4e689 --- /dev/null +++ b/projects/poweredsoft/ng-select/karma.conf.js @@ -0,0 +1,32 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, '../../../coverage/poweredsoft/ng-select'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/projects/poweredsoft/ng-select/ng-package.json b/projects/poweredsoft/ng-select/ng-package.json new file mode 100644 index 0000000..70f4cbd --- /dev/null +++ b/projects/poweredsoft/ng-select/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/poweredsoft/ng-select", + "lib": { + "entryFile": "src/public-api.ts" + } +} \ No newline at end of file diff --git a/projects/poweredsoft/ng-select/package.json b/projects/poweredsoft/ng-select/package.json new file mode 100644 index 0000000..e724836 --- /dev/null +++ b/projects/poweredsoft/ng-select/package.json @@ -0,0 +1,11 @@ +{ + "name": "@poweredsoft/ng-select", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^9.1.9", + "@angular/core": "^9.1.9" + }, + "dependencies": { + "tslib": "^1.10.0" + } +} \ No newline at end of file diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html new file mode 100644 index 0000000..a83ce66 --- /dev/null +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html @@ -0,0 +1 @@ +

multi-select works!

diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.scss b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts new file mode 100644 index 0000000..7da49d0 --- /dev/null +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'ps-ng-multi-select', + templateUrl: './multi-select.component.html', + styleUrls: ['./multi-select.component.scss'] +}) +export class MultiSelectComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.html b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.html new file mode 100644 index 0000000..feb5be1 --- /dev/null +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.html @@ -0,0 +1,17 @@ + + + + + + + diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.scss b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.ts new file mode 100644 index 0000000..d93d4a7 --- /dev/null +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.ts @@ -0,0 +1,143 @@ +import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef } from '@angular/core'; +import { SelectLabelTemplateDirective } from '../select-label-template.directive'; +import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; +import { Observable, Subject, Subscription } from 'rxjs'; +import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators'; +import { NgSelectComponent as SelectComponent } from '@ng-select/ng-select'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; + +@Component({ + selector: 'ps-ng-select', + templateUrl: './ng-select.component.html', + providers: [{ + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => NgSelectComponent), + multi: true +}], + styleUrls: ['./ng-select.component.scss'] +}) +export class NgSelectComponent implements OnInit { + + @ContentChild(SelectLabelTemplateDirective) LabelTemplate: SelectLabelTemplateDirective; + @ViewChild(SelectComponent, { static: true }) selectComponent: SelectComponent; + @Input() dataSource: IDataSource; + @Input() searchPath: string; + @Input() searchType: string; + @Input() sortingPath: string; + @Input() serverFiltering:boolean; + @Input() bindLabel:string; + @Input() bindValue: string; + + @Output('change') changeEvent = new EventEmitter(); + + trackFn: (item: any) => any; + data$ : Observable; + isLoading:boolean = false; + searchInput$ = new Subject(); + + private _loadingSubscription: Subscription; + + constructor(private cdr: ChangeDetectorRef) { + this.trackFn = this.trackBy.bind(this); + + } + + valueChanged(event) { + this.changeEvent.emit(event); + } + + writeValue(obj: any): void { + this.selectComponent.writeValue(obj); + } + registerOnChange(fn: any): void { + this.selectComponent.registerOnChange(fn); + } + registerOnTouched(fn: any): void { + this.selectComponent.registerOnTouched(fn); + } + setDisabledState?(isDisabled: boolean): void { + if (this.selectComponent.setDisabledState) + this.selectComponent.setDisabledState(isDisabled); + } + + trackBy(item: any) { + return this.dataSource.resolveIdField(item); + } + + ngOnDestroy(): void { + this._loadingSubscription.unsubscribe(); + } + + ngOnInit(): void { + this.dataFetching(); + this.detectLoading(); + + console.log(this.serverFiltering); + + if(this.serverFiltering){ + this.searchOnServer(); + }else{ + this.refreshDataSource(); + } + } + + dataFetching(){ + this.data$ = this.dataSource.data$.pipe( + map(t => { + if (t == null) + return []; + return t.data; + }) + ); + } + + detectLoading(){ + this._loadingSubscription = this.dataSource.loading$.subscribe(loading => { + this.isLoading = loading; + this.cdr.detectChanges(); + }); + } + + searchOnServer(){ + this.searchInput$.pipe( + distinctUntilChanged(), // emit the difference from previous input + debounceTime(500) // this is for delaying searching speed + ).subscribe(searchTerm => this.refreshDataSource(searchTerm, 1, 100)); // page: 1, pageSize: 50 + + this.refreshDataSource(); //send the query to server to sorting & filtering by default + } + + get selectedModel() { + return this.selectComponent.hasValue ? this.selectComponent.selectedItems[0].value : null; + } + + refreshDataSource(searchTerm:any = null, page:number = null, pageSize:number = null){ + let searchfilters:ISimpleFilter[] = null; + if(searchTerm){ + searchfilters = [{ + path: this.searchPath || this.bindLabel, + type: this.searchType || 'Contains', // Default: Contains + value: searchTerm + }] + } + this.dataSource.query({ + page: page, + pageSize: pageSize, + filters:searchfilters, + sorts:[ + {path: this.sortingPath || this.bindLabel, ascending: true} + ] + }) + } + + get hasOptionTemplate() { + return this.LabelTemplate ? true : false; + } + + get selectOptionTemplate(){ + if (this.LabelTemplate) + return this.LabelTemplate.template; + return null; + } + +} diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ps-ng-selectors.module.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ps-ng-selectors.module.ts new file mode 100644 index 0000000..df8f1fa --- /dev/null +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ps-ng-selectors.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { NgSelectComponent } from './ng-select/ng-select.component'; +import { MultiSelectComponent } from './multi-select/multi-select.component'; +import { FormsModule } from '@angular/forms'; +import { NgSelectModule } from '@ng-select/ng-select'; +import { SelectLabelTemplateDirective } from './select-label-template.directive'; + + + +@NgModule({ + declarations: [NgSelectComponent, MultiSelectComponent, SelectLabelTemplateDirective], + imports: [ + CommonModule, + FormsModule, + NgSelectModule, + ], + exports:[ + NgSelectComponent, + MultiSelectComponent, + SelectLabelTemplateDirective + ] +}) +export class PsNgSelectorsModule { } diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.spec.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.spec.ts new file mode 100644 index 0000000..d6da15f --- /dev/null +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.spec.ts @@ -0,0 +1,8 @@ +import { SelectLabelTemplateDirective } from './select-label-template.directive'; + +describe('SelectLabelTemplateDirective', () => { + it('should create an instance', () => { + const directive = new SelectLabelTemplateDirective(); + expect(directive).toBeTruthy(); + }); +}); diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.ts new file mode 100644 index 0000000..1c0af77 --- /dev/null +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.ts @@ -0,0 +1,10 @@ +import { Directive, TemplateRef } from '@angular/core'; + +@Directive({ + selector: '[psNgSelectLabel]' +}) +export class SelectLabelTemplateDirective { + + constructor(public template: TemplateRef) { } + +} diff --git a/projects/poweredsoft/ng-select/src/public-api.ts b/projects/poweredsoft/ng-select/src/public-api.ts new file mode 100644 index 0000000..262f25f --- /dev/null +++ b/projects/poweredsoft/ng-select/src/public-api.ts @@ -0,0 +1,11 @@ +/* + * Public API Surface of ng-select + */ + +export * from './lib/ps-ng-selectors/ps-ng-selectors.module'; +export * from './lib/ps-ng-selectors/ng-select/ng-select.component'; +export * from './lib/ps-ng-selectors/multi-select/multi-select.component'; +export * from './lib/ps-ng-selectors/select-label-template.directive'; + + + diff --git a/projects/poweredsoft/ng-select/src/test.ts b/projects/poweredsoft/ng-select/src/test.ts new file mode 100644 index 0000000..303b32a --- /dev/null +++ b/projects/poweredsoft/ng-select/src/test.ts @@ -0,0 +1,26 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone'; +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + keys(): string[]; + (id: string): T; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/projects/poweredsoft/ng-select/tsconfig.lib.json b/projects/poweredsoft/ng-select/tsconfig.lib.json new file mode 100644 index 0000000..38a679b --- /dev/null +++ b/projects/poweredsoft/ng-select/tsconfig.lib.json @@ -0,0 +1,23 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../../../out-tsc/lib", + "target": "es2015", + "declaration": true, + "inlineSources": true, + "types": [], + "lib": [ + "dom", + "es2018" + ] + }, + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableResourceInlining": true + }, + "exclude": [ + "src/test.ts", + "**/*.spec.ts" + ] +} diff --git a/projects/poweredsoft/ng-select/tsconfig.lib.prod.json b/projects/poweredsoft/ng-select/tsconfig.lib.prod.json new file mode 100644 index 0000000..cbae794 --- /dev/null +++ b/projects/poweredsoft/ng-select/tsconfig.lib.prod.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.lib.json", + "angularCompilerOptions": { + "enableIvy": false + } +} diff --git a/projects/poweredsoft/ng-select/tsconfig.spec.json b/projects/poweredsoft/ng-select/tsconfig.spec.json new file mode 100644 index 0000000..4acf941 --- /dev/null +++ b/projects/poweredsoft/ng-select/tsconfig.spec.json @@ -0,0 +1,17 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "../../../out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "src/test.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/projects/poweredsoft/ng-select/tslint.json b/projects/poweredsoft/ng-select/tslint.json new file mode 100644 index 0000000..3aa2f4c --- /dev/null +++ b/projects/poweredsoft/ng-select/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": "../../../tslint.json", + "rules": { + "directive-selector": [ + true, + "attribute", + "lib", + "camelCase" + ], + "component-selector": [ + true, + "element", + "lib", + "kebab-case" + ] + } +} diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html index feb5be1..e69de29 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html @@ -1,17 +0,0 @@ - - - - - - - diff --git a/src/app/app.module.ts b/src/app/app.module.ts index d4f35bf..8db6dce 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -12,6 +12,7 @@ import { InMemoryCache } from 'apollo-cache-inmemory'; import { HttpClientModule } from '@angular/common/http'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + export function app_Init(apollo: Apollo, httpLink: HttpLink) { return async () => { const defaultOptions: DefaultOptions = { @@ -50,6 +51,7 @@ export function app_Init(apollo: Apollo, httpLink: HttpLink) { declarations: [ AppComponent, HomeComponent, + //SelectLabelTemplateDirective, ], imports: [ diff --git a/src/app/ng-select-demo/ng-select-demo.module.ts b/src/app/ng-select-demo/ng-select-demo.module.ts index ffa7b5e..0bd078e 100644 --- a/src/app/ng-select-demo/ng-select-demo.module.ts +++ b/src/app/ng-select-demo/ng-select-demo.module.ts @@ -4,7 +4,8 @@ import { NgSelectDemoComponent } from './ng-select-demo/ng-select-demo.component import { NgSelectDemoRoutingModule } from './ng-select-demo-routing.module'; import { NgSelectModule } from '@ng-select/ng-select'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { PsSelectorsModule } from '@poweredsoft/ngx-cdk-ui'; +import { PsNgSelectorsModule } from '@poweredsoft/ng-select'; + @@ -16,7 +17,7 @@ import { PsSelectorsModule } from '@poweredsoft/ngx-cdk-ui'; FormsModule, ReactiveFormsModule, NgSelectDemoRoutingModule, - PsSelectorsModule //our ng select module + PsNgSelectorsModule ] }) export class NgSelectDemoModule { } diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html index 9cf5f05..1c1b924 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html @@ -1,25 +1,27 @@

Single Select Demo

-
+
{{ item.name }} - {{ item.address }}
-

Multi-Select Demo

- + + + \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 8259035..ba18609 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,6 +23,10 @@ "@poweredsoft/ngx-bootstrap": [ "dist/poweredsoft/ngx-bootstrap/poweredsoft-ngx-bootstrap", "dist/poweredsoft/ngx-bootstrap" + ], + "@poweredsoft/ng-select": [ + "dist/poweredsoft/ng-select/poweredsoft-ng-select", + "dist/poweredsoft/ng-select" ] } }, From 0f031101c9da8a2aa38273fb72c95b7e67a1d385 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Mon, 6 Jul 2020 14:12:00 -0500 Subject: [PATCH 15/25] multi-select --- .../multi-select/multi-select.component.html | 30 +++- .../multi-select/multi-select.component.ts | 147 +++++++++++++++++- .../ng-select/ng-select.component.html | 10 ++ .../ng-select/ng-select.component.ts | 26 +++- .../ps-ng-selectors/ps-ng-selectors.module.ts | 6 +- .../select-label-template.directive.spec.ts | 8 - .../select-option-template.directive.ts | 2 +- .../poweredsoft/ng-select/src/public-api.ts | 1 + .../lib/ps-selectors/ps-selectors.module.ts | 6 +- .../poweredsoft/ngx-cdk-ui/src/public-api.ts | 1 - .../ng-select-demo.component.html | 45 +++--- src/assets/avatar.png | Bin 0 -> 194 bytes 12 files changed, 233 insertions(+), 49 deletions(-) delete mode 100644 projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.spec.ts rename projects/poweredsoft/{ngx-cdk-ui/src/lib/ps-selectors => ng-select/src/lib/ps-ng-selectors}/select-option-template.directive.ts (81%) create mode 100644 src/assets/avatar.png diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html index a83ce66..39f985b 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html @@ -1 +1,29 @@ -

multi-select works!

+ + + + + + + + + + + + + diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts index 7da49d0..dd82022 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts @@ -1,15 +1,158 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef } from '@angular/core'; +import { SelectLabelTemplateDirective } from '../select-label-template.directive'; +import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; +import { Observable, Subject, Subscription } from 'rxjs'; +import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators'; +import { NgSelectComponent as SelectComponent } from '@ng-select/ng-select'; +import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { SelectOptionTemplateDirective } from '../select-option-template.directive'; @Component({ selector: 'ps-ng-multi-select', templateUrl: './multi-select.component.html', + providers: [{ + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => MultiSelectComponent), + multi: true +}], styleUrls: ['./multi-select.component.scss'] }) export class MultiSelectComponent implements OnInit { - constructor() { } + + @ContentChild(SelectOptionTemplateDirective) optionTemplate: SelectOptionTemplateDirective; + @ContentChild(SelectLabelTemplateDirective) labelTemplate: SelectLabelTemplateDirective; + + @ViewChild(SelectComponent, { static: true }) selectComponent: SelectComponent; + @Input() dataSource: IDataSource; + @Input() searchPath: string; + @Input() searchType: string; + @Input() sortingPath: string; + @Input() serverFiltering:boolean; + @Input() bindLabel:string; + @Input() bindValue: string; + + @Output('change') changeEvent = new EventEmitter(); + + trackFn: (item: any) => any; + data$ : Observable; + isLoading:boolean = false; + searchInput$ = new Subject(); + + private _loadingSubscription: Subscription; + + constructor(private cdr: ChangeDetectorRef) { + this.trackFn = this.trackBy.bind(this); + + } + + trackBy(item: any) { + return this.dataSource.resolveIdField(item); + } + + valueChanged(event) { + this.changeEvent.emit(event); + } + + writeValue(obj: any): void { + this.selectComponent.writeValue(obj); + } + registerOnChange(fn: any): void { + this.selectComponent.registerOnChange(fn); + } + registerOnTouched(fn: any): void { + this.selectComponent.registerOnTouched(fn); + } + setDisabledState?(isDisabled: boolean): void { + if (this.selectComponent.setDisabledState) + this.selectComponent.setDisabledState(isDisabled); + } + ngOnDestroy(): void { + this._loadingSubscription.unsubscribe(); + } ngOnInit(): void { + this.dataFetching(); + this.detectLoading(); + + console.log(this.serverFiltering); + + if(this.serverFiltering){ + this.searchOnServer(); + }else{ + this.refreshDataSource(); + } + } + + dataFetching(){ + this.data$ = this.dataSource.data$.pipe( + map(t => { + if (t == null) + return []; + return t.data; + }) + ); + } + + detectLoading(){ + this._loadingSubscription = this.dataSource.loading$.subscribe(loading => { + this.isLoading = loading; + this.cdr.detectChanges(); + }); + } + + searchOnServer(){ + this.searchInput$.pipe( + distinctUntilChanged(), // emit the difference from previous input + debounceTime(500) // this is for delaying searching speed + ).subscribe(searchTerm => this.refreshDataSource(searchTerm, 1, 100)); // page: 1, pageSize: 50 + + this.refreshDataSource(); //send the query to server to sorting & filtering by default + } + + get selectedModel() { + + return this.selectComponent.selectedItems.map(t => t.value); + //return this.selectComponent.hasValue ? this.selectComponent.selectedItems[0].value : null; + } + + refreshDataSource(searchTerm:any = null, page:number = null, pageSize:number = null){ + let searchfilters:ISimpleFilter[] = null; + if(searchTerm){ + searchfilters = [{ + path: this.searchPath || this.bindLabel, + type: this.searchType || 'Contains', // Default: Contains + value: searchTerm + }] + } + this.dataSource.query({ + page: page, + pageSize: pageSize, + filters:searchfilters, + sorts:[ + {path: this.sortingPath || this.bindLabel, ascending: true} + ] + }) + } + + get hasOptionTemplate() { + return this.optionTemplate ? true : false; + } + + get selectOptionTemplate(){ + if (this.optionTemplate) + return this.optionTemplate.template; + return null; + } + + get hasLabelTemplate() { + return this.labelTemplate ? true : false; + } + + get selectLabelTemplate(){ + if (this.labelTemplate) + return this.labelTemplate.template; + return null; } } diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.html b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.html index feb5be1..c065dd5 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.html +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.html @@ -14,4 +14,14 @@ }"> + + + + + + diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.ts index d93d4a7..f0980bc 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.ts @@ -5,6 +5,8 @@ import { Observable, Subject, Subscription } from 'rxjs'; import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators'; import { NgSelectComponent as SelectComponent } from '@ng-select/ng-select'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; +import { SelectOptionTemplateDirective } from '../select-option-template.directive'; + @Component({ selector: 'ps-ng-select', @@ -18,7 +20,10 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms'; }) export class NgSelectComponent implements OnInit { - @ContentChild(SelectLabelTemplateDirective) LabelTemplate: SelectLabelTemplateDirective; + @ContentChild(SelectOptionTemplateDirective) optionTemplate: SelectOptionTemplateDirective; + @ContentChild(SelectLabelTemplateDirective) labelTemplate: SelectLabelTemplateDirective; + + @ViewChild(SelectComponent, { static: true }) selectComponent: SelectComponent; @Input() dataSource: IDataSource; @Input() searchPath: string; @@ -107,8 +112,8 @@ export class NgSelectComponent implements OnInit { this.refreshDataSource(); //send the query to server to sorting & filtering by default } - get selectedModel() { - return this.selectComponent.hasValue ? this.selectComponent.selectedItems[0].value : null; + get selectedModel() { + return this.selectComponent.hasValue ? this.selectComponent.selectedItems[0] : null; } refreshDataSource(searchTerm:any = null, page:number = null, pageSize:number = null){ @@ -131,13 +136,22 @@ export class NgSelectComponent implements OnInit { } get hasOptionTemplate() { - return this.LabelTemplate ? true : false; + return this.optionTemplate ? true : false; } get selectOptionTemplate(){ - if (this.LabelTemplate) - return this.LabelTemplate.template; + if (this.optionTemplate) + return this.optionTemplate.template; return null; } + get hasLabelTemplate() { + return this.labelTemplate ? true : false; + } + + get selectLabelTemplate(){ + if (this.labelTemplate) + return this.labelTemplate.template; + return null; + } } diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ps-ng-selectors.module.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ps-ng-selectors.module.ts index df8f1fa..57a5fb2 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ps-ng-selectors.module.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ps-ng-selectors.module.ts @@ -5,11 +5,12 @@ import { MultiSelectComponent } from './multi-select/multi-select.component'; import { FormsModule } from '@angular/forms'; import { NgSelectModule } from '@ng-select/ng-select'; import { SelectLabelTemplateDirective } from './select-label-template.directive'; +import { SelectOptionTemplateDirective } from './select-option-template.directive'; @NgModule({ - declarations: [NgSelectComponent, MultiSelectComponent, SelectLabelTemplateDirective], + declarations: [NgSelectComponent, MultiSelectComponent, SelectLabelTemplateDirective, SelectOptionTemplateDirective], imports: [ CommonModule, FormsModule, @@ -18,7 +19,8 @@ import { SelectLabelTemplateDirective } from './select-label-template.directive' exports:[ NgSelectComponent, MultiSelectComponent, - SelectLabelTemplateDirective + SelectLabelTemplateDirective, + SelectOptionTemplateDirective ] }) export class PsNgSelectorsModule { } diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.spec.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.spec.ts deleted file mode 100644 index d6da15f..0000000 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { SelectLabelTemplateDirective } from './select-label-template.directive'; - -describe('SelectLabelTemplateDirective', () => { - it('should create an instance', () => { - const directive = new SelectLabelTemplateDirective(); - expect(directive).toBeTruthy(); - }); -}); diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/select-option-template.directive.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-option-template.directive.ts similarity index 81% rename from projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/select-option-template.directive.ts rename to projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-option-template.directive.ts index ef1381d..1b79579 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/select-option-template.directive.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-option-template.directive.ts @@ -1,7 +1,7 @@ import { Directive, TemplateRef } from '@angular/core'; @Directive({ - selector: '[psSelectOptionTemplate]' + selector: '[psNgSelectOption]' }) export class SelectOptionTemplateDirective { diff --git a/projects/poweredsoft/ng-select/src/public-api.ts b/projects/poweredsoft/ng-select/src/public-api.ts index 262f25f..08def64 100644 --- a/projects/poweredsoft/ng-select/src/public-api.ts +++ b/projects/poweredsoft/ng-select/src/public-api.ts @@ -6,6 +6,7 @@ export * from './lib/ps-ng-selectors/ps-ng-selectors.module'; export * from './lib/ps-ng-selectors/ng-select/ng-select.component'; export * from './lib/ps-ng-selectors/multi-select/multi-select.component'; export * from './lib/ps-ng-selectors/select-label-template.directive'; +export * from './lib/ps-ng-selectors/select-option-template.directive' diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts index e399722..20f089f 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts @@ -4,17 +4,17 @@ import { NgSelectComponent } from './ng-select/ng-select.component'; import { NgMultiSelectComponent } from './ng-multi-select/ng-multi-select.component'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { NgSelectModule } from '@ng-select/ng-select'; -import { SelectOptionTemplateDirective } from './select-option-template.directive'; + @NgModule({ - declarations: [NgSelectComponent, NgMultiSelectComponent, SelectOptionTemplateDirective], + declarations: [NgSelectComponent, NgMultiSelectComponent ], imports: [ CommonModule, FormsModule, NgSelectModule, ], - exports:[NgSelectComponent,NgMultiSelectComponent,SelectOptionTemplateDirective] + exports:[NgSelectComponent,NgMultiSelectComponent] }) export class PsSelectorsModule { } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts index 04015df..0ebdcc6 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts @@ -17,4 +17,3 @@ export * from './lib/data-grid/directives/data-grid-col-sort.directive'; export * from './lib/ps-selectors/ps-selectors.module'; export * from './lib/ps-selectors/ng-select/ng-select.component'; export * from './lib/ps-selectors/ng-multi-select/ng-multi-select.component'; -export * from './lib/ps-selectors/select-option-template.directive'; \ No newline at end of file diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html index 1c1b924..6e5086a 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html @@ -1,39 +1,34 @@ -

Single Select Demo

- -
- {{ item.name }} - {{ item.address }} +

Single Select Demo | ngModel | option template

+ +
+ + {{item | json}}
+selected: {{ myValue | json }} - - - - - - \ No newline at end of file +

Multi-Select Demo

+ + + +selected: {{ myValue | json }} + diff --git a/src/assets/avatar.png b/src/assets/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..796e320412d2ad2721b0dc4dc065021b45e25de4 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1SGcvS$+jloCO|{#S9F5M?jcysy3fAP_V?) z#WBRAGg+rJJ?Q{r)V?_l23Zw49n+hb=R6DI%g8X{p5xjh|B=Dxt+TO%M5m`>#eogp zia(fG_zaxeW`vlSFsEF}Flq2mJdz@ibU;AgIpV_!!O8j`SRM!P3+(uQ(pziBLUW*^ lEdj2~F034t2^nl03@$Rtg^Rg8ZUXIR@O1TaS?83{1OVYAIq?7h literal 0 HcmV?d00001 From 3806e44945184834382bb28880b345b69ca2e087 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Mon, 6 Jul 2020 15:41:58 -0500 Subject: [PATCH 16/25] demo checking --- .../multi-select/multi-select.component.ts | 2 - .../form-group-command-modal.component.ts | 4 +- .../ng-multi-select.component.html | 21 --- .../ng-multi-select.component.scss | 0 .../ng-multi-select.component.spec.ts | 25 --- .../ng-multi-select.component.ts | 97 ------------ .../ng-select/ng-select.component.html | 0 .../ng-select/ng-select.component.scss | 0 .../ng-select/ng-select.component.spec.ts | 25 --- .../ng-select/ng-select.component.ts | 143 ------------------ .../lib/ps-selectors/ps-selectors.module.ts | 20 --- .../poweredsoft/ngx-cdk-ui/src/public-api.ts | 4 - .../command-modal-demo.component.html | 2 +- .../data-grid-demo-home.component.html | 8 +- .../ng-select-demo.component.html | 11 +- .../ng-select-demo.component.ts | 11 +- src/assets/32x32-blue.png | Bin 0 -> 1344 bytes 17 files changed, 23 insertions(+), 350 deletions(-) delete mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html delete mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.scss delete mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.spec.ts delete mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts delete mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html delete mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.scss delete mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.spec.ts delete mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts delete mode 100644 projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts create mode 100644 src/assets/32x32-blue.png diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts index dd82022..33734e9 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts @@ -111,9 +111,7 @@ export class MultiSelectComponent implements OnInit { } get selectedModel() { - return this.selectComponent.selectedItems.map(t => t.value); - //return this.selectComponent.hasValue ? this.selectComponent.selectedItems[0].value : null; } refreshDataSource(searchTerm:any = null, page:number = null, pageSize:number = null){ diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.ts index fd1766f..b08ce0c 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.ts @@ -37,9 +37,9 @@ export class FormGroupCommandModalComponent implements OnInit { ngOnInit(): void { this.errorMessage = null; - // this._notifyMessage = this.dataSource.notifyMessage$.subscribe(message => { + this._notifyMessage = this.dataSource.notifyMessage$.subscribe(message => { - // }); + }); this._validationError = this.dataSource.validationError$.subscribe(validatorErrors => { let validationSummary = ''; diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html deleted file mode 100644 index 44df12c..0000000 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.html +++ /dev/null @@ -1,21 +0,0 @@ -

Select multiple elements

- - - - -
- Selected value:
-
    -
  • {{item.name}}
  • -
- - -
diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.scss b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.scss deleted file mode 100644 index e69de29..0000000 diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.spec.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.spec.ts deleted file mode 100644 index dd1f6e1..0000000 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { NgMultiSelectComponent } from './ng-multi-select.component'; - -describe('NgMultiSelectComponent', () => { - let component: NgMultiSelectComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ NgMultiSelectComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(NgMultiSelectComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts deleted file mode 100644 index f56cf51..0000000 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-multi-select/ng-multi-select.component.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { Component, OnInit, Input, ChangeDetectorRef, OnDestroy } from '@angular/core'; -import { Observable, Subscription, Subject } from 'rxjs'; -import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; -import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators'; - -@Component({ - selector: 'ps-ng-multi-select', - templateUrl: './ng-multi-select.component.html', - styleUrls: ['./ng-multi-select.component.scss'] -}) -export class NgMultiSelectComponent implements OnInit, OnDestroy { - - @Input() dataSource: IDataSource; - @Input() searchPath: string; - @Input() searchType: string = "Contains"; - @Input() sortingPath: string; - @Input() disableServer:boolean = false; - @Input() bindLabel:string; - - data$ : Observable; - selectedId:any[]; - isLoading:boolean = false; - searchInput$ = new Subject(); - private _dataSubscription: Subscription; - - constructor(private cdr: ChangeDetectorRef) { - } - - ngOnDestroy(): void { - this._dataSubscription.unsubscribe(); - } - - ngOnInit() { - this.dataFetching(); - this.detectLoading(); - if(!this.disableServer){ - this.searchOnServer(); - }else{ - this.refreshDataSource(); - } - - } - - dataFetching(){ - this.data$ = this.dataSource.data$.pipe( - map(t => { - if (t == null) - return []; - return t.data; - }) - ); - this._dataSubscription = this.dataSource.data$.subscribe(); - } - - detectLoading(){ - this.dataSource.loading$.subscribe(loading => { - this.isLoading = loading; - this.cdr.detectChanges(); - }); - } - - searchOnServer(){ - this.searchInput$.pipe( - distinctUntilChanged(), // emit the difference from previous input - debounceTime(500) // this is for delaying searching speed - ).subscribe(searchTerm => this.refreshDataSource(searchTerm, 1, 50)); // page: 1, pageSize: 100 - - this.refreshDataSource(); //send the query to server to sorting & filtering by default - } - - refreshDataSource(searchTerm:any = null, page:number=null, pageSize:number=null){ - let searchfilters:ISimpleFilter[] = null; - if(searchTerm){ - searchfilters = [{ - path: this.searchPath, - type: this.searchType, // Default: Contains - value: searchTerm - }] - } - this.dataSource.query({ - page: page, - pageSize: pageSize, - filters:searchfilters, - sorts:[ - {path: this.sortingPath, ascending: true} - ] - }) - } - - clearModel() { - this.selectedId = []; -} - -changeModel() { - this.selectedId = [{ name: 'New person' }]; -} -} diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.html deleted file mode 100644 index e69de29..0000000 diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.scss b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.scss deleted file mode 100644 index e69de29..0000000 diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.spec.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.spec.ts deleted file mode 100644 index 9dc9b61..0000000 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { NgSelectComponent } from './ng-select.component'; - -describe('NgSelectComponent', () => { - let component: NgSelectComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ NgSelectComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(NgSelectComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts deleted file mode 100644 index 4cb4f62..0000000 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ng-select/ng-select.component.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { Component, OnInit, Input, ChangeDetectorRef, OnDestroy, ContentChild, QueryList, ContentChildren, ViewChild, forwardRef, EventEmitter, Output } from '@angular/core'; -import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; -import { Observable, Subject, Subscription } from 'rxjs'; -import { distinctUntilChanged, debounceTime, map } from 'rxjs/operators'; -import { SelectOptionTemplateDirective } from '../select-option-template.directive'; -import { NgSelectComponent as SelectComponent } from '@ng-select/ng-select'; -import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms'; - -@Component({ - selector: 'ps-ng-select', - templateUrl: './ng-select.component.html', - providers: [{ - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => NgSelectComponent), - multi: true -}], - styleUrls: ['./ng-select.component.scss'] -}) -export class NgSelectComponent implements OnInit, OnDestroy, ControlValueAccessor { - - @ContentChild(SelectOptionTemplateDirective) selectTemplate: SelectOptionTemplateDirective; - @ViewChild(SelectComponent, { static: true }) selectComponent: SelectComponent; - @Input() dataSource: IDataSource; - @Input() searchPath: string; - @Input() searchType: string; - @Input() sortingPath: string; - @Input() serverFiltering:boolean; - @Input() bindLabel:string; - @Input() bindValue: string; - - @Output('change') changeEvent = new EventEmitter(); - - trackFn: (item: any) => any; - data$ : Observable; - isLoading:boolean = false; - searchInput$ = new Subject(); - - private _loadingSubscription: Subscription; - - constructor(private cdr: ChangeDetectorRef) { - this.trackFn = this.trackBy.bind(this); - - } - - valueChanged(event) { - this.changeEvent.emit(event); - } - - writeValue(obj: any): void { - this.selectComponent.writeValue(obj); - } - registerOnChange(fn: any): void { - this.selectComponent.registerOnChange(fn); - } - registerOnTouched(fn: any): void { - this.selectComponent.registerOnTouched(fn); - } - setDisabledState?(isDisabled: boolean): void { - if (this.selectComponent.setDisabledState) - this.selectComponent.setDisabledState(isDisabled); - } - - trackBy(item: any) { - return this.dataSource.resolveIdField(item); - } - - ngOnDestroy(): void { - this._loadingSubscription.unsubscribe(); - } - - ngOnInit(): void { - this.dataFetching(); - this.detectLoading(); - - console.log(this.serverFiltering); - - if(this.serverFiltering){ - this.searchOnServer(); - }else{ - this.refreshDataSource(); - } - } - - dataFetching(){ - this.data$ = this.dataSource.data$.pipe( - map(t => { - if (t == null) - return []; - return t.data; - }) - ); - } - - detectLoading(){ - this._loadingSubscription = this.dataSource.loading$.subscribe(loading => { - this.isLoading = loading; - this.cdr.detectChanges(); - }); - } - - searchOnServer(){ - this.searchInput$.pipe( - distinctUntilChanged(), // emit the difference from previous input - debounceTime(500) // this is for delaying searching speed - ).subscribe(searchTerm => this.refreshDataSource(searchTerm, 1, 100)); // page: 1, pageSize: 50 - - this.refreshDataSource(); //send the query to server to sorting & filtering by default - } - - get selectedModel() { - return this.selectComponent.hasValue ? this.selectComponent.selectedItems[0].value : null; - } - - refreshDataSource(searchTerm:any = null, page:number = null, pageSize:number = null){ - let searchfilters:ISimpleFilter[] = null; - if(searchTerm){ - searchfilters = [{ - path: this.searchPath || this.bindLabel, - type: this.searchType || 'Contains', // Default: Contains - value: searchTerm - }] - } - this.dataSource.query({ - page: page, - pageSize: pageSize, - filters:searchfilters, - sorts:[ - {path: this.sortingPath || this.bindLabel, ascending: true} - ] - }) - } - - get hasOptionTemplate() { - return this.selectTemplate ? true : false; - } - - get selectOptionTemplate(){ - if (this.selectTemplate) - return this.selectTemplate.template; - return null; - } - -} diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts b/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts deleted file mode 100644 index 20f089f..0000000 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/ps-selectors/ps-selectors.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { NgSelectComponent } from './ng-select/ng-select.component'; -import { NgMultiSelectComponent } from './ng-multi-select/ng-multi-select.component'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { NgSelectModule } from '@ng-select/ng-select'; - - - - -@NgModule({ - declarations: [NgSelectComponent, NgMultiSelectComponent ], - imports: [ - CommonModule, - FormsModule, - NgSelectModule, - ], - exports:[NgSelectComponent,NgMultiSelectComponent] -}) -export class PsSelectorsModule { } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts index 0ebdcc6..fc3e30d 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts +++ b/projects/poweredsoft/ngx-cdk-ui/src/public-api.ts @@ -13,7 +13,3 @@ export * from './lib/data-grid/directives/data-grid-loader.directive'; export * from './lib/data-grid/directives/data-grid-cell-filter.directive'; export * from './lib/data-grid/directives/data-grid-col-sort.directive'; -//ng selects -export * from './lib/ps-selectors/ps-selectors.module'; -export * from './lib/ps-selectors/ng-select/ng-select.component'; -export * from './lib/ps-selectors/ng-multi-select/ng-multi-select.component'; diff --git a/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.html b/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.html index d3bfc3e..b7b4d0f 100644 --- a/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.html +++ b/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.html @@ -46,7 +46,7 @@ -
+ Name Address diff --git a/src/app/data-grid-demo/data-grid-demo-home/data-grid-demo-home.component.html b/src/app/data-grid-demo/data-grid-demo-home/data-grid-demo-home.component.html index c63e8a7..469e013 100644 --- a/src/app/data-grid-demo/data-grid-demo-home/data-grid-demo-home.component.html +++ b/src/app/data-grid-demo/data-grid-demo-home/data-grid-demo-home.component.html @@ -4,12 +4,15 @@ - + + + Some header
ID
@@ -27,11 +30,10 @@ Actions - + - Footer works!
\ No newline at end of file diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html index 6e5086a..502d3c0 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html @@ -1,8 +1,7 @@

Single Select Demo | ngModel | option template

- - {{item | json}} + {{ item.name }} - {{ item.address }}
@@ -10,7 +9,7 @@ selected: {{ myValue | json }}

Single Select With Form | formGroup | option template

- +
{{ item.name }} - {{ item.address }}
@@ -20,14 +19,14 @@ selected: {{ myValue | json }} selected: {{ myForm.value | json }}

Single Select Demo | label Template

- +
- Name: {{ item.name }} - Address: {{item.address }} + Name: {{ item.name }} - Address: {{item.address }}

Multi-Select Demo

- + selected: {{ myValue | json }} diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts index 5ad4d3b..b0f6eaa 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts @@ -14,15 +14,24 @@ import { FormBuilder, FormGroup } from '@angular/forms'; }) export class NgSelectDemoComponent implements OnInit { - merchantDataSource: IDataSource; + merchantDataSource: IDataSource; + merchantDataSource2: IDataSource; + merchantDataSource3: IDataSource; + merchantDataSource4: IDataSource; selectedValue: IMerchant; + selectedValue2: IMerchant; + selectedValue3: IMerchant; + selectedValue4: IMerchant; myForm: FormGroup; myValue: string; constructor(private merchantService: MerchantService, private fb: FormBuilder ) { this.merchantDataSource = merchantService.createDataSource(); //Assign the dataSource + this.merchantDataSource2 = merchantService.createDataSource(); + this.merchantDataSource3 = merchantService.createDataSource(); + this.merchantDataSource4 = merchantService.createDataSource(); this.myForm = fb.group({ 'merchantId': [null, null] }) diff --git a/src/assets/32x32-blue.png b/src/assets/32x32-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..076fcfa36fb5a8703f6a360a3f3b17dcf0f33573 GIT binary patch literal 1344 zcmV-G1;6@k7RCwB~S50gbRUH4%?Ce)tx}Zgh zXt$^V6uWCQ5f7plsL{yBftZ?7|Hpfyan7mU2%pOx!ljc| zHd6R~ncvZzt~IIEA^_mExO|UaoK|OK@OuIzQg=@1bza!Nir`{I@cW?Fgi+^(hPHP$ z>-5|`21P^AAWVdlm$Hn;Zd#Nv`I6T(mMi7?^#=7n5TIuR+W#lp1WbTNGB$lUQ>3f6 zS;O`8<$%AxB}8986qMj2i=1A%Y15inlUlBuwCQ@0Uj4_SNj&e3_~`uhFzsF6Sl^Nz zIEe*&TXdSTIQ66%&6rGD&xJ_FDTC{1kooA7pJssD zBh=Wi7z%&5&!Aoq5XvX=jvGhT`sm8TLF&Rg88|c!A`%=Zt%Yp6CkOVm8`O$?dl!pk zVCBm}ojzUXlZt!(vM2@HNh#bJhV@9$#AZM3m}ZnROLOQg`P>Fi4(x#{F-CHXI1D%u z(P;q-zVJtpQU%=LnQ%qSjU)cAqzcrE@EqM>ICH`rkmHPb3qceyoGb_c5qF{v{5=Gq zj9CJ9z-5eqF@~5-++q%K=FAHs%=Sn?B-mBcSv;aSwLh9=&f>~m2@VhmhI`>e1TIKo z${|)K2^;2suv@smm0B^xMp3ES&2n{(lw?)TTOJ*_w8)^`QIgC%iyT1`l3h}LC%8s? z(V~+oXPgkg0o!94CQ;j6L5-roOd}M-X*3#?Ums%38LzTm0QPV4QwRS4lWS%bN#->P zPocev@!q|LT<{&VUE#!M9RccFXSj(-%84kzhftoUW{VEEOVVQwBvJogVRJbM#iR2+ zI)i4^Jzb#0mLLsm4oL8!zb!W@4ZdLak6ONo)^MJgm_?oY;NwwnO645cO>|%BmT!a>cehhTx-Ukj{05Db}RR zijX9*Rw5RbB+?+U>wHe;%E`x_GeBhn;>s27)q$ZoQ+Bn)W1(si7~eeEB%g_J>^ci4 z&;jFXe5x;0+OI<6jetdOA_*l4*c`)-C(5wr$H zNJMZddL4(BO3R%Pl<$eH!l85+NAAPZiUbmFPm53Xez|Rj^(xD`U9nTH#-Y?Dkw(|M z!f9|@h)$y%OXJv-ial4V#g#W+Z`lMS3AE<1vpG75<98>j;N$5ilJ{C;%FU&j?+ z$cNMc=&r+m@xnI!-?{d>^V!+{xf5?s)|&fIfB^s!+wWgt-5>S<0000 Date: Tue, 7 Jul 2020 12:08:36 -0500 Subject: [PATCH 17/25] some fix regarding multi-select --- .../multi-select/multi-select.component.html | 12 ++++----- .../select-label-template.directive.ts | 3 +-- .../data-grid/data-grid.component.scss | 3 ++- src/app/app.component.html | 2 +- .../grid-filter-demo.component.html | 25 +++++++++++-------- .../ng-select-demo.component.html | 10 ++++++-- .../ng-select-demo.component.ts | 7 +++--- 7 files changed, 36 insertions(+), 26 deletions(-) diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html index 39f985b..f907a74 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html @@ -18,12 +18,12 @@ - - + + + + + diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.ts index 1c0af77..55dc0a1 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.ts @@ -1,10 +1,9 @@ -import { Directive, TemplateRef } from '@angular/core'; +import { Directive, TemplateRef, Input } from '@angular/core'; @Directive({ selector: '[psNgSelectLabel]' }) export class SelectLabelTemplateDirective { - constructor(public template: TemplateRef) { } } diff --git a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss index 54bb095..f8c69f8 100644 --- a/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss +++ b/projects/poweredsoft/ngx-cdk-ui/src/lib/data-grid/data-grid/data-grid.component.scss @@ -1,9 +1,10 @@ :host .flex-container{ display: flex; justify-content: space-between; - align-items: baseline; + align-items: center; } :host .flex-item{ margin-right: 1px; + height: 100%; } \ No newline at end of file diff --git a/src/app/app.component.html b/src/app/app.component.html index 9e70e1b..9a6dc95 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -29,7 +29,7 @@
-
+
diff --git a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html index 041acd5..6abfc63 100644 --- a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html @@ -11,10 +11,10 @@ -
ID
+ ID -
{{model.id}}
+ {{model.id}} + + Some header diff --git a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html index 6abfc63..148fe65 100644 --- a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html @@ -13,27 +13,14 @@ ID - - {{model.id}} - - - - - + + {{model.id}} Name - + {{model.name}} @@ -42,15 +29,15 @@ {{model.address}} - +
Priority {{model.ordering}} - - - + + + @@ -58,7 +45,7 @@ {{model.openDate}} - + diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html index 3e45f9b..271e430 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.html @@ -11,21 +11,34 @@ selected: {{ myValue | json }}
- {{ item.name }} - {{ item.address }} + Merchant: {{ item.name }} - Address: {{ item.address }}
- selected: {{ myForm.value | json }}

Single Select Demo | label Template

+
+ Merchant: {{ item.name }} - Address: {{ item.address }} +
+
Name: {{ item.name }} - Address: {{item.address }}
selected: {{ myValue3 | json }} +

Single Select Demo | notFound Template

+ +
+
+ No data found for "{{searchTerm}}" +
+
+
+selected: {{ myValue2 | json }} +

Multi-Select Demo

From 5d0cb30a48df10e5819695af19ed4b9bf107f449 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Wed, 8 Jul 2020 11:54:32 -0500 Subject: [PATCH 19/25] fix wrong name for select/filter/sorting --- .../multi-select/multi-select.component.html | 0 .../multi-select/multi-select.component.scss | 0 .../multi-select/multi-select.component.ts | 0 .../ng-select/ng-select.component.html | 0 .../ng-select/ng-select.component.scss | 0 .../ng-select/ng-select.component.ts | 0 .../not-found-template.directive.ts | 0 .../ps-ng-select.module.ts} | 2 +- .../select-label-template.directive.ts | 0 .../select-option-template.directive.ts | 0 .../poweredsoft/ng-select/src/public-api.ts | 15 +++---- .../data-source-filter.module.ts | 27 ++++++++++++ ...ata-source-datetime-filter.component.html} | 0 ...ata-source-datetime-filter.component.scss} | 0 ... data-source-datetime-filter.component.ts} | 8 ++-- .../dataSource-filter/grid-filter.module.ts | 27 ------------ ... data-source-number-filter.component.html} | 0 ... data-source-number-filter.component.scss} | 0 ...=> data-source-number-filter.component.ts} | 6 +-- ...=> data-source-text-filter.component.html} | 0 ...=> data-source-text-filter.component.scss} | 0 ...s => data-source-text-filter.component.ts} | 6 +-- ...odule.ts => data-source-sorting.module.ts} | 4 +- ...tml => data-source-sorting.component.html} | 0 ...css => data-source-sorting.component.scss} | 0 ...nt.ts => data-source-sorting.component.ts} | 4 +- .../form-group-command-modal.directive.ts | 44 ------------------- .../ngx-bootstrap/src/public-api.ts | 12 ++--- .../form-group-modal-demo.component.html | 4 -- .../grid-filter-demo.module.ts | 6 +-- .../grid-filter-demo.component.html | 4 +- .../ng-select-demo/ng-select-demo.module.ts | 4 +- 32 files changed, 61 insertions(+), 112 deletions(-) rename projects/poweredsoft/ng-select/src/lib/{ps-ng-selectors => ps-ng-select}/multi-select/multi-select.component.html (100%) rename projects/poweredsoft/ng-select/src/lib/{ps-ng-selectors => ps-ng-select}/multi-select/multi-select.component.scss (100%) rename projects/poweredsoft/ng-select/src/lib/{ps-ng-selectors => ps-ng-select}/multi-select/multi-select.component.ts (100%) rename projects/poweredsoft/ng-select/src/lib/{ps-ng-selectors => ps-ng-select}/ng-select/ng-select.component.html (100%) rename projects/poweredsoft/ng-select/src/lib/{ps-ng-selectors => ps-ng-select}/ng-select/ng-select.component.scss (100%) rename projects/poweredsoft/ng-select/src/lib/{ps-ng-selectors => ps-ng-select}/ng-select/ng-select.component.ts (100%) rename projects/poweredsoft/ng-select/src/lib/{ps-ng-selectors => ps-ng-select}/not-found-template.directive.ts (100%) rename projects/poweredsoft/ng-select/src/lib/{ps-ng-selectors/ps-ng-selectors.module.ts => ps-ng-select/ps-ng-select.module.ts} (95%) rename projects/poweredsoft/ng-select/src/lib/{ps-ng-selectors => ps-ng-select}/select-label-template.directive.ts (100%) rename projects/poweredsoft/ng-select/src/lib/{ps-ng-selectors => ps-ng-select}/select-option-template.directive.ts (100%) create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/data-source-filter.module.ts rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/{datetime-filter.component.html => data-source-datetime-filter.component.html} (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/{datetime-filter.component.scss => data-source-datetime-filter.component.scss} (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/{datetime-filter.component.ts => data-source-datetime-filter.component.ts} (85%) delete mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/grid-filter.module.ts rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/{number-filter.component.html => data-source-number-filter.component.html} (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/{number-filter.component.scss => data-source-number-filter.component.scss} (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/{number-filter.component.ts => data-source-number-filter.component.ts} (90%) rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/{text-filter.component.html => data-source-text-filter.component.html} (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/{text-filter.component.scss => data-source-text-filter.component.scss} (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/{text-filter.component.ts => data-source-text-filter.component.ts} (90%) rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/{ds-sorting.module.ts => data-source-sorting.module.ts} (63%) rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/{ds-sorting.component.html => data-source-sorting.component.html} (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/{ds-sorting.component.scss => data-source-sorting.component.scss} (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/{ds-sorting.component.ts => data-source-sorting.component.ts} (88%) diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.html similarity index 100% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.html rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.html diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.scss b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.scss similarity index 100% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.scss rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.scss diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.ts similarity index 100% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/multi-select/multi-select.component.ts rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.ts diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.html b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.html similarity index 100% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.html rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.html diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.scss b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.scss similarity index 100% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.scss rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.scss diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts similarity index 100% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ng-select/ng-select.component.ts rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/not-found-template.directive.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/not-found-template.directive.ts similarity index 100% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/not-found-template.directive.ts rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/not-found-template.directive.ts diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ps-ng-selectors.module.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ps-ng-select.module.ts similarity index 95% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ps-ng-selectors.module.ts rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/ps-ng-select.module.ts index 1df2cd8..a833cda 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/ps-ng-selectors.module.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ps-ng-select.module.ts @@ -25,4 +25,4 @@ import { NotFoundTemplateDirective } from './not-found-template.directive'; NotFoundTemplateDirective ] }) -export class PsNgSelectorsModule { }//NGSELECT +export class PsNgSelectModule { }//NGSELECT diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/select-label-template.directive.ts similarity index 100% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-label-template.directive.ts rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/select-label-template.directive.ts diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-option-template.directive.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/select-option-template.directive.ts similarity index 100% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-selectors/select-option-template.directive.ts rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/select-option-template.directive.ts diff --git a/projects/poweredsoft/ng-select/src/public-api.ts b/projects/poweredsoft/ng-select/src/public-api.ts index eaa0877..8c65c66 100644 --- a/projects/poweredsoft/ng-select/src/public-api.ts +++ b/projects/poweredsoft/ng-select/src/public-api.ts @@ -2,12 +2,9 @@ * Public API Surface of ng-select */ -export * from './lib/ps-ng-selectors/ps-ng-selectors.module'; -export * from './lib/ps-ng-selectors/ng-select/ng-select.component'; -export * from './lib/ps-ng-selectors/multi-select/multi-select.component'; -export * from './lib/ps-ng-selectors/select-label-template.directive'; -export * from './lib/ps-ng-selectors/select-option-template.directive'; -export * from './lib/ps-ng-selectors/not-found-template.directive'; - - - +export * from './lib/ps-ng-select/ps-ng-select.module'; +export * from './lib/ps-ng-select/ng-select/ng-select.component'; +export * from './lib/ps-ng-select/multi-select/multi-select.component'; +export * from './lib/ps-ng-select/select-label-template.directive'; +export * from './lib/ps-ng-select/select-option-template.directive'; +export * from './lib/ps-ng-select/not-found-template.directive'; diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/data-source-filter.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/data-source-filter.module.ts new file mode 100644 index 0000000..ca1bb73 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/data-source-filter.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { DataSourceTextFilterComponent } from './text-filter/data-source-text-filter.component'; +import { FormsModule } from '@angular/forms'; +import { DataSourceNumberFilterComponent } from './number-filter/data-source-number-filter.component'; +import { DataSourceDatetimeFilterComponent } from './datetime-filter/data-source-datetime-filter.component'; +import { BsDatepickerModule } from 'ngx-bootstrap/datepicker'; +import { PopoverModule } from 'ngx-bootstrap/popover'; +import { BsDropdownModule } from 'ngx-bootstrap/dropdown'; +import { TooltipModule } from 'ngx-bootstrap/tooltip'; + + + + +@NgModule({ + declarations: [DataSourceTextFilterComponent, DataSourceNumberFilterComponent,DataSourceDatetimeFilterComponent], + imports: [ + CommonModule, + FormsModule, + BsDatepickerModule.forRoot(), + PopoverModule.forRoot(), + BsDropdownModule.forRoot(), + TooltipModule.forRoot() + ], + exports: [DataSourceTextFilterComponent, DataSourceNumberFilterComponent,DataSourceDatetimeFilterComponent] +}) +export class DataSourceFilterModule { } \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/datetime-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.html similarity index 100% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/datetime-filter.component.html rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.html diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/datetime-filter.component.scss b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.scss similarity index 100% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/datetime-filter.component.scss rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.scss diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/datetime-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.ts similarity index 85% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/datetime-filter.component.ts rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.ts index 4b6ce79..5c8c5ec 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/datetime-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.ts @@ -2,11 +2,11 @@ import { Component, OnInit, Input } from '@angular/core'; import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; @Component({ - selector: 'psbx-datetime-filter', - templateUrl: './datetime-filter.component.html', - styleUrls: ['./datetime-filter.component.scss'] + selector: 'psbx-ds-datetime-filter', + templateUrl: './data-source-datetime-filter.component.html', + styleUrls: ['./data-source-datetime-filter.component.scss'] }) -export class DatetimeFilterComponent { +export class DataSourceDatetimeFilterComponent { @Input() path: string; @Input() dataSource : IDataSource; diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/grid-filter.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/grid-filter.module.ts deleted file mode 100644 index a720d04..0000000 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/grid-filter.module.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { TextFilterComponent } from './text-filter/text-filter.component'; -import { FormsModule } from '@angular/forms'; -import { NumberFilterComponent } from './number-filter/number-filter.component'; -import { DatetimeFilterComponent } from './datetime-filter/datetime-filter.component'; -import { BsDatepickerModule } from 'ngx-bootstrap/datepicker'; -import { PopoverModule } from 'ngx-bootstrap/popover'; -import { BsDropdownModule } from 'ngx-bootstrap/dropdown'; -import { TooltipModule } from 'ngx-bootstrap/tooltip'; - - - - -@NgModule({ - declarations: [TextFilterComponent, NumberFilterComponent,DatetimeFilterComponent], - imports: [ - CommonModule, - FormsModule, - BsDatepickerModule.forRoot(), - PopoverModule.forRoot(), - BsDropdownModule.forRoot(), - TooltipModule.forRoot() - ], - exports: [TextFilterComponent, NumberFilterComponent,DatetimeFilterComponent] -}) -export class GridFilterModule { } //DS Filter diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/number-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/data-source-number-filter.component.html similarity index 100% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/number-filter.component.html rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/data-source-number-filter.component.html diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/number-filter.component.scss b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/data-source-number-filter.component.scss similarity index 100% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/number-filter.component.scss rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/data-source-number-filter.component.scss diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/number-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/data-source-number-filter.component.ts similarity index 90% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/number-filter.component.ts rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/data-source-number-filter.component.ts index 74048b8..bcc395b 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/number-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/data-source-number-filter.component.ts @@ -4,10 +4,10 @@ import { ISimpleFilter } from '../../models/IFilter'; @Component({ selector: 'psbx-ds-number-filter', - templateUrl: './number-filter.component.html', - styleUrls: ['./number-filter.component.scss'] + templateUrl: './data-source-number-filter.component.html', + styleUrls: ['./data-source-number-filter.component.scss'] }) -export class NumberFilterComponent implements OnInit { +export class DataSourceNumberFilterComponent implements OnInit { @Input() dataSource : IDataSource; @Input() path:string; diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/text-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/data-source-text-filter.component.html similarity index 100% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/text-filter.component.html rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/data-source-text-filter.component.html diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/text-filter.component.scss b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/data-source-text-filter.component.scss similarity index 100% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/text-filter.component.scss rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/data-source-text-filter.component.scss diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/text-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/data-source-text-filter.component.ts similarity index 90% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/text-filter.component.ts rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/data-source-text-filter.component.ts index 990356f..9ebd44a 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/text-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/data-source-text-filter.component.ts @@ -6,10 +6,10 @@ import { PopoverDirective } from 'ngx-bootstrap/popover'; @Component({ selector: 'psbx-ds-text-filter', - templateUrl: './text-filter.component.html', - styleUrls: ['./text-filter.component.scss'] + templateUrl: './data-source-text-filter.component.html', + styleUrls: ['./data-source-text-filter.component.scss'] }) -export class TextFilterComponent implements OnInit { +export class DataSourceTextFilterComponent implements OnInit { @Input() dataSource : IDataSource; @Input() path:string; diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/data-source-sorting.module.ts similarity index 63% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting.module.ts rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/data-source-sorting.module.ts index 614d8d9..a4597b0 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting.module.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/data-source-sorting.module.ts @@ -1,6 +1,6 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { DataSourceSortingComponent } from './ds-sorting/ds-sorting.component'; +import { DataSourceSortingComponent } from './ds-sorting/data-source-sorting.component'; @@ -11,4 +11,4 @@ import { DataSourceSortingComponent } from './ds-sorting/ds-sorting.component'; ], exports:[DataSourceSortingComponent] }) -export class GridSortingModule { } +export class DataSourceSortingModule { } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/ds-sorting.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/data-source-sorting.component.html similarity index 100% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/ds-sorting.component.html rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/data-source-sorting.component.html diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/ds-sorting.component.scss b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/data-source-sorting.component.scss similarity index 100% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/ds-sorting.component.scss rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/data-source-sorting.component.scss diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/ds-sorting.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/data-source-sorting.component.ts similarity index 88% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/ds-sorting.component.ts rename to projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/data-source-sorting.component.ts index bf66deb..1b57287 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/ds-sorting.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-sorting/ds-sorting/data-source-sorting.component.ts @@ -3,8 +3,8 @@ import { IDataSource } from '@poweredsoft/data'; @Component({ selector: 'psbx-ds-sorting', - templateUrl: './ds-sorting.component.html', - styleUrls: ['./ds-sorting.component.scss'] + templateUrl: './data-source-sorting.component.html', + styleUrls: ['./data-source-sorting.component.scss'] }) export class DataSourceSortingComponent implements OnInit { diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/directives/form-group-command-modal.directive.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/directives/form-group-command-modal.directive.ts index c037cd1..42de551 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/directives/form-group-command-modal.directive.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/directives/form-group-command-modal.directive.ts @@ -95,48 +95,4 @@ export class FormGroupCommandModalDirective { }); } - // @HostListener('click') - // wasClicked() { - // this.dataSource.resolveCommandModelByName({ - // command: this.command, - // model: this.model - // }).subscribe(commandModel => { - // debugger; - // const event = { - // commandName: this.command, - // viewModel: this.model, - // commandModel: commandModel, - // shouldSetCommandModel: true - // } - - // this.formCreate.emit(event); - - // if (event.formGroup == null) - // throw new Error('form group should be set, after form createEvent'); - - // if (event.shouldSetCommandModel) - // event.formGroup.patchValue(commandModel); - - // const initialState = { - // dataSource: this.dataSource, - // command: this.command, - // template: this.template, - // title: this.commandTitle, - // refreshOnSuccess: this.refreshOnSuccess === undefined ? true : this.refreshOnSuccess, - // commandText: this.commandText || 'OK', - // cancelText: this.cancelText || 'Cancel', - // modelForm: event.formGroup, - // commandModel:commandModel - // }; - - // this.modalService.show(FormGroupCommandModalComponent, { - // animated: this.animated === undefined ? true : this.animated, - // initialState - // }); - - // }, error => { - - // }); - // } - } diff --git a/projects/poweredsoft/ngx-bootstrap/src/public-api.ts b/projects/poweredsoft/ngx-bootstrap/src/public-api.ts index ea42355..4deaf47 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/public-api.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/public-api.ts @@ -13,9 +13,9 @@ export * from './lib/confirm-modal/confirm-modal.service'; export * from './lib/confirm-modal/confirm-modal.directive'; export * from './lib/spinner/spinner.module'; export * from './lib/spinner/spinner/spinner.component'; -export * from './lib/dataSource-filter/grid-filter.module'; -export * from './lib/dataSource-filter/text-filter/text-filter.component'; -export * from './lib/dataSource-filter/number-filter/number-filter.component'; -export * from './lib/dataSource-filter/datetime-filter/datetime-filter.component'; -export * from './lib/dataSource-sorting/ds-sorting.module'; -export * from './lib/dataSource-sorting/ds-sorting/ds-sorting.component'; \ No newline at end of file +export * from './lib/dataSource-filter/data-source-filter.module'; +export * from './lib/dataSource-filter/text-filter/data-source-text-filter.component'; +export * from './lib/dataSource-filter/number-filter/data-source-number-filter.component'; +export * from './lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component'; +export * from './lib/dataSource-sorting/data-source-sorting.module'; +export * from './lib/dataSource-sorting/ds-sorting/data-source-sorting.component'; \ No newline at end of file diff --git a/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.html b/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.html index 02442e8..94bce33 100644 --- a/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.html +++ b/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.html @@ -23,12 +23,8 @@ - - - diff --git a/src/app/grid-filter&sorting-demo/grid-filter-demo.module.ts b/src/app/grid-filter&sorting-demo/grid-filter-demo.module.ts index e3b3dc5..0a2a6ae 100644 --- a/src/app/grid-filter&sorting-demo/grid-filter-demo.module.ts +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo.module.ts @@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common'; import { GridFilterDemoRoutingModule } from './grid-filter-demo-routing.module'; import { GridFilterDemoComponent } from './grid-filter-demo/grid-filter-demo.component'; -import { GridFilterModule, psbxPaginationModule, CommandModalModule, ConfirmModalModule, SpinnerModule, GridSortingModule } from '@poweredsoft/ngx-bootstrap'; +import { DataSourceFilterModule, psbxPaginationModule, CommandModalModule, ConfirmModalModule, SpinnerModule, DataSourceSortingModule } from '@poweredsoft/ngx-bootstrap'; import { DataGridModule } from '@poweredsoft/ngx-cdk-ui'; import { FormsModule } from '@angular/forms'; @@ -12,14 +12,14 @@ import { FormsModule } from '@angular/forms'; imports: [ CommonModule, GridFilterDemoRoutingModule, - GridFilterModule, + DataSourceFilterModule, psbxPaginationModule, DataGridModule, CommandModalModule, ConfirmModalModule, FormsModule, SpinnerModule, - GridSortingModule + DataSourceSortingModule ] }) export class GridFilterDemoModule { } diff --git a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html index 148fe65..0d3d0bb 100644 --- a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html @@ -43,8 +43,8 @@ Open Date {{model.openDate}} - - + + diff --git a/src/app/ng-select-demo/ng-select-demo.module.ts b/src/app/ng-select-demo/ng-select-demo.module.ts index 0bd078e..2088487 100644 --- a/src/app/ng-select-demo/ng-select-demo.module.ts +++ b/src/app/ng-select-demo/ng-select-demo.module.ts @@ -4,7 +4,7 @@ import { NgSelectDemoComponent } from './ng-select-demo/ng-select-demo.component import { NgSelectDemoRoutingModule } from './ng-select-demo-routing.module'; import { NgSelectModule } from '@ng-select/ng-select'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { PsNgSelectorsModule } from '@poweredsoft/ng-select'; +import { PsNgSelectModule } from '@poweredsoft/ng-select'; @@ -17,7 +17,7 @@ import { PsNgSelectorsModule } from '@poweredsoft/ng-select'; FormsModule, ReactiveFormsModule, NgSelectDemoRoutingModule, - PsNgSelectorsModule + PsNgSelectModule ] }) export class NgSelectDemoModule { } From 66d34d101909312cf79acdf10d0e60554b4f58a1 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Wed, 8 Jul 2020 13:05:24 -0500 Subject: [PATCH 20/25] datetime temp commit --- .../multi-select/multi-select.component.ts | 7 ++--- .../ng-select/ng-select.component.ts | 6 ++--- ...data-source-datetime-filter.component.html | 26 ++++++++++++------- .../data-source-datetime-filter.component.ts | 6 ++++- .../data-source-number-filter.component.html | 2 +- .../data-source-text-filter.component.html | 2 +- .../form-group-command-modal.component.ts | 4 +-- .../command-modal-demo.component.ts | 9 +++++-- .../data-grid-demo-home.component.ts | 9 +++++-- .../form-group-modal-demo.component.ts | 10 +++++-- .../grid-filter-demo.component.ts | 1 - .../pagination/pagination-demo.component.ts | 9 +++++-- 12 files changed, 58 insertions(+), 33 deletions(-) diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.ts index 33734e9..e45ecfc 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef } from '@angular/core'; +import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; import { SelectLabelTemplateDirective } from '../select-label-template.directive'; import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; import { Observable, Subject, Subscription } from 'rxjs'; @@ -17,7 +17,7 @@ import { SelectOptionTemplateDirective } from '../select-option-template.directi }], styleUrls: ['./multi-select.component.scss'] }) -export class MultiSelectComponent implements OnInit { +export class MultiSelectComponent implements OnInit,OnDestroy { @ContentChild(SelectOptionTemplateDirective) optionTemplate: SelectOptionTemplateDirective; @@ -74,9 +74,6 @@ export class MultiSelectComponent implements OnInit { ngOnInit(): void { this.dataFetching(); this.detectLoading(); - - console.log(this.serverFiltering); - if(this.serverFiltering){ this.searchOnServer(); }else{ diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts index ae8ca06..9b3cb33 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef } from '@angular/core'; +import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; import { SelectLabelTemplateDirective } from '../select-label-template.directive'; import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; import { Observable, Subject, Subscription } from 'rxjs'; @@ -19,7 +19,7 @@ import { NotFoundTemplateDirective } from '../not-found-template.directive'; }], styleUrls: ['./ng-select.component.scss'] }) -export class NgSelectComponent implements OnInit { +export class NgSelectComponent implements OnInit,OnDestroy { @ContentChild(SelectOptionTemplateDirective) optionTemplate: SelectOptionTemplateDirective; @ContentChild(SelectLabelTemplateDirective) labelTemplate: SelectLabelTemplateDirective; @@ -80,8 +80,6 @@ export class NgSelectComponent implements OnInit { this.dataFetching(); this.detectLoading(); - console.log(this.serverFiltering); - if(this.serverFiltering){ this.searchOnServer(); }else{ diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.html index ac319c2..ce785ac 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.html @@ -1,19 +1,25 @@
-
- + + +
+
+ -
-
-
- + bsDatepicker [(ngModel)]="filterValue">
+
+ +
+ + +
diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.ts index 5c8c5ec..1fa81c8 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.ts @@ -16,6 +16,10 @@ export class DataSourceDatetimeFilterComponent { filterType: string = 'Equal'; filterTypes = [ {key:'equal', value: 'Equal'}, + {key:'Greater Than', value: 'GreaterThan'}, + {key:'Less Than', value: 'LessThan'}, + {key:'Greater Than Equal', value: 'GreaterThanOrEqual'}, + {key:'Less Than Equal', value: 'LessThanOrEqual'}, ]; @@ -31,7 +35,7 @@ export class DataSourceDatetimeFilterComponent { return "Filter by "+ this.path; } - applyFilter(){debugger; + applyFilter(){ this.isFiltering = true; const filters = this.dataSource.filters; const existingFilter = filters.find(t => (t as ISimpleFilter).path == this.path) as ISimpleFilter; diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/data-source-number-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/data-source-number-filter.component.html index d797b24..76e11e8 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/data-source-number-filter.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/number-filter/data-source-number-filter.component.html @@ -8,7 +8,7 @@
-
diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/data-source-text-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/data-source-text-filter.component.html index 28aa89f..08b65cc 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/data-source-text-filter.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/text-filter/data-source-text-filter.component.html @@ -10,7 +10,7 @@
-
diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.ts index b08ce0c..f1c3a92 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, TemplateRef } from '@angular/core'; +import { Component, OnInit, TemplateRef, OnDestroy } from '@angular/core'; import { BsModalRef } from 'ngx-bootstrap/modal'; import { IDataSource } from '@poweredsoft/data'; import { finalize } from 'rxjs/operators'; @@ -10,7 +10,7 @@ import { FormGroup, FormControl } from '@angular/forms'; templateUrl: './form-group-command-modal.component.html', styleUrls: ['./form-group-command-modal.component.scss'] }) -export class FormGroupCommandModalComponent implements OnInit { +export class FormGroupCommandModalComponent implements OnInit, OnDestroy { modelForm: FormGroup; diff --git a/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.ts b/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.ts index f0263ec..ebc157f 100644 --- a/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.ts +++ b/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.ts @@ -1,23 +1,28 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, OnDestroy } from '@angular/core'; import { IDataSource } from '@poweredsoft/data'; import { IMerchant } from 'src/app/data/services/IMerchant'; import { MerchantService } from 'src/app/data/services/merchant.service'; import { BsModalRef } from 'ngx-bootstrap/modal'; +import { Subscription } from 'rxjs'; @Component({ selector: 'ps-command-modal-demo', templateUrl: './command-modal-demo.component.html', styleUrls: ['./command-modal-demo.component.scss'] }) -export class CommandModalDemoComponent implements OnInit { +export class CommandModalDemoComponent implements OnInit,OnDestroy { columns = ['id','name', 'address', 'commands']; pages:any; merchantDataSource: IDataSource; + private _dataSubscription: Subscription; constructor(private merchantService: MerchantService){ this.merchantDataSource = this.createDataSource(); } + ngOnDestroy(): void { + this._dataSubscription.unsubscribe(); + } newMerchant(name: string) { this.merchantDataSource.executeCommandByName('addMerchant', { diff --git a/src/app/data-grid-demo/data-grid-demo-home/data-grid-demo-home.component.ts b/src/app/data-grid-demo/data-grid-demo-home/data-grid-demo-home.component.ts index b6307fc..b9d5dcb 100644 --- a/src/app/data-grid-demo/data-grid-demo-home/data-grid-demo-home.component.ts +++ b/src/app/data-grid-demo/data-grid-demo-home/data-grid-demo-home.component.ts @@ -1,22 +1,27 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, OnDestroy } from '@angular/core'; import { DataSource, IDataSource, IQueryExecutionResult, IQueryExecutionGroupResult } from '@poweredsoft/data'; import { IMerchant } from 'src/app/data/services/IMerchant'; import { MerchantService } from 'src/app/data/services/merchant.service'; +import { Subscription } from 'rxjs'; @Component({ selector: 'ps-data-grid-demo-home', templateUrl: './data-grid-demo-home.component.html', styleUrls: ['./data-grid-demo-home.component.scss'] }) -export class DataGridDemoHomeComponent implements OnInit { +export class DataGridDemoHomeComponent implements OnInit, OnDestroy { title = 'cdkDemo'; columns = ['id','name', 'address', 'commands'] merchantDataSource: IDataSource; + private _dataSubscription: Subscription; constructor(private merchantService: MerchantService){ this.merchantDataSource = this.createDataSource(); } + ngOnDestroy(): void { + this._dataSubscription.unsubscribe(); + } diff --git a/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.ts b/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.ts index d6fb703..f6e872a 100644 --- a/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.ts +++ b/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.ts @@ -1,16 +1,18 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, OnDestroy } from '@angular/core'; import { IDataSource } from '@poweredsoft/data'; import { IMerchant } from 'src/app/data/services/IMerchant'; import { MerchantService } from 'src/app/data/services/merchant.service'; import { FormGroup, FormControl, FormBuilder, Validators } from '@angular/forms'; import { IModelFormCreateEvent } from 'projects/poweredsoft/ngx-bootstrap/src/public-api'; +import { Subscription } from 'rxjs'; +import { THIS_EXPR } from '@angular/compiler/src/output/output_ast'; @Component({ selector: 'ps-form-group-modal-demo', templateUrl: './form-group-modal-demo.component.html', styleUrls: ['./form-group-modal-demo.component.scss'] }) -export class FormGroupModalDemoComponent implements OnInit { +export class FormGroupModalDemoComponent implements OnInit,OnDestroy { createDataSource(): IDataSource { return this.merchantService.createDataSource(); @@ -18,10 +20,14 @@ export class FormGroupModalDemoComponent implements OnInit { pages:any; merchantDataSource: IDataSource; + private _dataSubscription: Subscription; columns = ['id','name', 'address', 'actions']; constructor(private merchantService: MerchantService, private fb: FormBuilder) { this.merchantDataSource = this.createDataSource(); } + ngOnDestroy(): void { + this._dataSubscription.unsubscribe(); + } ngOnInit(): void { this.merchantDataSource.refresh(); diff --git a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.ts b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.ts index 6bd9dd1..d950b97 100644 --- a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.ts +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.ts @@ -15,7 +15,6 @@ export class GridFilterDemoComponent implements OnInit { merchantDataSource: IDataSource; constructor(private merchantService: MerchantService){ this.merchantDataSource = this.createDataSource(); - console.log(this.merchantDataSource); } pages:any; diff --git a/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.ts b/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.ts index b00831b..4da193d 100644 --- a/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.ts +++ b/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.ts @@ -1,22 +1,27 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, OnDestroy } from '@angular/core'; import { IDataSource } from '@poweredsoft/data'; import { IMerchant } from 'src/app/data/services/IMerchant'; import { MerchantService } from 'src/app/data/services/merchant.service'; import { FormBuilder, Validators } from '@angular/forms'; import { ConfirmModalService } from '@poweredsoft/ngx-bootstrap'; +import { Subscription } from 'rxjs'; @Component({ selector: 'ps-pagination', templateUrl: './pagination-demo.component.html', styleUrls: ['./pagination-demo.component.scss'] }) -export class PaginationDemoComponent implements OnInit { +export class PaginationDemoComponent implements OnInit, OnDestroy { columns = ['id','name', 'address','commands'] merchantDataSource: IDataSource; + private _dataSubscription: Subscription; constructor(private merchantService: MerchantService, private confirmModalService: ConfirmModalService){ this.merchantDataSource = this.createDataSource(); } + ngOnDestroy(): void { + this._dataSubscription.unsubscribe(); + } pages:any; From f70260864087191d27d0335eb02899baa51bdbe8 Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Thu, 9 Jul 2020 13:41:22 -0500 Subject: [PATCH 21/25] commit for current --- .../not-found-template.directive.ts | 0 .../select-label-template.directive.ts | 2 +- .../select-option-template.directive.ts | 0 .../multi-select/multi-select.component.ts | 4 +- .../ng-select/ng-select.component.ts | 6 +- .../lib/ps-ng-select/ps-ng-select.module.ts | 6 +- .../poweredsoft/ng-select/src/public-api.ts | 6 +- .../lib/command-modal/command-modal.module.ts | 4 +- .../command-modal.component.spec.ts | 25 ---- .../command-modal/command-modal.component.ts | 7 +- .../directives/command-modal.directive.ts | 7 +- .../directives/input-validator.directive.ts | 19 --- .../src/lib/command/command.module.ts | 16 ++ .../command/directives/command.directive.ts | 70 +++++++++ .../confirm-modal/confirm-modal.component.ts | 6 +- .../confirm-modal/confirm-modal.directive.ts | 55 ------- .../lib/confirm-modal/confirm-modal.module.ts | 8 +- .../data-source-filter.module.ts | 0 ...data-source-datetime-filter.component.html | 48 ++++-- ...data-source-datetime-filter.component.scss | 0 .../data-source-datetime-filter.component.ts | 137 ++++++++++++++++++ .../data-source-number-filter.component.html | 2 +- .../data-source-number-filter.component.scss | 0 .../data-source-number-filter.component.ts | 6 +- .../data-source-text-filter.component.html | 2 +- .../data-source-text-filter.component.scss | 0 .../data-source-text-filter.component.ts | 2 +- .../data-source-sorting.module.ts | 0 .../data-source-sorting.component.html | 0 .../data-source-sorting.component.scss | 0 .../data-source-sorting.component.ts | 0 .../data-source-datetime-filter.component.ts | 61 -------- .../form-group-command-modal.directive.ts | 27 +--- .../form-group-command-modal.component.ts | 10 +- .../ngx-bootstrap/src/lib/models/IFilter.ts | 9 -- ...ination.module.ts => pagination.module.ts} | 6 +- .../ngx-bootstrap/src/public-api.ts | 17 ++- .../command-modal-demo.module.ts | 7 +- .../command-modal-demo.component.html | 19 ++- .../command-modal-demo.component.ts | 2 +- .../data-grid-demo-home.component.ts | 2 +- .../form-group-modal-demo.module.ts | 5 +- .../form-group-modal-demo.component.html | 4 +- .../form-group-modal-demo.component.ts | 2 +- .../grid-filter-demo.module.ts | 7 +- .../grid-filter-demo.component.html | 4 +- .../ng-select-demo.component.html | 7 +- .../pagination-demo/pagination-demo.module.ts | 4 +- .../pagination/pagination-demo.component.html | 4 +- .../pagination/pagination-demo.component.ts | 2 +- 50 files changed, 369 insertions(+), 268 deletions(-) rename projects/poweredsoft/ng-select/src/lib/ps-ng-select/{ => directives}/not-found-template.directive.ts (100%) rename projects/poweredsoft/ng-select/src/lib/ps-ng-select/{ => directives}/select-label-template.directive.ts (70%) rename projects/poweredsoft/ng-select/src/lib/ps-ng-select/{ => directives}/select-option-template.directive.ts (100%) delete mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.spec.ts delete mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/directives/input-validator.directive.ts create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/command/command.module.ts create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/command/directives/command.directive.ts delete mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal.directive.ts rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-filter => data-source-filter}/data-source-filter.module.ts (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-filter => data-source-filter}/datetime-filter/data-source-datetime-filter.component.html (54%) rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-filter => data-source-filter}/datetime-filter/data-source-datetime-filter.component.scss (100%) create mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/data-source-filter/datetime-filter/data-source-datetime-filter.component.ts rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-filter => data-source-filter}/number-filter/data-source-number-filter.component.html (97%) rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-filter => data-source-filter}/number-filter/data-source-number-filter.component.scss (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-filter => data-source-filter}/number-filter/data-source-number-filter.component.ts (92%) rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-filter => data-source-filter}/text-filter/data-source-text-filter.component.html (97%) rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-filter => data-source-filter}/text-filter/data-source-text-filter.component.scss (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-filter => data-source-filter}/text-filter/data-source-text-filter.component.ts (97%) rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-sorting => data-source-sorting}/data-source-sorting.module.ts (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-sorting => data-source-sorting}/ds-sorting/data-source-sorting.component.html (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-sorting => data-source-sorting}/ds-sorting/data-source-sorting.component.scss (100%) rename projects/poweredsoft/ngx-bootstrap/src/lib/{dataSource-sorting => data-source-sorting}/ds-sorting/data-source-sorting.component.ts (100%) delete mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.ts delete mode 100644 projects/poweredsoft/ngx-bootstrap/src/lib/models/IFilter.ts rename projects/poweredsoft/ngx-bootstrap/src/lib/pagination/{psbxPagination.module.ts => pagination.module.ts} (71%) diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/not-found-template.directive.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/directives/not-found-template.directive.ts similarity index 100% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-select/not-found-template.directive.ts rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/directives/not-found-template.directive.ts diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/select-label-template.directive.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/directives/select-label-template.directive.ts similarity index 70% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-select/select-label-template.directive.ts rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/directives/select-label-template.directive.ts index 55dc0a1..7c667a0 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/select-label-template.directive.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/directives/select-label-template.directive.ts @@ -1,4 +1,4 @@ -import { Directive, TemplateRef, Input } from '@angular/core'; +import { Directive, TemplateRef } from '@angular/core'; @Directive({ selector: '[psNgSelectLabel]' diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/select-option-template.directive.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/directives/select-option-template.directive.ts similarity index 100% rename from projects/poweredsoft/ng-select/src/lib/ps-ng-select/select-option-template.directive.ts rename to projects/poweredsoft/ng-select/src/lib/ps-ng-select/directives/select-option-template.directive.ts diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.ts index e45ecfc..c976dfa 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/multi-select/multi-select.component.ts @@ -1,11 +1,11 @@ import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; -import { SelectLabelTemplateDirective } from '../select-label-template.directive'; +import { SelectLabelTemplateDirective } from '../directives/select-label-template.directive'; import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; import { Observable, Subject, Subscription } from 'rxjs'; import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators'; import { NgSelectComponent as SelectComponent } from '@ng-select/ng-select'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; -import { SelectOptionTemplateDirective } from '../select-option-template.directive'; +import { SelectOptionTemplateDirective } from '../directives/select-option-template.directive'; @Component({ selector: 'ps-ng-multi-select', diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts index 9b3cb33..a3502c2 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts @@ -1,12 +1,12 @@ import { Component, OnInit, ContentChild, ViewChild, Input, Output, EventEmitter, ChangeDetectorRef, forwardRef, OnDestroy } from '@angular/core'; -import { SelectLabelTemplateDirective } from '../select-label-template.directive'; +import { SelectLabelTemplateDirective } from '../directives/select-label-template.directive'; import { IDataSource, ISimpleFilter } from '@poweredsoft/data'; import { Observable, Subject, Subscription } from 'rxjs'; import { map, distinctUntilChanged, debounceTime } from 'rxjs/operators'; import { NgSelectComponent as SelectComponent } from '@ng-select/ng-select'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; -import { SelectOptionTemplateDirective } from '../select-option-template.directive'; -import { NotFoundTemplateDirective } from '../not-found-template.directive'; +import { SelectOptionTemplateDirective } from '../directives/select-option-template.directive'; +import { NotFoundTemplateDirective } from '../directives/not-found-template.directive'; @Component({ diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ps-ng-select.module.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ps-ng-select.module.ts index a833cda..3b89b59 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ps-ng-select.module.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ps-ng-select.module.ts @@ -4,9 +4,9 @@ import { NgSelectComponent } from './ng-select/ng-select.component'; import { MultiSelectComponent } from './multi-select/multi-select.component'; import { FormsModule } from '@angular/forms'; import { NgSelectModule } from '@ng-select/ng-select'; -import { SelectLabelTemplateDirective } from './select-label-template.directive'; -import { SelectOptionTemplateDirective } from './select-option-template.directive'; -import { NotFoundTemplateDirective } from './not-found-template.directive'; +import { SelectLabelTemplateDirective } from './directives/select-label-template.directive'; +import { SelectOptionTemplateDirective } from './directives/select-option-template.directive'; +import { NotFoundTemplateDirective } from './directives/not-found-template.directive'; diff --git a/projects/poweredsoft/ng-select/src/public-api.ts b/projects/poweredsoft/ng-select/src/public-api.ts index 8c65c66..7a883ee 100644 --- a/projects/poweredsoft/ng-select/src/public-api.ts +++ b/projects/poweredsoft/ng-select/src/public-api.ts @@ -5,6 +5,6 @@ export * from './lib/ps-ng-select/ps-ng-select.module'; export * from './lib/ps-ng-select/ng-select/ng-select.component'; export * from './lib/ps-ng-select/multi-select/multi-select.component'; -export * from './lib/ps-ng-select/select-label-template.directive'; -export * from './lib/ps-ng-select/select-option-template.directive'; -export * from './lib/ps-ng-select/not-found-template.directive'; +export * from './lib/ps-ng-select/directives/select-label-template.directive'; +export * from './lib/ps-ng-select/directives/select-option-template.directive'; +export * from './lib/ps-ng-select/directives/not-found-template.directive'; diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal.module.ts index 0940f87..c80c5da 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal.module.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal.module.ts @@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common'; import { ModalModule } from 'ngx-bootstrap/modal'; import { CommandModalDirective } from './directives/command-modal.directive'; import { CommandModalComponent } from './command-modal/command-modal.component'; -import { InputValidatorDirective } from './directives/input-validator.directive'; + import { FormsModule } from '@angular/forms'; @NgModule({ @@ -12,7 +12,7 @@ import { FormsModule } from '@angular/forms'; ModalModule.forRoot(), FormsModule ], - declarations: [CommandModalDirective, CommandModalComponent, InputValidatorDirective], + declarations: [CommandModalDirective, CommandModalComponent], exports: [CommandModalDirective] }) export class CommandModalModule { } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.spec.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.spec.ts deleted file mode 100644 index 89276ef..0000000 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { CommandModalComponent } from './command-modal.component'; - -describe('CommandModalComponent', () => { - let component: CommandModalComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ CommandModalComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(CommandModalComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.ts index 4408a68..3e37018 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, TemplateRef, OnDestroy } from '@angular/core'; +import { Component, OnInit, TemplateRef, OnDestroy, EventEmitter } from '@angular/core'; import { IDataSource } from '@poweredsoft/data'; import { BsModalRef } from 'ngx-bootstrap/modal'; import { finalize} from 'rxjs/operators'; @@ -24,6 +24,8 @@ export class CommandModalComponent implements OnInit, OnDestroy { form:NgForm; validationMessage:string ; + successEmitter: EventEmitter; + private _notifyMessage: Subscription; private _validationError: Subscription; @@ -62,11 +64,12 @@ export class CommandModalComponent implements OnInit, OnDestroy { this.loading = false; }) ) - .subscribe(success => { + .subscribe(commandResult => { if (this.refreshOnSuccess) this.dataSource.refresh(); this.modalRef.hide(); + this.successEmitter.emit(commandResult); }, fail => { // you do not want to close on failure.. so just ignore.. }); diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/directives/command-modal.directive.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/directives/command-modal.directive.ts index c7c7418..02b45a3 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/directives/command-modal.directive.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/directives/command-modal.directive.ts @@ -1,4 +1,4 @@ -import { Directive, HostListener, Input, TemplateRef } from '@angular/core'; +import { Directive, HostListener, Input, TemplateRef, Output, EventEmitter } from '@angular/core'; import { IDataSource } from '@poweredsoft/data'; import { BsModalService } from 'ngx-bootstrap/modal'; import { CommandModalComponent } from '../command-modal/command-modal.component'; @@ -21,6 +21,8 @@ export class CommandModalDirective { @Input() cancelText: string; @Input() animated: boolean; + @Output() success: EventEmitter = new EventEmitter(); + @HostListener('click') wasClicked() { this.dataSource.resolveCommandModelByName({ @@ -35,7 +37,8 @@ export class CommandModalDirective { title: this.commandTitle, refreshOnSuccess: this.refreshOnSuccess === undefined ? true : this.refreshOnSuccess, commandText: this.commandText || 'OK', - cancelText: this.cancelText || 'Cancel' + cancelText: this.cancelText || 'Cancel', + successEmitter: this.success }; this.modalService.show(CommandModalComponent, { animated: this.animated === undefined ? true : this.animated, diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/directives/input-validator.directive.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/directives/input-validator.directive.ts deleted file mode 100644 index 8fb46d8..0000000 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/directives/input-validator.directive.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Directive } from '@angular/core'; -import { Validator, AbstractControl, ValidationErrors, NG_VALIDATORS } from '@angular/forms'; - -@Directive({ - selector: '[psbxInputValidator]', - providers: [{ provide: NG_VALIDATORS, useExisting: InputValidatorDirective, multi: true }] -}) -export class InputValidatorDirective implements Validator{ - - constructor() { } - - validate(control: AbstractControl): ValidationErrors { - throw new Error("Method not implemented."); - } - registerOnValidatorChange?(fn: () => void): void { - throw new Error("Method not implemented."); - } - -} diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/command/command.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/command/command.module.ts new file mode 100644 index 0000000..4ce5b10 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/command/command.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { CommandDirective } from './directives/command.directive'; +import { ConfirmModalModule } from '../confirm-modal/confirm-modal.module'; + + + +@NgModule({ + declarations: [CommandDirective], + imports: [ + CommonModule, + ConfirmModalModule + ], + exports:[CommandDirective] +}) +export class CommandModule { } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/command/directives/command.directive.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/command/directives/command.directive.ts new file mode 100644 index 0000000..5d042ba --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/command/directives/command.directive.ts @@ -0,0 +1,70 @@ +import { Directive, Input, TemplateRef, HostListener, Output, EventEmitter } from '@angular/core'; +import { IDataSource } from '@poweredsoft/data'; +import { ConfirmModalService } from '../../confirm-modal/confirm-modal.service'; + +@Directive({ + selector: '[psbxCommand]' +}) +export class CommandDirective { + + constructor(private confirmModalService: ConfirmModalService) { } + + + @Input() dataSource: IDataSource; + @Input() command: string; + @Input() model: any; + @Input() refreshOnSuccess: boolean; + @Input() animated: boolean; + + @Input() confirm: boolean; + @Input() confirmMessage: string; + @Input() yesText: string; + @Input() noText: string; + @Input() yesClass: string; + @Input() noClass: string; + + @Output() success: EventEmitter = new EventEmitter(); + @Output() failure: EventEmitter = new EventEmitter(); + + private doCommand() { + this.dataSource.resolveCommandModelByName({ + command: this.command, + model: this.model + }).subscribe(commandModel => { + this.dataSource.executeCommandByName(this.command, commandModel).subscribe( + commandResult => { + if (this.refreshOnSuccess !== false) + this.dataSource.refresh(); + + this.success.emit(commandResult); + }, + commandError => { + this.failure.emit(commandError); + } + ); + }, resolveCommandError => { + this.failure.emit(resolveCommandError); + }); + } + + + @HostListener('click') + wasClicked() { + + if (this.confirm) { + this.confirmModalService.confirm({ + message: this.confirmMessage, + yesText: this.yesText || 'yes', + yesClass: this.yesClass || 'danger', + noText: this.noText || 'no', + noClass: this.noClass || 'light', + }).subscribe(result => { + if (result) + this.doCommand(); + }) + } else { + this.doCommand(); + } + } + +} diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal-components/confirm-modal/confirm-modal.component.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal-components/confirm-modal/confirm-modal.component.ts index 7259d73..3047239 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal-components/confirm-modal/confirm-modal.component.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal-components/confirm-modal/confirm-modal.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, TemplateRef } from '@angular/core'; +import { Component, OnInit, TemplateRef, EventEmitter } from '@angular/core'; import { BsModalRef, BsModalService } from 'ngx-bootstrap/modal'; import { Observer } from 'rxjs'; @@ -27,11 +27,11 @@ export class ConfirmModalComponent implements OnInit { } get yesButtonClass() { - return `btn btn-sm btn-${this.yesClass}` + return `btn btn-${this.yesClass}` } get noButtonClass() { - return `btn btn-sm btn-${this.noClass}` + return `btn btn-${this.noClass}` } confirm(): void { diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal.directive.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal.directive.ts deleted file mode 100644 index ce53863..0000000 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal.directive.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Directive, Input, TemplateRef, HostListener } from '@angular/core'; -import { ConfirmModalService } from './confirm-modal.service'; -import { IDataSource } from '@poweredsoft/data'; - -@Directive({ - selector: '[psbxConfirmModal]' -}) -export class ConfirmModalDirective { - - constructor(private confirmModalService: ConfirmModalService) { } - - - @Input() dataSource: IDataSource; - @Input() command: string; - @Input() model: any; - @Input() template: TemplateRef; - @Input() commandTitle: string; - @Input() refreshOnSuccess: boolean; - @Input() commandText: string; - @Input() cancelText: string; - @Input() animated: boolean; - - - @HostListener('click') - wasClicked() { - this.dataSource.resolveCommandModelByName({ - command: this.command, - model: this.model - }).subscribe(commandModel => { - this.confirmModalService.confirm({ - message: 'Do you want to delete this merchant?', - yesText: 'yes delete this merchant', - yesClass: 'danger', - noText: 'no please dont', - noClass: 'light' - }).subscribe(result => { - if(result){ - this.dataSource.executeCommandByName(this.command, commandModel).subscribe( - res => { - this.dataSource.refresh(); - }, - err => { - console.log(err); - alert('failed'); - } - ); - } - }) - - }, error => { - - }); - } - -} diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal.module.ts index fcfda3a..94314af 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal.module.ts +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/confirm-modal/confirm-modal.module.ts @@ -3,18 +3,20 @@ import { CommonModule } from '@angular/common'; import { ConfirmModalComponent } from './confirm-modal-components/confirm-modal/confirm-modal.component'; import { ModalModule } from 'ngx-bootstrap/modal'; import { ConfirmModalService } from './confirm-modal.service'; -import { ConfirmModalDirective } from './confirm-modal.directive'; +import { CommandModule } from '../command/command.module'; + @NgModule({ - declarations: [ConfirmModalComponent, ConfirmModalDirective], + declarations: [ConfirmModalComponent], imports: [ CommonModule, + //CommandModule, ModalModule.forRoot(), ], - exports:[ConfirmModalDirective], + exports:[], providers: [ConfirmModalService] }) export class ConfirmModalModule { } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/data-source-filter.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/data-source-filter/data-source-filter.module.ts similarity index 100% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/data-source-filter.module.ts rename to projects/poweredsoft/ngx-bootstrap/src/lib/data-source-filter/data-source-filter.module.ts diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/data-source-filter/datetime-filter/data-source-datetime-filter.component.html similarity index 54% rename from projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.html rename to projects/poweredsoft/ngx-bootstrap/src/lib/data-source-filter/datetime-filter/data-source-datetime-filter.component.html index ce785ac..9e7a508 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/dataSource-filter/datetime-filter/data-source-datetime-filter.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/data-source-filter/datetime-filter/data-source-datetime-filter.component.html @@ -1,4 +1,5 @@ +
- + bsDatepicker [(ngModel)]="filterValue" [ngModelOptions]="{standalone: true}">
+
- + bsDaterangepicker [(ngModel)]="filterValue" [ngModelOptions]="{standalone: true}">
- - - +
- + - +
+
+ +
+ (formCreate)="onFormCreate($event)" [template]="theModal">Create New Records
ID
@@ -19,12 +19,32 @@
{{model.address}}
+ Actions - - +
+ + + +
diff --git a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html index 31d3811..34ca93a 100644 --- a/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html +++ b/src/app/grid-filter&sorting-demo/grid-filter-demo/grid-filter-demo.component.html @@ -55,10 +55,18 @@ - -
+
diff --git a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts index c0e511b..ba2add8 100644 --- a/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts +++ b/src/app/ng-select-demo/ng-select-demo/ng-select-demo.component.ts @@ -34,7 +34,7 @@ export class NgSelectDemoComponent implements OnInit { this.merchantDataSource3 = merchantService.createDataSource(); this.merchantDataSource4 = merchantService.createDataSource(); this.myForm = fb.group({ - 'merchantId': [null, null] + 'merchantId': [null] }) } diff --git a/src/app/pagination-demo/pagination-demo.module.ts b/src/app/pagination-demo/pagination-demo.module.ts index 4f1c717..90736d9 100644 --- a/src/app/pagination-demo/pagination-demo.module.ts +++ b/src/app/pagination-demo/pagination-demo.module.ts @@ -4,7 +4,7 @@ import { CommonModule } from '@angular/common'; import { PaginationDemoRoutingModule } from './pagination-demo-routing.module'; import { PaginationDemoComponent } from './pagination-demo/pagination/pagination-demo.component'; import { DataGridModule } from '@poweredsoft/ngx-cdk-ui'; -import { PaginationModule, CommandModalModule, ConfirmModalModule,SpinnerModule } from '@poweredsoft/ngx-bootstrap'; +import { PaginationModule, CommandModalModule, ConfirmModalModule,SpinnerModule, CommandModule } from '@poweredsoft/ngx-bootstrap'; import { FormsModule } from '@angular/forms'; import { ModalModule } from 'ngx-bootstrap/modal'; @@ -21,7 +21,8 @@ import { ModalModule } from 'ngx-bootstrap/modal'; CommandModalModule, ConfirmModalModule, FormsModule, - SpinnerModule + SpinnerModule, + CommandModule ] }) diff --git a/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.html b/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.html index e6672e0..73d1713 100644 --- a/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.html +++ b/src/app/pagination-demo/pagination-demo/pagination/pagination-demo.component.html @@ -16,18 +16,6 @@
ID
{{model.id}}
- - - -
@@ -42,8 +30,29 @@ Actions - +
+ + + +
+
From bf6280aa1c462a95e2e36079226802a3bdfd545c Mon Sep 17 00:00:00 2001 From: Yubing325 <35515298+Yubing325@users.noreply.github.com> Date: Fri, 10 Jul 2020 15:46:12 -0500 Subject: [PATCH 24/25] fixed dataTime range bug & clean code --- package-lock.json | 12 +++--- package.json | 4 +- .../ng-select/ng-select.component.ts | 22 +++++----- .../poweredsoft/ngx-bootstrap/package.json | 2 +- ...data-source-datetime-filter.component.html | 32 ++------------- .../data-source-datetime-filter.component.ts | 41 ++++++++++++------- projects/poweredsoft/ngx-cdk-ui/package.json | 2 +- .../data-grid-demo-home.component.ts | 4 +- 8 files changed, 55 insertions(+), 64 deletions(-) diff --git a/package-lock.json b/package-lock.json index c5e468b..ed812a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1676,9 +1676,9 @@ } }, "@poweredsoft/data": { - "version": "0.0.26", - "resolved": "https://registry.npmjs.org/@poweredsoft/data/-/data-0.0.26.tgz", - "integrity": "sha512-JogKJQ01w4hTQr4EDSoYp2KfJzBbzC8trc7iHCxw7tjF6kB9nqWxu8gvRxX5pqzDK6ORz0Ieuw7i0hEZusW+ww==", + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@poweredsoft/data/-/data-0.0.30.tgz", + "integrity": "sha512-lKojW+yCKPSrdohqhuoEUTo196Z1cHs+SkOZ9N43N7MUcbIR0SA6Uz6k4QZtbmbXmR5AvDKPrDp37nqPXGZFYA==", "requires": { "tslib": "^1.9.0" } @@ -1692,9 +1692,9 @@ } }, "@poweredsoft/ngx-data-apollo": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@poweredsoft/ngx-data-apollo/-/ngx-data-apollo-0.0.8.tgz", - "integrity": "sha512-8nIlvHTnbLyG9aNxkSYOHIbNBBSjj92v0BeFTq4xkttp3UmYzhOO7lkgo1cEIDUuYo+ITAYoZbKwrd4CbnBgcA==", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@poweredsoft/ngx-data-apollo/-/ngx-data-apollo-0.0.10.tgz", + "integrity": "sha512-0HjJthjXstNXS/T9u6t9VTWtQO/LUzGsbT/m0tjj8y0YuivMzfK76EyQldvjGXDYGfIL12kEhsKEbiOPXyCXcA==", "requires": { "tslib": "^1.9.0" } diff --git a/package.json b/package.json index f1107d3..03cac8b 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,9 @@ "@angular/platform-browser-dynamic": "~9.1.4", "@angular/router": "~9.1.4", "@ng-select/ng-select": "^4.0.1", - "@poweredsoft/data": "0.0.27", + "@poweredsoft/data": "0.0.30", "@poweredsoft/ngx-data": "0.0.13", - "@poweredsoft/ngx-data-apollo": "0.0.8", + "@poweredsoft/ngx-data-apollo": "0.0.10", "apollo-angular": "^1.8.0", "apollo-angular-link-http": "^1.9.0", "apollo-cache-inmemory": "^1.6.0", diff --git a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts index a3502c2..971ed6b 100644 --- a/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts +++ b/projects/poweredsoft/ng-select/src/lib/ps-ng-select/ng-select/ng-select.component.ts @@ -49,6 +49,18 @@ export class NgSelectComponent implements OnInit,OnDestroy { this.trackFn = this.trackBy.bind(this); } + + ngOnInit(): void { + this.dataFetching(); + this.detectLoading(); + + if(this.serverFiltering){ + this.searchOnServer(); + }else{ + this.refreshDataSource(); + } + } + valueChanged(event) { this.changeEvent.emit(event); @@ -76,16 +88,6 @@ export class NgSelectComponent implements OnInit,OnDestroy { this._loadingSubscription.unsubscribe(); } - ngOnInit(): void { - this.dataFetching(); - this.detectLoading(); - - if(this.serverFiltering){ - this.searchOnServer(); - }else{ - this.refreshDataSource(); - } - } dataFetching(){ this.data$ = this.dataSource.data$.pipe( diff --git a/projects/poweredsoft/ngx-bootstrap/package.json b/projects/poweredsoft/ngx-bootstrap/package.json index a3c3207..88b066b 100644 --- a/projects/poweredsoft/ngx-bootstrap/package.json +++ b/projects/poweredsoft/ngx-bootstrap/package.json @@ -1,6 +1,6 @@ { "name": "@poweredsoft/ngx-bootstrap", - "version": "0.0.1", + "version": "0.0.2", "peerDependencies": { "@angular/common": "^9.1.9", "@angular/core": "^9.1.9", diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/data-source-filter/datetime-filter/data-source-datetime-filter.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/data-source-filter/datetime-filter/data-source-datetime-filter.component.html index 9e7a508..0913396 100644 --- a/projects/poweredsoft/ngx-bootstrap/src/lib/data-source-filter/datetime-filter/data-source-datetime-filter.component.html +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/data-source-filter/datetime-filter/data-source-datetime-filter.component.html @@ -1,5 +1,5 @@ -
+
-
- @@ -29,33 +29,7 @@
-