import { Component, OnInit, ViewChild, ViewContainerRef } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { LANG } from '../translate.component'; import { NotificationService } from '../notification.service'; import { MatDialog } from '@angular/material/dialog'; import { MatSidenav } from '@angular/material/sidenav'; import { ActivatedRoute, Router } from '@angular/router'; import { HeaderService } from '../../service/header.service'; import { FiltersListService } from '../../service/filtersList.service'; import { Overlay } from '@angular/cdk/overlay'; import { AppService } from '../../service/app.service'; import { ActionsService } from '../actions/actions.service'; import { tap, catchError, map } from 'rxjs/operators'; import { of } from 'rxjs'; import { DocumentViewerComponent } from '../viewer/document-viewer.component'; @Component({ templateUrl: "process.component.html", styleUrls: [ 'process.component.scss', '../indexation/indexing-form/indexing-form.component.scss' ], providers: [NotificationService, AppService, ActionsService], }) export class ProcessComponent implements OnInit { lang: any = LANG; loading: boolean = false; currentResourceLock: any = null; actionsList: any[] = []; currentUserId: number = null; currentBasketId: number = null; currentGroupId: number = null; selectedAction: any = { id: 0, label: '', component: '', default: false, categoryUse: [] }; currentResourceInformations: any = { }; processTool: any[] = [ { id: 'dashboard', icon: 'fas fa-columns', label: this.lang.newsFeed, }, { id: 'history', icon: 'fas fa-history', label: this.lang.history, }, { id: 'notes', icon: 'fas fa-pen-square', label: this.lang.notesAlt, }, { id: 'attachments', icon: 'fas fa-paperclip', label: this.lang.attachments, }, { id: 'link', icon: 'fas fa-link', label: this.lang.links, }, { id: 'diffusionList', icon: 'fas fa-share-alt', label: this.lang.diffusionList, }, { id: 'mails', icon: 'fas fa-envelope', label: this.lang.mailsSentAlt, }, { id: 'visa', icon: 'fas fa-list-ol', label: this.lang.visaWorkflow, }, { id: 'avis', icon: 'fas fa-comment-alt', label: this.lang.avis, }, { id: 'info', icon: 'fas fa-info-circle', label: this.lang.informations, } ]; modalModule: any[] = []; currentTool: string = 'dashboard'; @ViewChild('snav', { static: true }) sidenavLeft: MatSidenav; @ViewChild('snav2', { static: true }) sidenavRight: MatSidenav; @ViewChild('appDocumentViewer', { static: true }) appDocumentViewer: DocumentViewerComponent; constructor( private route: ActivatedRoute, private _activatedRoute: ActivatedRoute, public http: HttpClient, public dialog: MatDialog, private headerService: HeaderService, public filtersListService: FiltersListService, private notify: NotificationService, public overlay: Overlay, public viewContainerRef: ViewContainerRef, public appService: AppService, public actionService: ActionsService, private router: Router ) { } ngOnInit(): void { this.loading = true; this.headerService.setHeader("Traitement d'un courrier"); this.route.params.subscribe(params => { this.currentUserId = params['userSerialId']; this.currentGroupId = params['groupSerialId']; this.currentBasketId = params['basketId']; this.currentResourceInformations = { resId: params['resId'], category: 'outgoing', mailtracking: false }; this.lockResource(); this.loading = false; this.loadResource(); this.http.get(`../../rest/resourcesList/users/${this.currentUserId}/groups/${this.currentGroupId}/baskets/${this.currentBasketId}/actions?resId=${this.currentResourceInformations.resId}`).pipe( map((data: any) => { data.actions = data.actions.map((action: any, index: number) => { return { id: action.id, label: action.label, component: action.component, categoryUse: action.categories } }); return data; }), tap((data: any) => { this.selectedAction = data.actions[0]; this.actionsList = data.actions; }), catchError((err: any) => { this.notify.handleErrors(err); return of(false); }) ).subscribe(); }, (err: any) => { this.notify.handleErrors(err); }); } loadResource() { this.http.get(`../../rest/resources/${this.currentResourceInformations.resId}?light=true`).pipe( tap((data: any) => { this.currentResourceInformations = data; }), catchError((err: any) => { this.notify.handleErrors(err); return of(false); }) ).subscribe(); } lockResource() { this.http.put(`../../rest/resourcesList/users/${this.currentUserId}/groups/${this.currentGroupId}/baskets/${this.currentBasketId}/lock`, { resources: [this.currentResourceInformations.resId] }).pipe( catchError((err: any) => { this.notify.handleErrors(err); return of(false); }) ).subscribe(); this.currentResourceLock = setInterval(() => { this.http.put(`../../rest/resourcesList/users/${this.currentUserId}/groups/${this.currentGroupId}/baskets/${this.currentBasketId}/lock`, { resources: [this.currentResourceInformations.resId] }).pipe( catchError((err: any) => { this.notify.handleErrors(err); return of(false); }) ).subscribe(); }, 50000); } unlockResource() { clearInterval(this.currentResourceLock); this.http.put(`../../rest/resourcesList/users/${this.currentUserId}/groups/${this.currentGroupId}/baskets/${this.currentBasketId}/unlock`, { resources: [this.currentResourceInformations.resId] }).pipe( catchError((err: any) => { this.notify.handleErrors(err); return of(false); }) ).subscribe(); } onSubmit() { this.actionService.launchAction(this.selectedAction, this.currentUserId, this.currentGroupId, this.currentBasketId, [this.currentResourceInformations.resId], this.currentResourceInformations); } showActionInCurrentCategory(action: any) { if (this.selectedAction.categoryUse.indexOf(this.currentResourceInformations.categoryId) === -1) { const newAction = this.actionsList.filter(action => action.categoryUse.indexOf(this.currentResourceInformations.categoryId) > -1)[0]; if (newAction !== undefined) { this.selectedAction = this.actionsList.filter(action => action.categoryUse.indexOf(this.currentResourceInformations.categoryId) > -1)[0]; } else { this.selectedAction = { id: 0, label: '', component: '', default: false, categoryUse: [] }; } } return action.categoryUse.indexOf(this.currentResourceInformations.categoryId) > -1; } selectAction(action: any) { this.selectedAction = action; } createModal() { this.modalModule.push(this.processTool.filter(module => module.id === this.currentTool)[0]); } removeModal(index: number) { this.modalModule.splice(index, 1); } isModalOpen() { return this.modalModule.map(module => module.id).indexOf(this.currentTool) > -1; } }