diff --git a/angular.json b/angular.json index d96d6a9..c28fc2e 100644 --- a/angular.json +++ b/angular.json @@ -163,6 +163,46 @@ } } } + }, + "@poweredsoft/ngx-bootstrap": { + "projectType": "library", + "root": "projects/poweredsoft/ngx-bootstrap", + "sourceRoot": "projects/poweredsoft/ngx-bootstrap/src", + "prefix": "psbx", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "projects/poweredsoft/ngx-bootstrap/tsconfig.lib.json", + "project": "projects/poweredsoft/ngx-bootstrap/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/poweredsoft/ngx-bootstrap/tsconfig.lib.prod.json" + } + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "projects/poweredsoft/ngx-bootstrap/src/test.ts", + "tsConfig": "projects/poweredsoft/ngx-bootstrap/tsconfig.spec.json", + "karmaConfig": "projects/poweredsoft/ngx-bootstrap/karma.conf.js" + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "projects/poweredsoft/ngx-bootstrap/tsconfig.lib.json", + "projects/poweredsoft/ngx-bootstrap/tsconfig.spec.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + } }}, "defaultProject": "ngx-cdk-ui" } diff --git a/package-lock.json b/package-lock.json index 4e24382..c3334f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "ngx-cdk-ui", + "name": "ngx-ui", "version": "0.0.0", "lockfileVersion": 1, "requires": true, diff --git a/package.json b/package.json index 26a2b2d..2d27be7 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "ngx-cdk-ui", + "name": "ngx-ui", "version": "0.0.0", "scripts": { "ng": "ng", @@ -9,8 +9,8 @@ "lint": "ng lint", "e2e": "ng e2e", "clean": "rimraf dist", - "start:app": "wait-on dist/poweredsoft/ngx-cdk-ui/fesm5 && ng serve --poll 2000", - "watch:lib": "ng build @poweredsoft/ngx-cdk-ui --watch", + "start:app": "wait-on dist/poweredsoft/ngx-cdk-ui/fesm5 && dist/poweredsoft/ngx-bootstrap/fesm5 && ng serve --poll 2000", + "watch:lib": "ng build @poweredsoft/ngx-cdk-ui --watch && ng build @poweredsoft/ngx-bootstrap --watch", "watch:all": "npm run clean && run-p watch:lib start:app" }, "private": true, diff --git a/projects/poweredsoft/ngx-bootstrap/README.md b/projects/poweredsoft/ngx-bootstrap/README.md new file mode 100644 index 0000000..11fa36b --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/README.md @@ -0,0 +1,24 @@ +# NgxBootstrap + +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 ngx-bootstrap` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project ngx-bootstrap`. +> Note: Don't forget to add `--project ngx-bootstrap` or else it will be added to the default project in your `angular.json` file. + +## Build + +Run `ng build ngx-bootstrap` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Publishing + +After building your library with `ng build ngx-bootstrap`, go to the dist folder `cd dist/ngx-bootstrap` and run `npm publish`. + +## Running unit tests + +Run `ng test ngx-bootstrap` 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/ngx-bootstrap/karma.conf.js b/projects/poweredsoft/ngx-bootstrap/karma.conf.js new file mode 100644 index 0000000..75c4d37 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/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/ngx-bootstrap'), + 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/ngx-bootstrap/ng-package.json b/projects/poweredsoft/ngx-bootstrap/ng-package.json new file mode 100644 index 0000000..31ef03f --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/poweredsoft/ngx-bootstrap", + "lib": { + "entryFile": "src/public-api.ts" + } +} \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/package.json b/projects/poweredsoft/ngx-bootstrap/package.json new file mode 100644 index 0000000..a3c3207 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/package.json @@ -0,0 +1,12 @@ +{ + "name": "@poweredsoft/ngx-bootstrap", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^9.1.9", + "@angular/core": "^9.1.9", + "ngx-bootstrap": "^5.6.1" + }, + "dependencies": { + "tslib": "^1.10.0" + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..88852c8 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +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'; + +@NgModule({ + imports: [ + CommonModule, + ModalModule.forRoot() + ], + declarations: [CommandModalDirective, CommandModalComponent], + exports: [CommandModalDirective] +}) +export class CommandModalModule { } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.html new file mode 100644 index 0000000..e4f2e07 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.html @@ -0,0 +1,24 @@ + + + \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.scss b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.scss new file mode 100644 index 0000000..e69de29 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 new file mode 100644 index 0000000..89276ef --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.spec.ts @@ -0,0 +1,25 @@ +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 new file mode 100644 index 0000000..4ef50b3 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/command-modal/command-modal.component.ts @@ -0,0 +1,63 @@ +import { Component, OnInit, TemplateRef, OnDestroy } from '@angular/core'; +import { IDataSource } from '@poweredsoft/data'; +import { BsModalRef } from 'ngx-bootstrap/modal'; +import { finalize} from 'rxjs/operators'; +import { Subscription } from 'rxjs'; + +@Component({ + selector: 'psbx-command-modal', + templateUrl: './command-modal.component.html', + styleUrls: ['./command-modal.component.scss'] +}) +export class CommandModalComponent implements OnInit, OnDestroy { + + title: string; + template: TemplateRef; + command: string; + commandModel: any; + dataSource: IDataSource; + refreshOnSuccess: boolean; + loading: boolean; + commandText: string; + cancelText: string; + + private _notifyMessage: Subscription; + private _validationError: Subscription; + + constructor(public modalRef: BsModalRef) { } + + ngOnDestroy(): void { + this._notifyMessage.unsubscribe(); + this._validationError.unsubscribe(); + } + + ngOnInit(): void { + this._notifyMessage = this.dataSource.notifyMessage$.subscribe(message => { + + }); + + this._validationError = this.dataSource.validationError$.subscribe(validatorErrors => { + console.log(validatorErrors); + }); + } + + attemptSave() { + debugger; + this.loading = true; + this.dataSource.executeCommandByName(this.command, this.commandModel) + .pipe( + finalize(() => { + this.loading = false; + }) + ) + .subscribe(success => { + if (this.refreshOnSuccess) + this.dataSource.refresh(); + + this.modalRef.hide(); + }, 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 new file mode 100644 index 0000000..78149f5 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/command-modal/directives/command-modal.directive.ts @@ -0,0 +1,51 @@ +import { Directive, HostListener, Input, TemplateRef } from '@angular/core'; +import { IDataSource } from '@poweredsoft/data'; +import { BsModalService } from 'ngx-bootstrap/modal'; +import { CommandModalComponent } from '../command-modal/command-modal.component'; + +@Directive({ + selector: '[psbxCommandModal]' +}) +export class CommandModalDirective { + + constructor(private modalService: BsModalService) { } + + + @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 => { + const initialState = { + dataSource: this.dataSource, + command: this.command, + commandModel: commandModel, + template: this.template, + title: this.commandTitle, + refreshOnSuccess: this.refreshOnSuccess === undefined ? true : this.refreshOnSuccess, + commandText: this.commandText || 'OK', + cancelText: this.cancelText || 'Cancel' + }; + this.modalService.show(CommandModalComponent, { + animated: this.animated === undefined ? true : this.animated, + initialState + }); + + }, error => { + + }); + } + + +} 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 new file mode 100644 index 0000000..90cfdb2 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/directives/form-group-command-modal.directive.ts @@ -0,0 +1,108 @@ +import { Directive, Input, TemplateRef, HostListener, Output, EventEmitter } from '@angular/core'; +import { IDataSource } from '@poweredsoft/data'; +import { BsModalService } from 'ngx-bootstrap/modal'; +import { FormGroupCommandModalComponent } from '../form-group-command-modal/form-group-command-modal.component'; +import { FormGroup } from '@angular/forms'; + +export interface IModelFormCreateEvent +{ + shouldSetCommandModel: boolean; + viewModel: any; + commandName: string; + commandModel: any; + formGroup?: FormGroup; +} + +@Directive({ + selector: '[psbxFormGroupCommandModal]' +}) +export class FormGroupCommandModalDirective { + + + @Input() dataSource: IDataSource; + @Input() command: string; + @Input() model: any; + @Input() template: TemplateRef; + @Input() commandTitle: string; + @Input() animated: boolean; + @Input() refreshOnSuccess: boolean; + @Input() commandText: string; + @Input() cancelText: string; + + @Output() formCreate: EventEmitter = new EventEmitter(); + + constructor(private modalService: BsModalService) { } + + @HostListener('click') + wasClicked() { + this.dataSource.resolveCommandModelByName({ + command: this.command, + model: this.model + }).subscribe(commandModel => { + + + + 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 + }; + + this.modalService.show(FormGroupCommandModalComponent, { + animated: this.animated === undefined ? true : this.animated, + initialState + }); + + }, error => { + + }); + } + + // @Input() + // set psbxFormGroupCommandModal(element:HTMLBaseElement){ + // element.addEventListener('click',()=>{ + // this.dataSource.resolveCommandModelByName({ + // command: this.command, + // model: this.model + // }).subscribe(commandModel => { + // const initialState = { + // dataSource: this.dataSource, + // command: this.command, + // commandModel: commandModel, + // template: this.template, + // title: this.commandTitle, + // refreshOnSuccess: this.refreshOnSuccess === undefined ? true : this.refreshOnSuccess, + // commandText: this.commandText || 'OK', + // cancelText: this.cancelText || 'Cancel' + // }; + // this.modalService.show(FormGroupCommandModalComponent, { + // animated: this.animated === undefined ? true : this.animated, + // initialState + // }) + // },error => { + + // }); + // }) + // } + +} diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal.module.ts b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal.module.ts new file mode 100644 index 0000000..cb90bfe --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormGroupCommandModalComponent } from './form-group-command-modal/form-group-command-modal.component'; +import { FormGroupCommandModalDirective } from './directives/form-group-command-modal.directive'; +import { ModalModule } from 'ngx-bootstrap/modal'; +import { ReactiveFormsModule } from '@angular/forms'; + + + + +@NgModule({ + imports: [ + CommonModule, + ModalModule.forRoot(), + ReactiveFormsModule + ], + declarations: [FormGroupCommandModalComponent, FormGroupCommandModalDirective], + exports: [FormGroupCommandModalDirective] +}) +export class FormGroupCommandModalModule { } diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.html b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.html new file mode 100644 index 0000000..a509523 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.html @@ -0,0 +1,31 @@ + + + + +
+ + + +
+ {{ errorMessage }} +
+
+ + + + \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.scss b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.scss new file mode 100644 index 0000000..e69de29 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 new file mode 100644 index 0000000..f5155a7 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/lib/form-group-command-modal/form-group-command-modal/form-group-command-modal.component.ts @@ -0,0 +1,77 @@ +import { Component, OnInit, TemplateRef } from '@angular/core'; +import { BsModalRef } from 'ngx-bootstrap/modal'; +import { IDataSource } from '@poweredsoft/data'; +import { finalize } from 'rxjs/operators'; +import { Subscription } from 'rxjs' +import { FormGroup, FormControl } from '@angular/forms'; + +@Component({ + selector: 'ps-form-group-command-modal', + templateUrl: './form-group-command-modal.component.html', + styleUrls: ['./form-group-command-modal.component.scss'] +}) +export class FormGroupCommandModalComponent implements OnInit { + + + modelForm: FormGroup; + title: string; + template: TemplateRef; + command: string; + dataSource: IDataSource; + refreshOnSuccess: boolean; + loading: boolean; + commandText: string; + cancelText: string; + errorMessage: string; + + private _notifyMessage: Subscription; + private _validationError: Subscription; + + constructor(public modalRef: BsModalRef) { } + + ngOnDestroy(): void { + /* + this._notifyMessage.unsubscribe(); + this._validationError.unsubscribe(); + */ + } + + ngOnInit(): void { + this.errorMessage = null; + // this._notifyMessage = this.dataSource.notifyMessage$.subscribe(message => { + + // }); + + // this._validationError = this.dataSource.validationError$.subscribe(validatorErrors => { + // console.log(validatorErrors); + // }); + } + + attemptSave() { + + this.errorMessage = null; + if (!this.modelForm.valid) + { + this.errorMessage = 'Form is not valid, please enter all required fields'; + return; + } + + const finalModel = this.modelForm.value; + //this.modelForm.setValue(this.commandModel) + this.loading = true; + this.dataSource.executeCommandByName(this.command, finalModel) + .pipe( + finalize(() => { + this.loading = false; + }) + ) + .subscribe(success => { + if (this.refreshOnSuccess) + this.dataSource.refresh(); + + this.modalRef.hide(); + }, fail => { + // you do not want to close on failure.. so just ignore.. + }); + } +} diff --git a/projects/poweredsoft/ngx-bootstrap/src/public-api.ts b/projects/poweredsoft/ngx-bootstrap/src/public-api.ts new file mode 100644 index 0000000..9c101bf --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/src/public-api.ts @@ -0,0 +1,8 @@ +/* + * Public API Surface of ngx-bootstrap + */ + +export * from './lib/command-modal/command-modal.module'; +export * from './lib/command-modal/directives/command-modal.directive'; +export * from './lib/form-group-command-modal/form-group-command-modal.module'; +export * from './lib/form-group-command-modal/directives/form-group-command-modal.directive'; \ No newline at end of file diff --git a/projects/poweredsoft/ngx-bootstrap/src/test.ts b/projects/poweredsoft/ngx-bootstrap/src/test.ts new file mode 100644 index 0000000..303b32a --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/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/ngx-bootstrap/tsconfig.lib.json b/projects/poweredsoft/ngx-bootstrap/tsconfig.lib.json new file mode 100644 index 0000000..38a679b --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/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/ngx-bootstrap/tsconfig.lib.prod.json b/projects/poweredsoft/ngx-bootstrap/tsconfig.lib.prod.json new file mode 100644 index 0000000..cbae794 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/tsconfig.lib.prod.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.lib.json", + "angularCompilerOptions": { + "enableIvy": false + } +} diff --git a/projects/poweredsoft/ngx-bootstrap/tsconfig.spec.json b/projects/poweredsoft/ngx-bootstrap/tsconfig.spec.json new file mode 100644 index 0000000..4acf941 --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/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/ngx-bootstrap/tslint.json b/projects/poweredsoft/ngx-bootstrap/tslint.json new file mode 100644 index 0000000..3aa2f4c --- /dev/null +++ b/projects/poweredsoft/ngx-bootstrap/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/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 9f9a2d8..68d66ae 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -15,6 +15,14 @@ const routes: Routes = [ { path: 'list-view', loadChildren: () => import('./list-view-demo/list-view-demo.module').then(m => m.ListViewDemoModule) + }, + { + path: 'command-modal', + loadChildren: () => import('./command-modal-demo/command-modal-demo.module').then(m => m.CommandModalDemoModule) + }, + { + path: 'form-group', + loadChildren: () => import('./form-group-modal-demo/form-group-modal-demo.module').then(m => m.FormGroupModalDemoModule) } ]; diff --git a/src/app/app.component.html b/src/app/app.component.html index 74c6a32..91bf4b4 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -12,6 +12,12 @@ + +
diff --git a/src/app/command-modal-demo/command-modal-demo-routing.module.ts b/src/app/command-modal-demo/command-modal-demo-routing.module.ts new file mode 100644 index 0000000..a74dc2d --- /dev/null +++ b/src/app/command-modal-demo/command-modal-demo-routing.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { CommandModalDemoComponent } from './command-modal-demo/command-modal-demo.component'; + + + +const routes: Routes = [ + { + path: '', + component: CommandModalDemoComponent + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class CommandModalDemoRoutingModule { } diff --git a/src/app/command-modal-demo/command-modal-demo.module.ts b/src/app/command-modal-demo/command-modal-demo.module.ts new file mode 100644 index 0000000..9f7d907 --- /dev/null +++ b/src/app/command-modal-demo/command-modal-demo.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { CommandModalDemoComponent } from './command-modal-demo/command-modal-demo.component'; +import { CommandModalDemoRoutingModule } from './command-modal-demo-routing.module'; +import { DataGridModule } from '@poweredsoft/ngx-cdk-ui'; + +import {FormsModule} from '@angular/forms'; +import { CommandModalModule } from '@poweredsoft/ngx-bootstrap'; +@NgModule({ + declarations: [CommandModalDemoComponent], + imports: [ + CommonModule, + CommandModalDemoRoutingModule, + DataGridModule, + CommandModalModule, + FormsModule + ] +}) +export class CommandModalDemoModule { } 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 new file mode 100644 index 0000000..97fff78 --- /dev/null +++ b/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.html @@ -0,0 +1,47 @@ +

+ This is a demo for a command modal. +

+ + + + + + +
ID
+
{{model.id}}
+
+ +
Name
+
{{model.name}}
+
+ +
Address
+
{{model.address}}
+
+ + + Actions + + + + + + + +
+ + + New Name + + + + + Name + + Address + + \ No newline at end of file diff --git a/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.scss b/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.scss new file mode 100644 index 0000000..e69de29 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 new file mode 100644 index 0000000..b10a2a0 --- /dev/null +++ b/src/app/command-modal-demo/command-modal-demo/command-modal-demo.component.ts @@ -0,0 +1,50 @@ +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'; + +@Component({ + selector: 'ps-command-modal-demo', + templateUrl: './command-modal-demo.component.html', + styleUrls: ['./command-modal-demo.component.scss'] +}) +export class CommandModalDemoComponent implements OnInit { + + columns = ['id','name', 'address', 'commands'] + merchantDataSource: IDataSource; + constructor(private merchantService: MerchantService){ + this.merchantDataSource = this.createDataSource(); + + } + + newMerchant(name: string) { + this.merchantDataSource.executeCommandByName('addMerchant', { + name: name + }).subscribe( + res => { + alert('it worked!'); + this.merchantDataSource.refresh(); + }, + err => { + console.log(err); + alert('failed'); + } + ); + } + + createDataSource(): IDataSource { + return this.merchantService.createDataSource(); + } + + ngOnInit() { + this.merchantDataSource.loading$.subscribe(isLoading => { + console.log('merchant data source event loading', isLoading); + }); + + this.merchantDataSource.data$.subscribe(receivedData => { + console.log('new data is coming from the server', receivedData); + }); + this.merchantDataSource.refresh(); + } + +} diff --git a/src/app/data-grid-demo/data-grid-demo.module.ts b/src/app/data-grid-demo/data-grid-demo.module.ts index c4b3530..71648d5 100644 --- a/src/app/data-grid-demo/data-grid-demo.module.ts +++ b/src/app/data-grid-demo/data-grid-demo.module.ts @@ -4,7 +4,6 @@ import { CommonModule } from '@angular/common'; import { DataGridDemoRoutingModule } from './data-grid-demo-routing.module'; import { DataGridDemoHomeComponent } from './data-grid-demo-home/data-grid-demo-home.component'; import { DataGridModule } from '@poweredsoft/ngx-cdk-ui'; -import { PaginationModule } from 'ngx-bootstrap/pagination'; @NgModule({ @@ -12,8 +11,7 @@ import { PaginationModule } from 'ngx-bootstrap/pagination'; imports: [ CommonModule, DataGridDemoRoutingModule, - DataGridModule, - PaginationModule + DataGridModule ] }) export class DataGridDemoModule { } diff --git a/src/app/data/services/merchant.service.ts b/src/app/data/services/merchant.service.ts index d89fcf7..9ebe7ec 100644 --- a/src/app/data/services/merchant.service.ts +++ b/src/app/data/services/merchant.service.ts @@ -27,7 +27,7 @@ export class MerchantService { (model) => model.id, { page: 1, - pageSize: 50, + pageSize: 150, }, true ); @@ -78,7 +78,7 @@ export class MerchantService { // viewModel -> transform to the form model for that command -> IChangeMerchantName e => of({ - name: '', + name: 'A New merchant', address: '' }) ); diff --git a/src/app/form-group-modal-demo/form-group-modal-demo-routing.module.ts b/src/app/form-group-modal-demo/form-group-modal-demo-routing.module.ts new file mode 100644 index 0000000..e8691f1 --- /dev/null +++ b/src/app/form-group-modal-demo/form-group-modal-demo-routing.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { FormGroupModalDemoComponent } from './form-group-modal-demo/form-group-modal-demo.component'; + + +const routes: Routes = [{ + path: '', + component: FormGroupModalDemoComponent +}]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class FormGroupModalDemoRoutingModule { } diff --git a/src/app/form-group-modal-demo/form-group-modal-demo.module.ts b/src/app/form-group-modal-demo/form-group-modal-demo.module.ts new file mode 100644 index 0000000..3c1f825 --- /dev/null +++ b/src/app/form-group-modal-demo/form-group-modal-demo.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormGroupModalDemoComponent } from './form-group-modal-demo/form-group-modal-demo.component'; +import { FormGroupModalDemoRoutingModule } from './form-group-modal-demo-routing.module' +import { DataGridModule } from '@poweredsoft/ngx-cdk-ui'; +import { FormGroupCommandModalModule,CommandModalModule } from '@poweredsoft/ngx-bootstrap'; +import { ReactiveFormsModule } from '@angular/forms'; + + + +@NgModule({ + declarations: [FormGroupModalDemoComponent], + imports: [ + CommonModule, + FormGroupModalDemoRoutingModule, + DataGridModule, + FormGroupCommandModalModule, + ReactiveFormsModule + + ] +}) +export class FormGroupModalDemoModule { } 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 new file mode 100644 index 0000000..8688a9f --- /dev/null +++ b/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.html @@ -0,0 +1,36 @@ +

This is the demo for form-group modal!

+ + + + + +
ID
+
{{model.id}}
+
+ +
Name
+
{{model.name}}
+
+ +
Address
+
{{model.address}}
+
+ + Actions + + + + +
+ + +
+
+ +
+ +
+
+
+
\ No newline at end of file diff --git a/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.scss b/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.scss new file mode 100644 index 0000000..e69de29 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 new file mode 100644 index 0000000..773ec0a --- /dev/null +++ b/src/app/form-group-modal-demo/form-group-modal-demo/form-group-modal-demo.component.ts @@ -0,0 +1,52 @@ +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 { FormGroup, FormControl, FormBuilder, Validators } from '@angular/forms'; +import { IModelFormCreateEvent } from 'projects/poweredsoft/ngx-bootstrap/src/public-api'; + +@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 { + + createDataSource(): IDataSource { + return this.merchantService.createDataSource(); + } + + + merchantDataSource: IDataSource; + columns = ['id','name', 'address', 'actions']; + constructor(private merchantService: MerchantService, private fb: FormBuilder) { + this.merchantDataSource = this.createDataSource(); + } + + ngOnInit(): void { + this.merchantDataSource.refresh(); + } + + onFormCreate(event: IModelFormCreateEvent) { + event.shouldSetCommandModel = false; + event.formGroup = this.fb.group({ + 'name': [event.commandModel.name, Validators.required] + }); + } + + + newMerchant(name: string) { + this.merchantDataSource.executeCommandByName('addMerchant', { + name: name + }).subscribe( + res => { + alert('it worked!'); + this.merchantDataSource.refresh(); + }, + err => { + console.log(err); + alert('failed'); + } + ); + } +} diff --git a/tsconfig.json b/tsconfig.json index 59801a3..8259035 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,6 +19,10 @@ "@poweredsoft/ngx-cdk-ui": [ "dist/poweredsoft/ngx-cdk-ui/poweredsoft-ngx-cdk-ui", "dist/poweredsoft/ngx-cdk-ui" + ], + "@poweredsoft/ngx-bootstrap": [ + "dist/poweredsoft/ngx-bootstrap/poweredsoft-ngx-bootstrap", + "dist/poweredsoft/ngx-bootstrap" ] } },