Commit 4dd19fa0 authored by Marco Ortiz's avatar Marco Ortiz

Preparación para la integración con el nuevo jenkins

parent 9fb7b93f
This diff is collapsed.
{ {
"name": "bytebot-projects", "name": "bytebot-projects",
"version": "0.0.0", "version": "1.0.1",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve", "start": "ng serve",
...@@ -32,12 +32,12 @@ ...@@ -32,12 +32,12 @@
"@swimlane/ngx-datatable": "^16.0.3", "@swimlane/ngx-datatable": "^16.0.3",
"@swimlane/ngx-graph": "^6.2.0", "@swimlane/ngx-graph": "^6.2.0",
"@types/jquery": "^3.3.34", "@types/jquery": "^3.3.34",
"@xdf/commons": "file:../../XDF/ng-byte-framework/dist/xdf-commons/xdf-commons-1.0.0.tgz", "@xdf/commons": "file:./libs/xdf-commons-1.0.1.tgz",
"@xdf/gallery": "file:../../XDF/ng-byte-framework/dist/xdf-gallery/xdf-gallery-1.0.15.tgz", "@xdf/gallery": "file:./libs/xdf-gallery-1.0.16.tgz",
"@xdf/graph": "file:../../Cuenta corriente/ccb-workspace/dist/xdf-graph/xdf-graph-0.0.1.tgz", "@xdf/graph": "file:./libs/xdf-graph-0.0.1.tgz",
"@xdf/layouts": "^1.0.3", "@xdf/layouts": "file:./libs/xdf-layouts-1.0.1.tgz",
"@xdf/security": "file:../../XDF/ng-byte-framework/dist/xdf-security/xdf-security-1.0.0.tgz", "@xdf/security": "file:./libs/xdf-security-1.0.0.tgz",
"@xdf/settings": "file:../../XDF/ng-byte-framework/dist/xdf-settings/xdf-settings-1.0.3.tgz", "@xdf/settings": "file:./libs/xdf-settings-1.0.3.tgz",
"ace-builds": "^1.4.8", "ace-builds": "^1.4.8",
"angular-gauge-chart": "^0.7.2", "angular-gauge-chart": "^0.7.2",
"angular-highcharts": "^9.0.2", "angular-highcharts": "^9.0.2",
...@@ -65,9 +65,9 @@ ...@@ -65,9 +65,9 @@
"ngx-bootstrap": "^4.3.0", "ngx-bootstrap": "^4.3.0",
"ngx-color": "^4.1.1", "ngx-color": "^4.1.1",
"ngx-echarts": "^4.2.2", "ngx-echarts": "^4.2.2",
"ngx-material-file-input": "^2.0.0", "ngx-material-file-input": "2.0.0",
"ngx-moment": "^3.5.0", "ngx-moment": "^3.5.0",
"ngx-scrollbar": "^7.1.0", "ngx-scrollbar": "7.1.0",
"ngx-slick-carousel": "^0.5.1", "ngx-slick-carousel": "^0.5.1",
"ngx-toastr": "^10.0.4", "ngx-toastr": "^10.0.4",
"ngx-translate-multi-http-loader": "^3.0.0", "ngx-translate-multi-http-loader": "^3.0.0",
......
...@@ -11,18 +11,22 @@ import { TranslateModule, TranslateLoader, TranslateService } from '@ngx-transla ...@@ -11,18 +11,22 @@ import { TranslateModule, TranslateLoader, TranslateService } from '@ngx-transla
// XDF // XDF
import { XdfLayoutsModule, SettingsService, ByteSettingsService, SettingsFakeBackendInterceptor } from '@xdf/layouts'; import { XdfLayoutsModule, SettingsService, ByteSettingsService, SettingsFakeBackendInterceptor } from '@xdf/layouts';
import { XdfSecurityModule, ByteAuthenticationService, AuthGuard, OAuthGuard, OAuthAuthenticationService, ResourceAuthGuard, AuthenticationFakeBackendInterceptor, ProgramsFakeBackendInterceptor } from '@xdf/security'; import { XdfSecurityModule, ByteAuthenticationService, AuthGuard, OAuthGuard, OAuthAuthenticationService } from '@xdf/security';
import { XdfCommonsModule, NotificationService, ToastNotificationService, AuthenticationService, INITSERVICE_OPTIONS, InitCommonsService, ErrorsHandler } from '@xdf/commons'; import { ResourceAuthGuard, AuthenticationFakeBackendInterceptor, ProgramsFakeBackendInterceptor } from '@xdf/security';
import { XdfCommonsModule, NotificationService, ToastNotificationService, AuthenticationService } from '@xdf/commons';
import { INITSERVICE_OPTIONS, InitCommonsService, ErrorsHandler } from '@xdf/commons';
//Components // Components
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { HomeComponent } from './views/home/home.component'; import { HomeComponent } from './views/home/home.component';
import { ToastrModule } from 'ngx-toastr'; import { ToastrModule } from 'ngx-toastr';
import localeEs from '@angular/common/locales/es-PE'; import localeEs from '@angular/common/locales/es-PE';
import localeEn from '@angular/common/locales/en'; import localeEn from '@angular/common/locales/en';
import { MAT_DATE_LOCALE, MatDialog, MatButtonModule, MatDialogModule, MatPaginatorIntl, DateAdapter, MAT_DATE_FORMATS, MatIconModule } from '@angular/material'; import { MAT_DATE_LOCALE, MatDialog, MatButtonModule, MatDialogModule, MatPaginatorIntl, DateAdapter } from '@angular/material';
import { XdfGalleryModule, CustomMatPaginatorIntl, DATERANGEPICKER_LOCALE, DaterangepickerLocaleService, ConflictErrorDialogService, HttpErrorHandleInterceptor } from '@xdf/gallery'; import { MAT_DATE_FORMATS, MatIconModule } from '@angular/material';
import { XdfGalleryModule, CustomMatPaginatorIntl, DATERANGEPICKER_LOCALE, DaterangepickerLocaleService } from '@xdf/gallery';
import { ConflictErrorDialogService, HttpErrorHandleInterceptor } from '@xdf/gallery';
import { BytebotSettingsService } from './services/bytebot-settings-service'; import { BytebotSettingsService } from './services/bytebot-settings-service';
import { MultiTranslateHttpLoader } from 'ngx-translate-multi-http-loader'; import { MultiTranslateHttpLoader } from 'ngx-translate-multi-http-loader';
...@@ -126,7 +130,7 @@ export function createTranslateLoader(http: HttpClient) { ...@@ -126,7 +130,7 @@ export function createTranslateLoader(http: HttpClient) {
{ provide: HTTP_INTERCEPTORS, useClass: SettingsFakeBackendInterceptor, multi: true }, { provide: HTTP_INTERCEPTORS, useClass: SettingsFakeBackendInterceptor, multi: true },
{ provide: HTTP_INTERCEPTORS, useClass: CustomProgramsFakeBackendInterceptor, multi: true }, { provide: HTTP_INTERCEPTORS, useClass: CustomProgramsFakeBackendInterceptor, multi: true },
{ provide: HTTP_INTERCEPTORS, useClass: AgentFakeBackendInterceptor, multi: true }, { provide: HTTP_INTERCEPTORS, useClass: AgentFakeBackendInterceptor, multi: true },
//{ provide: HTTP_INTERCEPTORS, useClass: OperativeDashboardFakeBackendInterceptor, multi: true }, // { provide: HTTP_INTERCEPTORS, useClass: OperativeDashboardFakeBackendInterceptor, multi: true },
{ provide: APP_INITIALIZER, useFactory: init_app, deps: [InitCommonsService, TranslateService], multi: true } { provide: APP_INITIALIZER, useFactory: init_app, deps: [InitCommonsService, TranslateService], multi: true }
...@@ -147,4 +151,4 @@ export function init_app(appLoaderService: InitCommonsService) { ...@@ -147,4 +151,4 @@ export function init_app(appLoaderService: InitCommonsService) {
// Para OAUTH // Para OAUTH
export function loginLoaderFactory(provider: OAuthAuthenticationService) { export function loginLoaderFactory(provider: OAuthAuthenticationService) {
return () => provider.login(null, null).toPromise(); return () => provider.login(null, null).toPromise();
} }
\ No newline at end of file
...@@ -6,81 +6,80 @@ import { ...@@ -6,81 +6,80 @@ import {
HttpInterceptor, HttpInterceptor,
HttpErrorResponse HttpErrorResponse
} from '@angular/common/http'; } from '@angular/common/http';
import { Observable, throwError, of, EMPTY } from 'rxjs'; import { Observable, throwError, of, EMPTY } from 'rxjs';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { catchError, tap, map } from 'rxjs/operators'; import { catchError, tap, map } from 'rxjs/operators';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { NotificationService, NotificationType, AuthenticationService } from '@xdf/commons'; import { NotificationService, NotificationType, AuthenticationService } from '@xdf/commons';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { ConflictErrorDialogService } from '@xdf/gallery'; import { ConflictErrorDialogService } from '@xdf/gallery';
@Injectable() @Injectable()
export class CustomErrorHandlerInterceptor implements HttpInterceptor { export class CustomErrorHandlerInterceptor implements HttpInterceptor {
constructor( constructor(
private router: Router, private router: Router,
private translate: TranslateService, private translate: TranslateService,
private authenticationService: AuthenticationService, private authenticationService: AuthenticationService,
private notificationService: NotificationService, private notificationService: NotificationService,
private conflictErrorDialogService: ConflictErrorDialogService) { private conflictErrorDialogService: ConflictErrorDialogService) {
} }
intercept( intercept(
req: HttpRequest<any>, next: HttpHandler): Observable<any> { req: HttpRequest<any>, next: HttpHandler): Observable<any> {
return next.handle(req).pipe( return next.handle(req).pipe(
catchError((error: HttpErrorResponse) => { catchError((error: HttpErrorResponse) => {
switch (error.status) { switch (error.status) {
case 401: case 401:
const message = this.translate.instant('message.error.unauthorized'); const message = this.translate.instant('message.error.unauthorized');
this.notificationService.showMessage(message, this.translate.instant('title.error'), NotificationType.error); this.notificationService.showMessage(message, this.translate.instant('title.error'), NotificationType.error);
break; break;
case 404: case 404:
const messageError = error.error ? error.error : error.message; const messageError = error.error ? error.error : error.message;
this.notificationService.showMessage(messageError, this.translate.instant('title.error'), NotificationType.error); this.notificationService.showMessage(messageError, this.translate.instant('title.error'), NotificationType.error);
break; break;
case 409: case 409:
const messageDuplicate = this.translate.instant('message.error.duplicated'); const messageDuplicate = this.translate.instant('message.error.duplicated');
this.notificationService.showMessage(messageDuplicate, this.translate.instant('title.error'), NotificationType.error); this.notificationService.showMessage(messageDuplicate, this.translate.instant('title.error'), NotificationType.error);
break; break;
case 419:// validar cual es el código correcto case 419: // validar cual es el código correcto
this.conflictErrorDialogService.loadComponent( this.conflictErrorDialogService.loadComponent(
null, null,
'title.error.conflict', 'title.error.conflict',
'message.error.conflict', 'message.error.conflict',
error.error); error.error);
break; break;
default: default:
if (error.status === 0) { if (error.status === 0) {
this.authenticationService.login(null, null).subscribe( this.authenticationService.login(null, null).subscribe(
data => { data => {
window.location.href = './'; window.location.href = './';
});
} else {
let messageDefault = '';
if (error.error) {
if (error.error.params) {
const params = [];
error.error.params.forEach(element => {
params.push(this.translate.instant(element));
}); });
} else { messageDefault = this.translate.instant(error.error.message, params);
let message = ''; } else {
if (error.error) { if (error.error.message) {
if (error.error.params) { messageDefault = this.translate.instant(error.error.message);
const params = [];
error.error.params.forEach(element => {
params.push(this.translate.instant(element));
});
message = this.translate.instant(error.error.message, params);
} else { } else {
if (error.error.message) { messageDefault = this.translate.instant(error.error);
message = this.translate.instant(error.error.message);
} else {
message = this.translate.instant(error.error);
}
} }
} else {
message = this.translate.instant(error.message);
} }
this.notificationService.showMessage(message, this.translate.instant('title.error'), NotificationType.error); } else {
messageDefault = this.translate.instant(error.message);
} }
this.notificationService.showMessage(messageDefault, this.translate.instant('title.error'), NotificationType.error);
} }
}
return throwError(error);
}) return throwError(error);
); })
} );
} }
}
\ No newline at end of file
...@@ -28,7 +28,7 @@ export class CustomProgramsFakeBackendInterceptor implements HttpInterceptor { ...@@ -28,7 +28,7 @@ export class CustomProgramsFakeBackendInterceptor implements HttpInterceptor {
case url.match('.*' + basePath) && method === 'GET': case url.match('.*' + basePath) && method === 'GET':
return getList(); return getList();
case url.match('.*'+ basePathCotnrols + '.*') && method === 'GET': case url.match('.*' + basePathCotnrols + '.*') && method === 'GET':
return getControls(); return getControls();
default: default:
// pass through any requests not handled above // pass through any requests not handled above
......
...@@ -12,7 +12,7 @@ import { CountryDataForWizardResolver } from './resolver/country-data-wizard.res ...@@ -12,7 +12,7 @@ import { CountryDataForWizardResolver } from './resolver/country-data-wizard.res
const routes: Routes = [ const routes: Routes = [
{ {
path: 'agent', component: AgentListComponent, canActivate: [AuthGuard, ResourceAuthGuard], path: 'agent', component: AgentListComponent, canActivate: [AuthGuard, ResourceAuthGuard],
data: { data: {
program: 'CONVERSATIONAL_AGENT', program: 'CONVERSATIONAL_AGENT',
// breadcrumb: '' // breadcrumb: ''
...@@ -20,7 +20,7 @@ const routes: Routes = [ ...@@ -20,7 +20,7 @@ const routes: Routes = [
}, },
{ {
path: 'agent/detail/new', path: 'agent/detail/new',
//component: AgentDetailComponent, // component: AgentDetailComponent,
component: AgentComponent, component: AgentComponent,
resolve: { resolve: {
countryData : CountryDataForWizardResolver countryData : CountryDataForWizardResolver
...@@ -36,7 +36,7 @@ const routes: Routes = [ ...@@ -36,7 +36,7 @@ const routes: Routes = [
}, },
{ {
path: 'agent/detail/edit/:code', path: 'agent/detail/edit/:code',
//component: AgentDetailComponent, // component: AgentDetailComponent,
component: AgentComponent, component: AgentComponent,
resolve: { resolve: {
agentDetail: AgentDetailResolver, agentDetail: AgentDetailResolver,
...@@ -50,9 +50,9 @@ const routes: Routes = [ ...@@ -50,9 +50,9 @@ const routes: Routes = [
breadcrumb: 'Agentes', breadcrumb: 'Agentes',
backButton: true backButton: true
} }
},{ }, {
path: 'agent/detail/view/:code', path: 'agent/detail/view/:code',
//component: AgentDetailComponent, // component: AgentDetailComponent,
component: AgentComponent, component: AgentComponent,
resolve: { resolve: {
agentDetail: AgentDetailResolver, agentDetail: AgentDetailResolver,
......
...@@ -6,7 +6,15 @@ import {NgxTributeModule} from 'ngx-tribute'; ...@@ -6,7 +6,15 @@ import {NgxTributeModule} from 'ngx-tribute';
import { MaterialFileInputModule } from 'ngx-material-file-input'; import { MaterialFileInputModule } from 'ngx-material-file-input';
import { XdfGalleryModule } from '@xdf/gallery'; import { XdfGalleryModule } from '@xdf/gallery';
import { MatProgressSpinnerModule, MatDividerModule, MatSidenavModule, MatListModule, MatStepperModule, MatDialogModule, MatMenuModule, MatIconModule, MatSlideToggleModule, MatCheckboxModule, MatRippleModule, MatNativeDateModule, MatChipsModule, MatExpansionModule, MatTooltipModule, MatToolbarModule, MatTabsModule, MatTableModule, MatSortModule, MatSelectModule, MatRadioModule, MatPaginatorModule, MatInputModule, MatFormFieldModule, MatButtonToggleModule, MatButtonModule, MatCardModule, MatAutocompleteModule, MatSnackBarModule, MatProgressBarModule } from '@angular/material'; import { MatProgressSpinnerModule, MatDividerModule, MatSidenavModule, MatListModule } from '@angular/material';
import { MatStepperModule, MatDialogModule, MatMenuModule, MatIconModule } from '@angular/material';
import { MatSlideToggleModule, MatCheckboxModule, MatRippleModule, MatNativeDateModule } from '@angular/material';
import { MatChipsModule, MatExpansionModule, MatTooltipModule, MatToolbarModule } from '@angular/material';
import { MatTabsModule, MatTableModule, MatSortModule, MatSelectModule, MatRadioModule } from '@angular/material';
import { MatPaginatorModule, MatInputModule, MatFormFieldModule, MatButtonToggleModule } from '@angular/material';
import { MatButtonModule, MatCardModule, MatAutocompleteModule, MatSnackBarModule } from '@angular/material';
import { MatProgressBarModule } from '@angular/material';
import { SlickCarouselModule } from 'ngx-slick-carousel'; import { SlickCarouselModule } from 'ngx-slick-carousel';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
...@@ -23,17 +31,15 @@ import { CaDeploymentChannelsModalComponent } from './view/components/ca-deploym ...@@ -23,17 +31,15 @@ import { CaDeploymentChannelsModalComponent } from './view/components/ca-deploym
import { AgentStatusPipe } from './pipe/agent-status.pipe'; import { AgentStatusPipe } from './pipe/agent-status.pipe';
import { CaFileUploadModalComponent } from './view/components/ca-file-upload-modal/ca-file-upload-modal.component'; import { CaFileUploadModalComponent } from './view/components/ca-file-upload-modal/ca-file-upload-modal.component';
@NgModule({ @NgModule({
entryComponents: [ entryComponents: [
CaDeploymentChannelsModalComponent, CaDeploymentChannelsModalComponent,
CaFileUploadModalComponent CaFileUploadModalComponent
], ],
declarations: [ declarations: [
AgentComponent, AgentComponent,
AgentListComponent, AgentListComponent,
AgentDetailComponent, AgentDetailComponent,
DynamicTranslatePipe, DynamicTranslatePipe,
CaGeneralInformationComponent, CaGeneralInformationComponent,
CaFrequentQuestionsComponent, CaFrequentQuestionsComponent,
......
...@@ -11,7 +11,7 @@ export class DynamicTranslatePipe implements PipeTransform { ...@@ -11,7 +11,7 @@ export class DynamicTranslatePipe implements PipeTransform {
} }
transform(value: any, ...args: any[]): any { transform(value: any, ...args: any[]): any {
let lang = this.translateService.currentLang ? this.translateService.currentLang : this.translateService.defaultLang; const lang = this.translateService.currentLang ? this.translateService.currentLang : this.translateService.defaultLang;
let traductions; let traductions;
......
...@@ -5,7 +5,7 @@ import { Observable } from 'rxjs'; ...@@ -5,7 +5,7 @@ import { Observable } from 'rxjs';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class AgentDataForWizardResolver implements Resolve<any> { export class AgentDataForWizardResolver implements Resolve<any> {
constructor(private service: AgentService) {} constructor(private service: AgentService) {}
resolve( resolve(
...@@ -13,8 +13,8 @@ export class AgentDataForWizardResolver implements Resolve<any> { ...@@ -13,8 +13,8 @@ export class AgentDataForWizardResolver implements Resolve<any> {
state: RouterStateSnapshot state: RouterStateSnapshot
): Observable<any>|Promise<any>|any { ): Observable<any>|Promise<any>|any {
let code = route.paramMap.get('code'); const code = route.paramMap.get('code');
return this.service.getDataForWizard(parseInt(code)); return this.service.getDataForWizard(parseInt(code, 10));
} }
} }
...@@ -5,7 +5,7 @@ import { Observable } from 'rxjs'; ...@@ -5,7 +5,7 @@ import { Observable } from 'rxjs';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class AgentDetailResolver implements Resolve<any> { export class AgentDetailResolver implements Resolve<any> {
constructor(private service: AgentService) {} constructor(private service: AgentService) {}
resolve( resolve(
...@@ -13,8 +13,8 @@ export class AgentDetailResolver implements Resolve<any> { ...@@ -13,8 +13,8 @@ export class AgentDetailResolver implements Resolve<any> {
state: RouterStateSnapshot state: RouterStateSnapshot
): Observable<any>|Promise<any>|any { ): Observable<any>|Promise<any>|any {
let code = route.paramMap.get('code'); const code = route.paramMap.get('code');
return this.service.getResult(code); return this.service.getResult(code);
} }
} }
...@@ -5,7 +5,7 @@ import { Observable } from 'rxjs'; ...@@ -5,7 +5,7 @@ import { Observable } from 'rxjs';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class CountryDataForWizardResolver implements Resolve<any> { export class CountryDataForWizardResolver implements Resolve<any> {
constructor(private service: AgentService) {} constructor(private service: AgentService) {}
resolve( resolve(
......
...@@ -21,7 +21,7 @@ export class AgentService extends DynaDataService { ...@@ -21,7 +21,7 @@ export class AgentService extends DynaDataService {
}; };
} }
return this.httpClient.get(this.serviceURL + '/connection/data', { return this.httpClient.get(this.serviceURL + '/connection/data', {
params: params params
}); });
} }
...@@ -40,7 +40,7 @@ export class AgentService extends DynaDataService { ...@@ -40,7 +40,7 @@ export class AgentService extends DynaDataService {
return this.httpClient.get(this.serviceURL + '/channels'); return this.httpClient.get(this.serviceURL + '/channels');
} }
synchronize(id: number, user:string) { synchronize(id: number, user: string) {
return this.httpClient.get(this.serviceURL + '/synchronize/' + id, { return this.httpClient.get(this.serviceURL + '/synchronize/' + id, {
params: { params: {
user user
......
import { Component, OnInit, ViewChild, ViewContainerRef, Input } from '@angular/core'; import { Component, OnInit, ViewChild, ViewContainerRef, Input, AfterViewInit } from '@angular/core';
import { MatPaginator, MatSort } from '@angular/material'; import { MatPaginator, MatSort } from '@angular/material';
import { ColumnTemplate, DynaDataSource, ConfirmationDialogService, extractRSQL, FieldFilter } from '@xdf/gallery'; import { ColumnTemplate, DynaDataSource, ConfirmationDialogService, extractRSQL, FieldFilter } from '@xdf/gallery';
import { Pagination, SortField, NotificationType, NotificationService, AuthenticationService } from '@xdf/commons'; import { Pagination, SortField, NotificationType, NotificationService, AuthenticationService } from '@xdf/commons';
...@@ -135,7 +135,9 @@ const columnTemplateArray = [ ...@@ -135,7 +135,9 @@ const columnTemplateArray = [
const fieldFilters = [ const fieldFilters = [
new FieldFilter('agent_code', 'id', 'id', 'number', undefined), new FieldFilter('agent_code', 'id', 'id', 'number', undefined),
new FieldFilter('agent_name', 'name', 'name', 'string', undefined), new FieldFilter('agent_name', 'name', 'name', 'string', undefined),
new FieldFilter('agent_status', 'status', 'status', 'valpos', ({ 'DP': 'label.deployed', 'PS': 'label.sync-pending' }) as any), new FieldFilter('agent_status', 'status', 'status', 'valpos', (
{ DP: 'label.deployed', PS: 'label.sync-pending' }
) as any),
]; ];
@Component({ @Component({
...@@ -143,7 +145,7 @@ const fieldFilters = [ ...@@ -143,7 +145,7 @@ const fieldFilters = [
templateUrl: './agent-list.component.html', templateUrl: './agent-list.component.html',
styleUrls: ['./agent-list.component.scss'] styleUrls: ['./agent-list.component.scss']
}) })
export class AgentListComponent implements OnInit { export class AgentListComponent implements OnInit, AfterViewInit {
@ViewChild(MatPaginator, { static: false }) paginator: MatPaginator; @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator;
@ViewChild(MatSort, { static: false }) sort: MatSort; @ViewChild(MatSort, { static: false }) sort: MatSort;
...@@ -232,7 +234,7 @@ export class AgentListComponent implements OnInit { ...@@ -232,7 +234,7 @@ export class AgentListComponent implements OnInit {
this.pagination.currentPage = 0; this.pagination.currentPage = 0;
this.pagination.itemsPerPage = this.pagingSize; this.pagination.itemsPerPage = this.pagingSize;
this.pagination.filterExpression = "id != 0"; this.pagination.filterExpression = 'id != 0';
// Ordenación por defecto // Ordenación por defecto
if (this.sortColumn && this.sortDirection) { if (this.sortColumn && this.sortDirection) {
...@@ -264,14 +266,14 @@ export class AgentListComponent implements OnInit { ...@@ -264,14 +266,14 @@ export class AgentListComponent implements OnInit {
for (let i = 0; i < tagsTemp.length; i++) { for (let i = 0; i < tagsTemp.length; i++) {
if (tagsTemp[i].column !== 'id') { if (tagsTemp[i].column !== 'id') {
tagsTemp[i].value = tagsTemp[i].value; tagsTemp[i].value = tags[i].value;
} }
} }
this.pagination.filterExpression = extractRSQL(tagsTemp); this.pagination.filterExpression = extractRSQL(tagsTemp);
if (this.pagination.filterExpression == null || this.pagination.filterExpression == undefined) { if (this.pagination.filterExpression === null || this.pagination.filterExpression === undefined) {
this.pagination.filterExpression = "id != 0"; this.pagination.filterExpression = 'id != 0';
} }
this.dataSource.load(this.pagination); this.dataSource.load(this.pagination);
...@@ -289,9 +291,10 @@ export class AgentListComponent implements OnInit { ...@@ -289,9 +291,10 @@ export class AgentListComponent implements OnInit {
if (result) { if (result) {
this.agentService.delete(item.id).subscribe((rslt: any) => { this.agentService.delete(item.id).subscribe((rslt: any) => {
if (rslt.statusCode != 200) { if (rslt.statusCode !== 200) {
this.notificationService.showMessage( this.notificationService.showMessage(
this.translateService.instant(rslt.message), this.translateService.instant('label.error.message.title'), NotificationType.error); this.translateService.instant(rslt.message), this.translateService.instant('label.error.message.title'),
NotificationType.error);
} else { } else {
this.dataSource.load(this.pagination); this.dataSource.load(this.pagination);
} }
...@@ -308,10 +311,10 @@ export class AgentListComponent implements OnInit { ...@@ -308,10 +311,10 @@ export class AgentListComponent implements OnInit {
} }
synchronize(item) { synchronize(item) {
let user = (this.authenticationService.currentUserValue ? this.authenticationService.currentUserValue.username : 'admin'); const user = (this.authenticationService.currentUserValue ? this.authenticationService.currentUserValue.username : 'admin');
this.agentService.synchronize(item.id, user).pipe(first()).subscribe(() => { this.agentService.synchronize(item.id, user).pipe(first()).subscribe(() => {
this.notificationService.showMessage(this.translateService.instant("agent.synchronize.success"), undefined, NotificationType.success); this.notificationService.showMessage(this.translateService.instant('agent.synchronize.success'), undefined, NotificationType.success);
this.onRefresh(); this.onRefresh();
}); });
} }
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
{{'label.general-information.description' | translate}} {{'label.general-information.description' | translate}}
</div> </div>
</ng-template> </ng-template>
<byte-ca-general-information [stepper]="stepper" (onNextPage)="updateDirtyStatus($event)"></byte-ca-general-information> <byte-ca-general-information [stepper]="stepper" (nextPage)="updateDirtyStatus($event)"></byte-ca-general-information>
</mat-step> </mat-step>
<mat-step state="questions"> <mat-step state="questions">
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
{{'label.questions.description' | translate}} {{'label.questions.description' | translate}}
</div> </div>
</ng-template> </ng-template>
<byte-ca-frequent-questions [stepper]="stepper" (onNextPage)="updateDirtyStatus($event)"></byte-ca-frequent-questions> <byte-ca-frequent-questions [stepper]="stepper" (nextPage)="updateDirtyStatus($event)"></byte-ca-frequent-questions>
</mat-step> </mat-step>
<mat-step state="deployment-channels"> <mat-step state="deployment-channels">
......
import { Component, OnInit, ViewChild, Input, AfterContentChecked, AfterViewInit, ChangeDetectionStrategy, AfterContentInit, ViewContainerRef } from '@angular/core'; import { Component, OnInit, ViewChild, Input, AfterContentChecked, AfterViewInit } from '@angular/core';
import { ChangeDetectionStrategy, AfterContentInit, ViewContainerRef } from '@angular/core';
import { FormGroup, Validators, FormBuilder } from '@angular/forms'; import { FormGroup, Validators, FormBuilder } from '@angular/forms';
import { CaGeneralInformationComponent } from '../components/ca-general-information/ca-general-information.component'; import { CaGeneralInformationComponent } from '../components/ca-general-information/ca-general-information.component';
import { MAT_STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper'; import { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
import { NavigationService } from '@xdf/layouts'; import { NavigationService } from '@xdf/layouts';
import { IDirty } from '@xdf/gallery'; import { IDirty } from '@xdf/gallery';
...@@ -14,7 +15,7 @@ import { CaDeploymentChannelsComponent } from '../components/ca-deployment-chann ...@@ -14,7 +15,7 @@ import { CaDeploymentChannelsComponent } from '../components/ca-deployment-chann
templateUrl: './agent.component.html', templateUrl: './agent.component.html',
styleUrls: ['./agent.component.scss'], styleUrls: ['./agent.component.scss'],
providers: [{ providers: [{
provide: MAT_STEPPER_GLOBAL_OPTIONS, useValue: { displayDefaultIndicatorType: false } provide: STEPPER_GLOBAL_OPTIONS, useValue: { displayDefaultIndicatorType: false }
}] }]
}) })
...@@ -38,18 +39,18 @@ export class AgentComponent implements OnInit, IDirty { ...@@ -38,18 +39,18 @@ export class AgentComponent implements OnInit, IDirty {
resourceAuth: any; resourceAuth: any;
//dirty acumulado // dirty acumulado
generalDirty: boolean = false; generalDirty = false;
constructor( constructor(
private _vcRef: ViewContainerRef, private vcRef: ViewContainerRef,
private _activatedRoute: ActivatedRoute, private activatedRoute: ActivatedRoute,
private _backService: NavigationService, private backService: NavigationService,
private _router: Router private router: Router
) { ) {
this._backService.backAnnounced$.subscribe(data => { this.backService.backAnnounced$.subscribe(data => {
this._router.navigate(['/configuration/agent']); this.router.navigate(['/configuration/agent']);
}); });
} }
...@@ -60,21 +61,21 @@ export class AgentComponent implements OnInit, IDirty { ...@@ -60,21 +61,21 @@ export class AgentComponent implements OnInit, IDirty {
|| this.frequentQuestionsComponent.isDirty(); || this.frequentQuestionsComponent.isDirty();
if (dirty) { if (dirty) {
dirty = this.deploymentChannelsComponent.isDirty() dirty = this.deploymentChannelsComponent.isDirty();
} }
return dirty; return dirty;
} }
getRef(): ViewContainerRef { getRef(): ViewContainerRef {
return this._vcRef; return this.vcRef;
} }
ngOnInit() { ngOnInit() {
this.stepper.selectedIndex = 0; this.stepper.selectedIndex = 0;
const authList = this._activatedRoute.snapshot.paramMap['authorization']; const authList = this.activatedRoute.snapshot.paramMap['authorization'];
this.resourceAuth = new Object(); this.resourceAuth = new Object();
...@@ -86,13 +87,13 @@ export class AgentComponent implements OnInit, IDirty { ...@@ -86,13 +87,13 @@ export class AgentComponent implements OnInit, IDirty {
console.log(this.resourceAuth); console.log(this.resourceAuth);
this.isNew = this._activatedRoute.snapshot.data.mode === 'create'; this.isNew = this.activatedRoute.snapshot.data.mode === 'create';
if (this.isNew) { if (this.isNew) {
this.agentDetail = { this.agentDetail = {
}; };
} else { } else {
this.agentDetail = this._activatedRoute.snapshot.data.agentDetail; this.agentDetail = this.activatedRoute.snapshot.data.agentDetail;
} }
......
...@@ -10,7 +10,7 @@ export class CaDeploymentChannelsModalComponent implements OnInit { ...@@ -10,7 +10,7 @@ export class CaDeploymentChannelsModalComponent implements OnInit {
channels: Array<any>; channels: Array<any>;
selectedChannel: any; selectedChannel: any;
applicationSettings:any; applicationSettings: any;
constructor( constructor(
public dialogRef: MatDialogRef<CaDeploymentChannelsModalComponent>, public dialogRef: MatDialogRef<CaDeploymentChannelsModalComponent>,
......
...@@ -15,9 +15,11 @@ import { Form, FormControl, FormGroup, FormGroupDirective, NgForm } from '@angul ...@@ -15,9 +15,11 @@ import { Form, FormControl, FormGroup, FormGroupDirective, NgForm } from '@angul
}) })
export class CaDeploymentChannelsComponent implements OnInit { export class CaDeploymentChannelsComponent implements OnInit {
@Input() stepper: MatStepper; @Input()
stepper: MatStepper;
@Input() changes: boolean = false; @Input()
changes = false;
@ViewChild('fieldForm', {static: false}) @ViewChild('fieldForm', {static: false})
fieldFormList: any; fieldFormList: any;
...@@ -25,13 +27,13 @@ export class CaDeploymentChannelsComponent implements OnInit { ...@@ -25,13 +27,13 @@ export class CaDeploymentChannelsComponent implements OnInit {
agentDetail: any; agentDetail: any;
channels: Array<any>; channels: Array<any>;
deploymentChannels: Array<any> = new Array<any>(); deploymentChannels: Array<any> = new Array<any>();
dirty: boolean = true; dirty = true;
step = -1; step = -1;
viewMode: boolean = false; viewMode = false;
isAvaliableChannels: boolean = false; isAvaliableChannels = false;
mode: string = 'new'; mode = 'new';
detailText: string = "Detail"; detailText = 'Detail';
titleText: string = "Titulo" titleText = 'Titulo';
constructor( constructor(
private activatedRoute: ActivatedRoute, private activatedRoute: ActivatedRoute,
...@@ -70,8 +72,8 @@ export class CaDeploymentChannelsComponent implements OnInit { ...@@ -70,8 +72,8 @@ export class CaDeploymentChannelsComponent implements OnInit {
buildList() { buildList() {
if (this.channels && this.deploymentChannels) { if (this.channels && this.deploymentChannels) {
for (let deploymentChannel of this.deploymentChannels) { for (const deploymentChannel of this.deploymentChannels) {
for (let channel of this.channels) { for (const channel of this.channels) {
if (channel.id === deploymentChannel.channelId) { if (channel.id === deploymentChannel.channelId) {
...@@ -82,8 +84,8 @@ export class CaDeploymentChannelsComponent implements OnInit { ...@@ -82,8 +84,8 @@ export class CaDeploymentChannelsComponent implements OnInit {
deploymentChannel.suggestDetail = channel.suggestDetail; deploymentChannel.suggestDetail = channel.suggestDetail;
for (let parameter of deploymentChannel.parameters) { for (const parameter of deploymentChannel.parameters) {
for (let field of channel.parameters) { for (const field of channel.parameters) {
if (parameter.channelParamName === field.name) { if (parameter.channelParamName === field.name) {
parameter.label = field.label; parameter.label = field.label;
...@@ -107,10 +109,10 @@ export class CaDeploymentChannelsComponent implements OnInit { ...@@ -107,10 +109,10 @@ export class CaDeploymentChannelsComponent implements OnInit {
buildAvaliableChannels() { buildAvaliableChannels() {
this.isAvaliableChannels = false; this.isAvaliableChannels = false;
mainLoop: for (let channel of this.channels) { mainLoop: for (const channel of this.channels) {
channel.disabled = false; channel.disabled = false;
for (let deploymentChannel of this.deploymentChannels) { for (const deploymentChannel of this.deploymentChannels) {
if (channel.id === deploymentChannel.channelId) { if (channel.id === deploymentChannel.channelId) {
channel.disabled = true; channel.disabled = true;
continue mainLoop; continue mainLoop;
...@@ -123,7 +125,7 @@ export class CaDeploymentChannelsComponent implements OnInit { ...@@ -123,7 +125,7 @@ export class CaDeploymentChannelsComponent implements OnInit {
} }
addChannel() { addChannel() {
let dialog = this.matDialog.open(CaDeploymentChannelsModalComponent, { const dialog = this.matDialog.open(CaDeploymentChannelsModalComponent, {
width: '500px', width: '500px',
data: { data: {
message: '', message: '',
...@@ -133,7 +135,7 @@ export class CaDeploymentChannelsComponent implements OnInit { ...@@ -133,7 +135,7 @@ export class CaDeploymentChannelsComponent implements OnInit {
dialog.afterClosed().subscribe(result => { dialog.afterClosed().subscribe(result => {
if (result) { if (result) {
let selectedChannel = { ...result }; const selectedChannel = { ...result };
selectedChannel.channelId = selectedChannel.id; selectedChannel.channelId = selectedChannel.id;
selectedChannel.channelName = selectedChannel.name; selectedChannel.channelName = selectedChannel.name;
...@@ -163,7 +165,7 @@ export class CaDeploymentChannelsComponent implements OnInit { ...@@ -163,7 +165,7 @@ export class CaDeploymentChannelsComponent implements OnInit {
} }
save() { save() {
let isValid: boolean = this.validate(); const isValid: boolean = this.validate();
if (!isValid) { if (!isValid) {
if (this.fieldFormList && this.fieldFormList.control) { if (this.fieldFormList && this.fieldFormList.control) {
...@@ -172,7 +174,7 @@ export class CaDeploymentChannelsComponent implements OnInit { ...@@ -172,7 +174,7 @@ export class CaDeploymentChannelsComponent implements OnInit {
return; return;
} }
let agent: any = {}; const agent: any = {};
agent.id = this.agentDetail.id; agent.id = this.agentDetail.id;
agent.name = this.agentDetail.name; agent.name = this.agentDetail.name;
...@@ -186,8 +188,8 @@ export class CaDeploymentChannelsComponent implements OnInit { ...@@ -186,8 +188,8 @@ export class CaDeploymentChannelsComponent implements OnInit {
agent.status = this.agentDetail.status; agent.status = this.agentDetail.status;
agent.deploymentChannels = []; agent.deploymentChannels = [];
for (let deploymentChannel of this.deploymentChannels) { for (const deploymentChannel of this.deploymentChannels) {
let deploymentChannelTmp: any = {}; const deploymentChannelTmp: any = {};
deploymentChannelTmp.id = deploymentChannel.id; deploymentChannelTmp.id = deploymentChannel.id;
deploymentChannelTmp.name = deploymentChannel.name; deploymentChannelTmp.name = deploymentChannel.name;
...@@ -195,8 +197,8 @@ export class CaDeploymentChannelsComponent implements OnInit { ...@@ -195,8 +197,8 @@ export class CaDeploymentChannelsComponent implements OnInit {
deploymentChannelTmp.channelId = deploymentChannel.channelId; deploymentChannelTmp.channelId = deploymentChannel.channelId;
deploymentChannelTmp.parameters = []; deploymentChannelTmp.parameters = [];
for (let parameter of deploymentChannel.parameters) { for (const parameter of deploymentChannel.parameters) {
let parameterTmp: any = {}; const parameterTmp: any = {};
parameterTmp.id = parameter.id; parameterTmp.id = parameter.id;
parameterTmp.value = parameter.value; parameterTmp.value = parameter.value;
...@@ -238,22 +240,22 @@ export class CaDeploymentChannelsComponent implements OnInit { ...@@ -238,22 +240,22 @@ export class CaDeploymentChannelsComponent implements OnInit {
validate(): boolean { validate(): boolean {
let valid = true; let valid = true;
mainLoop: for (let deploymentChannel of this.deploymentChannels) { mainLoop: for (const deploymentChannel of this.deploymentChannels) {
let deploymentChannelTmp: any = {}; const deploymentChannelTmp: any = {};
// if (!deploymentChannel.name) { // if (!deploymentChannel.name) {
// valid = false; // valid = false;
// break; // break;
// } // }
for (let parameter of deploymentChannel.parameters) { for (const parameter of deploymentChannel.parameters) {
parameter.error = false; parameter.error = false;
if (!parameter.value) { if (!parameter.value) {
valid = false; valid = false;
break mainLoop; break mainLoop;
} }
if (parameter.regex) { if (parameter.regex) {
let regex = new RegExp(parameter.regex); const regex = new RegExp(parameter.regex);
if (!regex.test(parameter.value)) { if (!regex.test(parameter.value)) {
parameter.error = true; parameter.error = true;
valid = false; valid = false;
......
...@@ -39,19 +39,19 @@ export class CaFileUploadModalComponent implements OnInit { ...@@ -39,19 +39,19 @@ export class CaFileUploadModalComponent implements OnInit {
dataSource = new MatTableDataSource([]); dataSource = new MatTableDataSource([]);
displayedColumns: string[] = []; displayedColumns: string[] = [];
applicationSettings:any; applicationSettings: any;
constructor( constructor(
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private agentService: AgentService, private agentService: AgentService,
private _notificationService: NotificationService, private notificationService: NotificationService,
private _translateService: TranslateService, private translateService: TranslateService,
public dialogRef: MatDialogRef<CaFileUploadModalComponent>, public dialogRef: MatDialogRef<CaFileUploadModalComponent>,
@Inject(MAT_DIALOG_DATA) public data: any @Inject(MAT_DIALOG_DATA) public data: any
) { ) {
this.formGroup = this.formBuilder.group({ this.formGroup = this.formBuilder.group({
description: new FormControl({ value: "", disabled: false }), description: new FormControl({ value: '', disabled: false }),
file: new FormControl({ value: '', disabled: false }), file: new FormControl({ value: '', disabled: false }),
filename: new FormControl({ value: '', disabled: true }) filename: new FormControl({ value: '', disabled: true })
}); });
...@@ -72,20 +72,20 @@ export class CaFileUploadModalComponent implements OnInit { ...@@ -72,20 +72,20 @@ export class CaFileUploadModalComponent implements OnInit {
buildErrorDetail(status, detail) { buildErrorDetail(status, detail) {
this.fileErrorDetail = undefined; this.fileErrorDetail = undefined;
if ("CONTENT_ERROR" === status) { if ('CONTENT_ERROR' === status) {
this.displayedColumns = ['line', 'type', 'value']; this.displayedColumns = ['line', 'type', 'value'];
if (detail) { if (detail) {
let fileErrorDetailTemp = []; const fileErrorDetailTemp = [];
for (let line of Object.keys(detail)) { for (const line of Object.keys(detail)) {
let object = detail[line]; const object = detail[line];
let type = Object.keys(object)[0]; const type = Object.keys(object)[0];
fileErrorDetailTemp.push({ fileErrorDetailTemp.push({
line: line, line,
type: type, type,
value: object[type], value: object[type],
}); });
} }
...@@ -97,18 +97,18 @@ export class CaFileUploadModalComponent implements OnInit { ...@@ -97,18 +97,18 @@ export class CaFileUploadModalComponent implements OnInit {
} }
} else if ("HEADER_ERROR" === status) { } else if ('HEADER_ERROR' === status) {
this.displayedColumns = ['header', 'value']; this.displayedColumns = ['header', 'value'];
if (detail) { if (detail) {
let fileErrorDetailTemp = []; const fileErrorDetailTemp = [];
for (let header of Object.keys(detail)) { for (const header of Object.keys(detail)) {
let value = detail[header]; const value = detail[header];
fileErrorDetailTemp.push({ fileErrorDetailTemp.push({
header: header, header,
value: value, value,
}); });
} }
...@@ -131,17 +131,17 @@ export class CaFileUploadModalComponent implements OnInit { ...@@ -131,17 +131,17 @@ export class CaFileUploadModalComponent implements OnInit {
if (event[i] instanceof File) { if (event[i] instanceof File) {
const reader = new FileReader(); const reader = new FileReader();
reader.onload = () => { reader.onload = () => {
//this.formGroup.controls['imageAvatar'].setValue(reader.result as string); // this.formGroup.controls['imageAvatar'].setValue(reader.result as string);
}; };
reader.readAsDataURL(event[i]); reader.readAsDataURL(event[i]);
let fileSelected = { const fileSelected = {
data: event[i], data: event[i],
state: 'in', state: 'in',
inProgress: false, inProgress: false,
progress: 0, progress: 0,
canRetry: false canRetry: false
} };
this.validateFile(fileSelected); this.validateFile(fileSelected);
} }
...@@ -174,12 +174,12 @@ export class CaFileUploadModalComponent implements OnInit { ...@@ -174,12 +174,12 @@ export class CaFileUploadModalComponent implements OnInit {
if (typeof (event) === 'object') { if (typeof (event) === 'object') {
this.fileErrorDetail = undefined; this.fileErrorDetail = undefined;
this.enabledOK = false; this.enabledOK = false;
let info = event.body; const info = event.body;
this.fileInfo = new FileUploadModel(); this.fileInfo = new FileUploadModel();
if (info) { if (info) {
let status = info.fileValidationResult.status; const status = info.fileValidationResult.status;
if ("OK" === status) { if ('OK' === status) {
this.fileInfo.id = info.id; this.fileInfo.id = info.id;
this.fileInfo.description = this.formGroup.controls.description.value; this.fileInfo.description = this.formGroup.controls.description.value;
this.fileInfo.uuid = info.uuid; this.fileInfo.uuid = info.uuid;
...@@ -191,20 +191,21 @@ export class CaFileUploadModalComponent implements OnInit { ...@@ -191,20 +191,21 @@ export class CaFileUploadModalComponent implements OnInit {
this.enabledOK = true; this.enabledOK = true;
this.fileErrorDetail = undefined; this.fileErrorDetail = undefined;
} else if ("INCOMPATIBLE_EXTENSION" === status) { } else if ('INCOMPATIBLE_EXTENSION' === status) {
this.formGroup.controls.file.setValue(null); this.formGroup.controls.file.setValue(null);
let message = "label.file.incompatible.extension"; const message = 'label.file.incompatible.extension';
this.enabledOK = false; this.enabledOK = false;
this.fileErrorDetail = undefined; this.fileErrorDetail = undefined;
this._notificationService.showMessage(this._translateService.instant(message) + "[" + this.accept + "]", null, NotificationType.error); this.notificationService.showMessage(this.translateService.instant(message)
+ '[' + this.accept + ']', null, NotificationType.error);
} else if ("CONTENT_ERROR" === status) { } else if ('CONTENT_ERROR' === status) {
this.formGroup.controls.file.setValue(null); this.formGroup.controls.file.setValue(null);
this.enabledOK = false; this.enabledOK = false;
this.buildErrorDetail(status, info.fileValidationResult.recordsErrorMap); this.buildErrorDetail(status, info.fileValidationResult.recordsErrorMap);
} else if ("HEADER_ERROR" === status) { } else if ('HEADER_ERROR' === status) {
this.formGroup.controls.file.setValue(null); this.formGroup.controls.file.setValue(null);
this.enabledOK = false; this.enabledOK = false;
......
import { Component, OnInit, Input, ViewContainerRef, ViewChild, Output, EventEmitter } from '@angular/core'; import { Component, OnInit, Input, ViewContainerRef, ViewChild, Output } from '@angular/core';
import { AfterViewInit, EventEmitter } from '@angular/core';
import { MatStepper, MatDialog, MatTableDataSource, MatSort } from '@angular/material'; import { MatStepper, MatDialog, MatTableDataSource, MatSort } from '@angular/material';
import { ActivatedRoute, Router } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
import { animate, trigger, state, transition, style } from '@angular/animations'; import { animate, trigger, state, transition, style } from '@angular/animations';
...@@ -19,16 +20,18 @@ import { CaFileUploadModalComponent, FileUploadModel } from '../ca-file-upload-m ...@@ -19,16 +20,18 @@ import { CaFileUploadModalComponent, FileUploadModel } from '../ca-file-upload-m
]) ])
] ]
}) })
export class CaFrequentQuestionsComponent implements OnInit { export class CaFrequentQuestionsComponent implements OnInit, AfterViewInit {
@ViewChild(MatSort, { static: false }) sort: MatSort; @ViewChild(MatSort, { static: false }) sort: MatSort;
@Input() stepper: MatStepper; @Input()
stepper: MatStepper;
@Output() onNextPage: EventEmitter<boolean> = new EventEmitter<boolean>(); @Output()
nextPage: EventEmitter<boolean> = new EventEmitter<boolean>();
public resourceAuth = new Object(); public resourceAuth = new Object();
dirty: boolean = false; dirty = false;
...@@ -38,29 +41,30 @@ export class CaFrequentQuestionsComponent implements OnInit { ...@@ -38,29 +41,30 @@ export class CaFrequentQuestionsComponent implements OnInit {
dataSource = new MatTableDataSource<FileUploadModel>([]); dataSource = new MatTableDataSource<FileUploadModel>([]);
mapStatus = { mapStatus = {
"LO": { LO: {
"class": "label label-primary", class: 'label label-primary',
"text": "label.status.loaded" text: 'label.status.loaded'
}, },
"PS": { PS: {
"class": "label label-warning", class: 'label label-warning',
"text": "label.status.pending" text: 'label.status.pending'
} }
}; };
files = []; files = [];
viewMode: boolean; viewMode: boolean;
constructor(protected route: ActivatedRoute, constructor(
protected route: ActivatedRoute,
protected router: Router, protected router: Router,
protected vcRef: ViewContainerRef, protected vcRef: ViewContainerRef,
protected authorizationService: AuthorizationService, protected authorizationService: AuthorizationService,
private translate: TranslateService, private translate: TranslateService,
private _activatedRoute: ActivatedRoute, private activatedRoute: ActivatedRoute,
private matDialog: MatDialog private matDialog: MatDialog
) { ) {
this.viewMode = this._activatedRoute.snapshot.data.mode === 'view'; this.viewMode = this.activatedRoute.snapshot.data.mode === 'view';
} }
...@@ -89,7 +93,7 @@ export class CaFrequentQuestionsComponent implements OnInit { ...@@ -89,7 +93,7 @@ export class CaFrequentQuestionsComponent implements OnInit {
} }
setDataForWizard(result: any) { setDataForWizard(result: any) {
console.log(result) console.log(result);
/* /*
this.protocols = result.connectionProtocolOptions; this.protocols = result.connectionProtocolOptions;
this.generalProperties = result.generalProperties; this.generalProperties = result.generalProperties;
...@@ -112,15 +116,15 @@ export class CaFrequentQuestionsComponent implements OnInit { ...@@ -112,15 +116,15 @@ export class CaFrequentQuestionsComponent implements OnInit {
} }
addFile() { addFile() {
let dialog = this.matDialog.open(CaFileUploadModalComponent, { const dialog = this.matDialog.open(CaFileUploadModalComponent, {
width: '600px', width: '600px',
data: null data: null
}); });
dialog.afterClosed().subscribe(result => { dialog.afterClosed().subscribe(result => {
if (result) { if (result) {
let fileAdded = { ...result }; const fileAdded = { ...result };
let listTemp = this.dataSource.data; const listTemp = this.dataSource.data;
listTemp.push(fileAdded); listTemp.push(fileAdded);
this.dataSource.data = listTemp; this.dataSource.data = listTemp;
this.dirty = true; this.dirty = true;
...@@ -131,27 +135,25 @@ export class CaFrequentQuestionsComponent implements OnInit { ...@@ -131,27 +135,25 @@ export class CaFrequentQuestionsComponent implements OnInit {
onEditRecord(item, index) { onEditRecord(item, index) {
item.editable = true; item.editable = true;
let dialog = this.matDialog.open(CaFileUploadModalComponent, { const dialog = this.matDialog.open(CaFileUploadModalComponent, {
width: '500px', width: '500px',
data: item data: item
}); });
dialog.afterClosed().subscribe(result => { dialog.afterClosed().subscribe(result => {
if (result) { if (result) {
let fileEdited = { ...result }; const fileEdited = { ...result };
let listTemp = this.dataSource.data; const listTemp = this.dataSource.data;
listTemp[index] = fileEdited; listTemp[index] = fileEdited;
this.dataSource.data = listTemp; this.dataSource.data = listTemp;
} }
}); });
} }
saveQuestions(validateForm: boolean) { saveQuestions(validateForm: boolean) {
let success = true; const success = true;
this.agentDetail.frequentQuestions = this.dataSource.data; this.agentDetail.frequentQuestions = this.dataSource.data;
...@@ -159,7 +161,7 @@ export class CaFrequentQuestionsComponent implements OnInit { ...@@ -159,7 +161,7 @@ export class CaFrequentQuestionsComponent implements OnInit {
} }
onDeleteRecord(item, index) { onDeleteRecord(item, index) {
let listTemp = this.dataSource.data; const listTemp = this.dataSource.data;
listTemp.splice(index, 1); listTemp.splice(index, 1);
this.dataSource.data = listTemp; this.dataSource.data = listTemp;
this.dirty = true; this.dirty = true;
...@@ -176,7 +178,7 @@ export class CaFrequentQuestionsComponent implements OnInit { ...@@ -176,7 +178,7 @@ export class CaFrequentQuestionsComponent implements OnInit {
} }
if (this.saveQuestions(true)) { if (this.saveQuestions(true)) {
this.onNextPage.emit(this.isDirty()); this.nextPage.emit(this.isDirty());
this.stepper.next(); this.stepper.next();
} }
} }
......
...@@ -25,17 +25,19 @@ export const FILE_TYPE = { ...@@ -25,17 +25,19 @@ export const FILE_TYPE = {
}) })
export class CaGeneralInformationComponent implements OnInit { export class CaGeneralInformationComponent implements OnInit {
@Input() stepper: MatStepper; @Input()
stepper: MatStepper;
@Output() onNextPage: EventEmitter<boolean> = new EventEmitter<boolean>(); @Output()
nextPage: EventEmitter<boolean> = new EventEmitter<boolean>();
agentDetail: any; agentDetail: any;
formGroup: FormGroup; formGroup: FormGroup;
viewMode: boolean; viewMode: boolean;
mode: string = 'new'; mode = 'new';
imageName = "imageAvatar"; imageName = 'imageAvatar';
urlBase = ''; urlBase = '';
countries = []; countries = [];
...@@ -43,41 +45,41 @@ export class CaGeneralInformationComponent implements OnInit { ...@@ -43,41 +45,41 @@ export class CaGeneralInformationComponent implements OnInit {
languages = [ languages = [
{ {
"code": "ES", code: 'ES',
"name": "Español" name: 'Español'
} }
]; ];
types = [ types = [
{ {
"code": "FQ", code: 'FQ',
"name": "Agente de preguntas frecuentes" name: 'Agente de preguntas frecuentes'
} }
]; ];
acceptedImageTypes = ['image/png', 'image/jpeg', 'image/gif']; acceptedImageTypes = ['image/png', 'image/jpeg', 'image/gif'];
acceptedTypes = "PNG, JPEG, GIF"; acceptedTypes = 'PNG, JPEG, GIF';
constructor( constructor(
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private _activatedRoute: ActivatedRoute, private activatedRoute: ActivatedRoute,
private _notificationService: NotificationService, private notificationService: NotificationService,
private _translateService: TranslateService private translateService: TranslateService
) { ) {
this.mode = this._activatedRoute.snapshot.data.mode; this.mode = this.activatedRoute.snapshot.data.mode;
this.viewMode = this.mode === 'view'; this.viewMode = this.mode === 'view';
this.countries = this._activatedRoute.snapshot.data.countryData; this.countries = this.activatedRoute.snapshot.data.countryData;
this.formGroup = this.formBuilder.group({ this.formGroup = this.formBuilder.group({
name: new FormControl({ value: "", disabled: this.viewMode }), name: new FormControl({ value: '', disabled: this.viewMode }),
description: new FormControl({ value: "", disabled: this.viewMode }), description: new FormControl({ value: '', disabled: this.viewMode }),
version: new FormControl({ value: "", disabled: this.viewMode }), version: new FormControl({ value: '', disabled: this.viewMode }),
imageAvatar: new FormControl({ value: "", disabled: this.viewMode }, { validators: [Validators.required] }), imageAvatar: new FormControl({ value: '', disabled: this.viewMode }, { validators: [Validators.required] }),
country: new FormControl({ value: "", disabled: this.viewMode }), country: new FormControl({ value: '', disabled: this.viewMode }),
timezone: new FormControl({ value: "", disabled: this.viewMode }), timezone: new FormControl({ value: '', disabled: this.viewMode }),
language: new FormControl({ value: "", disabled: this.viewMode }), language: new FormControl({ value: '', disabled: this.viewMode }),
type: new FormControl({ value: "", disabled: this.viewMode }) type: new FormControl({ value: '', disabled: this.viewMode })
}); });
} }
...@@ -128,7 +130,7 @@ export class CaGeneralInformationComponent implements OnInit { ...@@ -128,7 +130,7 @@ export class CaGeneralInformationComponent implements OnInit {
uploadFiles(event) { uploadFiles(event) {
for (const i in event) { for (const i in event) {
if (event[i] instanceof File) { if (event[i] instanceof File) {
let eventTemp = event[i]; const eventTemp = event[i];
if (this.acceptedImageTypes.includes(eventTemp.type)) { if (this.acceptedImageTypes.includes(eventTemp.type)) {
...@@ -138,15 +140,16 @@ export class CaGeneralInformationComponent implements OnInit { ...@@ -138,15 +140,16 @@ export class CaGeneralInformationComponent implements OnInit {
}; };
reader.readAsDataURL(event[i]); reader.readAsDataURL(event[i]);
} else { } else {
let message = "label.imageAvatar.incompatible.extension"; const message = 'label.imageAvatar.incompatible.extension';
this._notificationService.showMessage(this._translateService.instant(message) + "[" + this.acceptedTypes + "]", null, NotificationType.error); this.notificationService.showMessage(this.translateService.instant(message) +
'[' + this.acceptedTypes + ']', null, NotificationType.error);
} }
} }
} }
} }
onCountryChange(obj, deleteTimeZone?: boolean) { onCountryChange(obj, deleteTimeZone?: boolean) {
let selectedCountry = obj.value; const selectedCountry = obj.value;
this.timezones = []; this.timezones = [];
if (deleteTimeZone) { if (deleteTimeZone) {
...@@ -154,7 +157,7 @@ export class CaGeneralInformationComponent implements OnInit { ...@@ -154,7 +157,7 @@ export class CaGeneralInformationComponent implements OnInit {
} }
if (selectedCountry) { if (selectedCountry) {
for (var index in this.countries) { for (const index in this.countries) {
if (selectedCountry === this.countries[index].id) { if (selectedCountry === this.countries[index].id) {
this.timezones = this.countries[index].timezones; this.timezones = this.countries[index].timezones;
break; break;
...@@ -170,7 +173,7 @@ export class CaGeneralInformationComponent implements OnInit { ...@@ -170,7 +173,7 @@ export class CaGeneralInformationComponent implements OnInit {
} }
if (this.saveGeneralInformation(true)) { if (this.saveGeneralInformation(true)) {
this.onNextPage.emit(this.isDirty()); this.nextPage.emit(this.isDirty());
this.stepper.next(); this.stepper.next();
} }
} }
......
import { HttpClient, HttpEvent, HttpErrorResponse, HttpEventType } from '@angular/common/http'; import { HttpClient, HttpEvent, HttpErrorResponse, HttpEventType } from '@angular/common/http';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
export class UploadService { export class UploadService {
SERVER_URL: string = "./service/agent"; SERVER_URL = './service/agent';
constructor(private httpClient: HttpClient) { } constructor(private httpClient: HttpClient) { }
public upload(formData) { public upload(formData) {
return this.httpClient.post<any>(this.SERVER_URL, formData, { return this.httpClient.post<any>(this.SERVER_URL, formData, {
reportProgress: true, reportProgress: true,
observe: 'events' observe: 'events'
}); });
} }
} }
...@@ -19,7 +19,7 @@ import { LayoutModule } from '@angular/cdk/layout'; ...@@ -19,7 +19,7 @@ import { LayoutModule } from '@angular/cdk/layout';
TranslateModule, TranslateModule,
LayoutModule LayoutModule
], ],
entryComponents:[ entryComponents: [
], ],
exports: [ exports: [
BytebotLayoutComponent BytebotLayoutComponent
......
...@@ -8,7 +8,7 @@ import { detectBody } from '../app.helpers'; ...@@ -8,7 +8,7 @@ import { detectBody } from '../app.helpers';
}) })
export class BytebotLayoutComponent implements OnInit { export class BytebotLayoutComponent implements OnInit {
constructor(//protected toogleService: ToogleService constructor(// protected toogleService: ToogleService
) { } ) { }
ngOnInit() { ngOnInit() {
...@@ -25,8 +25,8 @@ export class BytebotLayoutComponent implements OnInit { ...@@ -25,8 +25,8 @@ export class BytebotLayoutComponent implements OnInit {
} }
onToggle() { onToggle() {
console.log("test"); console.log('test');
//this.toogleService.onToggle(true); // this.toogleService.onToggle(true);
} }
} }
...@@ -5,7 +5,7 @@ import { CustomerInteractionComponent } from './views/customer-interaction-dashb ...@@ -5,7 +5,7 @@ import { CustomerInteractionComponent } from './views/customer-interaction-dashb
const routes: Routes = [ const routes: Routes = [
{ {
path: 'operative', component: OperativeDashboardComponent, path: 'operative', component: OperativeDashboardComponent,
data: { data: {
program: 'CONVERSATIONAL_AGENT', program: 'CONVERSATIONAL_AGENT',
breadcrumb: 'Operativo', breadcrumb: 'Operativo',
......
...@@ -4,7 +4,8 @@ import { DashboardsRoutingModule } from './dashboards-routing.module'; ...@@ -4,7 +4,8 @@ import { DashboardsRoutingModule } from './dashboards-routing.module';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { ReactiveFormsModule, FormsModule } from '@angular/forms'; import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { MatFormFieldModule, MatSelectModule, MatTooltipModule, MatButtonModule, MatDatepickerModule, MatInputModule, MatPaginatorModule, MatSortModule, MatIconModule } from '@angular/material'; import { MatFormFieldModule, MatSelectModule, MatTooltipModule, MatButtonModule, MatDatepickerModule,
MatInputModule, MatPaginatorModule, MatSortModule, MatIconModule } from '@angular/material';
import { XdfSettingsModule } from '@xdf/settings'; import { XdfSettingsModule } from '@xdf/settings';
import { XdfLayoutsModule } from '@xdf/layouts'; import { XdfLayoutsModule } from '@xdf/layouts';
import { OperativeDashboardComponent } from './views/operative-dashboard/components/operative-dashboard/operative-dashboard.component'; import { OperativeDashboardComponent } from './views/operative-dashboard/components/operative-dashboard/operative-dashboard.component';
...@@ -23,7 +24,7 @@ import { GaugeChartComponent } from './views/operative-dashboard/components/gaug ...@@ -23,7 +24,7 @@ import { GaugeChartComponent } from './views/operative-dashboard/components/gaug
import { GaugeChartModule } from 'angular-gauge-chart'; import { GaugeChartModule } from 'angular-gauge-chart';
import { InactivitySesionComponent } from './views/operative-dashboard/components/inactivity-sesion/inactivity-sesion.component'; import { InactivitySesionComponent } from './views/operative-dashboard/components/inactivity-sesion/inactivity-sesion.component';
import { HeatMapComponent } from './views/operative-dashboard/components/heat-map/heat-map.component'; import { HeatMapComponent } from './views/operative-dashboard/components/heat-map/heat-map.component';
import { OperativeDashboardFilterComponent } from './views/operative-dashboard/components/operative-dashboard-filter/operative-dashboard-filter.component' import { OperativeDashboardFilterComponent } from './views/operative-dashboard/components/operative-dashboard-filter/operative-dashboard-filter.component';
import { NgxMatDateAdapter, NgxMatDatetimePickerModule, NgxMatNativeDateModule, NgxMatTimepickerModule } from '@angular-material-components/datetime-picker'; import { NgxMatDateAdapter, NgxMatDatetimePickerModule, NgxMatNativeDateModule, NgxMatTimepickerModule } from '@angular-material-components/datetime-picker';
import { LocalizedDateModule } from '@xdf/commons'; import { LocalizedDateModule } from '@xdf/commons';
import { StackedColumnChartComponent } from './views/customer-interaction-dashboard/componentes/stacked-column-chart/stacked-column-chart.component'; import { StackedColumnChartComponent } from './views/customer-interaction-dashboard/componentes/stacked-column-chart/stacked-column-chart.component';
...@@ -38,9 +39,8 @@ import { AvgIntentByCustomerComponent } from './views/customer-interaction-dashb ...@@ -38,9 +39,8 @@ import { AvgIntentByCustomerComponent } from './views/customer-interaction-dashb
import { TracingIntentByCustomerComponent } from './views/customer-interaction-dashboard/componentes/tracing-intent-by-customer/tracing-intent-by-customer.component'; import { TracingIntentByCustomerComponent } from './views/customer-interaction-dashboard/componentes/tracing-intent-by-customer/tracing-intent-by-customer.component';
import { MillisToDayHourMinuteSecond } from './pipes/millis-to-day-hour-minute-second.pipe'; import { MillisToDayHourMinuteSecond } from './pipes/millis-to-day-hour-minute-second.pipe';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
export function highchartsModules() { export function highchartsModules() {
// apply Highcharts Modules to this array // apply Highcharts Modules to this array
return [ more, exporting, highmaps, sankey]; return [ more, exporting, highmaps, sankey];
} }
......
...@@ -9,26 +9,26 @@ export class MillisToDayHourMinuteSecond implements PipeTransform { ...@@ -9,26 +9,26 @@ export class MillisToDayHourMinuteSecond implements PipeTransform {
constructor(private translateService: TranslateService) {} constructor(private translateService: TranslateService) {}
transform(value: any, ...args: any[]) { transform(value: any, ...args: any[]) {
let valueNumber: number; let valueNumber: number;
let type = typeof value; const type = typeof value;
if (type === 'number') { if (type === 'number') {
valueNumber = value; valueNumber = value;
} else if (type === 'string') { } else if (type === 'string') {
valueNumber = + value; valueNumber = + value;
} }
if (valueNumber > 0) { if (valueNumber > 0) {
let days = Math.trunc(valueNumber / 86400); const days = Math.trunc(valueNumber / 86400);
valueNumber = valueNumber % 86400; valueNumber = valueNumber % 86400;
let hours = Math.trunc(valueNumber / 3600); const hours = Math.trunc(valueNumber / 3600);
valueNumber = valueNumber % 3600; valueNumber = valueNumber % 3600;
let minutes = Math.trunc(valueNumber / 60); const minutes = Math.trunc(valueNumber / 60);
valueNumber = valueNumber % 60; valueNumber = valueNumber % 60;
let seconds = valueNumber; const seconds = valueNumber;
return (days < 10 ? '0' : '') + days + this.translateService.instant("pipe.format.day") return (days < 10 ? '0' : '') + days + this.translateService.instant('pipe.format.day')
+ ' ' + (hours < 10 ? '0' : '') + hours + this.translateService.instant("pipe.format.hour") + ' ' + (hours < 10 ? '0' : '') + hours + this.translateService.instant('pipe.format.hour')
+ ' ' + (minutes < 10 ? '0' : '') + minutes + this.translateService.instant("pipe.format.minute") + ' ' + (minutes < 10 ? '0' : '') + minutes + this.translateService.instant('pipe.format.minute')
+ ' ' + (seconds < 10 ? '0' : '') + seconds + this.translateService.instant("pipe.format.seconds"); + ' ' + (seconds < 10 ? '0' : '') + seconds + this.translateService.instant('pipe.format.seconds');
} }
return value; return value;
} }
} }
\ No newline at end of file
...@@ -5,7 +5,7 @@ import { Injectable } from '@angular/core'; ...@@ -5,7 +5,7 @@ import { Injectable } from '@angular/core';
providedIn: 'root' providedIn: 'root'
}) })
export class CustomerInteractionService { export class CustomerInteractionService {
constructor(protected http: HttpClient) { constructor(protected http: HttpClient) {
} }
...@@ -14,7 +14,7 @@ export class CustomerInteractionService { ...@@ -14,7 +14,7 @@ export class CustomerInteractionService {
return './dashboard/customer-interaction'; return './dashboard/customer-interaction';
} }
getSummary(startDate:Date, endDate:Date, channel:string) { getSummary(startDate: Date, endDate: Date, channel: string) {
return this.http.post(this.serviceURL, {startDate, endDate, channel}); return this.http.post(this.serviceURL, {startDate, endDate, channel});
} }
......
...@@ -5,7 +5,7 @@ import { Injectable } from '@angular/core'; ...@@ -5,7 +5,7 @@ import { Injectable } from '@angular/core';
providedIn: 'root' providedIn: 'root'
}) })
export class OperationalConsultationService { export class OperationalConsultationService {
constructor(protected http: HttpClient) { constructor(protected http: HttpClient) {
} }
...@@ -14,7 +14,7 @@ export class OperationalConsultationService { ...@@ -14,7 +14,7 @@ export class OperationalConsultationService {
return './dashboard/operative'; return './dashboard/operative';
} }
getSummary(startDate:Date, endDate:Date, channel:string) { getSummary(startDate: Date, endDate: Date, channel: string) {
return this.http.post(this.serviceURL, {startDate, endDate, channel}); return this.http.post(this.serviceURL, {startDate, endDate, channel});
} }
......
...@@ -48,7 +48,7 @@ export class AvgIntentByCustomerComponent implements OnInit { ...@@ -48,7 +48,7 @@ export class AvgIntentByCustomerComponent implements OnInit {
type: 'datetime', type: 'datetime',
tickInterval: 86400000, tickInterval: 86400000,
labels: { labels: {
formatter: function() { formatter() {
return Highcharts.dateFormat('%e - %b', return Highcharts.dateFormat('%e - %b',
this.value); this.value);
} }
......
...@@ -15,19 +15,19 @@ export class CustomerInteractionFilterComponent implements OnInit { ...@@ -15,19 +15,19 @@ export class CustomerInteractionFilterComponent implements OnInit {
channels = [ channels = [
{ {
value: "W", value: 'W',
label: "Whatsapp" label: 'Whatsapp'
}, },
{ {
value: "F", value: 'F',
label: "Facebook" label: 'Facebook'
} }
]; ];
endDateTime: Date; endDateTime: Date;
startDateTime: Date; startDateTime: Date;
selectedChannel: string; selectedChannel: string;
isLoading: Boolean = false; isLoading = false;
@Input() @Input()
header: string; header: string;
...@@ -36,10 +36,10 @@ export class CustomerInteractionFilterComponent implements OnInit { ...@@ -36,10 +36,10 @@ export class CustomerInteractionFilterComponent implements OnInit {
headerDesc: string; headerDesc: string;
@Input() @Input()
icon: string = '<i class="fa fa-bar-chart-o"></i>'; icon = '<i class="fa fa-bar-chart-o"></i>';
@Output() @Output()
onFilter: EventEmitter<any> = new EventEmitter(); filtered: EventEmitter<any> = new EventEmitter();
constructor( constructor(
protected route: ActivatedRoute, protected route: ActivatedRoute,
...@@ -63,8 +63,8 @@ export class CustomerInteractionFilterComponent implements OnInit { ...@@ -63,8 +63,8 @@ export class CustomerInteractionFilterComponent implements OnInit {
} }
search() { search() {
const filters = {startDateTime: this.startDateTime, endDateTime: this.endDateTime, channel: this.selectedChannel} const filters = {startDateTime: this.startDateTime, endDateTime: this.endDateTime, channel: this.selectedChannel};
this.onFilter.emit(filters); this.filtered.emit(filters);
} }
private getStartDate(endDate: Date): Date { private getStartDate(endDate: Date): Date {
...@@ -75,7 +75,7 @@ export class CustomerInteractionFilterComponent implements OnInit { ...@@ -75,7 +75,7 @@ export class CustomerInteractionFilterComponent implements OnInit {
event.preventDefault(); event.preventDefault();
} }
clickEvent (event: NgxMatDatetimePicker<any>) { clickEvent(event: NgxMatDatetimePicker<any>) {
event.open(); event.open();
} }
......
<byte-customer-interaction-filter (onFilter)="filter($event)"></byte-customer-interaction-filter> <byte-customer-interaction-filter (filtered)="filter($event)"></byte-customer-interaction-filter>
<ng-container *ngIf="isLoading"> <ng-container *ngIf="isLoading">
<div class="spiner-example"> <div class="spiner-example">
<div class="sk-spinner sk-spinner-circle"> <div class="sk-spinner sk-spinner-circle">
......
...@@ -13,38 +13,22 @@ export class CustomerInteractionComponent implements OnInit { ...@@ -13,38 +13,22 @@ export class CustomerInteractionComponent implements OnInit {
links = ['Graph', 'Detail']; links = ['Graph', 'Detail'];
activeLink = this.links[0]; activeLink = this.links[0];
latestDate = new Date(); latestDate = new Date();
existDateRange: Boolean = false; existDateRange = false;
isLoading: Boolean = false; isLoading = false;
startDate: Date; startDate: Date;
endDate: Date; endDate: Date;
data: any; data: any;
isDataLoaded: Boolean = false; isDataLoaded = false;
background: ThemePalette = undefined; background: ThemePalette = undefined;
constructor(
protected customerInteractionService: CustomerInteractionService,
protected notificationService: NotificationService
) { }
ngOnInit() {
}
toggleBackground() {
this.background = this.background ? undefined : 'primary';
}
addLink() {
this.links.push(`Link ${this.links.length + 1}`);
}
panelOptions = { panelOptions = {
elevation: false, elevation: false,
title: { title: {
primary: 'Mensajes por horario de actividad del cliente', primary: 'Mensajes por horario de actividad del cliente',
secondary: '' secondary: ''
} }
} };
tracingPanelOptions = { tracingPanelOptions = {
elevation: false, elevation: false,
...@@ -52,7 +36,7 @@ export class CustomerInteractionComponent implements OnInit { ...@@ -52,7 +36,7 @@ export class CustomerInteractionComponent implements OnInit {
primary: 'dashboards.customer.interaction.tracing.intent', primary: 'dashboards.customer.interaction.tracing.intent',
secondary: '' secondary: ''
} }
} };
avgIntentOptions = { avgIntentOptions = {
elevation: false, elevation: false,
...@@ -60,7 +44,7 @@ export class CustomerInteractionComponent implements OnInit { ...@@ -60,7 +44,7 @@ export class CustomerInteractionComponent implements OnInit {
primary: 'dashboards.customer.interaction.avg.intent', primary: 'dashboards.customer.interaction.avg.intent',
secondary: '' secondary: ''
} }
} };
goalPanelOptions = { goalPanelOptions = {
elevation: false, elevation: false,
...@@ -68,7 +52,7 @@ export class CustomerInteractionComponent implements OnInit { ...@@ -68,7 +52,7 @@ export class CustomerInteractionComponent implements OnInit {
primary: 'dashboards.customer.interaction.goals', primary: 'dashboards.customer.interaction.goals',
secondary: '' secondary: ''
} }
} };
intentCustomer = { intentCustomer = {
elevation: false, elevation: false,
...@@ -86,6 +70,22 @@ export class CustomerInteractionComponent implements OnInit { ...@@ -86,6 +70,22 @@ export class CustomerInteractionComponent implements OnInit {
} }
}; };
constructor(
protected customerInteractionService: CustomerInteractionService,
protected notificationService: NotificationService
) { }
ngOnInit() {
}
toggleBackground() {
this.background = this.background ? undefined : 'primary';
}
addLink() {
this.links.push(`Link ${this.links.length + 1}`);
}
filter(filters) { filter(filters) {
this.isDataLoaded = false; this.isDataLoaded = false;
this.isLoading = true; this.isLoading = true;
...@@ -97,13 +97,13 @@ export class CustomerInteractionComponent implements OnInit { ...@@ -97,13 +97,13 @@ export class CustomerInteractionComponent implements OnInit {
this.isLoading = false; this.isLoading = false;
this.isDataLoaded = this.isValidData(this.data); this.isDataLoaded = this.isValidData(this.data);
if (!this.isDataLoaded) { if (!this.isDataLoaded) {
this.notificationService.showMessage("No se encontró información para el rango de fechas seleccionado", "", NotificationType.error); this.notificationService.showMessage('No se encontró información para el rango de fechas seleccionado', '', NotificationType.error);
} }
}, err => { }, err => {
this.isLoading = false; this.isLoading = false;
}); });
} }
private isValidData(data:any): Boolean { private isValidData(data: any): boolean {
if (data['sessionFlow'] && data['sessionFlow']['intent'] && data['sessionFlow']['sentence']) { if (data['sessionFlow'] && data['sessionFlow']['intent'] && data['sessionFlow']['sentence']) {
if (data['sessionFlow']['intent']['total'] > 0 || data['sessionFlow']['sentence']['total'] > 0) { if (data['sessionFlow']['intent']['total'] > 0 || data['sessionFlow']['sentence']['total'] > 0) {
return true; return true;
......
import { DataSource } from '@angular/cdk/table'; import { DataSource } from '@angular/cdk/table';
import { Component, Input, OnInit, ViewChild } from '@angular/core'; import { AfterViewInit, Component, Input, OnInit, ViewChild } from '@angular/core';
import { MatPaginator, MatSort } from '@angular/material'; import { MatPaginator, MatSort } from '@angular/material';
import { Pagination, SortField } from '@xdf/commons'; import { Pagination, SortField } from '@xdf/commons';
import { DynaDataSource } from '@xdf/gallery'; import { DynaDataSource } from '@xdf/gallery';
...@@ -11,15 +11,15 @@ import { MessageByIntentService } from './services/message-by-intent.service'; ...@@ -11,15 +11,15 @@ import { MessageByIntentService } from './services/message-by-intent.service';
templateUrl: './message-by-intent-table.component.html', templateUrl: './message-by-intent-table.component.html',
styleUrls: ['./message-by-intent-table.component.scss'] styleUrls: ['./message-by-intent-table.component.scss']
}) })
export class MessageByIntentTableComponent implements OnInit { export class MessageByIntentTableComponent implements OnInit, AfterViewInit {
displayedColumns: string[] = ['sentence', 'identifier', 'count', 'customer']; displayedColumns: string[] = ['sentence', 'identifier', 'count', 'customer'];
dataSource: DynaDataSource; dataSource: DynaDataSource;
@ViewChild(MatPaginator, { static: false }) paginator: MatPaginator; @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator;
@ViewChild(MatSort, { static: false }) sort: MatSort; @ViewChild(MatSort, { static: false }) sort: MatSort;
sortColumn: string = "count"; sortColumn = 'count';
sortDirection: string = "desc"; sortDirection = 'desc';
statusQuickFilter: string; statusQuickFilter: string;
pagingSize = 8; pagingSize = 8;
...@@ -36,22 +36,22 @@ export class MessageByIntentTableComponent implements OnInit { ...@@ -36,22 +36,22 @@ export class MessageByIntentTableComponent implements OnInit {
ngOnInit() { ngOnInit() {
this.dataSource = new DynaDataSource(this.service); this.dataSource = new DynaDataSource(this.service);
// Paginación // Paginación
this.pagination = new Pagination(); this.pagination = new Pagination();
this.pagination.currentPage = 0; this.pagination.currentPage = 0;
this.pagination.itemsPerPage = this.pagingSize; this.pagination.itemsPerPage = this.pagingSize;
this.pagination.filterExpression = "startDate=" + this.minDate.getTime() + "&&endDate=" + this.maxDate.getTime(); this.pagination.filterExpression = 'startDate=' + this.minDate.getTime() + '&&endDate=' + this.maxDate.getTime();
// Ordenación por defecto // Ordenación por defecto
if (this.sortColumn && this.sortDirection) { if (this.sortColumn && this.sortDirection) {
this.pagination.sortFields = new Array(); this.pagination.sortFields = new Array();
const sortField: SortField = new SortField(); const sortField: SortField = new SortField();
sortField.direction = this.sortDirection; sortField.direction = this.sortDirection;
sortField.field = this.sortColumn; sortField.field = this.sortColumn;
this.pagination.sortFields.push(sortField); this.pagination.sortFields.push(sortField);
} }
this.dataSource.load(this.pagination); this.dataSource.load(this.pagination);
} }
...@@ -80,7 +80,7 @@ export class MessageByIntentTableComponent implements OnInit { ...@@ -80,7 +80,7 @@ export class MessageByIntentTableComponent implements OnInit {
.subscribe(); .subscribe();
} }
disabledPopper(value: number): Boolean { disabledPopper(value: number): boolean {
return value <= 30; return value <= 30;
} }
......
export interface MessageByIntent{ export interface MessageByIntent {
sentence: string; sentence: string;
intent: string; intent: string;
ocurrency: number; ocurrency: number;
customers: number; customers: number;
} }
\ No newline at end of file
...@@ -11,7 +11,7 @@ import { map } from 'rxjs/operators'; ...@@ -11,7 +11,7 @@ import { map } from 'rxjs/operators';
}) })
export class MessageByIntentService extends DynaDataService { export class MessageByIntentService extends DynaDataService {
serviceURL = "./dashboard/customer-interaction/message-by-intent"; serviceURL = './dashboard/customer-interaction/message-by-intent';
constructor(private httpClient: HttpClient) { constructor(private httpClient: HttpClient) {
super(httpClient); super(httpClient);
...@@ -20,4 +20,4 @@ export class MessageByIntentService extends DynaDataService { ...@@ -20,4 +20,4 @@ export class MessageByIntentService extends DynaDataService {
getResultPagination(pagination: Pagination): Observable<Pagination> { getResultPagination(pagination: Pagination): Observable<Pagination> {
return this.httpClient.post(this.serviceURL + '/page', pagination).pipe(map(data => this.getPage(data as Pagination))); return this.httpClient.post(this.serviceURL + '/page', pagination).pipe(map(data => this.getPage(data as Pagination)));
} }
} }
\ No newline at end of file
...@@ -10,7 +10,7 @@ import { Chart } from 'angular-highcharts'; ...@@ -10,7 +10,7 @@ import { Chart } from 'angular-highcharts';
export class SankeyDiagramComponent implements OnInit { export class SankeyDiagramComponent implements OnInit {
chart: Chart; chart: Chart;
startPoint:string = "Session start"; startPoint = 'Session start';
private percentDetail = {}; private percentDetail = {};
@Input() @Input()
...@@ -22,7 +22,7 @@ export class SankeyDiagramComponent implements OnInit { ...@@ -22,7 +22,7 @@ export class SankeyDiagramComponent implements OnInit {
if (!this.data) { if (!this.data) {
return; return;
} }
let dataDiagram = this.generateData(this.data); const dataDiagram = this.generateData(this.data);
if (!dataDiagram) { if (!dataDiagram) {
return; return;
} }
...@@ -61,21 +61,20 @@ export class SankeyDiagramComponent implements OnInit { ...@@ -61,21 +61,20 @@ export class SankeyDiagramComponent implements OnInit {
// dataLabels: { // dataLabels: {
// formatter: function () { // formatter: function () {
// console.log(this); // console.log(this);
// return ""; // return '';
// } // }
// }, // },
}] as Array<any> }] as Array<any>
});
});
} }
private generateData(data: any) { private generateData(data: any) {
if (!data['topList']) { if (!data['topList']) {
return undefined; return undefined;
} }
let dataForDiagram = []; const dataForDiagram = [];
data['topList'].forEach(x => { data['topList'].forEach(x => {
//PercentageInventary.getInstance().setPercent(x['identifier'], x['count']/data['total']*100); // PercentageInventary.getInstance().setPercent(x['identifier'], x['count']/data['total']*100);
dataForDiagram.push([this.startPoint, x['identifier'], x['count']]); dataForDiagram.push([this.startPoint, x['identifier'], x['count']]);
}); });
return dataForDiagram; return dataForDiagram;
...@@ -89,9 +88,9 @@ function update(key) { ...@@ -89,9 +88,9 @@ function update(key) {
export class PercentageInventary { export class PercentageInventary {
private percentages: any = {};
private static instance: PercentageInventary; private static instance: PercentageInventary;
private percentages: any = {};
public static getInstance(): PercentageInventary { public static getInstance(): PercentageInventary {
if (!PercentageInventary.instance) { if (!PercentageInventary.instance) {
PercentageInventary.instance = new PercentageInventary(); PercentageInventary.instance = new PercentageInventary();
...@@ -99,10 +98,10 @@ export class PercentageInventary { ...@@ -99,10 +98,10 @@ export class PercentageInventary {
return PercentageInventary.instance; return PercentageInventary.instance;
} }
getPercent(name: string) { getPercent(name: string) {
if (this.percentages[name]) { if (this.percentages[name]) {
return (this.percentages[name] as number).toFixed(2) + "%"; return (this.percentages[name] as number).toFixed(2) + '%';
} }
return null; return null;
} }
......
...@@ -21,8 +21,8 @@ export class StackedColumnChartComponent implements OnInit { ...@@ -21,8 +21,8 @@ export class StackedColumnChartComponent implements OnInit {
if (!this.data) { if (!this.data) {
return; return;
} }
let categories = this.generateData(this.data, 'goal'); const categories = this.generateData(this.data, 'goal');
let dataSeries = this.generateData(this.data, 'count'); const dataSeries = this.generateData(this.data, 'count');
this.chart = new Chart({ this.chart = new Chart({
chart: { chart: {
type: 'column' type: 'column'
...@@ -37,7 +37,7 @@ export class StackedColumnChartComponent implements OnInit { ...@@ -37,7 +37,7 @@ export class StackedColumnChartComponent implements OnInit {
text: '' text: ''
}, },
xAxis: { xAxis: {
categories: categories categories
}, },
credits: { credits: {
enabled: false enabled: false
...@@ -82,7 +82,7 @@ export class StackedColumnChartComponent implements OnInit { ...@@ -82,7 +82,7 @@ export class StackedColumnChartComponent implements OnInit {
} }
private generateData(data: Array<any>, field: string) { private generateData(data: Array<any>, field: string) {
let dataGenerated = []; const dataGenerated = [];
data.forEach(x => { data.forEach(x => {
dataGenerated.push(x[field]); dataGenerated.push(x[field]);
}); });
......
...@@ -25,7 +25,7 @@ export class TracingIntentByCustomerComponent implements OnInit { ...@@ -25,7 +25,7 @@ export class TracingIntentByCustomerComponent implements OnInit {
ngOnInit() { ngOnInit() {
console.log(this.minDate); console.log(this.minDate);
console.log(this.maxDate); console.log(this.maxDate);
let series: Array<any> = this.getGenerateData(this.data); const series: Array<any> = this.getGenerateData(this.data);
this.chart = new Chart({ this.chart = new Chart({
chart: { chart: {
type: 'line' type: 'line'
...@@ -54,9 +54,8 @@ export class TracingIntentByCustomerComponent implements OnInit { ...@@ -54,9 +54,8 @@ export class TracingIntentByCustomerComponent implements OnInit {
min: this.getDate(this.minDate), min: this.getDate(this.minDate),
max: this.getDate(this.maxDate), max: this.getDate(this.maxDate),
labels: { labels: {
formatter: function() { formatter() {
return Highcharts.dateFormat('%e - %b', return Highcharts.dateFormat('%e - %b', this.value * 1000);
this.value * 1000);
} }
} }
}, },
...@@ -66,7 +65,7 @@ export class TracingIntentByCustomerComponent implements OnInit { ...@@ -66,7 +65,7 @@ export class TracingIntentByCustomerComponent implements OnInit {
}, },
}, },
tooltip: { tooltip: {
formatter: function() { formatter() {
return '<b>' + this.series.name + '</b><br/>' + return '<b>' + this.series.name + '</b><br/>' +
Highcharts.dateFormat('%e - %b', Highcharts.dateFormat('%e - %b',
this.x * 1000) + this.x * 1000) +
...@@ -80,18 +79,20 @@ export class TracingIntentByCustomerComponent implements OnInit { ...@@ -80,18 +79,20 @@ export class TracingIntentByCustomerComponent implements OnInit {
} }
} }
}, },
series: series series
}); });
} }
private getGenerateData(data: any): Array<any> { private getGenerateData(data: any): Array<any> {
let series: Array<any> = []; const series: Array<any> = [];
for (const intent in data) { for (const intent in data) {
let serie = {}; if (data.hasOwnProperty(intent)) {
serie['name'] = intent; const serie = {};
serie['data'] = data[intent]; serie['name'] = intent;
series.push(serie); serie['data'] = data[intent];
console.log(serie); series.push(serie);
console.log(serie);
}
} }
return series; return series;
} }
......
...@@ -11,7 +11,7 @@ import { map } from 'rxjs/operators'; ...@@ -11,7 +11,7 @@ import { map } from 'rxjs/operators';
}) })
export class UnidentifiedSentenceService extends DynaDataService { export class UnidentifiedSentenceService extends DynaDataService {
serviceURL = "./dashboard/operative/sentence-by-intent"; serviceURL = './dashboard/operative/sentence-by-intent';
constructor(private httpClient: HttpClient) { constructor(private httpClient: HttpClient) {
super(httpClient); super(httpClient);
...@@ -20,4 +20,4 @@ export class UnidentifiedSentenceService extends DynaDataService { ...@@ -20,4 +20,4 @@ export class UnidentifiedSentenceService extends DynaDataService {
getResultPagination(pagination: Pagination): Observable<Pagination> { getResultPagination(pagination: Pagination): Observable<Pagination> {
return this.httpClient.post(this.serviceURL + '/page', pagination).pipe(map(data => this.getPage(data as Pagination))); return this.httpClient.post(this.serviceURL + '/page', pagination).pipe(map(data => this.getPage(data as Pagination)));
} }
} }
\ No newline at end of file
import { Component, Input, OnInit, ViewChild } from '@angular/core'; import { AfterViewInit, Component, Input, OnInit, ViewChild } from '@angular/core';
import { MatPaginator, MatSort } from '@angular/material'; import { MatPaginator, MatSort } from '@angular/material';
import { Pagination, SortField } from '@xdf/commons'; import { Pagination, SortField } from '@xdf/commons';
import { DynaDataSource } from '@xdf/gallery'; import { DynaDataSource } from '@xdf/gallery';
...@@ -10,15 +10,15 @@ import { UnidentifiedSentenceService } from './services/unidentified-sentences.s ...@@ -10,15 +10,15 @@ import { UnidentifiedSentenceService } from './services/unidentified-sentences.s
templateUrl: './unidentified-sentences-table.component.html', templateUrl: './unidentified-sentences-table.component.html',
styleUrls: ['./unidentified-sentences-table.component.scss'] styleUrls: ['./unidentified-sentences-table.component.scss']
}) })
export class UnidentifiedSentencesTableComponent implements OnInit { export class UnidentifiedSentencesTableComponent implements OnInit, AfterViewInit {
displayedColumns: string[] = ['identifier', 'count']; displayedColumns: string[] = ['identifier', 'count'];
dataSource: DynaDataSource; dataSource: DynaDataSource;
@ViewChild(MatPaginator, { static: false }) paginator: MatPaginator; @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator;
@ViewChild(MatSort, { static: false }) sort: MatSort; @ViewChild(MatSort, { static: false }) sort: MatSort;
sortColumn: string = "count"; sortColumn = 'count';
sortDirection: string = "desc"; sortDirection = 'desc';
statusQuickFilter: string; statusQuickFilter: string;
pagingSize = 8; pagingSize = 8;
...@@ -35,22 +35,22 @@ export class UnidentifiedSentencesTableComponent implements OnInit { ...@@ -35,22 +35,22 @@ export class UnidentifiedSentencesTableComponent implements OnInit {
ngOnInit() { ngOnInit() {
this.dataSource = new DynaDataSource(this.service); this.dataSource = new DynaDataSource(this.service);
// Paginación // Paginación
this.pagination = new Pagination(); this.pagination = new Pagination();
this.pagination.currentPage = 0; this.pagination.currentPage = 0;
this.pagination.itemsPerPage = this.pagingSize; this.pagination.itemsPerPage = this.pagingSize;
this.pagination.filterExpression = "startDate=" + this.minDate.getTime() + "&&endDate=" + this.maxDate.getTime(); this.pagination.filterExpression = 'startDate=' + this.minDate.getTime() + '&&endDate=' + this.maxDate.getTime();
// Ordenación por defecto // Ordenación por defecto
if (this.sortColumn && this.sortDirection) { if (this.sortColumn && this.sortDirection) {
this.pagination.sortFields = new Array(); this.pagination.sortFields = new Array();
const sortField: SortField = new SortField(); const sortField: SortField = new SortField();
sortField.direction = this.sortDirection; sortField.direction = this.sortDirection;
sortField.field = this.sortColumn; sortField.field = this.sortColumn;
this.pagination.sortFields.push(sortField); this.pagination.sortFields.push(sortField);
} }
this.dataSource.load(this.pagination); this.dataSource.load(this.pagination);
} }
......
...@@ -26,7 +26,6 @@ export class CustomerActivityWidgetComponent implements OnInit { ...@@ -26,7 +26,6 @@ export class CustomerActivityWidgetComponent implements OnInit {
xAxis: { xAxis: {
allowDecimals: false, allowDecimals: false,
labels: { labels: {
}, },
accessibility: { accessibility: {
rangeDescription: 'Range: 1940 to 2017.' rangeDescription: 'Range: 1940 to 2017.'
...@@ -37,7 +36,7 @@ export class CustomerActivityWidgetComponent implements OnInit { ...@@ -37,7 +36,7 @@ export class CustomerActivityWidgetComponent implements OnInit {
text: 'Nuclear weapon states' text: 'Nuclear weapon states'
}, },
labels: { labels: {
formatter: function () { formatter() {
return this.value / 1000 + 'k'; return this.value / 1000 + 'k';
} }
} }
......
...@@ -19,7 +19,7 @@ export const DEFAULT_OPTIONS_GAUGE_CHART: GaugeChart = { ...@@ -19,7 +19,7 @@ export const DEFAULT_OPTIONS_GAUGE_CHART: GaugeChart = {
arcDelimiters: [16, 33], arcDelimiters: [16, 33],
rangeLabel: ['0', '6'], rangeLabel: ['0', '6'],
needleStartValue: 1, needleStartValue: 1,
} };
@Component({ @Component({
selector: 'byte-gauge-chart', selector: 'byte-gauge-chart',
...@@ -29,25 +29,25 @@ export const DEFAULT_OPTIONS_GAUGE_CHART: GaugeChart = { ...@@ -29,25 +29,25 @@ export const DEFAULT_OPTIONS_GAUGE_CHART: GaugeChart = {
export class GaugeChartComponent implements OnInit { export class GaugeChartComponent implements OnInit {
@Input() @Input()
name: string = "Gauge chart"; name = 'Gauge chart';
@Input() @Input()
value: any = 1.2; value: any = 1.2;
@Input() @Input()
unit: string = ""; unit = '';
@Input() @Input()
options: GaugeChart; options: GaugeChart;
@Input() @Input()
format: Boolean = false; format = false;
@Input() @Input()
maxValue: number = 6; maxValue = 6;
canvasWidth = 250 canvasWidth = 250;
centralLabel = '25' centralLabel = '25';
bottomLabel = ''; bottomLabel = '';
constructor() { } constructor() { }
...@@ -60,18 +60,18 @@ export class GaugeChartComponent implements OnInit { ...@@ -60,18 +60,18 @@ export class GaugeChartComponent implements OnInit {
valueNumber = valueNumber / 1000; valueNumber = valueNumber / 1000;
} }
let valueFormater:number = 0; let valueFormater = 0;
if (valueNumber >= 86400) { if (valueNumber >= 86400) {
this.unit = "d"; this.unit = 'd';
valueFormater = valueNumber / 86400; valueFormater = valueNumber / 86400;
} else if (valueNumber >= 3600) { } else if (valueNumber >= 3600) {
this.unit = "h"; this.unit = 'h';
valueFormater = valueNumber / 3600; valueFormater = valueNumber / 3600;
} else if (valueNumber >= 60){ } else if (valueNumber >= 60) {
this.unit = "m"; this.unit = 'm';
valueFormater = valueNumber / 60; valueFormater = valueNumber / 60;
} else { } else {
this.unit = "s"; this.unit = 's';
valueFormater = valueNumber; valueFormater = valueNumber;
} }
this.bottomLabel = valueFormater.toFixed(1) + ' ' + this.unit; this.bottomLabel = valueFormater.toFixed(1) + ' ' + this.unit;
......
import { Component, Input, OnDestroy, OnInit } from '@angular/core'; import { Component, Input, OnDestroy, OnInit } from '@angular/core';
//import { ToogleService } from '@xdf/layouts'; // import { ToogleService } from '@xdf/layouts';
import { Chart } from 'angular-highcharts'; import { Chart } from 'angular-highcharts';
import * as Highcharts from 'highcharts'; import * as Highcharts from 'highcharts';
import { Subscription } from 'rxjs'; import { Subscription } from 'rxjs';
...@@ -23,8 +23,10 @@ export class HeatMapComponent implements OnInit, OnDestroy { ...@@ -23,8 +23,10 @@ export class HeatMapComponent implements OnInit, OnDestroy {
subscriptionToogle: Subscription; subscriptionToogle: Subscription;
chart: Chart;
constructor( constructor(
//protected toogleService: ToogleService // protected toogleService: ToogleService
) { ) {
} }
...@@ -34,8 +36,6 @@ export class HeatMapComponent implements OnInit, OnDestroy { ...@@ -34,8 +36,6 @@ export class HeatMapComponent implements OnInit, OnDestroy {
} }
} }
chart: Chart;
ngOnInit() { ngOnInit() {
if (!this.maxDate || !this.minDate) { if (!this.maxDate || !this.minDate) {
return; return;
...@@ -48,7 +48,7 @@ export class HeatMapComponent implements OnInit, OnDestroy { ...@@ -48,7 +48,7 @@ export class HeatMapComponent implements OnInit, OnDestroy {
marginRight: 40, marginRight: 40,
type: 'heatmap', type: 'heatmap',
events: { events: {
load: function (event: any) { load: (event: any) => {
event.target.reflow(); event.target.reflow();
} }
} }
...@@ -91,9 +91,9 @@ export class HeatMapComponent implements OnInit, OnDestroy { ...@@ -91,9 +91,9 @@ export class HeatMapComponent implements OnInit, OnDestroy {
text: null text: null
}, },
labels: { labels: {
formatter: function () { formatter() {
//return 'H' + (this.value + 1) + ': ' + (this.value < 10 ? '0' : '') + this.value + ':00' ; // return 'H' + (this.value + 1) + ': ' + (this.value < 10 ? '0' : '') + this.value + ':00' ;
return 'H' + (this.value + 1) + ': ' + (3 * this.value < 10 ? '0' : '') + 3 * this.value + ':00' return 'H' + (this.value + 1) + ': ' + (3 * this.value < 10 ? '0' : '') + 3 * this.value + ':00'
+ ' - ' + ((3 * this.value + 3) < 10 ? '0' : '') + (3 * this.value + 3) + ':00'; + ' - ' + ((3 * this.value + 3) < 10 ? '0' : '') + (3 * this.value + 3) + ':00';
}, },
format: 'H{value:}:{3*value}:00 - {value + 3}:00' format: 'H{value:}:{3*value}:00 - {value + 3}:00'
...@@ -132,7 +132,7 @@ export class HeatMapComponent implements OnInit, OnDestroy { ...@@ -132,7 +132,7 @@ export class HeatMapComponent implements OnInit, OnDestroy {
colsize: 24 * 36e5, // one day colsize: 24 * 36e5, // one day
tooltip: { tooltip: {
headerFormat: '{point.x:%e %b}', headerFormat: '{point.x:%e %b}',
//pointFormat: '{point.x:%e %b, %Y} {point.y}:00: <b>{point.value} ℃</b>' // pointFormat: '{point.x:%e %b, %Y} {point.y}:00: <b>{point.value} ℃</b>'
pointFormat: '<b>{point.value} mensajes</b>' pointFormat: '<b>{point.value} mensajes</b>'
}, },
turboThreshold: Number.MAX_VALUE, // #3404, remove after 4.0.5 release turboThreshold: Number.MAX_VALUE, // #3404, remove after 4.0.5 release
......
...@@ -12,8 +12,8 @@ export class InactivitySesionComponent implements OnInit, AfterViewInit { ...@@ -12,8 +12,8 @@ export class InactivitySesionComponent implements OnInit, AfterViewInit {
@Input() options = { @Input() options = {
width: 200, width: 200,
height: 60, height: 60,
fill: "#dfecf9", fill: '#dfecf9',
stroke: "#024990", stroke: '#024990',
strokeWidth: 1 strokeWidth: 1
}; };
@Input() values = [1, 12, 3, 15, 5, -1, 10]; @Input() values = [1, 12, 3, 15, 5, -1, 10];
...@@ -36,7 +36,7 @@ export class InactivitySesionComponent implements OnInit, AfterViewInit { ...@@ -36,7 +36,7 @@ export class InactivitySesionComponent implements OnInit, AfterViewInit {
} }
} }
@HostListener('window:resize',['$event']) @HostListener('window:resize', ['$event'])
public onResize(event) { public onResize(event) {
const width = event.target.innerWidth; const width = event.target.innerWidth;
this.updateWidth(width); this.updateWidth(width);
...@@ -45,12 +45,12 @@ export class InactivitySesionComponent implements OnInit, AfterViewInit { ...@@ -45,12 +45,12 @@ export class InactivitySesionComponent implements OnInit, AfterViewInit {
private updateWidth(width: number) { private updateWidth(width: number) {
if (width >= 1600) { if (width >= 1600) {
this.options.width = 300 this.options.width = 300;
} else if (width >= 1350) { } else if (width >= 1350) {
this.options.width = 200 this.options.width = 200;
} else if (width >= 768){ } else if (width >= 768) {
this.options.width = 150; this.options.width = 150;
} else if (width >= 576){ } else if (width >= 576) {
this.options.width = 200; this.options.width = 200;
} else { } else {
this.options.width = 300; this.options.width = 300;
......
...@@ -14,19 +14,19 @@ export class OperativeDashboardFilterComponent implements OnInit { ...@@ -14,19 +14,19 @@ export class OperativeDashboardFilterComponent implements OnInit {
channels = [ channels = [
{ {
value: "W", value: 'W',
label: "Whatsapp" label: 'Whatsapp'
}, },
{ {
value: "F", value: 'F',
label: "Facebook" label: 'Facebook'
} }
]; ];
endDateTime: Date; endDateTime: Date;
startDateTime: Date; startDateTime: Date;
selectedChannel: string; selectedChannel: string;
isLoading: Boolean = false; isLoading = false;
@Input() @Input()
header: string; header: string;
...@@ -35,10 +35,10 @@ export class OperativeDashboardFilterComponent implements OnInit { ...@@ -35,10 +35,10 @@ export class OperativeDashboardFilterComponent implements OnInit {
headerDesc: string; headerDesc: string;
@Input() @Input()
icon: string = '<i class="fa fa-bar-chart-o"></i>'; icon = '<i class="fa fa-bar-chart-o"></i>';
@Output() @Output()
onFilter: EventEmitter<any> = new EventEmitter(); filtered: EventEmitter<any> = new EventEmitter();
constructor( constructor(
protected route: ActivatedRoute, protected route: ActivatedRoute,
...@@ -62,8 +62,8 @@ export class OperativeDashboardFilterComponent implements OnInit { ...@@ -62,8 +62,8 @@ export class OperativeDashboardFilterComponent implements OnInit {
} }
search() { search() {
const filters = {startDateTime: this.startDateTime, endDateTime: this.endDateTime, channel: this.selectedChannel} const filters = { startDateTime: this.startDateTime, endDateTime: this.endDateTime, channel: this.selectedChannel };
this.onFilter.emit(filters); this.filtered.emit(filters);
} }
private getStartDate(endDate: Date): Date { private getStartDate(endDate: Date): Date {
...@@ -74,8 +74,7 @@ export class OperativeDashboardFilterComponent implements OnInit { ...@@ -74,8 +74,7 @@ export class OperativeDashboardFilterComponent implements OnInit {
event.preventDefault(); event.preventDefault();
} }
clickEvent (event: NgxMatDatetimePicker<any>) { clickEvent(event: NgxMatDatetimePicker<any>) {
event.open(); event.open();
} }
} }
<byte-operative-dashboard-filter (onFilter)="filter($event)"></byte-operative-dashboard-filter> <byte-operative-dashboard-filter (filtered)="filter($event)"></byte-operative-dashboard-filter>
<ng-container *ngIf="isLoading"> <ng-container *ngIf="isLoading">
<div class="spiner-example"> <div class="spiner-example">
<div class="sk-spinner sk-spinner-circle"> <div class="sk-spinner sk-spinner-circle">
......
...@@ -14,51 +14,51 @@ import { PetyWidgetModel } from '../summary-peti-widget/summary-peti-widget.comp ...@@ -14,51 +14,51 @@ import { PetyWidgetModel } from '../summary-peti-widget/summary-peti-widget.comp
export class OperativeDashboardComponent implements OnInit { export class OperativeDashboardComponent implements OnInit {
latestDate = new Date(); latestDate = new Date();
existDateRange: Boolean = false; existDateRange = false;
isLoading: Boolean = false; isLoading = false;
startDate: Date; startDate: Date;
endDate: Date; endDate: Date;
data: any; data: any;
isDataLoaded: Boolean = false; isDataLoaded = false;
formatterNumber: PetiFormatter = new MessageCountFormatter(); formatterNumber: PetiFormatter = new MessageCountFormatter();
panelOptions = { panelOptions = {
elevation: false, elevation: false,
title: { title: {
primary: 'dashboards.operative.message.customer.activity', primary: 'dashboards.operative.message.customer.activity',
secondary: '' secondary: ''
} }
} };
optionsInactivitySesion = { optionsInactivitySesion = {
width: 300, width: 300,
height: 60, height: 60,
fill: "#C8FEFF", fill: '#C8FEFF',
stroke: "#23c6c8", stroke: '#23c6c8',
strokeWidth: 1 strokeWidth: 1
}; };
totalSesionsOptions = { totalSesionsOptions = {
width: 300, width: 300,
height: 60, height: 60,
fill: "#CFECFF", fill: '#CFECFF',
stroke: "#1c84c6", stroke: '#1c84c6',
strokeWidth: 1 strokeWidth: 1
}; };
totalReceivedOptions = { totalReceivedOptions = {
width: 300, width: 300,
height: 60, height: 60,
fill: "#D2EEE9", fill: '#D2EEE9',
stroke: "#1ab394", stroke: '#1ab394',
strokeWidth: 1 strokeWidth: 1
}; };
totalSentOptions = { totalSentOptions = {
width: 300, width: 300,
height: 60, height: 60,
fill: "#FFD9DD", fill: '#FFD9DD',
stroke: "#ed5565", stroke: '#ed5565',
strokeWidth: 1 strokeWidth: 1
}; };
......
export interface PetiFormatter { export interface PetiFormatter {
format(value: number): string; format(value: number): string;
} }
\ No newline at end of file
...@@ -3,9 +3,9 @@ import { PetiFormatter } from './formatter'; ...@@ -3,9 +3,9 @@ import { PetiFormatter } from './formatter';
export class MessageCountFormatter implements PetiFormatter { export class MessageCountFormatter implements PetiFormatter {
format(value: number): string { format(value: number): string {
if (value < 1000) { if (value < 1000) {
return "" + value; return '' + value;
} }
let newNumber: number = value/1000; const newNumber: number = value / 1000;
return newNumber.toFixed(1) + "K"; return newNumber.toFixed(1) + 'K';
} }
} }
\ No newline at end of file
import { Component, HostListener, Input, OnInit, ViewChild } from '@angular/core'; import { AfterViewInit, Component, HostListener, Input, OnInit, ViewChild } from '@angular/core';
import { PeityComponent } from '@xdf/graph'; import { PeityComponent } from '@xdf/graph';
import { PetiFormatter } from './formatter/formatter'; import { PetiFormatter } from './formatter/formatter';
declare var jQuery: any; declare var jQuery: any;
...@@ -16,20 +16,20 @@ export class PetyWidgetModel { ...@@ -16,20 +16,20 @@ export class PetyWidgetModel {
templateUrl: './summary-peti-widget.component.html', templateUrl: './summary-peti-widget.component.html',
styleUrls: ['./summary-peti-widget.component.scss'] styleUrls: ['./summary-peti-widget.component.scss']
}) })
export class SummaryPetiWidgetComponent implements OnInit { export class SummaryPetiWidgetComponent implements OnInit, AfterViewInit {
@Input() options = { @Input() options = {
width: 200, width: 200,
height: 60, height: 60,
fill: "#dfecf9", fill: '#dfecf9',
stroke: "#024990", stroke: '#024990',
strokeWidth: 1 strokeWidth: 1
}; };
@Input() values = [1, 12, 3, 15, 5, -1, 10]; @Input() values = [1, 12, 3, 15, 5, -1, 10];
@Input() header; @Input() header;
@Input() value: PetyWidgetModel; @Input() value: PetyWidgetModel;
@Input() tooltip: string; @Input() tooltip: string;
@Input() formatter: PetiFormatter @Input() formatter: PetiFormatter;
@ViewChild('peti', { static: false }) @ViewChild('peti', { static: false })
peti: PeityComponent; peti: PeityComponent;
...@@ -52,12 +52,11 @@ export class SummaryPetiWidgetComponent implements OnInit { ...@@ -52,12 +52,11 @@ export class SummaryPetiWidgetComponent implements OnInit {
return this.formatter.format(this.value.value); return this.formatter.format(this.value.value);
} }
return this.value.value; return this.value.value;
} }
@HostListener('window:resize',['$event']) @HostListener('window:resize', ['$event'])
public onResize(event) { public onResize(event) {
console.log("aea"); console.log('aea');
const width = event.target.innerWidth; const width = event.target.innerWidth;
this.updateWidth(width); this.updateWidth(width);
this.peti.updateSize(); this.peti.updateSize();
...@@ -65,12 +64,12 @@ export class SummaryPetiWidgetComponent implements OnInit { ...@@ -65,12 +64,12 @@ export class SummaryPetiWidgetComponent implements OnInit {
private updateWidth(width: number) { private updateWidth(width: number) {
if (width >= 1600) { if (width >= 1600) {
this.options.width = 300 this.options.width = 300;
} else if (width >= 1350) { } else if (width >= 1350) {
this.options.width = 200 this.options.width = 200;
} else if (width >= 768){ } else if (width >= 768) {
this.options.width = 150; this.options.width = 150;
} else if (width >= 576){ } else if (width >= 576) {
this.options.width = 200; this.options.width = 200;
} else { } else {
this.options.width = 300; this.options.width = 300;
......
...@@ -7,7 +7,7 @@ import { UserRoleFormComponent, AccessDetailResolver } from '@xdf/settings'; ...@@ -7,7 +7,7 @@ import { UserRoleFormComponent, AccessDetailResolver } from '@xdf/settings';
const routes: Routes = [ const routes: Routes = [
{ {
path: 'user-role', component: GridViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], path: 'user-role', component: GridViewComponent, canActivate: [AuthGuard, ResourceAuthGuard],
resolve: { template: TemplateResolver }, resolve: { template: TemplateResolver },
data: { data: {
program: 'user_role', program: 'user_role',
...@@ -15,7 +15,8 @@ const routes: Routes = [ ...@@ -15,7 +15,8 @@ const routes: Routes = [
} }
}, },
{ {
path: 'user-role/detail/:mode', component: UserRoleFormComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard], path: 'user-role/detail/:mode', component: UserRoleFormComponent, canActivate: [AuthGuard, ResourceAuthGuard],
canDeactivate: [DirtyGuard],
resolve: { record: RecordResolver, accessList: AccessDetailResolver }, resolve: { record: RecordResolver, accessList: AccessDetailResolver },
data: { data: {
program: 'user_role', program: 'user_role',
...@@ -23,7 +24,7 @@ const routes: Routes = [ ...@@ -23,7 +24,7 @@ const routes: Routes = [
} }
}, },
{ {
path: 'user', component: CrudGridComponent, canActivate: [AuthGuard, ResourceAuthGuard], path: 'user', component: CrudGridComponent, canActivate: [AuthGuard, ResourceAuthGuard],
resolve: { template: TemplateResolver }, resolve: { template: TemplateResolver },
data: { data: {
innerTemplate: 'none', innerTemplate: 'none',
......
...@@ -19,7 +19,7 @@ import { XdfSettingsModule } from '@xdf/settings'; ...@@ -19,7 +19,7 @@ import { XdfSettingsModule } from '@xdf/settings';
XdfSettingsModule, XdfSettingsModule,
SecurityRoutingModule SecurityRoutingModule
], ],
entryComponents:[ entryComponents: [
], ],
providers: [ providers: [
{ provide: DirtyGuard, useClass: DirtyGuard } { provide: DirtyGuard, useClass: DirtyGuard }
......
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router'; import { Routes, RouterModule } from '@angular/router';
import { AuthGuard } from '@xdf/security'; import { AuthGuard } from '@xdf/security';
import { DirtyGuard, TemplateResolver, CrudGridComponent, EditableDataTableTemplateResolver, CrudDetailComponent, FormViewComponent, ListResolver, RecordResolver } from '@xdf/gallery'; import { DirtyGuard, TemplateResolver, CrudGridComponent, EditableDataTableTemplateResolver } from '@xdf/gallery';
import { CrudDetailComponent, FormViewComponent, ListResolver, RecordResolver } from '@xdf/gallery';
import { ResourceAuthGuard } from '@xdf/security'; import { ResourceAuthGuard } from '@xdf/security';
import { ApplicationFormComponent, ValposFormComponent } from '@xdf/settings'; import { ApplicationFormComponent, ValposFormComponent } from '@xdf/settings';
import { TabsLayoutComponent, TabsTemplateResolver } from '@xdf/layouts'; import { TabsLayoutComponent, TabsTemplateResolver } from '@xdf/layouts';
const routes: Routes = [ const routes: Routes = [
{ {
path: "system-settings", component: TabsLayoutComponent, path: 'system-settings', component: TabsLayoutComponent,
resolve: { template: TabsTemplateResolver }, resolve: { template: TabsTemplateResolver },
data: { data: {
templateName: "system-settings", templateName: 'system-settings',
}, },
children: [ children: [
{ path: 'information', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard], { path: 'information', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
...@@ -19,8 +20,8 @@ const routes: Routes = [ ...@@ -19,8 +20,8 @@ const routes: Routes = [
data: { data: {
option: 'information', option: 'information',
program: 'system_settings_information', program: 'system_settings_information',
breadcrumb: 'breadcrumb.settings.information' breadcrumb: 'breadcrumb.settings.information'
} }
}, },
{ path: 'information/:mode', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard], { path: 'information/:mode', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { ecord: ListResolver }, resolve: { ecord: ListResolver },
...@@ -28,16 +29,16 @@ const routes: Routes = [ ...@@ -28,16 +29,16 @@ const routes: Routes = [
withoutGrid: true, withoutGrid: true,
option: 'information', option: 'information',
program: 'system_settings_information', program: 'system_settings_information',
breadcrumb: 'breadcrumb.settings.information' breadcrumb: 'breadcrumb.settings.information'
} }
}, },
{ path: 'password', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard], { path: 'password', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: ListResolver }, resolve: { record: ListResolver },
data: { data: {
option: 'password', option: 'password',
program: 'system_settings_password', program: 'system_settings_password',
breadcrumb: 'breadcrumb.settings.password' breadcrumb: 'breadcrumb.settings.password'
} }
}, },
{ path: 'password/:mode', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard], { path: 'password/:mode', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: ListResolver }, resolve: { record: ListResolver },
...@@ -45,16 +46,16 @@ const routes: Routes = [ ...@@ -45,16 +46,16 @@ const routes: Routes = [
withoutGrid: true, withoutGrid: true,
option: 'password', option: 'password',
program: 'system_settings_password', program: 'system_settings_password',
breadcrumb: 'breadcrumb.settings.password' breadcrumb: 'breadcrumb.settings.password'
} }
}, },
{ path: 'userpolicy', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard], { path: 'userpolicy', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: ListResolver }, resolve: { record: ListResolver },
data: { data: {
option: 'userpolicy', option: 'userpolicy',
program: 'system_settings_userpolicy', program: 'system_settings_userpolicy',
breadcrumb: 'breadcrumb.settings.userpolicy' breadcrumb: 'breadcrumb.settings.userpolicy'
} }
}, },
{ path: 'userpolicy/:mode', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard], { path: 'userpolicy/:mode', component: FormViewComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: ListResolver }, resolve: { record: ListResolver },
...@@ -62,8 +63,8 @@ const routes: Routes = [ ...@@ -62,8 +63,8 @@ const routes: Routes = [
withoutGrid: true, withoutGrid: true,
option: 'userpolicy', option: 'userpolicy',
program: 'system_settings_userpolicy', program: 'system_settings_userpolicy',
breadcrumb: 'breadcrumb.settings.userpolicy' breadcrumb: 'breadcrumb.settings.userpolicy'
} }
} }
] ]
}, },
...@@ -76,7 +77,8 @@ const routes: Routes = [ ...@@ -76,7 +77,8 @@ const routes: Routes = [
} }
}, },
{ {
path: 'application/detail/:mode', component: ApplicationFormComponent, canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard], path: 'application/detail/:mode', component: ApplicationFormComponent,
canActivate: [AuthGuard, ResourceAuthGuard], canDeactivate: [DirtyGuard],
resolve: { record: RecordResolver }, resolve: { record: RecordResolver },
data: { data: {
program: 'application', program: 'application',
......
...@@ -4,23 +4,23 @@ import { Injectable } from '@angular/core'; ...@@ -4,23 +4,23 @@ import { Injectable } from '@angular/core';
providedIn: 'root' providedIn: 'root'
}) })
export class SharedFilterService { export class SharedFilterService {
private _startDate:Date; private myStartDate: Date;
private _endDate:Date; private myEndDate: Date;
get startDate():Date { get startDate(): Date {
return this._startDate; return this.myStartDate;
} }
get endDate():Date { get endDate(): Date {
return this._endDate; return this.myEndDate;
} }
setStartDate(date: Date) { setStartDate(date: Date) {
this._startDate = date; this.myStartDate = date;
} }
setEndDate(date: Date) { setEndDate(date: Date) {
this._endDate = date; this.myEndDate = date;
} }
} }
{
"extends": "tslint:recommended",
"rulesDirectory": [
"codelyzer"
],
"rules": {
"no-string-literal": false,
"array-type": false,
"arrow-parens": false,
"deprecation": {
"severity": "warning"
},
"import-blacklist": [
true,
"rxjs/Rx"
],
"interface-name": false,
"max-classes-per-file": false,
"max-line-length": [
false,
240
],
"member-access": false,
"member-ordering": [
true,
{
"order": [
"static-field",
"instance-field",
"static-method",
"instance-method"
]
}
],
"no-consecutive-blank-lines": false,
"no-console": [
true,
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"no-empty": false,
"no-inferrable-types": [
true,
"ignore-params"
],
"no-non-null-assertion": true,
"no-redundant-jsdoc": true,
"no-switch-case-fall-through": true,
"no-var-requires": false,
"object-literal-key-quotes": [
true,
"as-needed"
],
"object-literal-sort-keys": false,
"ordered-imports": false,
"quotemark": [
true,
"single"
],
"trailing-comma": false,
"component-class-suffix": true,
"contextual-lifecycle": true,
"directive-class-suffix": true,
"no-conflicting-lifecycle": true,
"no-host-metadata-property": true,
"no-input-rename": true,
"no-inputs-metadata-property": true,
"no-output-native": true,
"no-output-on-prefix": true,
"no-output-rename": true,
"no-outputs-metadata-property": true,
"template-banana-in-box": true,
"template-no-negated-async": true,
"use-lifecycle-interface": true,
"use-pipe-transform-interface": true
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment