ds-command
This commit is contained in:
parent
11cdfd131a
commit
222e0be33b
6
package-lock.json
generated
6
package-lock.json
generated
@ -1684,9 +1684,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@poweredsoft/ngx-data": {
|
"@poweredsoft/ngx-data": {
|
||||||
"version": "0.0.21",
|
"version": "0.0.22",
|
||||||
"resolved": "https://registry.npmjs.org/@poweredsoft/ngx-data/-/ngx-data-0.0.21.tgz",
|
"resolved": "https://registry.npmjs.org/@poweredsoft/ngx-data/-/ngx-data-0.0.22.tgz",
|
||||||
"integrity": "sha512-+g8plxcrivlnd5VBsHtGiqfXabRlDeYeyQI5lOCZRlfLt+IwIlCUB5kS0Hm3LvWZddyQvhg/stAzaeao0uyt3A==",
|
"integrity": "sha512-U4kMKlshTpu2/BpjQ/ULESFbaxJOYUjB6Qoax5rXY/vXErYBdVeQWhv/v4MxMLn8gPltjOzVKpEnQPVAlWZT5g==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"tslib": "^1.9.0"
|
"tslib": "^1.9.0"
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
"@angular/router": "~9.1.4",
|
"@angular/router": "~9.1.4",
|
||||||
"@ng-select/ng-select": "^4.0.1",
|
"@ng-select/ng-select": "^4.0.1",
|
||||||
"@poweredsoft/data": "0.0.30",
|
"@poweredsoft/data": "0.0.30",
|
||||||
"@poweredsoft/ngx-data": "0.0.21",
|
"@poweredsoft/ngx-data": "0.0.22",
|
||||||
"@poweredsoft/ngx-data-apollo": "0.0.10",
|
"@poweredsoft/ngx-data-apollo": "0.0.10",
|
||||||
"apollo-angular": "^1.8.0",
|
"apollo-angular": "^1.8.0",
|
||||||
"apollo-angular-link-http": "^1.9.0",
|
"apollo-angular-link-http": "^1.9.0",
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
import { Directive, TemplateRef } from '@angular/core';
|
||||||
|
|
||||||
|
@Directive({
|
||||||
|
selector: '[psDsCommandContent]'
|
||||||
|
})
|
||||||
|
export class DsCommandContentDirective {
|
||||||
|
|
||||||
|
constructor(public template: TemplateRef<any>) { }
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
import { Directive, TemplateRef } from '@angular/core';
|
||||||
|
|
||||||
|
@Directive({
|
||||||
|
selector: '[psDsCommandError]'
|
||||||
|
})
|
||||||
|
export class DsCommandErrorDirective {
|
||||||
|
|
||||||
|
constructor(public template: TemplateRef<any>) { }
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
import { Directive, TemplateRef } from '@angular/core';
|
||||||
|
|
||||||
|
@Directive({
|
||||||
|
selector: '[psDsCommandFooter]'
|
||||||
|
})
|
||||||
|
export class DsCommandFooterDirective {
|
||||||
|
|
||||||
|
constructor(public template: TemplateRef<any>) { }
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
import { Directive, TemplateRef } from '@angular/core';
|
||||||
|
|
||||||
|
@Directive({
|
||||||
|
selector: '[psDsCommandNoCommand]'
|
||||||
|
})
|
||||||
|
export class DsCommandNoCommandDirective {
|
||||||
|
|
||||||
|
constructor(public template: TemplateRef<any>) { }
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
import { Directive, ElementRef, HostListener } from '@angular/core';
|
||||||
|
|
||||||
|
@Directive({
|
||||||
|
selector: '[psDsCommandSubmit]'
|
||||||
|
})
|
||||||
|
export class DsCommandSubmitDirective {
|
||||||
|
|
||||||
|
|
||||||
|
constructor(public element: ElementRef) { }
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
import { Directive, TemplateRef } from '@angular/core';
|
||||||
|
|
||||||
|
@Directive({
|
||||||
|
selector: '[psDsCommandValidation]'
|
||||||
|
})
|
||||||
|
export class DsCommandValidationDirective {
|
||||||
|
|
||||||
|
constructor(public template: TemplateRef<any>) { }
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
<ng-container *ngIf="command; else noCommand">
|
||||||
|
<ng-container *ngIf="hasContent" [ngTemplateOutlet]="contentTemplate"
|
||||||
|
[ngTemplateOutletContext]="{ $implicit: command, loading: isLoading }">
|
||||||
|
</ng-container>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container *ngIf="lastValidationResult">
|
||||||
|
<ng-container *ngIf="hasValidationTemplate" [ngTemplateOutlet]="validationTemplate"
|
||||||
|
[ngTemplateOutletContext]="{ $implicit: lastValidationResult }">
|
||||||
|
</ng-container>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container *ngIf="lastErrorMessage && errorContent && errorContent.template">
|
||||||
|
<ng-container [ngTemplateOutlet]="errorContent.template"
|
||||||
|
[ngTemplateOutletContext]="{ $implicit: lastErrorMessage }">
|
||||||
|
</ng-container>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container *ngIf="hasFooterTemplate" [ngTemplateOutlet]="footerTemplate"
|
||||||
|
[ngTemplateOutletContext]="{ $implicit: command, loading: isLoading }">
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ng-template #noCommand>
|
||||||
|
<ng-container *ngIf="noCommandContent && noCommandContent.template">
|
||||||
|
<ng-container [ngTemplateOutlet]="noCommandContent.template">
|
||||||
|
</ng-container>
|
||||||
|
</ng-container>
|
||||||
|
</ng-template>
|
@ -0,0 +1,182 @@
|
|||||||
|
import { Component, ContentChild, ContentChildren, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, QueryList } from '@angular/core';
|
||||||
|
import { IDataSource, IDataSourceValidationError } from '@poweredsoft/data';
|
||||||
|
import { Subscription } from 'rxjs';
|
||||||
|
import { finalize } from 'rxjs/operators';
|
||||||
|
import { DsCommandContentDirective } from './directives/ds-command-content.directive';
|
||||||
|
import { DsCommandErrorDirective } from './directives/ds-command-error.directive';
|
||||||
|
import { DsCommandFooterDirective } from './directives/ds-command-footer.directive';
|
||||||
|
import { DsCommandNoCommandDirective } from './directives/ds-command-no-command.directive';
|
||||||
|
import { DsCommandSubmitDirective } from './directives/ds-command-submit.directive';
|
||||||
|
import { DsCommandValidationDirective } from './directives/ds-command-validation.directive';
|
||||||
|
|
||||||
|
export interface DsCommandPropertyError
|
||||||
|
{
|
||||||
|
name: string,
|
||||||
|
errors: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'ps-ds-command',
|
||||||
|
templateUrl: './ds-command.component.html',
|
||||||
|
styleUrls: ['./ds-command.component.scss']
|
||||||
|
})
|
||||||
|
export class DsCommandComponent implements OnInit, OnDestroy {
|
||||||
|
@Input() dataSource: IDataSource<any>;
|
||||||
|
@Input() name: string;
|
||||||
|
@Input() model: any;
|
||||||
|
@Input() refreshOnSuccess: boolean;
|
||||||
|
@Input() resolveCommand: boolean;
|
||||||
|
|
||||||
|
@Output() success = new EventEmitter<any>();
|
||||||
|
@Output() loading = new EventEmitter<boolean>();
|
||||||
|
@Output() commandChange = new EventEmitter<any>();
|
||||||
|
|
||||||
|
@ContentChild(DsCommandContentDirective) commandContent: DsCommandContentDirective;
|
||||||
|
@ContentChild(DsCommandFooterDirective) footerContent: DsCommandFooterDirective;
|
||||||
|
@ContentChild(DsCommandNoCommandDirective) noCommandContent: DsCommandNoCommandDirective;
|
||||||
|
@ContentChild(DsCommandErrorDirective) errorContent: DsCommandErrorDirective;
|
||||||
|
@ContentChild(DsCommandValidationDirective) validationDirective: DsCommandValidationDirective;
|
||||||
|
@ContentChildren(DsCommandSubmitDirective) submitDirectives: QueryList<DsCommandSubmitDirective>;
|
||||||
|
|
||||||
|
lastErrorMessage: string;
|
||||||
|
lastValidationResult: DsCommandPropertyError[];
|
||||||
|
|
||||||
|
protected _command: any = null;
|
||||||
|
|
||||||
|
private _loading = false;
|
||||||
|
private _validationErrorSubscription: Subscription;
|
||||||
|
private _notifyMessageSubscription: Subscription;
|
||||||
|
|
||||||
|
|
||||||
|
@Input() set command(value: any) {
|
||||||
|
if (this._command != value) {
|
||||||
|
this._command = value;
|
||||||
|
this.commandChange.emit(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get noCommand() {
|
||||||
|
return this._command ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
get command() {
|
||||||
|
return this._command;
|
||||||
|
}
|
||||||
|
|
||||||
|
get hasContent() {
|
||||||
|
return this.commandContent != null && this.commandContent.template != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
get footerTemplate() {
|
||||||
|
return this.footerContent.template;
|
||||||
|
}
|
||||||
|
|
||||||
|
get hasFooterTemplate() {
|
||||||
|
return this.footerContent?.template != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
get hasValidationTemplate() {
|
||||||
|
return this.validationDirective != null && this.validationDirective.template != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
get validationTemplate() {
|
||||||
|
return this.validationDirective.template;
|
||||||
|
}
|
||||||
|
|
||||||
|
get contentTemplate() {
|
||||||
|
return this.commandContent.template;
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnDestroy() {
|
||||||
|
this._validationErrorSubscription?.unsubscribe();
|
||||||
|
this._notifyMessageSubscription?.unsubscribe();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
|
||||||
|
this._validationErrorSubscription = this.dataSource
|
||||||
|
.validationError$.subscribe(validationResult => {
|
||||||
|
this.lastValidationResult = Object.keys(validationResult.errors).reduce<DsCommandPropertyError[]>((prev, attr) => {
|
||||||
|
prev.push({
|
||||||
|
name: attr,
|
||||||
|
errors: validationResult.errors[attr]
|
||||||
|
})
|
||||||
|
return prev;
|
||||||
|
}, []);
|
||||||
|
});
|
||||||
|
|
||||||
|
this._notifyMessageSubscription = this.dataSource.notifyMessage$.subscribe(message => {
|
||||||
|
if (message.type != 'info')
|
||||||
|
this.lastErrorMessage = message.message;
|
||||||
|
});
|
||||||
|
|
||||||
|
const shouldResolve = this.resolveCommand === undefined ? true : this.resolveCommand;
|
||||||
|
if (shouldResolve)
|
||||||
|
this.resolveModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
resolveModel() {
|
||||||
|
this.dataSource.resolveCommandModelByName({
|
||||||
|
model: this.model,
|
||||||
|
command: this.name
|
||||||
|
}).subscribe(
|
||||||
|
commandModel => {
|
||||||
|
this.command = commandModel;
|
||||||
|
},
|
||||||
|
_ => { }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private changeLoadingState(loading: boolean) {
|
||||||
|
if (loading != this._loading) {
|
||||||
|
this._loading = loading;
|
||||||
|
this.loading.emit(loading);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@HostListener("click", ["$event"])
|
||||||
|
childClicked($event: MouseEvent) {
|
||||||
|
const element = $event.target;
|
||||||
|
const found = this.submitDirectives
|
||||||
|
.toArray()
|
||||||
|
.find(t => t.element.nativeElement == element);
|
||||||
|
|
||||||
|
if (found != null)
|
||||||
|
this.execute()
|
||||||
|
}
|
||||||
|
|
||||||
|
execute() {
|
||||||
|
|
||||||
|
// secure from double send.
|
||||||
|
if (this._loading)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.changeLoadingState(true);
|
||||||
|
this.lastValidationResult = null;
|
||||||
|
this.lastErrorMessage = null;
|
||||||
|
this.dataSource.executeCommandByName(this.name, this._command)
|
||||||
|
.pipe(
|
||||||
|
finalize(() => this.changeLoadingState(false))
|
||||||
|
)
|
||||||
|
.subscribe(
|
||||||
|
commandResult => {
|
||||||
|
this.success.emit(commandResult);
|
||||||
|
if (this.refreshOnSuccess)
|
||||||
|
this.dataSource.refresh();
|
||||||
|
},
|
||||||
|
_ => {
|
||||||
|
// we just catch the error, this way its not uncatched its handled via the other
|
||||||
|
// subscriptions.
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
get isLoading() {
|
||||||
|
return this._loading;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { DsCommandComponent } from './ds-command.component';
|
||||||
|
import { DsCommandContentDirective } from './directives/ds-command-content.directive';
|
||||||
|
import { DsCommandSubmitDirective } from './directives/ds-command-submit.directive';
|
||||||
|
import { DsCommandValidationDirective } from './directives/ds-command-validation.directive';
|
||||||
|
import { DsCommandFooterDirective } from './directives/ds-command-footer.directive';
|
||||||
|
import { DsCommandErrorDirective } from './directives/ds-command-error.directive';
|
||||||
|
import { DsCommandNoCommandDirective } from './directives/ds-command-no-command.directive';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [DsCommandComponent, DsCommandContentDirective, DsCommandSubmitDirective, DsCommandValidationDirective, DsCommandFooterDirective, DsCommandErrorDirective, DsCommandNoCommandDirective],
|
||||||
|
imports: [
|
||||||
|
CommonModule
|
||||||
|
],
|
||||||
|
exports: [DsCommandComponent, DsCommandContentDirective, DsCommandSubmitDirective, DsCommandValidationDirective, DsCommandFooterDirective, DsCommandErrorDirective, DsCommandNoCommandDirective]
|
||||||
|
})
|
||||||
|
export class DsCommandModule { }
|
@ -35,4 +35,14 @@ export * from './lib/view/view.module';
|
|||||||
export * from './lib/view/view.component';
|
export * from './lib/view/view.component';
|
||||||
export * from './lib/view/directives/view-content.directive';
|
export * from './lib/view/directives/view-content.directive';
|
||||||
export * from './lib/view/directives/view-loading.directive';
|
export * from './lib/view/directives/view-loading.directive';
|
||||||
export * from './lib/view/directives/view-no-records.directive';
|
export * from './lib/view/directives/view-no-records.directive';
|
||||||
|
|
||||||
|
// ds-command
|
||||||
|
export * from './lib/ds-command/ds-command.module';
|
||||||
|
export * from './lib/ds-command/ds-command.component';
|
||||||
|
export * from './lib/ds-command/directives/ds-command-content.directive';
|
||||||
|
export * from './lib/ds-command/directives/ds-command-submit.directive';
|
||||||
|
export * from './lib/ds-command/directives/ds-command-validation.directive';
|
||||||
|
export * from './lib/ds-command/directives/ds-command-footer.directive';
|
||||||
|
export * from './lib/ds-command/directives/ds-command-no-command.directive';
|
||||||
|
export * from './lib/ds-command/directives/ds-command-error.directive';
|
@ -19,6 +19,9 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: 'list-view',
|
path: 'list-view',
|
||||||
loadChildren: () => import('./list-view-demo/list-view-demo.module').then(m => m.ListViewDemoModule)
|
loadChildren: () => import('./list-view-demo/list-view-demo.module').then(m => m.ListViewDemoModule)
|
||||||
|
},{
|
||||||
|
path: 'ds-command',
|
||||||
|
loadChildren: () => import('./ds-command-demo/ds-command-demo.module').then(m => m.DsCommandDemoModule)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'command-modal',
|
path: 'command-modal',
|
||||||
|
@ -15,6 +15,9 @@
|
|||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" routerLink="view">View</a>
|
<a class="nav-link" routerLink="view">View</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" routerLink="ds-command">Data Source Command</a>
|
||||||
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" routerLink="command-modal">Command Modal</a>
|
<a class="nav-link" routerLink="command-modal">Command Modal</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
<ps-view [dataSource]="dataSource">
|
||||||
|
<ng-container *psViewContent="let model">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
{{ model.firstName }} {{ model.lastName }}
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
{{ model.number }}
|
||||||
|
<ng-container *ngIf="model.extension">
|
||||||
|
,{{model.extension}}
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="card-footer">
|
||||||
|
<button class="btn btn-primary btn-sm" (click)="formActivated = true">Change Phone Number</button>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card mt-2" *ngIf="formActivated">
|
||||||
|
<div class="card-body">
|
||||||
|
<ps-ds-command [dataSource]="dataSource" name="changePhone" (success)="onSuccess($event)"
|
||||||
|
[model]="model">
|
||||||
|
<ng-container *psDsCommandContent="let command; let loading=loading">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Number</label>
|
||||||
|
<input type="text" class="form-control" [(ngModel)]="command.number" />
|
||||||
|
<ps-ds-validation-error class="text-danger" [dataSource]="dataSource" field="number">
|
||||||
|
</ps-ds-validation-error>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Extension</label>
|
||||||
|
<input type="text" class="form-control" [(ngModel)]="command.extension" />
|
||||||
|
<ps-ds-validation-error class="text-danger" [dataSource]="dataSource" field="extension">
|
||||||
|
</ps-ds-validation-error>
|
||||||
|
</div>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<div class="alert alert-danger mt-2" *psDsCommandValidation="let validationResult">
|
||||||
|
<ng-container *ngFor="let propertyErrors of validationResult">
|
||||||
|
<ng-container *ngFor="let err of propertyErrors.errors">
|
||||||
|
{{ err }}<br>
|
||||||
|
</ng-container>
|
||||||
|
</ng-container>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ng-container *psDsCommandFooter="let command; let loading=loading">
|
||||||
|
<button class="btn btn-info" [disabled]="loading"
|
||||||
|
(click)="formActivated = false">Cancel</button>
|
||||||
|
|
||||||
|
<button class="btn btn-primary" [disabled]="loading" psDsCommandSubmit>Save</button>
|
||||||
|
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
</ps-ds-command>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ng-container>
|
||||||
|
</ps-view>
|
@ -0,0 +1,81 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { IDataSource, IDataSourceValidationError } from '@poweredsoft/data';
|
||||||
|
import { HttpDataSourceService } from '@poweredsoft/ngx-data';
|
||||||
|
import { of, throwError } from 'rxjs';
|
||||||
|
|
||||||
|
interface ContactQuery {
|
||||||
|
contactId: number
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Contact {
|
||||||
|
id: number;
|
||||||
|
firstName: string,
|
||||||
|
lastName: string,
|
||||||
|
number: string,
|
||||||
|
extension: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ChangeContactPhone {
|
||||||
|
contactId: number,
|
||||||
|
number: string,
|
||||||
|
extension: string
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'ps-ds-command-demo-page',
|
||||||
|
templateUrl: './ds-command-demo-page.component.html',
|
||||||
|
styleUrls: ['./ds-command-demo-page.component.scss']
|
||||||
|
})
|
||||||
|
export class DsCommandDemoPageComponent implements OnInit {
|
||||||
|
|
||||||
|
private contact: Contact = {
|
||||||
|
id: 1,
|
||||||
|
firstName: "David",
|
||||||
|
lastName: "Lebee",
|
||||||
|
extension: null,
|
||||||
|
number: "514 448 8444"
|
||||||
|
};
|
||||||
|
|
||||||
|
formActivated: boolean = false;
|
||||||
|
dataSource: IDataSource<Contact>;
|
||||||
|
|
||||||
|
constructor(private hdss: HttpDataSourceService) {
|
||||||
|
this.dataSource = this.hdss.singleBuilder<ContactQuery, Contact, number>()
|
||||||
|
.keyResolver(m => m.id)
|
||||||
|
.queryHandler(_ => of(this.contact))
|
||||||
|
.addCommandByCallback<ChangeContactPhone, ChangeContactPhone>("changePhone", (command) => {
|
||||||
|
|
||||||
|
if (!command.number || command.number.length == 0) {
|
||||||
|
return throwError({
|
||||||
|
status: 400,
|
||||||
|
error: {
|
||||||
|
errors: {
|
||||||
|
number: ['number is required']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return of(command);
|
||||||
|
}, e => {
|
||||||
|
return of(<ChangeContactPhone>{
|
||||||
|
contactId: e.model.id,
|
||||||
|
number: e.model.number,
|
||||||
|
extension: e.model.extension
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.createDataSource();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
this.dataSource.refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
onSuccess(command: ChangeContactPhone) {
|
||||||
|
this.contact.number = command.number;
|
||||||
|
this.contact.extension = command.extension;
|
||||||
|
this.formActivated = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
17
src/app/ds-command-demo/ds-command-demo-routing.module.ts
Normal file
17
src/app/ds-command-demo/ds-command-demo-routing.module.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { Routes, RouterModule } from '@angular/router';
|
||||||
|
import { DsCommandDemoPageComponent } from './ds-command-demo-page/ds-command-demo-page.component';
|
||||||
|
|
||||||
|
|
||||||
|
const routes: Routes = [
|
||||||
|
{
|
||||||
|
path: '',
|
||||||
|
component: DsCommandDemoPageComponent
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [RouterModule.forChild(routes)],
|
||||||
|
exports: [RouterModule]
|
||||||
|
})
|
||||||
|
export class DsCommandDemoRoutingModule { }
|
21
src/app/ds-command-demo/ds-command-demo.module.ts
Normal file
21
src/app/ds-command-demo/ds-command-demo.module.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
|
||||||
|
import { DsCommandDemoRoutingModule } from './ds-command-demo-routing.module';
|
||||||
|
import { DsCommandDemoPageComponent } from './ds-command-demo-page/ds-command-demo-page.component';
|
||||||
|
import { DsCommandModule, DsValidationErrorModule, ViewModule } from '@poweredsoft/ngx-cdk-ui';
|
||||||
|
import { FormsModule } from '@angular/forms';
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [DsCommandDemoPageComponent],
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
DsCommandDemoRoutingModule,
|
||||||
|
DsCommandModule,
|
||||||
|
ViewModule,
|
||||||
|
FormsModule,
|
||||||
|
DsValidationErrorModule
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class DsCommandDemoModule { }
|
Loading…
Reference in New Issue
Block a user