File

projects/netgrif-components-core/src/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.ts

Index

Methods

Constructor

Protected constructor(_taskResourceService: TaskResourceService, _log: LoggerService)
Parameters :
Name Type Optional
_taskResourceService TaskResourceService No
_log LoggerService No

Methods

Public createResolvedViewComponentPortal
createResolvedViewComponentPortal(taskId: string, parentInjector: Injector)
Parameters :
Name Type Optional
taskId string No
parentInjector Injector No
Protected Abstract resolveViewComponent
resolveViewComponent(navigationItemTaskData: Array)
Parameters :
Name Type Optional
navigationItemTaskData Array<DataGroup> No
Returns : Type<any>
import {Injector, Type} from '@angular/core';
import {ComponentPortal} from '@angular/cdk/portal';
import {Observable, ReplaySubject, Subject} from 'rxjs';
import {NAE_NAVIGATION_ITEM_TASK_DATA} from '../model/filter-case-injection-token';
import {TaskResourceService} from '../../resources/engine-endpoint/task-resource.service';
import {LoggerService} from '../../logger/services/logger.service';
import {DataGroup} from '../../resources/interface/data-groups';
import {HttpErrorResponse} from '@angular/common/http';

export abstract class GroupNavigationComponentResolverService {

    protected constructor(protected _taskResourceService: TaskResourceService,
                          protected _log: LoggerService) {
    }

    protected abstract resolveViewComponent(navigationItemTaskData: Array<DataGroup>): Type<any>;

    public createResolvedViewComponentPortal(taskId: string, parentInjector: Injector): Observable<ComponentPortal<any>> {
        const result = new ReplaySubject<ComponentPortal<any>>(1);
        this._taskResourceService.getData(taskId).subscribe(taskData => {
            try {
                result.next(new ComponentPortal(
                    this.resolveViewComponent(taskData),
                    null,
                    Injector.create({
                        providers: [
                            {provide: NAE_NAVIGATION_ITEM_TASK_DATA, useValue: taskData},
                        ],
                        parent: parentInjector
                    })
                ));
                result.complete();
            } catch (e) {
                this.forwardError(result, e);
            }
        }, e => {
            this.forwardError(result, e);
        });

        return result.asObservable();
    }

    private forwardError(result: Subject<any>, error: Error): void {
        result.error(error instanceof HttpErrorResponse ? error.error.message : error.message);
        result.complete();
    }
}

result-matching ""

    No results matching ""