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 @@
List View
+
+ Command Modal
+
+
+ Form Group Modal
+
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"
]
}
},