{"version":3,"file":"narik-core.mjs","sources":["../../../projects/narik-core/src/lib/index.ts","../../../projects/narik-core/src/lib/injectionTokens.ts","../../../projects/narik-core/src/lib/base/narik-base-data-provider.ts","../../../projects/narik-core/src/lib/base/narik-base-data-storage.ts","../../../projects/narik-core/src/lib/services/dataProviders/local-storage-data-provider.ts","../../../projects/narik-core/src/lib/services/dataProviders/memory-data-provider.ts","../../../projects/narik-core/src/lib/services/dataProviders/remote-data-provider.ts","../../../projects/narik-core/src/lib/services/dataProviders/session-storage-data-provider.ts","../../../projects/narik-core/src/lib/services/narik-translation.service.ts","../../../projects/narik-core/src/lib/services/dataProviders/static-data-provider.ts","../../../projects/narik-core/src/lib/services/errorHandlers/narik-http-error-handler.ts","../../../projects/narik-core/src/lib/decorators/dynamic-component.decorator.ts","../../../projects/narik-core/src/lib/services/narik-component-type-resolver.service.ts","../../../projects/narik-core/src/lib/services/narik-config.service.ts","../../../projects/narik-core/src/lib/services/narik-data-provider.service.ts","../../../projects/narik-core/src/lib/services/narik-data-storage.service.ts","../../../projects/narik-core/src/lib/util/app-injector.ts","../../../projects/narik-core/src/lib/decorators/narik-inject.decorator.ts","../../../projects/narik-core/src/lib/services/narik-dialog.service.ts","../../../projects/narik-core/src/lib/services/narik-empty-command-processor.service.ts","../../../projects/narik-core/src/lib/services/narik-error-handle.service.ts","../../../projects/narik-core/src/lib/services/narik-event-aggregator.service.ts","../../../projects/narik-core/src/lib/services/narik-form-title-resolver.service.ts","../../../projects/narik-core/src/lib/services/narik-http.service.ts","../../../projects/narik-core/src/lib/services/narik-json.service.ts","../../../projects/narik-core/src/lib/services/narik-module-manager.service.ts","../../../projects/narik-core/src/lib/services/narik-navigation.service.ts","../../../projects/narik-core/src/lib/services/narik-remote-data-provider.service.ts","../../../projects/narik-core/src/lib/services/narik-role-base-authorization.service.ts","../../../projects/narik-core/src/lib/services/narik-shortcut.service.ts","../../../projects/narik-core/src/lib/services/narik-url-creator.service.ts","../../../projects/narik-core/src/lib/services/narik-validation.service.ts","../../../projects/narik-core/src/lib/services/navigationProviders/narik-base-navigation.provider.ts","../../../projects/narik-core/src/lib/services/navigationProviders/narik-dialog-navigation.provider.ts","../../../projects/narik-core/src/lib/services/navigationProviders/narik-route-navigation.provider.ts","../../../projects/narik-core/src/lib/services/urlCreator/api-url-creator.ts","../../../projects/narik-core/src/lib/services/urlCreator/odata-url-creator.ts","../../../projects/narik-core/src/lib/narik-core.module.ts","../../../projects/narik-core/src/lib/services/narik-resource-loader.service.ts","../../../projects/narik-core/src/lib/services/translateLoader/narik-translate-loader.ts","../../../projects/narik-core/src/lib/services/narik-resource-base-authorization.service.ts","../../../projects/narik-core/src/lib/base/narik-module.ts","../../../projects/narik-core/src/lib/base/narik-dialog-container.ts","../../../projects/narik-core/src/public_api.ts","../../../projects/narik-core/src/narik-core.ts"],"sourcesContent":["import { Provider } from '@angular/core';\r\n\r\nexport const COMPONENTS: Provider[] = [];\r\nexport const EXPORT_COMPONENTS: Provider[] = [];\r\n","import { InjectionToken } from '@angular/core';\r\nimport { GlobalConfig } from 'ngx-toastr';\r\n\r\nexport const LOCAL_STORAGE_VALIDITY_LEN = new InjectionToken<number>(\r\n    'LOCAL_STORAGE_VALIDITY_LEN'\r\n);\r\nexport const SESSION_STORAGE_VALIDITY_LEN = new InjectionToken<number>(\r\n    'SESSION_STORAGE_VALIDITY_LEN'\r\n);\r\n\r\nexport const MEMORY_STORAGE_VALIDITY_LEN = new InjectionToken<number>(\r\n    'MEMORY_STORAGE_VALIDITY_LEN'\r\n);\r\nexport const TOASTR_OPTION = new InjectionToken<Partial<GlobalConfig>>(\r\n    'TOSTR_OPTION'\r\n);\r\n","import { formatString, isArray } from '@narik/common';\r\nimport {\r\n    DataInfo,\r\n    MODULE_DATA_KEY,\r\n    DataProviderService,\r\n    DataProvider,\r\n    isDataStorage,\r\n    DataStorage,\r\n    DataOption,\r\n} from '@narik/infrastructure';\r\n\r\nimport { Injector } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { first } from 'rxjs/operators';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport abstract class NarikBaseDataProvider implements DataProvider {\r\n    key: string;\r\n    order: number;\r\n    belongsInChain: boolean;\r\n\r\n    dayaKeyTemplate = '{0}_{1}';\r\n    protected dataStreams: Map<string, Subject<any>> = new Map<\r\n        string,\r\n        Subject<any>\r\n    >();\r\n\r\n    abstract getData(dataInfo: any): Observable<any>;\r\n    abstract isDataProviderFor(dataInfo: DataInfo): boolean;\r\n\r\n    constructor(private injector: Injector) {}\r\n\r\n    protected getFullKey(dataInfo: DataInfo): string {\r\n        let moduleKey = dataInfo.moduleKey;\r\n        if (!moduleKey) {\r\n            moduleKey = this.injector.get(MODULE_DATA_KEY);\r\n        }\r\n        return formatString(this.dayaKeyTemplate, moduleKey, dataInfo.dataKey);\r\n    }\r\n\r\n    getDataStream<T = any>(dataInfo: DataInfo): Observable<T> {\r\n        const fullKey = this.getFullKey(dataInfo);\r\n        if (this.dataStreams.has(fullKey)) {\r\n            return this.dataStreams.get(fullKey);\r\n        } else {\r\n            const dataSubject = new ReplaySubject<T>(1);\r\n            this.dataStreams.set(fullKey, dataSubject);\r\n            const dataProviderService = this.injector.get(DataProviderService);\r\n            dataProviderService\r\n                .getData(dataInfo)\r\n                .pipe(first())\r\n                .subscribe((data) => dataSubject.next(data));\r\n            return dataSubject.asObservable();\r\n        }\r\n    }\r\n\r\n    raiseDataStream(dataInfo: DataInfo, data: any) {\r\n        const fullKey = this.getFullKey(dataInfo);\r\n        if (this.dataStreams.has(fullKey)) {\r\n            this.dataStreams.get(fullKey).next(data);\r\n        }\r\n    }\r\n\r\n    dataChanged(dataInfo: DataInfo | DataInfo[]) {\r\n        const dataInfoArray = isArray(dataInfo)\r\n            ? <DataInfo[]>dataInfo\r\n            : [<DataInfo>dataInfo];\r\n\r\n        const loadAndRaiseDataStream = () => {\r\n            for (const dataInfoItem of dataInfoArray) {\r\n                const fullKey = this.getFullKey(dataInfoItem);\r\n                if (this.dataStreams.has(fullKey)) {\r\n                    const dataStream = this.dataStreams.get(fullKey);\r\n                    if (dataStream.observers.length) {\r\n                        (<any>this)\r\n                            .getData(dataInfoItem)\r\n                            .subscribe((result) => {\r\n                                dataStream.next(result);\r\n                            });\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        if (isDataStorage(this)) {\r\n            const storage = (<any>this) as DataStorage;\r\n            storage.removeItems(dataInfoArray).subscribe((x) => {\r\n                loadAndRaiseDataStream();\r\n            });\r\n        } else {\r\n            loadAndRaiseDataStream();\r\n        }\r\n    }\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { isString } from '@narik/common';\r\nimport { NarikBaseDataProvider } from './narik-base-data-provider';\r\nimport { DataStorage, DataInfo } from '@narik/infrastructure';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport abstract class NarikBaseDataStorage\r\n    extends NarikBaseDataProvider\r\n    implements DataStorage {\r\n    validityLen = 0;\r\n\r\n    abstract clear(): Observable<any>;\r\n    abstract getStorageModel<T>(dataInfo: DataInfo): Observable<StorageModel>;\r\n    abstract removeItems(items: DataInfo[]): Observable<any>;\r\n    abstract addItem(\r\n        dataItmes: { dataInfo: DataInfo; data: any }[]\r\n    ): Observable<any>;\r\n\r\n    compeleteStorageData(data: any, validityLen?: number): StorageModel {\r\n        return {\r\n            data: data,\r\n            dataTime: new Date(),\r\n            validityLen: validityLen,\r\n        };\r\n    }\r\n\r\n    getData(dataInfo: DataInfo): Observable<any>;\r\n    getData<T>(dataInfo: DataInfo): Observable<T>;\r\n    getData<T>(dataInfo: DataInfo): Observable<T> {\r\n        return this.getStorageModel(dataInfo).pipe(\r\n            map((result) => this.checkAndReturn(result))\r\n        );\r\n    }\r\n\r\n    checkAndReturn<T>(storageData: StorageModel): T {\r\n        if (storageData == null || storageData === undefined) {\r\n            return null;\r\n        }\r\n        let result: T = storageData.data;\r\n        if (storageData.dataTime && this.validityLen) {\r\n            if (isString(storageData.dataTime)) {\r\n                storageData.dataTime = new Date(storageData.dataTime);\r\n            }\r\n            const validTime = new Date(\r\n                storageData.dataTime.getTime() +\r\n                    (storageData.validityLen || this.validityLen) * 60000\r\n            );\r\n            if (validTime < new Date()) {\r\n                result = null;\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n\r\n    applyValidity(dataItems: { dataInfo: DataInfo; validDate: Date }[]) {\r\n        const mustRemoveItems: DataInfo[] = [];\r\n        for (const dataItem of dataItems) {\r\n            this.getStorageModel(dataItem.dataInfo).subscribe(\r\n                (storageData: StorageModel) => {\r\n                    if (storageData) {\r\n                        if (isString(storageData.dataTime)) {\r\n                            storageData.dataTime = new Date(\r\n                                storageData.dataTime\r\n                            );\r\n                        }\r\n                        if (storageData.dataTime < dataItem.validDate) {\r\n                            mustRemoveItems.push(dataItem.dataInfo);\r\n                        }\r\n                    }\r\n                }\r\n            );\r\n        }\r\n        if (mustRemoveItems.length !== 0) {\r\n            this.removeItems(mustRemoveItems);\r\n        }\r\n    }\r\n}\r\n\r\nexport interface StorageModel {\r\n    validityLen?: number;\r\n    dataTime?: Date;\r\n    data: any;\r\n}\r\n","import { DataInfo } from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { of } from 'rxjs';\r\n\r\nimport { Inject, Injectable, Injector, Optional } from '@angular/core';\r\n\r\nimport { LOCAL_STORAGE_VALIDITY_LEN } from '../../injectionTokens';\r\nimport {\r\n    NarikBaseDataStorage,\r\n    StorageModel,\r\n} from '../../base/narik-base-data-storage';\r\n\r\n@Injectable()\r\nexport class LocalStorageDataProvider extends NarikBaseDataStorage {\r\n    key = 'localStorage';\r\n    order = 3;\r\n    belongsInChain = true;\r\n\r\n    constructor(\r\n        injector: Injector,\r\n        @Optional()\r\n        @Inject(LOCAL_STORAGE_VALIDITY_LEN)\r\n        validityLen: number\r\n    ) {\r\n        super(injector);\r\n        this.validityLen = validityLen || 2 * 60;\r\n    }\r\n\r\n    getStorageModel<T>(dataInfo: DataInfo): Observable<StorageModel> {\r\n        const dataStorage = JSON.parse(\r\n            localStorage.getItem(this.getFullKey(dataInfo))\r\n        );\r\n        return of(dataStorage);\r\n    }\r\n\r\n    isDataProviderFor(dataInfo: DataInfo): boolean {\r\n        return false;\r\n    }\r\n    addItem(dataItmes: { dataInfo: DataInfo; data: any }[]): Observable<any> {\r\n        for (const data of dataItmes) {\r\n            localStorage.setItem(\r\n                this.getFullKey(data.dataInfo),\r\n                JSON.stringify(\r\n                    this.compeleteStorageData(\r\n                        data.data,\r\n                        data.dataInfo.validityLen\r\n                    )\r\n                )\r\n            );\r\n            this.raiseDataStream(data.dataInfo, data.data);\r\n        }\r\n        return of(true);\r\n    }\r\n\r\n    clear(): Observable<any> {\r\n        localStorage.clear();\r\n        return of(true);\r\n    }\r\n    removeItems(items: DataInfo[]): Observable<any> {\r\n        items.forEach((x) => {\r\n            localStorage.removeItem(this.getFullKey(x));\r\n        });\r\n        return of(true);\r\n    }\r\n}\r\n","import { DataInfo } from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { of } from 'rxjs';\r\n\r\nimport { Injectable, Injector, Optional, Inject } from '@angular/core';\r\n\r\nimport {\r\n    StorageModel,\r\n    NarikBaseDataStorage,\r\n} from '../../base/narik-base-data-storage';\r\nimport { MEMORY_STORAGE_VALIDITY_LEN } from '../../injectionTokens';\r\n\r\n@Injectable()\r\nexport class MemoryDataProvider extends NarikBaseDataStorage {\r\n    key = 'memory';\r\n    order = 1;\r\n    belongsInChain = true;\r\n\r\n    private storage = new Map<string, any>();\r\n    constructor(\r\n        injector: Injector,\r\n        @Optional()\r\n        @Inject(MEMORY_STORAGE_VALIDITY_LEN)\r\n        validityLen: number\r\n    ) {\r\n        super(injector);\r\n        this.validityLen = validityLen || 2 * 60;\r\n    }\r\n\r\n    getStorageModel<T>(dataInfo: DataInfo): Observable<StorageModel> {\r\n        const dataStorage = this.storage.get(\r\n            this.getFullKey(dataInfo)\r\n        ) as StorageModel;\r\n        return of(dataStorage);\r\n    }\r\n\r\n    isDataProviderFor(dataInfo: DataInfo): boolean {\r\n        return false;\r\n    }\r\n    addItem(dataItmes: { dataInfo: DataInfo; data: any }[]): Observable<any> {\r\n        for (const data of dataItmes) {\r\n            const fullkey = this.getFullKey(data.dataInfo);\r\n            this.storage.set(\r\n                fullkey,\r\n                this.compeleteStorageData(data.data, data.dataInfo.validityLen)\r\n            );\r\n            this.raiseDataStream(data.dataInfo, data.data);\r\n        }\r\n        return of(true);\r\n    }\r\n    clear(): Observable<any> {\r\n        this.storage.clear();\r\n        return of(true);\r\n    }\r\n    removeItems(items: DataInfo[]): Observable<any> {\r\n        items.forEach((x) => {\r\n            this.storage.delete(this.getFullKey(x));\r\n        });\r\n        return of(true);\r\n    }\r\n}\r\n","import {\r\n    DataInfo,\r\n    DataProvider,\r\n    RemoteDataProviderService,\r\n} from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { Injectable, Injector } from '@angular/core';\r\nimport { NarikBaseDataProvider } from '../../base/narik-base-data-provider';\r\n\r\n@Injectable()\r\nexport class RemoteDataProvider\r\n    extends NarikBaseDataProvider\r\n    implements DataProvider {\r\n    key = 'remote';\r\n    order = 5;\r\n\r\n    belongsInChain = true;\r\n    constructor(\r\n        injector: Injector,\r\n        private remoteDataProvider: RemoteDataProviderService\r\n    ) {\r\n        super(injector);\r\n    }\r\n\r\n    isDataProviderFor(dataInfo: DataInfo) {\r\n        return true;\r\n    }\r\n\r\n    getData<T = any>(dataInfo: DataInfo): Observable<T> {\r\n        return this.remoteDataProvider.handleData(dataInfo);\r\n    }\r\n\r\n    getDataStream<T = any>(dataInfo: DataInfo): Observable<T> {\r\n        return this.remoteDataProvider.getDataStream(dataInfo);\r\n    }\r\n}\r\n","import { DataInfo, DataProvider, DataStorage } from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { of } from 'rxjs';\r\n\r\nimport { Inject, Injectable, Injector, Optional } from '@angular/core';\r\n\r\nimport { SESSION_STORAGE_VALIDITY_LEN } from '../../injectionTokens';\r\nimport {\r\n    NarikBaseDataStorage,\r\n    StorageModel,\r\n} from '../../base/narik-base-data-storage';\r\n\r\n@Injectable()\r\nexport class SessionStorageDataProvider\r\n    extends NarikBaseDataStorage\r\n    implements DataProvider, DataStorage {\r\n    key = 'sessionStorage';\r\n    order = 2;\r\n    supportAdd = true;\r\n    belongsInChain = true;\r\n\r\n    constructor(\r\n        injector: Injector,\r\n        @Optional()\r\n        @Inject(SESSION_STORAGE_VALIDITY_LEN)\r\n        validityLen: number\r\n    ) {\r\n        super(injector);\r\n        this.validityLen = validityLen || 2 * 60;\r\n    }\r\n\r\n    getStorageModel<T>(dataInfo: DataInfo): Observable<StorageModel> {\r\n        const dataStorage = JSON.parse(\r\n            sessionStorage.getItem(this.getFullKey(dataInfo))\r\n        );\r\n        return of(dataStorage);\r\n    }\r\n\r\n    isDataProviderFor(dataInfo: DataInfo): boolean {\r\n        return false;\r\n    }\r\n    addItem(dataItmes: { dataInfo: DataInfo; data: any }[]): Observable<any> {\r\n        for (const data of dataItmes) {\r\n            sessionStorage.setItem(\r\n                this.getFullKey(data.dataInfo),\r\n                JSON.stringify(\r\n                    this.compeleteStorageData(\r\n                        data.data,\r\n                        data.dataInfo.validityLen\r\n                    )\r\n                )\r\n            );\r\n            this.raiseDataStream(data.dataInfo, data.data);\r\n        }\r\n        return of(true);\r\n    }\r\n    clear(): Observable<any> {\r\n        sessionStorage.clear();\r\n        return of(true);\r\n    }\r\n    removeItems(items: DataInfo[]): Observable<any> {\r\n        items.forEach((x) => {\r\n            sessionStorage.removeItem(this.getFullKey(x));\r\n        });\r\n        return of(true);\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { NarikTranslateLoader } from './translateLoader/narik-translate-loader';\r\nimport { Observable } from 'rxjs';\r\nimport { isString } from '@narik/common';\r\nimport { HttpService } from '@narik/infrastructure';\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class NarikTranslateService {\r\n    constructor(\r\n        private translateService: TranslateService,\r\n        private http: HttpService\r\n    ) {}\r\n\r\n    instant(\r\n        key: string | Array<string>,\r\n        interpolateParams?: Object\r\n    ): string | any {\r\n        if (isString(key) && key.indexOf('_') > 0) {\r\n            const items = (key as string).split('_');\r\n            return items\r\n                .map((item) =>\r\n                    this.translateService.instant(item, interpolateParams)\r\n                )\r\n                .join(' ');\r\n        }\r\n        return this.translateService.instant(key, interpolateParams);\r\n    }\r\n    use(lang: string): Observable<any> {\r\n        return this.translateService.use(lang);\r\n    }\r\n    setDefaultLang(lang: string): void {\r\n        this.translateService.setDefaultLang(lang);\r\n    }\r\n    public addTranslationItem(\r\n        item: string,\r\n        reLoad: boolean = false\r\n    ): Promise<boolean> {\r\n        return new Promise((resolve, reject) => {\r\n            const translateLoader = <NarikTranslateLoader>(\r\n                this.translateService.currentLoader\r\n            );\r\n            translateLoader.addTranslationItem(item);\r\n            if (reLoad) {\r\n                this.translateService\r\n                    .reloadLang(this.translateService.currentLang)\r\n                    .subscribe((x) => {\r\n                        this.translateService.use(\r\n                            this.translateService.currentLang\r\n                        );\r\n                        resolve(true);\r\n                    });\r\n            } else {\r\n                const url = translateLoader.getTranslateFilePath(\r\n                    this.translateService.currentLang ||\r\n                        this.translateService.defaultLang,\r\n                    item\r\n                );\r\n                this.http.get(url).subscribe((result) => {\r\n                    this.translateService.setTranslation(\r\n                        this.translateService.currentLang ||\r\n                            this.translateService.defaultLang,\r\n                        result,\r\n                        true\r\n                    );\r\n                    resolve(true);\r\n                });\r\n            }\r\n        });\r\n    }\r\n}\r\n","import { DataInfo, ModuleManager } from '@narik/infrastructure';\r\n\r\nimport { Injectable, Injector } from '@angular/core';\r\nimport { NarikBaseDataProvider } from '../../base/narik-base-data-provider';\r\nimport { of } from 'rxjs';\r\nimport { toDtoArray } from '@narik/common';\r\nimport { NarikTranslateService } from '../narik-translation.service';\r\n\r\n@Injectable()\r\nexport class StaticDataProvider extends NarikBaseDataProvider {\r\n    key = 'static';\r\n    order = 0;\r\n    belongsInChain = false;\r\n\r\n    private modulesStaticData = new Map<\r\n        string,\r\n        Map<\r\n            string,\r\n            {\r\n                key: string;\r\n                translateField?: string;\r\n                ignoreTranslate?: boolean;\r\n                convertToDto?: boolean;\r\n                data: any[];\r\n            }\r\n        >\r\n    >();\r\n\r\n    constructor(\r\n        injector: Injector,\r\n        private moduleManager: ModuleManager,\r\n        private translateor: NarikTranslateService\r\n    ) {\r\n        super(injector);\r\n\r\n        for (const module of this.moduleManager.modules.entriesArray()) {\r\n            if (module.value.metaData) {\r\n                this.addStaticData(\r\n                    module.key,\r\n                    module.value.metaData['staticData']\r\n                );\r\n            }\r\n        }\r\n        this.moduleManager.modulesChanged.subscribe((x) => {\r\n            if (x.moduleInfo.metaData) {\r\n                this.addStaticData(\r\n                    x.moduleKey,\r\n                    x.moduleInfo.metaData['staticData']\r\n                );\r\n            }\r\n        });\r\n    }\r\n\r\n    private addStaticData(\r\n        moduleKey: string,\r\n        staticData: Map<\r\n            string,\r\n            { key: string; translateField?: string; data: any[] }\r\n        >\r\n    ) {\r\n        if (staticData && !this.modulesStaticData.has(moduleKey)) {\r\n            this.modulesStaticData.set(moduleKey, staticData);\r\n        }\r\n    }\r\n\r\n    isDataProviderFor(dataInfo: DataInfo): boolean {\r\n        return false;\r\n    }\r\n\r\n    getData(dataInfo: DataInfo) {\r\n        const moduleData = this.modulesStaticData.get(dataInfo.moduleKey);\r\n        if (moduleData) {\r\n            const staticDataInfo = moduleData.get(dataInfo.dataKey);\r\n            if (staticDataInfo && staticDataInfo.data) {\r\n                const resultData =\r\n                    staticDataInfo.convertToDto === false\r\n                        ? staticDataInfo.data\r\n                        : toDtoArray(staticDataInfo.data);\r\n                if (staticDataInfo.ignoreTranslate !== true) {\r\n                    const translateField =\r\n                        staticDataInfo.translateField || 'title';\r\n                    for (const item of resultData) {\r\n                        item[translateField] = this.translateor.instant(\r\n                            item[translateField]\r\n                        );\r\n                    }\r\n                }\r\n                return of(resultData);\r\n            }\r\n        }\r\n        return of([]);\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n    HttpRequest,\r\n    HttpHandler,\r\n    HttpEvent,\r\n    HttpInterceptor,\r\n} from '@angular/common/http';\r\n\r\nimport { catchError } from 'rxjs/operators';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { DialogService } from '@narik/infrastructure';\r\n\r\n@Injectable()\r\nexport class HttpErrorInterceptor implements HttpInterceptor {\r\n    constructor(private dialogService: DialogService) {}\r\n\r\n    intercept(\r\n        request: HttpRequest<any>,\r\n        next: HttpHandler\r\n    ): Observable<HttpEvent<any>> {\r\n        return next.handle(request).pipe(\r\n            catchError((err) => {\r\n                if (err.status === 403) {\r\n                    this.dialogService.error('errors.STATUS_401');\r\n                }\r\n                if (err.status === 400) {\r\n                    if (err.error && err.error.errors) {\r\n                        this.dialogService.error(err.error.errors);\r\n                    }\r\n                }\r\n                return throwError(err);\r\n            })\r\n        );\r\n    }\r\n}\r\n","import { Type } from '@angular/core';\r\nexport const DynamicComponents: { [key: string]: Type<any> } = {};\r\n\r\nexport function DynamicComponent(key: string) {\r\n    return function _dynamicFormDecorator<\r\n        T extends new (...args: any[]) => any\r\n    >(constr: T) {\r\n        DynamicComponents[key] = constr;\r\n    };\r\n}\r\n","import { Injectable, Type } from '@angular/core';\r\nimport { ComponentTypeResolver } from '@narik/infrastructure';\r\nimport { DynamicComponents } from '../decorators/dynamic-component.decorator';\r\n\r\n@Injectable()\r\nexport class NarikComponentTypeResolver extends ComponentTypeResolver {\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    resolveComponentType(key: string, notFound?: Type<any>): Type<any> {\r\n        if (DynamicComponents[key]) {\r\n            return DynamicComponents[key];\r\n        } else {\r\n            if (notFound) {\r\n                return notFound;\r\n            }\r\n        }\r\n        throw new Error(\r\n            `Could not find any type for \"${key}\". To define a dynamic component use @DynamicComponent(key)`\r\n        );\r\n    }\r\n\r\n    registerComponentType(key: string, componentType: Type<any>) {\r\n        DynamicComponents[key] = componentType;\r\n    }\r\n}\r\n","import {\r\n    ConfigService,\r\n    CONFIG_PATH,\r\n    CONFIG_OPTIONS,\r\n    ConfigOptions,\r\n    HttpService,\r\n} from '@narik/infrastructure';\r\n\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { tap } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\nimport { Observable } from 'rxjs';\r\nimport { ReplaySubject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NarikConfigService extends ConfigService {\r\n    configData: any = {};\r\n    configKeys: string[] = [];\r\n    private configLoadedSubject: Subject<any>;\r\n\r\n    constructor(\r\n        private httpService: HttpService,\r\n        @Inject(CONFIG_OPTIONS) private configOptions: ConfigOptions,\r\n        @Inject(CONFIG_PATH) private configPath: string\r\n    ) {\r\n        super();\r\n\r\n        if (configOptions && configOptions.configFilePath) {\r\n            this.configPath = configOptions.configFilePath;\r\n        }\r\n        this.configLoadedSubject = new ReplaySubject(1);\r\n    }\r\n\r\n    get configLoaded(): Observable<any> {\r\n        return this.configLoadedSubject.asObservable();\r\n    }\r\n    init(): Promise<any> {\r\n        return this.httpService\r\n            .get(\r\n                this.configPath +\r\n                    (this.configOptions &&\r\n                    this.configOptions.addTimeParameterToConfigFilePath\r\n                        ? '?t=' + new Date().getTime()\r\n                        : '')\r\n            )\r\n            .pipe(\r\n                tap((x) => {\r\n                    this.configData = x;\r\n                    for (const key in x) {\r\n                        if (x.hasOwnProperty(key)) {\r\n                            this.configKeys.push(key);\r\n                        }\r\n                    }\r\n                    this.configLoadedSubject.next(true);\r\n                })\r\n            )\r\n            .toPromise();\r\n    }\r\n    getConfig<T>(key: string): T {\r\n        return this.configData[key] as T;\r\n    }\r\n    getAllKeys(): string[] {\r\n        return this.configKeys;\r\n    }\r\n}\r\n","import {\r\n    DataInfo,\r\n    DataProvider,\r\n    DataProviderService,\r\n    DATA_PROVIDER,\r\n    isDataStorage,\r\n    ModuleManager,\r\n    MODULE_DATA_KEY,\r\n    EventAggregatorService,\r\n    DataOption,\r\n    RemoteMessagingService,\r\n    MetaData,\r\n} from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { Inject, Injectable, Injector, Optional } from '@angular/core';\r\nimport { mergeMap, first, tap, merge } from 'rxjs/operators';\r\nimport { of } from 'rxjs';\r\nimport { empty } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NarikDataProviderService extends DataProviderService {\r\n    private dataProviders = new Map<string, DataProvider>();\r\n    private modulesDataItems = new Map<string, Map<string, DataInfo>>();\r\n    private modulesDafaultProviderKey = new Map<string, string>();\r\n    private modulesDafaultOriginProviderKey = new Map<string, string>();\r\n\r\n    constructor(\r\n        @Inject(DATA_PROVIDER) providers: DataProvider[],\r\n        private moduleManager: ModuleManager,\r\n        private injector: Injector,\r\n        private eventAggregatorService: EventAggregatorService,\r\n        @Optional() private remoteMessagingService: RemoteMessagingService\r\n    ) {\r\n        super();\r\n        providers.forEach((x) => this.dataProviders.set(x.key, x));\r\n        this.moduleManager.narikLoaded.subscribe(() => {\r\n            this.eventAggregatorService\r\n                .listen<DataInfo | DataInfo[]>('CLIENT_DATA_CHANGED')\r\n                .pipe(\r\n                    merge(\r\n                        remoteMessagingService\r\n                            ? this.remoteMessagingService.listen('DATA-CHANGE')\r\n                            : empty()\r\n                    )\r\n                )\r\n                .subscribe((dataInfo: DataInfo) => {\r\n                    for (const provider of this.dataProviders.valuesArray()) {\r\n                        if (!isDataStorage(provider)) {\r\n                            provider.dataChanged(dataInfo);\r\n                        }\r\n                    }\r\n                });\r\n        });\r\n\r\n        for (const module of this.moduleManager.modules.entriesArray()) {\r\n            if (module.value.metaData) {\r\n                this.addDataItems(module.key, module.value.metaData);\r\n            }\r\n        }\r\n        this.moduleManager.modulesChanged.subscribe((x) => {\r\n            if (x.moduleInfo.metaData) {\r\n                this.addDataItems(x.moduleKey, x.moduleInfo.metaData);\r\n            }\r\n        });\r\n    }\r\n\r\n    private addDataItems(moduleKey: string, metaData: MetaData) {\r\n        if (metaData.dataInfo) {\r\n            const dataInfo = metaData.dataInfo;\r\n            if (dataInfo.defaultDataProvider) {\r\n                this.modulesDafaultProviderKey.set(\r\n                    moduleKey,\r\n                    dataInfo.defaultDataProvider\r\n                );\r\n            }\r\n            if (dataInfo.defaultOriginDataProvider) {\r\n                this.modulesDafaultOriginProviderKey.set(\r\n                    moduleKey,\r\n                    dataInfo.defaultOriginDataProvider\r\n                );\r\n            }\r\n        }\r\n\r\n        if (!this.modulesDataItems.has(moduleKey)) {\r\n            let dataItems = metaData['dataItems'];\r\n            if (!dataItems) {\r\n                dataItems = new Map<string, DataInfo>();\r\n            }\r\n            this.modulesDataItems.set(moduleKey, dataItems);\r\n        }\r\n    }\r\n\r\n    protected tryToFindDataProviderKey(\r\n        dataInfo: DataInfo,\r\n        fromOrigin = false\r\n    ): string {\r\n        let dataProviderKey = null;\r\n        const moduleKey = dataInfo.moduleKey\r\n            ? dataInfo.moduleKey\r\n            : this.injector.get(MODULE_DATA_KEY);\r\n        if (this.modulesDataItems.has(moduleKey)) {\r\n            if (this.modulesDataItems.get(moduleKey).get(dataInfo.dataKey)) {\r\n                const dataProviderInformation = this.modulesDataItems\r\n                    .get(moduleKey)\r\n                    .get(dataInfo.dataKey);\r\n                dataProviderKey = fromOrigin\r\n                    ? dataProviderInformation.originDataProviderKey\r\n                    : dataProviderInformation.dataProviderKey;\r\n            }\r\n        }\r\n        if (\r\n            !dataProviderKey &&\r\n            !fromOrigin &&\r\n            this.modulesDafaultProviderKey.has(moduleKey)\r\n        ) {\r\n            dataProviderKey = this.modulesDafaultProviderKey.get(moduleKey);\r\n        }\r\n\r\n        if (\r\n            !dataProviderKey &&\r\n            fromOrigin &&\r\n            this.modulesDafaultProviderKey.has(moduleKey)\r\n        ) {\r\n            dataProviderKey = this.modulesDafaultOriginProviderKey.get(\r\n                moduleKey\r\n            );\r\n        }\r\n\r\n        if (!dataProviderKey) {\r\n            const providers = this.dataProviders\r\n                .valuesArray()\r\n                .sort((x) => x.order);\r\n            for (const x of providers) {\r\n                if (x.isDataProviderFor(dataInfo)) {\r\n                    return x.key;\r\n                }\r\n            }\r\n        }\r\n        return dataProviderKey;\r\n    }\r\n\r\n    protected tryToFindFromOtherProvidersOnNotFound<T>(\r\n        dataInfo: DataInfo,\r\n        faultDataProvider: DataProvider\r\n    ): Observable<T> {\r\n        const faultDataProviders: DataProvider[] = [faultDataProvider];\r\n        const otherDataProvidrs = this.dataProviders\r\n            .valuesArray()\r\n            .filter(\r\n                (dp) => dp.belongsInChain && dp.order > faultDataProvider.order\r\n            )\r\n            .sort((dp) => dp.order);\r\n        let returnObs: Observable<T>;\r\n        if (otherDataProvidrs[0]) {\r\n            returnObs = otherDataProvidrs[0].getData(dataInfo);\r\n        }\r\n        let index = 0;\r\n        for (const item of otherDataProvidrs) {\r\n            if (index !== 0) {\r\n                returnObs = returnObs.pipe<T>(\r\n                    mergeMap((result) => {\r\n                        if (result != null && result !== undefined) {\r\n                            return of(result);\r\n                        } else {\r\n                            faultDataProviders.push(item);\r\n                            return item.getData(dataInfo);\r\n                        }\r\n                    })\r\n                );\r\n            }\r\n            index++;\r\n        }\r\n        return returnObs.pipe(\r\n            tap((result) => {\r\n                if (result != null && result !== undefined) {\r\n                    if (faultDataProviders.length !== 1) {\r\n                        faultDataProviders.pop();\r\n                    }\r\n\r\n                    for (const item of faultDataProviders) {\r\n                        if (isDataStorage(item)) {\r\n                            item.addItem([\r\n                                {\r\n                                    dataInfo: dataInfo,\r\n                                    data: result,\r\n                                },\r\n                            ]);\r\n                        }\r\n                    }\r\n                }\r\n            })\r\n        );\r\n    }\r\n    getData(dataInfo: DataInfo, options?: DataOption): Observable<any>;\r\n    getData<T>(dataInfo: DataInfo, options?: DataOption): Observable<T>;\r\n    getData<T>(dataInfo: DataInfo, options?: DataOption): Observable<T> {\r\n        let dataProviderKey = dataInfo.dataProviderKey;\r\n        if (options && options.fromOrigin) {\r\n            dataProviderKey = dataInfo.originDataProviderKey;\r\n            if (!dataProviderKey) {\r\n                dataProviderKey = this.tryToFindDataProviderKey(dataInfo, true);\r\n            }\r\n        }\r\n\r\n        if (!dataProviderKey) {\r\n            dataProviderKey = this.tryToFindDataProviderKey(dataInfo);\r\n        }\r\n\r\n        if (dataProviderKey) {\r\n            const dataProvider = this.dataProviders.get(dataProviderKey);\r\n            return dataProvider.getData(dataInfo).pipe(\r\n                mergeMap((x) => {\r\n                    if (x != null && x !== undefined) {\r\n                        if (options && options.fromOrigin) {\r\n                            if (\r\n                                dataInfo.dataProviderKey &&\r\n                                dataInfo.dataProviderKey !== dataProviderKey\r\n                            ) {\r\n                                const originalDataProvider = this.dataProviders.get(\r\n                                    dataInfo.dataProviderKey\r\n                                );\r\n                                if (isDataStorage(originalDataProvider)) {\r\n                                    originalDataProvider.addItem([\r\n                                        {\r\n                                            dataInfo: dataInfo,\r\n                                            data: x,\r\n                                        },\r\n                                    ]);\r\n                                }\r\n                            }\r\n                        }\r\n                        return of(x);\r\n                    } else {\r\n                        return this.tryToFindFromOtherProvidersOnNotFound(\r\n                            dataInfo,\r\n                            dataProvider\r\n                        );\r\n                    }\r\n                }),\r\n                first()\r\n            );\r\n        } else {\r\n            return of(null);\r\n        }\r\n    }\r\n\r\n    getDataStream(dataInfo: DataInfo, options?: DataOption): Observable<any>;\r\n    getDataStream<T>(dataInfo: DataInfo, options?: DataOption): Observable<T>;\r\n    getDataStream<T>(dataInfo: DataInfo, options?: DataOption): Observable<T> {\r\n        let dataProviderKey;\r\n        if (options.fromOrigin) {\r\n            dataProviderKey = dataInfo.originDataProviderKey;\r\n            if (!dataProviderKey) {\r\n                dataInfo.dataProviderKey = this.tryToFindDataProviderKey(\r\n                    dataInfo,\r\n                    true\r\n                );\r\n            }\r\n        }\r\n        if (dataProviderKey) {\r\n            dataProviderKey = this.tryToFindDataProviderKey(dataInfo);\r\n        }\r\n        if (!dataProviderKey) {\r\n            throw new Error('For dataStream the dataProviderKey must be set');\r\n        }\r\n\r\n        const dataProvider = this.dataProviders.get(dataProviderKey);\r\n        return dataProvider.getDataStream<T>(dataInfo);\r\n    }\r\n}\r\n","import {\r\n    DataStorageService,\r\n    DATA_STORAGE,\r\n    DataInfo,\r\n    DataStorage,\r\n    EventAggregatorService,\r\n    ModuleManager,\r\n    RemoteMessagingService,\r\n    DEFAULT_DATA_STORAGE_KEY,\r\n} from '@narik/infrastructure';\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Subject } from 'rxjs';\r\nimport { merge } from 'rxjs/operators';\r\nimport { empty } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NarikDataStorageService extends DataStorageService {\r\n    private dataStorages = new Map<string, DataStorage>();\r\n\r\n    constructor(\r\n        @Inject(DATA_STORAGE) storages: DataStorage[],\r\n        @Optional()\r\n        @Inject(DEFAULT_DATA_STORAGE_KEY)\r\n        private defaultStorageKey: string,\r\n        private moduleManager: ModuleManager,\r\n        private eventAggregatorService: EventAggregatorService,\r\n        @Optional() private remoteMessagingService: RemoteMessagingService\r\n    ) {\r\n        super();\r\n        storages.forEach((x) => this.dataStorages.set(x.key, x));\r\n\r\n        this.moduleManager.narikLoaded.subscribe(() => {\r\n            this.eventAggregatorService\r\n                .listen<DataInfo | DataInfo[]>('CLIENT_DATA_CHANGED')\r\n                .pipe(\r\n                    merge(\r\n                        remoteMessagingService\r\n                            ? this.remoteMessagingService.listen('DATA-CHANGE')\r\n                            : empty()\r\n                    )\r\n                )\r\n                .subscribe((dataInfo: DataInfo) => {\r\n                    for (const storage of this.dataStorages.valuesArray()) {\r\n                        storage.dataChanged(dataInfo);\r\n                    }\r\n                });\r\n\r\n            this.eventAggregatorService\r\n                .listen<DataInfo | DataInfo[]>('CLIENT_DATA_INVALIDATE')\r\n                .pipe(\r\n                    merge(\r\n                        remoteMessagingService\r\n                            ? this.remoteMessagingService.listen(\r\n                                  'DATA-INVALIDATE'\r\n                              )\r\n                            : empty()\r\n                    )\r\n                )\r\n                .subscribe(\r\n                    (dataItems: { dataInfo: DataInfo; validDate: Date }[]) => {\r\n                        this.applyValidity(dataItems);\r\n                    }\r\n                );\r\n        });\r\n    }\r\n\r\n    getDataStream(key: string, dataInfo: DataInfo): Observable<any>;\r\n    getDataStream<T>(key: string, dataInfo: DataInfo): Observable<T>;\r\n    getDataStream<T>(key: string, dataInfo: DataInfo): Observable<T> {\r\n        key = key || this.defaultStorageKey;\r\n        this.checkKey(key);\r\n        const dataStorage = this.getStorage(key);\r\n        return dataStorage.getDataStream<T>(dataInfo);\r\n    }\r\n\r\n    getData(key: string, dataInfo: DataInfo): Observable<any>;\r\n    getData<T>(key: string, dataInfo: DataInfo): Observable<T>;\r\n    getData<T>(key: string, dataInfo: DataInfo): Observable<T> {\r\n        key = key || this.defaultStorageKey;\r\n        this.checkKey(key);\r\n        return this.getStorage(key).getData<T>(dataInfo);\r\n    }\r\n    clear(key: string): Observable<any> {\r\n        this.checkKey(key);\r\n        return this.getStorage(key).clear();\r\n    }\r\n    removeItems(key: string, items: DataInfo[]): Observable<any> {\r\n        key = key || this.defaultStorageKey;\r\n        this.checkKey(key);\r\n        return this.getStorage(key).removeItems(items);\r\n    }\r\n    addData(\r\n        key: string,\r\n        dataItmes: { dataInfo: DataInfo; data: any }[]\r\n    ): Observable<any> {\r\n        key = key || this.defaultStorageKey;\r\n        this.checkKey(key);\r\n        return this.getStorage(key).addItem(dataItmes);\r\n    }\r\n\r\n    private getStorage(key: string): DataStorage {\r\n        key = key || this.defaultStorageKey;\r\n        this.checkKey(key);\r\n        return this.dataStorages.get(key);\r\n    }\r\n\r\n    applyValidity(dataItems: { dataInfo: DataInfo; validDate: Date }[]) {\r\n        for (const storage of this.dataStorages.valuesArray()) {\r\n            storage.applyValidity(dataItems);\r\n        }\r\n    }\r\n\r\n    private checkKey(key: string) {\r\n        if (!key) {\r\n            throw new Error(\r\n                'You must specify storage  key. Either by DEFAULT_DATA_STORAGE_KEY or send it  with method parameter'\r\n            );\r\n        }\r\n    }\r\n}\r\n","import { Injector } from '@angular/core';\r\n\r\nexport class AppInjector {\r\n    public static injector: Injector = undefined;\r\n}\r\n","import { Type, InjectionToken, InjectFlags, Injector } from '@angular/core';\r\nimport { AppInjector } from '../util/app-injector';\r\n\r\nexport function NarikInject<T>(\r\n    token: Type<T> | InjectionToken<T> | any,\r\n    notFoundValue: T = null,\r\n    flags?: InjectFlags\r\n) {\r\n    return function (target: any, key: string) {\r\n        const prev = Object.getOwnPropertyDescriptor(target, key);\r\n        const getter = function () {\r\n            if (this['$$$Inject_' + token.toString()]) {\r\n                return this['$$$Inject_' + token.toString()];\r\n            }\r\n            let localInjector = this.injector || this['$$$_Injector'];\r\n            if (!localInjector) {\r\n                for (const filedKey in this) {\r\n                    if (this.hasOwnProperty(filedKey)) {\r\n                        if (\r\n                            this[filedKey] instanceof Injector ||\r\n                            (this[filedKey] &&\r\n                                this[filedKey].constructor.name === 'Injector_')\r\n                        ) {\r\n                            localInjector = this[filedKey];\r\n                            this['$$$_Injector'] = localInjector;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            if (!localInjector) {\r\n                console.warn(\r\n                    'Could not find local Injector in  (' +\r\n                        target.constructor.name +\r\n                        '), use root injector instead!'\r\n                );\r\n            } else {\r\n                if (\r\n                    localInjector.constructor.name === 'StaticInjector' &&\r\n                    localInjector.parent\r\n                ) {\r\n                    localInjector = localInjector.parent;\r\n                }\r\n            }\r\n            const value = (localInjector || AppInjector.injector).get(\r\n                token,\r\n                notFoundValue,\r\n                flags\r\n            );\r\n            this['$$$' + token.toString()] = value;\r\n            return value;\r\n        };\r\n        Object.defineProperty(target, key, {\r\n            get: getter,\r\n            enumerable: prev == null ? true : prev.enumerable,\r\n            configurable: prev == null ? true : prev.configurable,\r\n        });\r\n    };\r\n}\r\n\r\nexport function NarikGlobalInject<T>(\r\n    token: Type<T> | InjectionToken<T> | any,\r\n    notFoundValue: T = null,\r\n    flags?: InjectFlags\r\n) {\r\n    return function (target: any, key: string) {\r\n        const prev = Object.getOwnPropertyDescriptor(target, key);\r\n        const getter = function () {\r\n            if (this['$$$Inject_' + token.toString()]) {\r\n                return this['$$$Inject_' + token.toString()];\r\n            }\r\n            const localInjectors: any[] = this.injectors;\r\n\r\n            if (!localInjectors) {\r\n                console.warn(\r\n                    'Could not find local Injectors in  (' +\r\n                        target.constructor.name +\r\n                        ')!'\r\n                );\r\n            } else {\r\n                for (let i = localInjectors.length - 1; i >= 0; --i) {\r\n                    const injector = localInjectors[i];\r\n                    const value = injector.get(token, notFoundValue, flags);\r\n                    this['$$$' + token.toString()] = value;\r\n                    return value;\r\n                }\r\n                return undefined;\r\n            }\r\n        };\r\n        Object.defineProperty(target, key, {\r\n            get: getter,\r\n            enumerable: prev == null ? true : prev.enumerable,\r\n            configurable: prev == null ? true : prev.configurable,\r\n        });\r\n    };\r\n}\r\n","import {\r\n    EntityField,\r\n    DialogInputContent,\r\n    ModuleManager,\r\n    PARAMETERS,\r\n} from '@narik/infrastructure';\r\nimport { UUID } from 'angular2-uuid';\r\n\r\nimport {\r\n    DialogService,\r\n    MessageType,\r\n    DialogOption,\r\n    DialogResult,\r\n    DialogRef,\r\n    DialogAction,\r\n    DIALOG_CONTAINER,\r\n    DialogContainer,\r\n    EventAggregatorService,\r\n    ModuleInfo,\r\n    DIALOG_OVERLAY_CONTAINER,\r\n    DialogOverlayContainer,\r\n    DialogEvent,\r\n    DIALOG_MESSAGE_COMPONENT,\r\n    DIALOG_CONTENT_COMPONENT,\r\n    DIALOG_INPUT_COMPONENT,\r\n    FieldTypes,\r\n    DIALOG_REF,\r\n} from '@narik/infrastructure';\r\nimport {\r\n    Injectable,\r\n    Type,\r\n    TemplateRef,\r\n    Inject,\r\n    ComponentFactoryResolver,\r\n    ApplicationRef,\r\n    ComponentRef,\r\n    Injector,\r\n    ComponentFactory,\r\n    NgModuleRef,\r\n    ElementRef,\r\n    StaticProvider,\r\n    Renderer2,\r\n    RendererFactory2,\r\n    Optional,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { isString, isArray, isFunction } from '@narik/common';\r\nimport { filter } from 'rxjs/operators';\r\nimport { first } from 'rxjs/operators';\r\nimport {\r\n    NarikInject,\r\n    NarikGlobalInject,\r\n} from '../decorators/narik-inject.decorator';\r\nimport { GlobalConfig, ToastrService } from 'ngx-toastr';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { OverlayContainer, Overlay } from '@angular/cdk/overlay';\r\nimport { take } from 'rxjs/operators';\r\nimport { TOASTR_OPTION } from '../injectionTokens';\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class NarikDialogService extends DialogService {\r\n    private openDialogs = new Map<string, DialogRef<any>>();\r\n    private injectors: Injector[] = [];\r\n    nextUniqueId = 1;\r\n    @NarikInject(ToastrService)\r\n    private toastrService: ToastrService;\r\n\r\n    @NarikInject(TranslateService)\r\n    private translateService: TranslateService;\r\n\r\n    @NarikGlobalInject(DIALOG_MESSAGE_COMPONENT)\r\n    messageComponent: Type<any>;\r\n\r\n    @NarikGlobalInject(DIALOG_INPUT_COMPONENT)\r\n    inputComponent: Type<DialogInputContent>;\r\n\r\n    @NarikInject(DIALOG_CONTENT_COMPONENT)\r\n    contentComponent: Type<any>;\r\n\r\n    @NarikGlobalInject(DIALOG_CONTAINER)\r\n    dialogContainerType: Type<DialogContainer>;\r\n\r\n    @NarikInject(RendererFactory2)\r\n    rendererFactory: RendererFactory2;\r\n\r\n    constructor(\r\n        private injector: Injector,\r\n        @Optional()\r\n        @Inject(DIALOG_OVERLAY_CONTAINER)\r\n        private dialogOverlayContainerType: Type<DialogOverlayContainer>,\r\n        private applicationRef: ApplicationRef,\r\n        private componentFactoryResolver: ComponentFactoryResolver,\r\n        private eventAggregatorService: EventAggregatorService,\r\n        private moduleManager: ModuleManager,\r\n        moduleRef: NgModuleRef<any>,\r\n        @Inject(DOCUMENT) private document,\r\n        @Optional()\r\n        @Inject(TOASTR_OPTION)\r\n        private toastrOption: GlobalConfig\r\n    ) {\r\n        super();\r\n        this.registerModule(moduleRef, componentFactoryResolver, injector);\r\n        this.moduleManager.narikLoaded.subscribe(() => {\r\n            this.eventAggregatorService\r\n                .listen<{ moduleKey: string }>('MODULE_LOAD_COMPLETELY')\r\n                .subscribe(\r\n                    (module: { moduleKey: string; moduleInfo: ModuleInfo }) => {\r\n                        if (module.moduleInfo && module.moduleInfo.module) {\r\n                            this.registerModule(\r\n                                module.moduleInfo.module,\r\n                                module.moduleInfo.module\r\n                                    .componentFactoryResolver,\r\n                                module.moduleInfo.module.injector\r\n                            );\r\n                        }\r\n                    }\r\n                );\r\n        });\r\n    }\r\n\r\n    private registerModule(\r\n        moduleRef: NgModuleRef<any>,\r\n        componentFactoryResolver: ComponentFactoryResolver,\r\n        injector: Injector\r\n    ) {\r\n        if (injector) {\r\n            this.injectors.push(injector);\r\n        }\r\n    }\r\n\r\n    activeDialogId(): string {\r\n        const itemKeys = this.openDialogs.entriesArray();\r\n        if (itemKeys.length > 0) {\r\n            return itemKeys[itemKeys.length - 1].key;\r\n        }\r\n        return undefined;\r\n    }\r\n\r\n    isElementInActiveDialog(el: ElementRef): boolean {\r\n        const activeDialogId = this.activeDialogId();\r\n        if (!activeDialogId) {\r\n            return true;\r\n        }\r\n        const parent = el.nativeElement.closest(\r\n            `[narik-dialog-id=\"${activeDialogId}\"]`\r\n        );\r\n        return !!parent;\r\n    }\r\n\r\n    error(message: string | string[] | any, title?: string, options?: any) {\r\n        this.showMessage(message, title, MessageType.Error, {\r\n            ...this.toastrOption,\r\n            ...options,\r\n        });\r\n    }\r\n    showMessage(\r\n        message: string | string[],\r\n        title?: string,\r\n        type?: MessageType,\r\n        options?: any\r\n    ) {\r\n        options = {\r\n            ...this.toastrOption,\r\n            ...options,\r\n        };\r\n        if (isArray(message)) {\r\n            message = (message as string[])\r\n                .map((x) => this.translateService.instant(x))\r\n                .join(' ');\r\n        } else if (isString(message)) {\r\n            message = this.translateService.instant(message);\r\n        } else {\r\n            message = Object.keys(message)\r\n                .map((x) => this.translateService.instant(message[x]))\r\n                .join(' ');\r\n        }\r\n        type = type || MessageType.Success;\r\n        switch (type) {\r\n            case MessageType.Success: {\r\n                this.toastrService.success(message as string, title, options);\r\n                break;\r\n            }\r\n            case MessageType.Info: {\r\n                this.toastrService.info(message as string, title, options);\r\n                break;\r\n            }\r\n            case MessageType.Warn: {\r\n                this.toastrService.warning(message as string, title, options);\r\n                break;\r\n            }\r\n            case MessageType.Error: {\r\n                this.toastrService.error(message as string, title, options);\r\n                break;\r\n            }\r\n            default:\r\n                this.toastrService.success(message as string, title, options);\r\n        }\r\n    }\r\n\r\n    showDialog<T>(\r\n        content: Type<any> | TemplateRef<any> | ComponentFactory<any> | string,\r\n        title?: string,\r\n        data?: any,\r\n        actions?: DialogAction[],\r\n        options?: DialogOption,\r\n        validateOnClose?: (\r\n            dialogResult: DialogResult<T>\r\n        ) => boolean | Promise<boolean>,\r\n        onClose?: (dialogResult: DialogResult<T>) => void,\r\n        providers?: StaticProvider[]\r\n    ): DialogRef<T> {\r\n        options = options || {};\r\n        const containers = this.createDialogContainer(options, actions, title);\r\n        const dialogContainerRef = containers.container;\r\n        const dialogOverlayContainerRef = containers.overLaycontainer;\r\n\r\n        const result = new NarikDialogRef<T>('dialog-' + UUID.UUID(), null);\r\n        const renderer = this.rendererFactory.createRenderer(null, null);\r\n        renderer.setAttribute(\r\n            dialogContainerRef.location.nativeElement,\r\n            'narik-dialog-id',\r\n            result.id\r\n        );\r\n        result.container = dialogContainerRef.instance;\r\n        if (content instanceof TemplateRef) {\r\n            const dialogContent = dialogContainerRef.instance.contentContainerRef.createEmbeddedView(\r\n                content,\r\n                data || {}\r\n            );\r\n        } else if (\r\n            content instanceof Type ||\r\n            content instanceof ComponentFactory\r\n        ) {\r\n            const factory =\r\n                content instanceof ComponentFactory\r\n                    ? content\r\n                    : this.componentFactoryResolver.resolveComponentFactory(\r\n                          content as Type<T>\r\n                      );\r\n            providers = providers || [];\r\n            providers.push({ provide: DIALOG_REF, useValue: result });\r\n            providers.push({ provide: PARAMETERS, useValue: data });\r\n\r\n            let parentInjector: Injector = this.injector;\r\n\r\n            if ((factory as any).ngModule) {\r\n                parentInjector = ((factory as any).ngModule as NgModuleRef<any>)\r\n                    .injector;\r\n            }\r\n\r\n            const localInjector = Injector.create({\r\n                providers: providers,\r\n                parent: parentInjector,\r\n            });\r\n\r\n            const dialogContent = dialogContainerRef.instance.contentContainerRef.createComponent(\r\n                factory,\r\n                undefined,\r\n                localInjector\r\n            );\r\n\r\n            // apply data on component inputs\r\n            if (data) {\r\n                for (const input of factory.inputs) {\r\n                    if (\r\n                        Object.prototype.hasOwnProperty.call(\r\n                            data,\r\n                            input.propName\r\n                        )\r\n                    ) {\r\n                        dialogContent.instance[input.propName] =\r\n                            data[input.propName];\r\n                    }\r\n                }\r\n            }\r\n\r\n            result.componentInstance = dialogContent.instance;\r\n        } else if (isString(content)) {\r\n            const element = renderer.createElement(content);\r\n\r\n            renderer.insertBefore(\r\n                renderer.parentNode(\r\n                    dialogContainerRef.instance.contentContainerRef.element\r\n                        .nativeElement\r\n                ),\r\n                element,\r\n                dialogContainerRef.instance.contentContainerRef.element\r\n                    .nativeElement\r\n            );\r\n\r\n            if (data) {\r\n                for (const key in data) {\r\n                    if (Object.prototype.hasOwnProperty.call(data, key)) {\r\n                        element[key] = data[key];\r\n                    }\r\n                }\r\n            }\r\n            result.componentInstance = element;\r\n        }\r\n        result.element = dialogOverlayContainerRef.location.nativeElement;\r\n        const overlayContainer = this.injector.get(OverlayContainer, undefined);\r\n        if (overlayContainer) {\r\n            const host = overlayContainer.getContainerElement();\r\n            const pane = this.document.createElement('div');\r\n            pane.id = `cdk-overlay-dialog-${this.nextUniqueId++}`;\r\n            pane.classList.add('cdk-overlay-pane');\r\n            host.appendChild(pane);\r\n            pane.appendChild(dialogOverlayContainerRef.location.nativeElement);\r\n        } else {\r\n            this.document.body.appendChild(\r\n                dialogOverlayContainerRef.location.nativeElement\r\n            );\r\n        }\r\n\r\n        setTimeout(() => {\r\n            dialogContainerRef.instance.isOpen = true;\r\n        }, 100);\r\n        dialogOverlayContainerRef.instance.dialogRef = result;\r\n        dialogContainerRef.instance.dialogRef = result;\r\n\r\n        result.dialogOverlayContainerRef = dialogOverlayContainerRef;\r\n\r\n        this.openDialogs.set(result.id, result);\r\n\r\n        if (onClose) {\r\n            result.closed.then((x) => {\r\n                onClose(x);\r\n            });\r\n        }\r\n        result.events\r\n            .pipe(filter((x) => x.eventType === 'CLOSE_REQUEST'))\r\n            .subscribe((e: DialogEvent) => {\r\n                if (\r\n                    result.componentInstance &&\r\n                    isFunction((<any>result.componentInstance).onCloseRequest)\r\n                ) {\r\n                    (<any>result.componentInstance).onCloseRequest(e);\r\n                }\r\n                if (validateOnClose) {\r\n                    const validateResult = validateOnClose(e.eventData);\r\n                    if (validateResult instanceof Promise) {\r\n                        (validateResult as Promise<boolean>).then((x) => {\r\n                            if (x) {\r\n                                this.close(result, e.eventData, e.eventSource);\r\n                            }\r\n                        });\r\n                    } else if (validateResult === true) {\r\n                        this.close(result, e.eventData, e.eventSource);\r\n                    }\r\n                } else {\r\n                    this.close(result, e.eventData, e.eventSource);\r\n                }\r\n            });\r\n        return result;\r\n    }\r\n\r\n    showConfirm(\r\n        message: string,\r\n        title?: string,\r\n        actions?: DialogAction[],\r\n        onResult?: (dialogResult: DialogResult<any>) => void\r\n    ): DialogRef<any> {\r\n        return this.showDialog(\r\n            this.messageComponent,\r\n            title,\r\n            {\r\n                message: message,\r\n            },\r\n            actions || [...DialogActions.yes_no],\r\n            undefined,\r\n            undefined,\r\n            onResult\r\n        );\r\n    }\r\n    showMessageBox(message: string, title?: string): DialogRef<any> {\r\n        return this.showDialog(\r\n            this.messageComponent,\r\n            title,\r\n            {\r\n                message: message,\r\n            },\r\n            [DialogActions.ok]\r\n        );\r\n    }\r\n    showInput(\r\n        message: string,\r\n        title?: string,\r\n        fields?: EntityField[],\r\n        entity?: any,\r\n        onResult?: (dialogResult: DialogResult<DialogInputContent>) => void,\r\n        actions?: DialogAction[],\r\n        options?: DialogOption\r\n    ): DialogRef<any> {\r\n        const dialogRef = this.showDialog(\r\n            this.inputComponent,\r\n            title,\r\n            {\r\n                message: message,\r\n                fields: fields,\r\n                entity: entity,\r\n            },\r\n            actions || [...DialogActions.ok_cancel],\r\n            options || {\r\n                showBackdrop: true,\r\n                disableAutoClose: true,\r\n            },\r\n            undefined,\r\n            onResult\r\n        );\r\n        dialogRef.dialogResultTransformer = (\r\n            dr: DialogResult<DialogInputContent>\r\n        ) => {\r\n            return {\r\n                componentInstance: dr.componentInstance,\r\n                data: dr.componentInstance.entity,\r\n                dialogResult: dr.dialogResult,\r\n            };\r\n        };\r\n        return dialogRef;\r\n    }\r\n    showTextInput(\r\n        message: string,\r\n        title?: string,\r\n        placeHolder?: string,\r\n        fieldType?: FieldTypes,\r\n        defaultValue?: any,\r\n        onResult?: (dialogResult: DialogResult<DialogInputContent>) => void,\r\n        actions?: DialogAction[],\r\n        options?: DialogOption\r\n    ): DialogRef<any> {\r\n        return this.showInput(\r\n            message,\r\n            title,\r\n            [\r\n                {\r\n                    name: 'input',\r\n                    fieldType: fieldType || FieldTypes.Text,\r\n                    options: {\r\n                        plaveHolder: placeHolder,\r\n                    },\r\n                },\r\n            ],\r\n            {\r\n                input: defaultValue,\r\n            },\r\n            onResult,\r\n            actions,\r\n            options\r\n        );\r\n    }\r\n    showContent(content: string, title?: string): DialogRef<any> {\r\n        return this.showDialog(\r\n            this.contentComponent,\r\n            title,\r\n            {\r\n                content: content,\r\n            },\r\n            [DialogActions.ok]\r\n        );\r\n    }\r\n\r\n    closeAll(force?: boolean) {\r\n        for (const dialog of this.openDialogs.valuesArray()) {\r\n            dialog.close();\r\n        }\r\n    }\r\n    close(\r\n        dialog: DialogRef<any> | string,\r\n        dialogResult?: DialogResult<any>,\r\n        eventSource?: 'DIALOG' | 'CONTENT'\r\n    ) {\r\n        let _dialog: DialogRef<any>;\r\n        if (isString(dialog)) {\r\n            _dialog = this.openDialogs.get(dialog as string);\r\n        } else {\r\n            _dialog = dialog as DialogRef<any>;\r\n        }\r\n        if (_dialog.container.closeAnimationCompleted) {\r\n            _dialog.container.closeAnimationCompleted\r\n                .pipe(take(1))\r\n                .subscribe((x) => {\r\n                    this.doClose(_dialog, dialogResult, eventSource);\r\n                });\r\n            _dialog.container.isOpen = false;\r\n        } else {\r\n            this.doClose(_dialog, dialogResult, eventSource);\r\n        }\r\n    }\r\n\r\n    private doClose(\r\n        _dialog: DialogRef<any>,\r\n        dialogResult?: DialogResult<any>,\r\n        eventSource?: 'DIALOG' | 'CONTENT'\r\n    ) {\r\n        _dialog.events.next({\r\n            eventType: 'CLOSED',\r\n            eventData: dialogResult,\r\n            eventSource: eventSource,\r\n        });\r\n        const parentElement =\r\n            (<any>_dialog.element).parentElement || this.document.body;\r\n        parentElement.removeChild(_dialog.element);\r\n        this.openDialogs.delete(_dialog.id);\r\n    }\r\n\r\n    private createDialogContainer(\r\n        options: DialogOption,\r\n        actions: DialogAction[],\r\n        title: string\r\n    ): {\r\n        overLaycontainer: ComponentRef<DialogOverlayContainer>;\r\n        container: ComponentRef<DialogContainer>;\r\n    } {\r\n        const overlayRef = this.createOverlay(options);\r\n        const factory = this.componentFactoryResolver.resolveComponentFactory(\r\n            this.dialogContainerType\r\n        );\r\n\r\n        const containerRef = overlayRef.instance.contentContainerRef.createComponent(\r\n            factory\r\n        );\r\n\r\n        containerRef.instance.options = options || {};\r\n        containerRef.instance.title = title;\r\n        containerRef.instance.actions = actions;\r\n\r\n        return {\r\n            overLaycontainer: overlayRef,\r\n            container: containerRef,\r\n        };\r\n    }\r\n\r\n    createOverlay(options: DialogOption): ComponentRef<DialogOverlayContainer> {\r\n        if (!this.dialogOverlayContainerType) {\r\n            throw new Error(\r\n                'There is no provider for DIALOG_OVERLAY_CONTAINER! You can import \"NarikUiCoreModule\" or provide it manually'\r\n            );\r\n        }\r\n        const overlayFactory = this.componentFactoryResolver.resolveComponentFactory(\r\n            this.dialogOverlayContainerType\r\n        );\r\n        const componentRef = overlayFactory.create(this.injector);\r\n        this.applicationRef.attachView(componentRef.hostView);\r\n        componentRef.instance.options = options || {};\r\n        return componentRef;\r\n    }\r\n}\r\n\r\nexport class NarikDialogRef<T> implements DialogRef<T> {\r\n    _closed: Promise<DialogResult<T>>;\r\n    dialogResultTransformer: (result: DialogResult<T>) => DialogResult<T>;\r\n\r\n    public eventSubject = new ReplaySubject<DialogEvent>(10);\r\n    id: string;\r\n    componentInstance: T;\r\n    container: DialogContainer;\r\n    dialogOverlayContainerRef: ComponentRef<any>;\r\n    get closed(): Promise<DialogResult<T>> {\r\n        return this._closed;\r\n    }\r\n    element: ElementRef<any>;\r\n    get events(): ReplaySubject<DialogEvent> {\r\n        return this.eventSubject;\r\n    }\r\n\r\n    constructor(id: string, componentInstance: T) {\r\n        this.id = id;\r\n        this.componentInstance = componentInstance;\r\n        this._closed = new Promise((resolve, reject) => {\r\n            this.events\r\n                .pipe(\r\n                    filter((x) => x.eventType === 'CLOSED'),\r\n                    first()\r\n                )\r\n                .subscribe((e: DialogEvent) => {\r\n                    resolve(\r\n                        this.dialogResultTransformer\r\n                            ? this.dialogResultTransformer(e.eventData)\r\n                            : e.eventData\r\n                    );\r\n                    if (this.dialogOverlayContainerRef) {\r\n                        this.dialogOverlayContainerRef.destroy();\r\n                    }\r\n                });\r\n        });\r\n    }\r\n\r\n    close(\r\n        dialogResult?: DialogResult<any>,\r\n        eventSource?: 'DIALOG' | 'CONTENT'\r\n    ) {\r\n        this.eventSubject.next({\r\n            eventType: 'CLOSE_REQUEST',\r\n            eventData: dialogResult,\r\n            eventSource: eventSource,\r\n        });\r\n    }\r\n}\r\n\r\nexport class DialogActions {\r\n    static ok: DialogAction = {\r\n        label: 'ok',\r\n        dialogResult: 'ok',\r\n    };\r\n    static cancel: DialogAction = {\r\n        label: 'cancel',\r\n        dialogResult: 'cancel',\r\n    };\r\n    static yes: DialogAction = {\r\n        label: 'yes',\r\n        dialogResult: 'yes',\r\n    };\r\n    static no: DialogAction = {\r\n        label: 'no',\r\n        dialogResult: 'no',\r\n    };\r\n\r\n    static ok_cancel = [DialogActions.ok, DialogActions.cancel];\r\n    static yes_no = [DialogActions.yes, DialogActions.no];\r\n}\r\n","import {\r\n    CommandProcessor,\r\n    CommandInfo,\r\n    CommandHost,\r\n} from '@narik/infrastructure';\r\n\r\nexport class NarikEmptyCommandProcessor implements CommandProcessor {\r\n    processCommand(sender: CommandHost, cmd: CommandInfo) {}\r\n}\r\n","import { Injectable, Inject, inject } from '@angular/core';\r\nimport { ErrorHandleService, ErrorHandler } from '@narik/infrastructure';\r\nimport { groupBy } from '@narik/common';\r\n\r\n@Injectable()\r\nexport class NarikErrorHandleService extends ErrorHandleService {\r\n    private errorHandlers = new Map<string, ErrorHandler[]>();\r\n\r\n    constructor(@Inject(ErrorHandler) handles: ErrorHandler[]) {\r\n        super();\r\n        const data = groupBy(handles, 'key');\r\n        data.forEach((x) => this.errorHandlers.set(x.key, x.value));\r\n    }\r\n\r\n    HandleError(errorTypeKey: string, err: any): boolean {\r\n        const handlers = this.errorHandlers\r\n            .get(errorTypeKey)\r\n            .sort((x) => x.order);\r\n        let handled = false;\r\n        for (const x of handlers) {\r\n            handled = x.HandleError(err);\r\n            if (handled) {\r\n                return true;\r\n            }\r\n        }\r\n        return handled;\r\n    }\r\n}\r\n","import {\r\n    EventAggregatorService,\r\n    EventInfo,\r\n    MetaDataService,\r\n    MetaData,\r\n} from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\nimport { pluck, share } from 'rxjs/operators';\r\n\r\nimport { Injectable, Optional } from '@angular/core';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { Subject } from 'rxjs';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NarikEventAggregatorService extends EventAggregatorService {\r\n    private eventsInfo = new Map<string, EventInfo>();\r\n    private subjects = new Map<string, Subject<any>>();\r\n\r\n    constructor(@Optional() private metadataService: MetaDataService) {\r\n        super();\r\n\r\n        if (this.metadataService) {\r\n            const metaDataItems = this.metadataService\r\n                .getAllMetaData()\r\n                .valuesArray();\r\n            for (const metaData of metaDataItems) {\r\n                this.addMetaDataEvents(metaData);\r\n            }\r\n            this.metadataService.metaDataAdded.subscribe((x) => {\r\n                this.addMetaDataEvents(x.metaData);\r\n            });\r\n        }\r\n    }\r\n\r\n    private addMetaDataEvents(metaData: MetaData) {\r\n        if (metaData['events']) {\r\n            for (const event of metaData['events'].valuesArray()) {\r\n                this.eventsInfo.set(event.key, event);\r\n            }\r\n        }\r\n    }\r\n    getSubject(eventType: string): Subject<any> {\r\n        let subject = this.subjects.get(eventType);\r\n        if (!subject) {\r\n            subject = this.createSubject(this.eventsInfo.get(eventType));\r\n            this.subjects.set(eventType, subject);\r\n        }\r\n        return subject;\r\n    }\r\n    createSubject(eventInfo: EventInfo): Subject<any> {\r\n        if (!eventInfo || !eventInfo.info) {\r\n            return new Subject<any>();\r\n        } else {\r\n            if (eventInfo.info.subjectType === 'ReplaySubject') {\r\n                return new ReplaySubject(eventInfo.info.subjectParam || 1);\r\n            } else if (eventInfo.info.subjectType === 'ReplaySubject') {\r\n                return new BehaviorSubject(eventInfo.info.subjectParam);\r\n            }\r\n        }\r\n        return new Subject<any>();\r\n    }\r\n    publish(eventType: any, eventArgs: any) {\r\n        const subject = this.getSubject(eventType);\r\n        subject.next({\r\n            eventType: eventType,\r\n            eventArgs: eventArgs,\r\n        });\r\n    }\r\n    listen<T>(eventType: any): Observable<T> {\r\n        const subject = this.getSubject(eventType);\r\n        return subject.pipe(\r\n            filter((x) => x.eventType === eventType),\r\n            map((x) => x.eventArgs),\r\n            share()\r\n        );\r\n    }\r\n}\r\n","import { FormTitleResolver } from '@narik/infrastructure';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class NarikFormTitleResolver extends FormTitleResolver {\r\n    constructor(private translateService: TranslateService) {\r\n        super();\r\n    }\r\n\r\n    resolveTitle(routeSnapshot: ActivatedRouteSnapshot, path?: string) {\r\n        if (routeSnapshot) {\r\n            const title =\r\n                (routeSnapshot.data && routeSnapshot.data.title) ||\r\n                (routeSnapshot.url[0] && routeSnapshot.url[0].path);\r\n            if (title) {\r\n                return this.translateService.instant(this.getFirst(title));\r\n            }\r\n        }\r\n        if (path) {\r\n            return this.translateService.instant(this.getFirst(path));\r\n        }\r\n        return '';\r\n    }\r\n    private getFirst(title: string): string {\r\n        return title ? title.split('-')[0] : '';\r\n    }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpService } from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class NarikHttpService extends HttpService {\r\n    constructor(private httpClient: HttpClient) {\r\n        super();\r\n    }\r\n\r\n    get(url: string): Observable<Object> {\r\n        return this.httpClient\r\n            .get(url)\r\n            .pipe<Object>(map((result) => this.extractData(result)));\r\n    }\r\n    post(url: string, data: any): Observable<Object> {\r\n        return this.httpClient\r\n            .post(url, data)\r\n            .pipe<Object>(map((result) => this.extractData(result)));\r\n    }\r\n    delete(url: string, data: any): Observable<Object> {\r\n        return this.httpClient.delete(url, data);\r\n    }\r\n    put(url: string, data: any): Observable<Object> {\r\n        return this.httpClient.put(url, data);\r\n    }\r\n\r\n    private extractData(result: any): Object {\r\n        if (result && result['@odata.context']) {\r\n            if (result['@odata.count'] || result['@odata.count'] === 0) {\r\n                return {\r\n                    count: result['@odata.count'],\r\n                    result: result.value,\r\n                };\r\n            } else if (result['@odata.null']) {\r\n                return null;\r\n            } else {\r\n                return (<string>result['@odata.context']).endsWith('$entity')\r\n                    ? result\r\n                    : result.hasOwnProperty('value')\r\n                    ? result.value\r\n                    : result;\r\n            }\r\n        }\r\n        return result || result === 0 || result === false\r\n            ? result.data || result\r\n            : null;\r\n    }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { JsonService, FilterItems, HttpService } from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap } from 'rxjs/operators';\r\nimport { of, forkJoin } from 'rxjs';\r\nimport { map, tap } from 'rxjs/operators';\r\nimport {\r\n    isString,\r\n    isArray,\r\n    toFilterFunction,\r\n    getNestedValue,\r\n} from '@narik/common';\r\n\r\n@Injectable()\r\nexport class NarikJsonService extends JsonService {\r\n    private jsons = new Map<string, any>();\r\n    constructor(private httpService: HttpService) {\r\n        super();\r\n    }\r\n\r\n    getJson(path: string): Observable<any> {\r\n        const jsonData = this.jsons.get(path);\r\n        return jsonData\r\n            ? of(jsonData)\r\n            : this.httpService.get(path).pipe(\r\n                  mergeMap((x) => this.applyExtends(path, x)),\r\n                  map((data) => {\r\n                      delete data['extends'];\r\n                      delete data['imports'];\r\n                      delete data['variables'];\r\n                      delete data['removeItems'];\r\n                      return data;\r\n                  }),\r\n                  tap((x) => {\r\n                      this.jsons.set(path, x);\r\n                  })\r\n              );\r\n    }\r\n\r\n    private applyExtends(dataPath: string, data: any): Observable<any> {\r\n        if (data && data.extends) {\r\n            const extendsPath = this.resolvePath(dataPath, data.extends);\r\n            return this.getJson(extendsPath).pipe(\r\n                mergeMap((parentData) =>\r\n                    this.applyImports(\r\n                        dataPath,\r\n                        this.applyJsonExtends(parentData, data)\r\n                    )\r\n                )\r\n            );\r\n        } else {\r\n            return this.applyImports(dataPath, data);\r\n        }\r\n    }\r\n\r\n    private resolvePath(basePath: string, path: string): string {\r\n        const stack = basePath.split('/'),\r\n            parts = path.split('/');\r\n        stack.pop();\r\n        for (let i = 0; i < parts.length; i++) {\r\n            if (parts[i] === '.') {\r\n                continue;\r\n            }\r\n            if (parts[i] === '..') {\r\n                stack.pop();\r\n            } else {\r\n                stack.push(parts[i]);\r\n            }\r\n        }\r\n        return stack.join('/');\r\n    }\r\n    private applyImports(dataPath: string, data: any): Observable<any> {\r\n        if (data && data.imports) {\r\n            const loaders: any[] = [];\r\n            for (const key in data.imports) {\r\n                if (data.imports.hasOwnProperty(key)) {\r\n                    const element = data.imports[key];\r\n                    const importPath = this.resolvePath(dataPath, element);\r\n                    loaders.push(\r\n                        this.getJson(importPath).pipe(\r\n                            map((x) => {\r\n                                return { key, data: x };\r\n                            })\r\n                        )\r\n                    );\r\n                }\r\n            }\r\n            return Observable.create((observer) => {\r\n                forkJoin(loaders).subscribe((items) => {\r\n                    observer.next(\r\n                        this.applyVariables(this.applyJsonImports(data, items))\r\n                    );\r\n                });\r\n            });\r\n        } else {\r\n            return of(this.applyVariables(data));\r\n        }\r\n    }\r\n\r\n    private isJSON(json): boolean {\r\n        if (json && json.constructor.name === 'Object') {\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    private cloneJSON(data): any {\r\n        return this.applyJsonExtends({}, data);\r\n    }\r\n\r\n    private applyRemoves(data, removeItems: string[]): any {\r\n        if (removeItems) {\r\n            this.applyJsonRemoves(data, removeItems);\r\n        }\r\n        return data;\r\n    }\r\n    private applyJsonRemoves(data, removeItems: string[]): any {\r\n        if (this.isJSON(data)) {\r\n            for (const removeItem of removeItems) {\r\n                if (removeItem.indexOf('[') >= 0) {\r\n                    const dataItemKey = removeItem.substr(\r\n                        0,\r\n                        removeItem.indexOf('[')\r\n                    );\r\n                    const dataItem = getNestedValue(data, dataItemKey);\r\n                    if (isArray(dataItem)) {\r\n                        let dataItemIndex = removeItem.substring(\r\n                            removeItem.indexOf('[') + 1,\r\n                            removeItem.lastIndexOf(']')\r\n                        );\r\n                        if (!isNaN(+dataItemIndex)) {\r\n                            dataItem.splice(+dataItemIndex, 1);\r\n                        } else {\r\n                            dataItemIndex = dataItemIndex.replace(/'/g, '\"');\r\n                            const filterFunction = toFilterFunction(\r\n                                JSON.parse(dataItemIndex) as FilterItems\r\n                            );\r\n                            const removedDataItems = dataItem.filter(\r\n                                filterFunction\r\n                            );\r\n                            for (const removedDataItem of removedDataItems) {\r\n                                const dataItemPos = dataItem.indexOf(\r\n                                    removedDataItem\r\n                                );\r\n                                if (dataItemPos >= 0) {\r\n                                    dataItem.splice(dataItemPos, 1);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    delete data[removeItem];\r\n                }\r\n            }\r\n        }\r\n        return data;\r\n    }\r\n\r\n    private applyVariables(data): any {\r\n        if (data && data.variables) {\r\n            this.applyJsonVariables(data, data.variables);\r\n        }\r\n        return data;\r\n    }\r\n    private applyJsonVariables(data, variables: any): any {\r\n        if (this.isJSON(data)) {\r\n            for (const key in data) {\r\n                if (this.isJSON(data[key])) {\r\n                    this.applyJsonVariables(data[key], variables);\r\n                } else if (Array.isArray(data[key])) {\r\n                    for (const item of data[key]) {\r\n                        this.applyJsonVariables(item, variables);\r\n                    }\r\n                } else if (isString(data[key]) && data[key].startsWith('@')) {\r\n                    if (variables[data[key]]) {\r\n                        data[key] = variables[data[key]];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return data;\r\n    }\r\n\r\n    private applyJsonImports(data, importedData: any[]): any {\r\n        if (this.isJSON(data)) {\r\n            for (const key in data) {\r\n                if (this.isJSON(data[key])) {\r\n                    this.applyJsonImports(data[key], importedData);\r\n                } else if (Array.isArray(data[key])) {\r\n                    let index = 0;\r\n                    for (const item of data[key]) {\r\n                        if (isString(item) && item.startsWith('$$')) {\r\n                            data[key][index] = this.applyImportValue(\r\n                                item,\r\n                                importedData\r\n                            );\r\n                        } else {\r\n                            this.applyJsonImports(item, importedData);\r\n                        }\r\n                        index++;\r\n                    }\r\n                } else if (isString(data[key]) && data[key].startsWith('$$')) {\r\n                    data[key] = this.applyImportValue(data[key], importedData);\r\n                }\r\n            }\r\n        }\r\n        return data;\r\n    }\r\n\r\n    private applyImportValue(expr: string, importedData: any[]) {\r\n        for (const importItem of importedData) {\r\n            const itemKey = expr.substr(0, expr.indexOf('.'));\r\n            if (importItem.key === itemKey) {\r\n                return importItem.data[expr.replace(itemKey + '.', '')];\r\n            }\r\n        }\r\n        return expr;\r\n    }\r\n\r\n    private applyJsonExtends(parentData, data): any {\r\n        this.applyRemoves(parentData, data.removeItems);\r\n\r\n        let result = null;\r\n        if (this.isJSON(data)) {\r\n            result = {};\r\n            if (this.isJSON(parentData)) {\r\n                for (const key in parentData) {\r\n                    if (\r\n                        this.isJSON(parentData[key]) ||\r\n                        Array.isArray(parentData[key])\r\n                    ) {\r\n                        result[key] = this.cloneJSON(parentData[key]);\r\n                    } else {\r\n                        result[key] = parentData[key];\r\n                    }\r\n                }\r\n            }\r\n\r\n            for (const key in data) {\r\n                if (this.isJSON(data[key]) || Array.isArray(data[key])) {\r\n                    result[key] = this.applyJsonExtends(result[key], data[key]);\r\n                } else {\r\n                    result[key] = data[key];\r\n                }\r\n            }\r\n        } else if (Array.isArray(parentData) && Array.isArray(data)) {\r\n            result = parentData;\r\n\r\n            for (let i = 0; i < data.length; i++) {\r\n                if (result.indexOf(data[i]) === -1) {\r\n                    result[result.length] = data[i];\r\n                }\r\n            }\r\n        } else {\r\n            result = data;\r\n        }\r\n\r\n        return result;\r\n    }\r\n}\r\n","import {\r\n    EventAggregatorService,\r\n    ModuleInfo,\r\n    ModuleEventArg,\r\n    ModuleEventType,\r\n    ModuleManager,\r\n    ConfigService,\r\n    HttpService,\r\n} from '@narik/infrastructure';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { Injectable, Injector } from '@angular/core';\r\n\r\nimport { NarikInject } from '../decorators/narik-inject.decorator';\r\nimport { NarikTranslateService } from './narik-translation.service';\r\nimport { tap } from 'rxjs/operators';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NarikModuleManager extends ModuleManager {\r\n    readonly modules: Map<string, ModuleInfo> = new Map<string, ModuleInfo>();\r\n\r\n    readonly modulesChanged: Observable<ModuleEventArg>;\r\n    readonly modulesChangedSubject: Subject<ModuleEventArg>;\r\n\r\n    private narikLoadedSubject: Subject<void>;\r\n\r\n    get narikLoaded(): Observable<void> {\r\n        return this.narikLoadedSubject.asObservable();\r\n    }\r\n\r\n    @NarikInject(EventAggregatorService)\r\n    eventAggregatorService: EventAggregatorService;\r\n\r\n    constructor(\r\n        private injector: Injector,\r\n        private httpService: HttpService,\r\n        private configService: ConfigService,\r\n        private translateService: NarikTranslateService\r\n    ) {\r\n        super();\r\n        this.modulesChangedSubject = new Subject<ModuleEventArg>();\r\n        this.modulesChanged = this.modulesChangedSubject.asObservable();\r\n        this.narikLoadedSubject = new ReplaySubject(1);\r\n    }\r\n\r\n    private fixModuleInformation(moduleInfo?: ModuleInfo) {}\r\n\r\n    addOrUpdateModule(key: string, moduleInfo?: ModuleInfo) {\r\n        this.fixModuleInformation(moduleInfo);\r\n        const isExists = this.modules.has(key);\r\n        this.modules.set(key, moduleInfo);\r\n        const translatePromices: Promise<boolean>[] = [];\r\n        if (moduleInfo.metaData && moduleInfo.metaData.translateItems) {\r\n            for (const translateItem of moduleInfo.metaData.translateItems) {\r\n                translatePromices.push(\r\n                    this.translateService.addTranslationItem(translateItem)\r\n                );\r\n            }\r\n        }\r\n\r\n        this.modulesChangedSubject.next({\r\n            moduleEventType: isExists\r\n                ? ModuleEventType.Update\r\n                : ModuleEventType.Add,\r\n            moduleKey: key,\r\n            moduleInfo: moduleInfo,\r\n        });\r\n\r\n        Promise.all(translatePromices).then(() => {\r\n            this.eventAggregatorService.publish('MODULE_LOAD_COMPLETELY', {\r\n                moduleKey: key,\r\n                moduleInfo: moduleInfo,\r\n            });\r\n        });\r\n    }\r\n    removeModule(key: string) {\r\n        const info = this.modules.get(key);\r\n        this.modules.delete(key);\r\n        this.modulesChangedSubject.next({\r\n            moduleEventType: ModuleEventType.Remove,\r\n            moduleKey: key,\r\n            moduleInfo: info,\r\n        });\r\n    }\r\n\r\n    init(): Promise<any> {\r\n        const moduleRootPath = this.configService.getConfig(\r\n            'modulesMetaDataRoot'\r\n        );\r\n        return this.httpService\r\n            .get(`${moduleRootPath}/narik.json`)\r\n            .pipe(\r\n                tap((info: ModuleInfo) => {\r\n                    this.addOrUpdateModule('narik', info);\r\n                    this.narikLoadedSubject.next();\r\n                })\r\n            )\r\n            .toPromise();\r\n    }\r\n}\r\n","import {\r\n    DialogOption,\r\n    DialogRef,\r\n    NavigationProvider,\r\n    NavigationService,\r\n    NarikOutlet,\r\n} from '@narik/infrastructure';\r\n\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { NavigationExtras, UrlTree } from '@angular/router';\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class NarikNavigationService implements NavigationService {\r\n    private navigationProviders = new Map<string, NavigationProvider>();\r\n\r\n    constructor(@Inject(NavigationProvider) providers: NavigationProvider[]) {\r\n        providers.forEach((x) => this.navigationProviders.set(x.key, x));\r\n    }\r\n    navigate(\r\n        commands: any[] | string | UrlTree,\r\n        providerKey: string = '',\r\n        extras?: NavigationExtras,\r\n        data?: any,\r\n        dialogOptions?: DialogOption\r\n    ): Promise<boolean | DialogRef<any>> {\r\n        return this.navigationProviders\r\n            .get(providerKey)\r\n            .navigate(commands, extras, data, dialogOptions);\r\n    }\r\n\r\n    createNavigationCommand(\r\n        providerKey: string,\r\n        path: string\r\n    ): any[] | string | UrlTree {\r\n        return this.navigationProviders\r\n            .get(providerKey)\r\n            .createNavigationCommand(path);\r\n    }\r\n    setOutlet(providerKey: string, outlet: NarikOutlet) {\r\n        this.navigationProviders.get(providerKey).outlet = outlet;\r\n    }\r\n}\r\n","import { formatString, replaceString } from '@narik/common';\r\nimport {\r\n    DataInfo,\r\n    ModuleManager,\r\n    RemoteDataProviderService,\r\n    MODULE_DATA_KEY,\r\n    ModuleDataInfo,\r\n    MetaDataService,\r\n    UrlCreatorService,\r\n    HttpService,\r\n} from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { first } from 'rxjs/operators';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { Subject } from 'rxjs';\r\nimport { Injectable, Injector } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class NarikRemoteDataProviderService extends RemoteDataProviderService {\r\n    key = 'remote';\r\n    order = 100;\r\n    dayaKeyTemplate = '{0}_{1}';\r\n\r\n    protected dataStreams: Map<string, Subject<any>> = new Map<\r\n        string,\r\n        Subject<any>\r\n    >();\r\n\r\n    private modulesDataInformation = new Map<string, ModuleDataInfo>();\r\n\r\n    constructor(\r\n        private httpService: HttpService,\r\n        private injector: Injector,\r\n        private moduleManager: ModuleManager,\r\n        private metaDataService: MetaDataService\r\n    ) {\r\n        super();\r\n        for (const module of this.moduleManager.modules.entriesArray()) {\r\n            if (module.value.metaData && module.value.metaData.dataInfo) {\r\n                this.addRemoteDataInfo(\r\n                    module.key,\r\n                    module.value.metaData.dataInfo\r\n                );\r\n            }\r\n        }\r\n        this.moduleManager.modulesChanged.subscribe((x) => {\r\n            if (x.moduleInfo.metaData && x.moduleInfo.metaData.dataInfo) {\r\n                this.addRemoteDataInfo(\r\n                    x.moduleKey,\r\n                    x.moduleInfo.metaData.dataInfo\r\n                );\r\n            }\r\n        });\r\n    }\r\n\r\n    protected addRemoteDataInfo(moduleKey: string, dataInfo: ModuleDataInfo) {\r\n        if (!this.modulesDataInformation.has(moduleKey)) {\r\n            this.modulesDataInformation.set(moduleKey, dataInfo);\r\n        }\r\n    }\r\n\r\n    isDataProviderFor(dataInfo: DataInfo) {\r\n        return true;\r\n    }\r\n\r\n    handleData<T = any>(dataInfo: DataInfo): Observable<T> {\r\n        let _dataUrl = dataInfo.dataUrl;\r\n        let _remoteDataProvider = dataInfo.remoteDataProvider;\r\n        let _parameterPrefix = '';\r\n        if (!_dataUrl) {\r\n            let _dataInfo = { ...dataInfo };\r\n            if (!_dataInfo.moduleKey) {\r\n                _dataInfo.moduleKey = this.injector.get(MODULE_DATA_KEY);\r\n            }\r\n\r\n            if (!dataInfo.actionType || dataInfo.actionType === 'DATA') {\r\n                const dataItemInformations = this.metaDataService.getDataItemInformation(\r\n                    _dataInfo.moduleKey,\r\n                    _dataInfo.dataKey\r\n                );\r\n                if (dataItemInformations) {\r\n                    _dataInfo = Object.assign(dataItemInformations, _dataInfo);\r\n                }\r\n            }\r\n            const moduleDataItemInformations = this.modulesDataInformation.get(\r\n                _dataInfo.moduleKey\r\n            );\r\n            if (moduleDataItemInformations) {\r\n                if (!_dataInfo.dataUrl) {\r\n                    const urlInfo = moduleDataItemInformations.dataUrlInfo;\r\n                    if (\r\n                        !dataInfo.actionType ||\r\n                        dataInfo.actionType === 'DATA'\r\n                    ) {\r\n                        _dataInfo.dataUrl = urlInfo.dataPathTemplate;\r\n                    } else if (dataInfo.actionType === 'GET') {\r\n                        _dataInfo.dataUrl = urlInfo.getPathTemplate;\r\n                    } else if (dataInfo.actionType === 'LIST') {\r\n                        _dataInfo.dataUrl = urlInfo.listPathTemplate;\r\n                    } else if (dataInfo.actionType === 'POST') {\r\n                        _dataInfo.dataUrl = urlInfo.postPathTemplate;\r\n                    } else if (dataInfo.actionType === 'UPDATE') {\r\n                        _dataInfo.dataUrl = urlInfo.updatePathTemplate;\r\n                    } else if (dataInfo.actionType === 'DELETE') {\r\n                        _dataInfo.dataUrl = urlInfo.deletePathTemplate;\r\n                    } else if (dataInfo.actionType === 'COMPLETE') {\r\n                        _dataInfo.dataUrl = urlInfo.completePathTemplate;\r\n                    } else {\r\n                        _dataInfo.dataUrl =\r\n                            urlInfo[dataInfo.actionType + 'PathTemplate'];\r\n                    }\r\n\r\n                    _parameterPrefix = urlInfo.parameterPrefix;\r\n                    if (!_remoteDataProvider) {\r\n                        _remoteDataProvider = urlInfo.defaultRemoteDataProvider;\r\n                    }\r\n                    if (\r\n                        !_dataInfo.dataUrlMethod &&\r\n                        (!dataInfo.actionType || dataInfo.actionType === 'DATA')\r\n                    ) {\r\n                        _dataInfo.dataUrlMethod = urlInfo.defaultDataUrlMethod;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (!_dataInfo.dataUrlMethod) {\r\n                _dataInfo.dataUrlMethod = '';\r\n            }\r\n            _dataUrl = replaceString(\r\n                _dataInfo.dataUrl,\r\n                _dataInfo,\r\n                '',\r\n                '{',\r\n                '}'\r\n            );\r\n        }\r\n\r\n        if (\r\n            !dataInfo.dataMethod ||\r\n            dataInfo.dataMethod === 'GET' ||\r\n            dataInfo.dataMethod === 'PUT'\r\n        ) {\r\n            _parameterPrefix = _parameterPrefix || '';\r\n            if (dataInfo.urlParameters || dataInfo.dataParameters) {\r\n                if (\r\n                    _parameterPrefix &&\r\n                    _dataUrl.indexOf(_parameterPrefix) >= 0\r\n                ) {\r\n                    _dataUrl = replaceString(\r\n                        _dataUrl,\r\n                        dataInfo.urlParameters || dataInfo.dataParameters,\r\n                        _parameterPrefix\r\n                    );\r\n                } else {\r\n                    if (!_remoteDataProvider) {\r\n                        throw new Error(\r\n                            'RemoteDataProvider Dos Not Determined'\r\n                        );\r\n                    }\r\n                    const urlCreatorService = this.injector.get(\r\n                        UrlCreatorService\r\n                    );\r\n                    _dataUrl = urlCreatorService.applyParameters(\r\n                        _remoteDataProvider,\r\n                        _dataUrl,\r\n                        dataInfo.urlParameters || dataInfo.dataParameters\r\n                    );\r\n                }\r\n            }\r\n\r\n            if (dataInfo.pagingParameter) {\r\n                const urlCreatorService = this.injector.get(UrlCreatorService);\r\n                _dataUrl = urlCreatorService.applyPagingParameters(\r\n                    _remoteDataProvider,\r\n                    _dataUrl,\r\n                    dataInfo.pagingParameter\r\n                );\r\n            }\r\n        }\r\n        if (dataInfo.dataMethod === 'POST') {\r\n            return this.httpService.post(\r\n                _dataUrl,\r\n                dataInfo.dataParameters || {}\r\n            ) as Observable<T>;\r\n        } else if (dataInfo.dataMethod === 'DELETE') {\r\n            return this.httpService.delete(\r\n                _dataUrl,\r\n                dataInfo.dataParameters || {}\r\n            ) as Observable<T>;\r\n        } else if (dataInfo.dataMethod === 'PUT') {\r\n            return this.httpService.put(\r\n                _dataUrl,\r\n                dataInfo.dataParameters || {}\r\n            ) as Observable<T>;\r\n        } else {\r\n            return this.httpService.get(_dataUrl) as Observable<T>;\r\n        }\r\n    }\r\n\r\n    getDataStream<T = any>(dataInfo: DataInfo): Observable<T> {\r\n        const fullKey = this.getFullKey(dataInfo);\r\n        if (this.dataStreams.has(fullKey)) {\r\n            return this.dataStreams.get(fullKey);\r\n        } else {\r\n            const dataSubject = new ReplaySubject<T>(1);\r\n            this.dataStreams.set(fullKey, dataSubject);\r\n            this.handleData(dataInfo)\r\n                .pipe(first())\r\n                .subscribe((data) => dataSubject.next(data));\r\n            return dataSubject.asObservable();\r\n        }\r\n    }\r\n\r\n    protected getFullKey(dataInfo: DataInfo): string {\r\n        let moduleKey = dataInfo.moduleKey;\r\n        if (!moduleKey) {\r\n            moduleKey = this.injector.get(MODULE_DATA_KEY);\r\n        }\r\n        return formatString(this.dayaKeyTemplate, moduleKey, dataInfo.dataKey);\r\n    }\r\n}\r\n","import { isArray, isString } from '@narik/common';\r\nimport {\r\n    AuthenticationService,\r\n    AuthorizationService,\r\n} from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { of } from 'rxjs';\r\n\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class NarikRoleBasedAuthorizationService extends AuthorizationService {\r\n    /**\r\n     *\r\n     */\r\n    constructor(private authenticationService: AuthenticationService) {\r\n        super();\r\n    }\r\n    hasAccess(itemKey: any): Observable<boolean> {\r\n        if (\r\n            this.authenticationService.currentUserValue &&\r\n            this.authenticationService.currentUserValue.roles\r\n        ) {\r\n            const key = this.extractItemKey(itemKey);\r\n            if (key) {\r\n                const that = this;\r\n                return of(\r\n                    !!key.filter(function (n) {\r\n                        return (\r\n                            that.authenticationService.currentUserValue.roles.indexOf(\r\n                                n\r\n                            ) > -1\r\n                        );\r\n                    })[0]\r\n                );\r\n            }\r\n        }\r\n        return of(false);\r\n    }\r\n\r\n    protected extractItemKey(itemKey: any): string[] {\r\n        if (isString(itemKey)) {\r\n            return [itemKey];\r\n        } else if (isArray(itemKey)) {\r\n            return itemKey;\r\n        }\r\n        return null;\r\n    }\r\n}\r\n","import { ShortcutService, ShortcutOptions } from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { EventManager } from '@angular/platform-browser';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n@Injectable()\r\nexport class NarikShortcutService extends ShortcutService {\r\n    hotkeys = new Map();\r\n    defaults: Partial<ShortcutOptions> = {\r\n        element: this.document,\r\n    };\r\n\r\n    constructor(\r\n        private eventManager: EventManager,\r\n        @Inject(DOCUMENT) private document\r\n    ) {\r\n        super();\r\n    }\r\n\r\n    addShortcut(\r\n        options: Partial<ShortcutOptions>\r\n    ): Observable<{\r\n        event: any;\r\n        uniqueId: string;\r\n    }> {\r\n        const merged = { ...this.defaults, ...options };\r\n        const event = `keydown.${merged.keys}`;\r\n\r\n        if (merged.description) {\r\n            this.hotkeys.set(merged.keys, merged.description);\r\n        }\r\n\r\n        return new Observable((observer) => {\r\n            const handler = (e) => {\r\n                e.preventDefault();\r\n                observer.next({\r\n                    event: e,\r\n                    uniqueId: merged.uniqueId,\r\n                });\r\n            };\r\n\r\n            const dispose = this.eventManager.addEventListener(\r\n                merged.element,\r\n                event,\r\n                handler\r\n            );\r\n\r\n            return () => {\r\n                dispose();\r\n                this.hotkeys.delete(merged.keys);\r\n            };\r\n        });\r\n    }\r\n}\r\n","import {\r\n    UrlCreator,\r\n    UrlCreatorService,\r\n    PagingParameters,\r\n} from '@narik/infrastructure';\r\n\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class NarikUrlCreatorService extends UrlCreatorService {\r\n    private urlCreators = new Map<string, UrlCreator>();\r\n\r\n    constructor(@Inject(UrlCreator) creators: UrlCreator[]) {\r\n        super();\r\n        creators.forEach((x) => this.urlCreators.set(x.key, x));\r\n    }\r\n    applyParameters(key: string, url: string, parameters: any): string {\r\n        const creator = this.urlCreators.get(key);\r\n        return creator.applyParameters(url, parameters);\r\n    }\r\n    applyPagingParameters(\r\n        key: string,\r\n        url: string,\r\n        pagingParameter: PagingParameters\r\n    ): string {\r\n        const creator = this.urlCreators.get(key);\r\n        return creator.applyPagingParameters(url, pagingParameter);\r\n    }\r\n}\r\n","import { ValidationService, NarikValidator } from '@narik/infrastructure';\r\nimport { Validators } from '@angular/forms';\r\nimport { CustomValidators } from '@narik/custom-validators';\r\n\r\nexport class NarikValidationService extends ValidationService {\r\n    _validators: any = {\r\n        email: {\r\n            func: Validators.email,\r\n        },\r\n        max: {\r\n            func: Validators.max,\r\n            params: ['max'],\r\n        },\r\n        maxLength: {\r\n            func: Validators.maxLength,\r\n            params: ['maxLength'],\r\n        },\r\n        min: {\r\n            func: Validators.min,\r\n            params: ['min'],\r\n        },\r\n        minLength: {\r\n            func: Validators.minLength,\r\n            params: ['minLength'],\r\n        },\r\n        pattern: {\r\n            func: Validators.pattern,\r\n            params: ['pattern'],\r\n        },\r\n        required: {\r\n            func: Validators.required,\r\n        },\r\n        requiredTrue: {\r\n            func: Validators.requiredTrue,\r\n        },\r\n        base64: {\r\n            func: CustomValidators.base64,\r\n            params: ['min'],\r\n        },\r\n        creditCard: {\r\n            func: CustomValidators.creditCard,\r\n        },\r\n        date: {\r\n            func: CustomValidators.date,\r\n        },\r\n        dateISO: {\r\n            func: CustomValidators.dateISO,\r\n        },\r\n        digits: {\r\n            func: CustomValidators.digits,\r\n        },\r\n        equal: {\r\n            func: CustomValidators.equal,\r\n            params: ['equal'],\r\n        },\r\n        equalTo: {\r\n            func: CustomValidators.equalTo,\r\n            params: ['equalTo'],\r\n        },\r\n        gt: {\r\n            func: CustomValidators.gt,\r\n            params: ['gt'],\r\n        },\r\n        gte: {\r\n            func: CustomValidators.gte,\r\n            params: ['gte'],\r\n        },\r\n        json: {\r\n            func: CustomValidators.json,\r\n        },\r\n        lt: {\r\n            func: CustomValidators.lt,\r\n            params: ['lt'],\r\n        },\r\n        lte: {\r\n            func: CustomValidators.lte,\r\n            params: ['lte'],\r\n        },\r\n        maxDate: {\r\n            func: CustomValidators.maxDate,\r\n            params: ['maxDate'],\r\n        },\r\n        minDate: {\r\n            func: CustomValidators.minDate,\r\n            params: ['minDate'],\r\n        },\r\n        notEqual: {\r\n            func: CustomValidators.notEqual,\r\n            params: ['notEqual'],\r\n        },\r\n        notEqualTo: {\r\n            func: CustomValidators.notEqualTo,\r\n            params: ['notEqualTo'],\r\n        },\r\n        number: {\r\n            func: CustomValidators.number,\r\n        },\r\n        range: {\r\n            func: CustomValidators.range,\r\n            params: ['range'],\r\n        },\r\n        rangeLength: {\r\n            func: CustomValidators.rangeLength,\r\n            params: ['rangeLength'],\r\n        },\r\n        url: {\r\n            func: CustomValidators.url,\r\n        },\r\n        uuid: {\r\n            func: CustomValidators.uuid,\r\n        },\r\n    };\r\n\r\n    addValidator(key: string, validator: NarikValidator) {\r\n        this._validators[key] = validator;\r\n    }\r\n\r\n    validators() {\r\n        return this._validators;\r\n    }\r\n}\r\n","import {\r\n    Router,\r\n    Route,\r\n    UrlSegment,\r\n    UrlSegmentGroup,\r\n    UrlMatchResult,\r\n} from '@angular/router';\r\nimport { Type } from '@angular/core';\r\nimport { NarikOutlet } from '@narik/infrastructure';\r\n\r\nexport class NarikBaseNavigationProvider {\r\n    outlet: NarikOutlet;\r\n\r\n    constructor(protected router: Router) {}\r\n\r\n    findRoute(\r\n        config: Route[],\r\n        segments: UrlSegment[],\r\n        segmentGroup: UrlSegmentGroup\r\n    ): {\r\n        match?: UrlMatchResult;\r\n        route?: Route;\r\n    } {\r\n        let item: {\r\n            match?: UrlMatchResult;\r\n            component?: Type<any>;\r\n        };\r\n        for (const route of config) {\r\n            if (route.path === '**') {\r\n                return {\r\n                    route: route,\r\n                };\r\n            } else {\r\n                if (route.path === '') {\r\n                    if (\r\n                        route.pathMatch === 'full' &&\r\n                        (segmentGroup.hasChildren() || segments.length > 0)\r\n                    ) {\r\n                        throw new Error('');\r\n                    }\r\n\r\n                    item = {\r\n                        component: null,\r\n                        match: { consumed: [], posParams: {} },\r\n                    };\r\n                } else {\r\n                    item = {\r\n                        component: null,\r\n                        match: this.defaultUrlMatcher(\r\n                            segments,\r\n                            segmentGroup,\r\n                            route\r\n                        ),\r\n                    };\r\n                }\r\n\r\n                if (item && item.match && item.match.consumed) {\r\n                    const childRoutes = this.getChildConfig(route);\r\n                    if (item.match.consumed.length !== 0) {\r\n                        segments.splice(0, 1);\r\n                    }\r\n\r\n                    item = this.findRoute(childRoutes, segments, segmentGroup);\r\n                    if (item) {\r\n                        return item;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return item;\r\n    }\r\n    getChildConfig(route: Route): Route[] {\r\n        if (route.children) {\r\n            return route.children;\r\n        }\r\n\r\n        if (route.loadChildren) {\r\n            return route['_loadedConfig'].routes;\r\n        }\r\n\r\n        return [];\r\n    }\r\n\r\n    defaultUrlMatcher(\r\n        segments: UrlSegment[],\r\n        segmentGroup: UrlSegmentGroup,\r\n        route: Route\r\n    ): UrlMatchResult | null {\r\n        const parts = route.path.split('/');\r\n\r\n        if (parts.length > segments.length) {\r\n            // The actual URL is shorter than the config, no match\r\n            return null;\r\n        }\r\n\r\n        if (\r\n            route.pathMatch === 'full' &&\r\n            (segmentGroup.hasChildren() || parts.length < segments.length)\r\n        ) {\r\n            // The config is longer than the actual URL but we are looking for a full match, return null\r\n            return null;\r\n        }\r\n\r\n        const posParams: { [key: string]: UrlSegment } = {};\r\n\r\n        // Check each config part against the actual URL\r\n        for (let index = 0; index < parts.length; index++) {\r\n            const part = parts[index];\r\n            const segment = segments[index];\r\n            const isParameter = part.startsWith(':');\r\n            if (isParameter) {\r\n                posParams[part.substring(1)] = segment;\r\n            } else if (part !== segment.path) {\r\n                // The actual URL part does not match the config, no match\r\n                return null;\r\n            }\r\n        }\r\n\r\n        return { consumed: segments.slice(0, parts.length), posParams };\r\n    }\r\n}\r\n","import {\r\n    DialogOption,\r\n    DialogRef,\r\n    DialogService,\r\n    NavigationProvider,\r\n} from '@narik/infrastructure';\r\n\r\nimport {\r\n    ComponentFactory,\r\n    ComponentFactoryResolver,\r\n    Injectable,\r\n    Type,\r\n} from '@angular/core';\r\nimport {\r\n    NavigationExtras,\r\n    PRIMARY_OUTLET,\r\n    Router,\r\n    UrlSegmentGroup,\r\n    ActivatedRoute,\r\n    UrlTree,\r\n} from '@angular/router';\r\nimport { NarikBaseNavigationProvider } from './narik-base-navigation.provider';\r\nimport { isArray, isString } from '@narik/common';\r\n\r\n@Injectable()\r\nexport class NarikDialogNavigationProvider\r\n    extends NarikBaseNavigationProvider\r\n    implements NavigationProvider {\r\n    key = 'dialog';\r\n\r\n    constructor(private dialogService: DialogService, router: Router) {\r\n        super(router);\r\n    }\r\n\r\n    createNavigationCommand(path: string): any[] | string | UrlTree {\r\n        return [path];\r\n    }\r\n\r\n    parentLoadedConfig(snapshot) {\r\n        for (let s = snapshot.parent; s; s = s.parent) {\r\n            const route = s.routeConfig;\r\n            if (route && route._loadedConfig) {\r\n                return route._loadedConfig;\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    navigate(\r\n        commands: any[] | string | UrlTree,\r\n        extras?: NavigationExtras,\r\n        data?: any,\r\n        dialogOptions?: DialogOption\r\n    ): Promise<boolean | DialogRef<any>> {\r\n        return new Promise<DialogRef<any>>((resolve, reject) => {\r\n            let tree: UrlTree;\r\n            if (isArray(commands)) {\r\n                tree = this.router.createUrlTree(commands as any[], extras);\r\n            } else if (isString(commands)) {\r\n                tree = this.router.parseUrl(commands as string);\r\n            } else {\r\n                tree = commands as UrlTree;\r\n            }\r\n\r\n            const primary: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\r\n\r\n            const route = this.findRoute(\r\n                this.router.config,\r\n                primary.segments,\r\n                primary\r\n            );\r\n            if (route && route.route) {\r\n                let resolver: ComponentFactoryResolver;\r\n                let component: Type<any> | ComponentFactory<any> =\r\n                    route.route.component;\r\n                const config = this.parentLoadedConfig(\r\n                    extras.relativeTo.snapshot\r\n                );\r\n                if (config) {\r\n                    resolver = config.module.componentFactoryResolver;\r\n                    if (resolver) {\r\n                        component = resolver.resolveComponentFactory(component);\r\n                    }\r\n                }\r\n                const dialog = this.dialogService.showDialog(\r\n                    component,\r\n                    data ? data['__dialogTitle'] : undefined,\r\n                    {\r\n                        routeByCustomProvider: true,\r\n                        path: primary.segments[0].path,\r\n                        ...route.route.data,\r\n                        ...data,\r\n                    },\r\n                    [],\r\n                    dialogOptions || {\r\n                        isFullScreen: false,\r\n                        showBackdrop: true,\r\n                        disableAutoClose: true,\r\n                    },\r\n                    undefined,\r\n                    undefined,\r\n                    [{ provide: ActivatedRoute, useValue: extras.relativeTo }]\r\n                );\r\n                resolve(dialog);\r\n            } else {\r\n                reject(false);\r\n            }\r\n        });\r\n    }\r\n}\r\n","import {\r\n    DialogOption,\r\n    DialogRef,\r\n    NavigationProvider,\r\n    NarikOutlet,\r\n} from '@narik/infrastructure';\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { NavigationExtras, Router, UrlTree } from '@angular/router';\r\nimport { isArray } from '@narik/common';\r\n\r\n@Injectable()\r\nexport class NarikRouteNavigationProvider implements NavigationProvider {\r\n    key = 'route';\r\n    outlet: NarikOutlet;\r\n\r\n    constructor(private router: Router) {}\r\n\r\n    createNavigationCommand(path: string): any[] | string | UrlTree {\r\n        return ['../' + path];\r\n    }\r\n\r\n    navigate(\r\n        commands: any[] | string | UrlTree,\r\n        extras?: NavigationExtras,\r\n        data?: any,\r\n        dialogOptions?: DialogOption\r\n    ): Promise<boolean | DialogRef<any>> {\r\n        extras = extras || {};\r\n        if (data) {\r\n            (extras as any).data = data;\r\n        }\r\n        if (isArray(commands)) {\r\n            return this.router.navigate(commands as any[], extras);\r\n        } else {\r\n            return this.router.navigateByUrl(\r\n                commands as string | UrlTree,\r\n                extras\r\n            );\r\n        }\r\n    }\r\n}\r\n","import { formatString } from '@narik/common';\r\nimport { UrlCreator, PagingParameters } from '@narik/infrastructure';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class ApiUrlCreator extends UrlCreator {\r\n    key = 'api';\r\n    applyParameters(url: string, parameters: any): string {\r\n        if (!parameters) {\r\n            return url;\r\n        }\r\n        return formatString(\r\n            '{0}{1}{2}',\r\n            url,\r\n            url.indexOf('?') >= 0 ? '' : '?',\r\n            Object.keys(parameters)\r\n                .map((x) => {\r\n                    return formatString('{0}={1}', x, parameters[x]);\r\n                })\r\n                .join('&')\r\n        );\r\n    }\r\n    applyPagingParameters(\r\n        url: string,\r\n        pagingParameter: PagingParameters\r\n    ): string {\r\n        throw new Error('Method not implemented.');\r\n    }\r\n}\r\n","import { formatString, isString, isObject } from '@narik/common';\r\nimport { UrlCreator, PagingParameters } from '@narik/infrastructure';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class ODataUrlCreator extends UrlCreator {\r\n    key = 'odata';\r\n\r\n    odataFilters = {\r\n        eq: 'eq',\r\n        neq: 'ne',\r\n        gt: 'gt',\r\n        gte: 'ge',\r\n        lt: 'lt',\r\n        lte: 'le',\r\n        contains: 'contains',\r\n        doesnotcontain: 'substringof',\r\n        endswith: 'endswith',\r\n        startswith: 'startswith',\r\n        isnull: 'eq',\r\n        isnotnull: 'ne',\r\n        isnullorempty: 'eq',\r\n        isnotnullorempty: 'ne',\r\n        isempty: 'eq',\r\n        isnotempty: 'ne',\r\n    };\r\n    applyParameters(url: string, parameters: any): string {\r\n        if (!parameters) {\r\n            return url;\r\n        }\r\n        if (isObject(parameters)) {\r\n            return formatString(\r\n                '{0}({1})',\r\n                url,\r\n                Object.keys(parameters)\r\n                    .map((x) => {\r\n                        return formatString(\r\n                            '{0}={2}{1}{2}',\r\n                            x,\r\n                            parameters[x],\r\n                            isString(parameters[x]) ? \"'\" : ''\r\n                        );\r\n                    })\r\n                    .join(',')\r\n            );\r\n        } else {\r\n            return formatString(\r\n                '{0}({2}{1}{2})',\r\n                url,\r\n                parameters,\r\n                isString(parameters) ? \"'\" : ''\r\n            );\r\n        }\r\n    }\r\n\r\n    applyPagingParameters(\r\n        url: string,\r\n        pagingParameter: PagingParameters\r\n    ): string {\r\n        if (!pagingParameter) {\r\n            return url;\r\n        }\r\n        let orderBy = '';\r\n        if (pagingParameter.sort && pagingParameter.sort.length !== 0) {\r\n            orderBy = `&%24orderby=`;\r\n            orderBy += pagingParameter.sort\r\n                .map((s) => {\r\n                    return `${s.field}${s.order === 'desc' ? ' desc' : ''}`;\r\n                })\r\n                .join(',');\r\n        }\r\n        let filter = '';\r\n        if (pagingParameter.filter && pagingParameter.filter.filters) {\r\n            filter = `&%24filter=${this.toOdataFilter(pagingParameter.filter)}`;\r\n        }\r\n        pagingParameter.skip =\r\n            pagingParameter.skip ||\r\n            pagingParameter.pageIndex * pagingParameter.pageCount;\r\n        return (\r\n            url +\r\n            `?%24format=json&%24top=${pagingParameter.pageCount}&%24skip=${pagingParameter.skip}${orderBy}${filter}&%24count=true`\r\n        );\r\n    }\r\n\r\n    private toOdataFilter(filter) {\r\n        const result = [],\r\n            condition = filter.condition || 'and';\r\n        let idx, length, field, type, format, operator, value, ignoreCase;\r\n        const filters = filter.filters;\r\n\r\n        for (idx = 0, length = filters.length; idx < length; idx++) {\r\n            filter = filters[idx];\r\n            field = filter.field;\r\n            value = filter.value;\r\n            operator = filter.operator;\r\n\r\n            if (filter.filters) {\r\n                filter = this.toOdataFilter(filter);\r\n            } else {\r\n                ignoreCase = filter.ignoreCase;\r\n                field = field.replace(/\\./g, '/');\r\n                filter = this.odataFilters[operator];\r\n\r\n                if (operator === 'isnullorempty') {\r\n                    filter = formatString(\r\n                        \"{0} {1} null or {0} {1} ''\",\r\n                        field,\r\n                        filter\r\n                    );\r\n                } else if (operator === 'isnotnullorempty') {\r\n                    filter = formatString(\r\n                        \"{0} {1} null and {0} {1} ''\",\r\n                        field,\r\n                        filter\r\n                    );\r\n                } else if (operator === 'isnull' || operator === 'isnotnull') {\r\n                    filter = formatString('{0} {1} null', field, filter);\r\n                } else if (\r\n                    operator === 'isempty' ||\r\n                    operator === 'isnotempty'\r\n                ) {\r\n                    filter = formatString(\"{0} {1} ''\", field, filter);\r\n                } else if (filter && value !== undefined) {\r\n                    type = typeof value;\r\n                    if (type === 'string') {\r\n                        format = \"'{1}'\";\r\n                        value = value.replace(/'/g, \"''\");\r\n\r\n                        if (ignoreCase === true) {\r\n                            field = 'tolower(' + field + ')';\r\n                        }\r\n                    } else if (type === 'date') {\r\n                        format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\r\n                        // value = kendo.timezone.apply(value, \"Etc/UTC\");\r\n                    } else {\r\n                        format = '{1}';\r\n                    }\r\n\r\n                    if (filter.length > 3) {\r\n                        if (filter !== 'substringof') {\r\n                            format = '{0}({2},' + format + ')';\r\n                        } else {\r\n                            format = '{0}(' + format + ',{2})';\r\n                            if (operator === 'doesnotcontain') {\r\n                                format = \"{0}({2},'{1}') eq -1\";\r\n                                filter = 'indexof';\r\n                            }\r\n                        }\r\n                    } else {\r\n                        format = '{2} {0} ' + format;\r\n                    }\r\n\r\n                    filter = formatString(format, filter, value, field);\r\n                }\r\n            }\r\n\r\n            result.push(filter);\r\n        }\r\n\r\n        filter = result.join(' ' + condition + ' ');\r\n\r\n        if (result.length > 1) {\r\n            filter = '(' + filter + ')';\r\n        }\r\n\r\n        return filter;\r\n    }\r\n}\r\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport {\r\n    APP_INITIALIZER,\r\n    Inject,\r\n    Injector,\r\n    ModuleWithProviders,\r\n    NgModule,\r\n} from '@angular/core';\r\nimport {\r\n    AuthorizationService,\r\n    CommandProcessor,\r\n    ComponentTypeResolver,\r\n    ConfigService,\r\n    CONFIG_OPTIONS,\r\n    CONFIG_PATH,\r\n    DataProviderService,\r\n    DataStorageService,\r\n    DATA_PROVIDER,\r\n    DATA_STORAGE,\r\n    DEFAULT_LANG,\r\n    DialogService,\r\n    ErrorHandleService,\r\n    EventAggregatorService,\r\n    FormTitleResolver,\r\n    HttpService,\r\n    JsonService,\r\n    ModuleManager,\r\n    NavigationProvider,\r\n    NavigationService,\r\n    RemoteDataProviderService,\r\n    ShortcutService,\r\n    UrlCreator,\r\n    UrlCreatorService,\r\n    USE_DEFAULT_LANG,\r\n    ValidationService,\r\n} from '@narik/infrastructure';\r\nimport { promiseSerial } from '@narik/common';\r\nimport { ToastrModule } from 'ngx-toastr';\r\nimport { COMPONENTS, EXPORT_COMPONENTS } from './index';\r\nimport { TOASTR_OPTION } from './injectionTokens';\r\nimport { NarikCoreModuleConfig } from './interfaces/narik-core-module.config';\r\nimport { LocalStorageDataProvider } from './services/dataProviders/local-storage-data-provider';\r\nimport { MemoryDataProvider } from './services/dataProviders/memory-data-provider';\r\nimport { RemoteDataProvider } from './services/dataProviders/remote-data-provider';\r\nimport { SessionStorageDataProvider } from './services/dataProviders/session-storage-data-provider';\r\nimport { StaticDataProvider } from './services/dataProviders/static-data-provider';\r\nimport { HttpErrorInterceptor } from './services/errorHandlers/narik-http-error-handler';\r\nimport { NarikComponentTypeResolver } from './services/narik-component-type-resolver.service';\r\nimport { NarikConfigService } from './services/narik-config.service';\r\nimport { NarikDataProviderService } from './services/narik-data-provider.service';\r\nimport { NarikDataStorageService } from './services/narik-data-storage.service';\r\nimport { NarikDialogService } from './services/narik-dialog.service';\r\nimport { NarikEmptyCommandProcessor } from './services/narik-empty-command-processor.service';\r\nimport { NarikErrorHandleService } from './services/narik-error-handle.service';\r\nimport { NarikEventAggregatorService } from './services/narik-event-aggregator.service';\r\nimport { NarikFormTitleResolver } from './services/narik-form-title-resolver.service';\r\nimport { NarikHttpService } from './services/narik-http.service';\r\nimport { NarikJsonService } from './services/narik-json.service';\r\nimport { NarikModuleManager } from './services/narik-module-manager.service';\r\nimport { NarikNavigationService } from './services/narik-navigation.service';\r\nimport { NarikRemoteDataProviderService } from './services/narik-remote-data-provider.service';\r\nimport { NarikRoleBasedAuthorizationService } from './services/narik-role-base-authorization.service';\r\nimport { NarikShortcutService } from './services/narik-shortcut.service';\r\nimport { NarikTranslateService } from './services/narik-translation.service';\r\nimport { NarikUrlCreatorService } from './services/narik-url-creator.service';\r\nimport { NarikValidationService } from './services/narik-validation.service';\r\nimport { NarikDialogNavigationProvider } from './services/navigationProviders/narik-dialog-navigation.provider';\r\nimport { NarikRouteNavigationProvider } from './services/navigationProviders/narik-route-navigation.provider';\r\nimport { ApiUrlCreator } from './services/urlCreator/api-url-creator';\r\nimport { ODataUrlCreator } from './services/urlCreator/odata-url-creator';\r\nimport { AppInjector } from './util/app-injector';\r\n\r\n@NgModule({\r\n    imports: [ToastrModule.forRoot()],\r\n    declarations: [COMPONENTS],\r\n    exports: [EXPORT_COMPONENTS],\r\n    providers: [\r\n        {\r\n            provide: RemoteDataProviderService,\r\n            useClass: NarikRemoteDataProviderService,\r\n        },\r\n        {\r\n            provide: HttpService,\r\n            useClass: NarikHttpService,\r\n        },\r\n        {\r\n            provide: SessionStorageDataProvider,\r\n            useClass: SessionStorageDataProvider,\r\n        },\r\n        {\r\n            provide: LocalStorageDataProvider,\r\n            useClass: LocalStorageDataProvider,\r\n        },\r\n        {\r\n            provide: MemoryDataProvider,\r\n            useClass: MemoryDataProvider,\r\n        },\r\n\r\n        {\r\n            provide: DATA_PROVIDER,\r\n            useExisting: SessionStorageDataProvider,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: DATA_PROVIDER,\r\n            useClass: StaticDataProvider,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: DATA_PROVIDER,\r\n            useExisting: LocalStorageDataProvider,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: DATA_PROVIDER,\r\n            useExisting: MemoryDataProvider,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: DATA_PROVIDER,\r\n            useClass: RemoteDataProvider,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: DATA_STORAGE,\r\n            useExisting: SessionStorageDataProvider,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: DATA_STORAGE,\r\n            useExisting: LocalStorageDataProvider,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: DATA_STORAGE,\r\n            useExisting: MemoryDataProvider,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: UrlCreator,\r\n            useClass: ApiUrlCreator,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: UrlCreator,\r\n            useClass: ODataUrlCreator,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: NavigationProvider,\r\n            useClass: NarikDialogNavigationProvider,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: NavigationProvider,\r\n            useClass: NarikRouteNavigationProvider,\r\n            multi: true,\r\n        },\r\n        {\r\n            provide: HTTP_INTERCEPTORS,\r\n            useClass: HttpErrorInterceptor,\r\n            multi: true,\r\n        },\r\n    ],\r\n})\r\nexport class NarikCoreModule {\r\n    constructor(\r\n        translateService: NarikTranslateService,\r\n        @Inject(DEFAULT_LANG) defaultLang: string,\r\n        @Inject(USE_DEFAULT_LANG) useDefaultLang: boolean,\r\n        injector: Injector\r\n    ) {\r\n        translateService.setDefaultLang(defaultLang);\r\n        if (useDefaultLang) {\r\n            translateService.use(defaultLang);\r\n        }\r\n        AppInjector.injector = injector;\r\n    }\r\n    static forRoot(\r\n        config?: NarikCoreModuleConfig\r\n    ): ModuleWithProviders<NarikCoreModule> {\r\n        return {\r\n            ngModule: NarikCoreModule,\r\n            providers: [\r\n                {\r\n                    provide: ErrorHandleService,\r\n                    useClass:\r\n                        config?.errorHandleService || NarikErrorHandleService,\r\n                },\r\n                {\r\n                    provide: DataProviderService,\r\n                    useClass:\r\n                        config?.dataProviderService || NarikDataProviderService,\r\n                },\r\n                {\r\n                    provide: DataStorageService,\r\n                    useClass:\r\n                        config?.dataStorageService || NarikDataStorageService,\r\n                },\r\n                {\r\n                    provide: DialogService,\r\n                    useClass: config?.dialogService || NarikDialogService,\r\n                },\r\n                {\r\n                    provide: UrlCreatorService,\r\n                    useClass:\r\n                        config?.urlCreatorService || NarikUrlCreatorService,\r\n                },\r\n                {\r\n                    provide: ModuleManager,\r\n                    useClass:\r\n                        config?.moduleManagerService || NarikModuleManager,\r\n                },\r\n                {\r\n                    provide: ValidationService,\r\n                    useClass:\r\n                        config?.validationService || NarikValidationService,\r\n                },\r\n                {\r\n                    provide: EventAggregatorService,\r\n                    useClass:\r\n                        config?.eventAggregatorService ||\r\n                        NarikEventAggregatorService,\r\n                },\r\n                {\r\n                    provide: AuthorizationService,\r\n                    useClass:\r\n                        config?.authorizationService ||\r\n                        NarikRoleBasedAuthorizationService,\r\n                },\r\n                {\r\n                    provide: ConfigService,\r\n                    useClass: config?.configService || NarikConfigService,\r\n                },\r\n                {\r\n                    provide: JsonService,\r\n                    useClass: config?.jsonService || NarikJsonService,\r\n                },\r\n                {\r\n                    provide: ComponentTypeResolver,\r\n                    useClass:\r\n                        config?.componentTypeResolver ||\r\n                        NarikComponentTypeResolver,\r\n                },\r\n                {\r\n                    provide: FormTitleResolver,\r\n                    useClass:\r\n                        config?.formTitleResolver || NarikFormTitleResolver,\r\n                },\r\n                {\r\n                    provide: CommandProcessor,\r\n                    useClass:\r\n                        config?.commandProcessor || NarikEmptyCommandProcessor,\r\n                },\r\n                {\r\n                    provide: DEFAULT_LANG,\r\n                    useValue: config?.defaultLang || 'en',\r\n                },\r\n                {\r\n                    provide: NavigationService,\r\n                    useClass: NarikNavigationService,\r\n                },\r\n                {\r\n                    provide: USE_DEFAULT_LANG,\r\n                    useValue: config?.isNativeApp,\r\n                },\r\n                {\r\n                    provide: CONFIG_PATH,\r\n                    useValue: config && config.configFilePath,\r\n                },\r\n                {\r\n                    provide: CONFIG_OPTIONS,\r\n                    useValue: config && config.configOptions,\r\n                },\r\n                config?.isNativeApp\r\n                    ? []\r\n                    : {\r\n                          provide: APP_INITIALIZER,\r\n                          useFactory: initNarik,\r\n                          deps: [ConfigService, ModuleManager],\r\n                          multi: true,\r\n                      },\r\n                {\r\n                    provide: ShortcutService,\r\n                    useClass: NarikShortcutService,\r\n                },\r\n                {\r\n                    provide: TOASTR_OPTION,\r\n                    useValue: config?.toastrOption,\r\n                },\r\n            ],\r\n        };\r\n    }\r\n}\r\nexport function initNarik(\r\n    configService: ConfigService,\r\n    moduleManager: ModuleManager\r\n): () => Promise<any> {\r\n    const promise = (): Promise<any> => {\r\n        return promiseSerial([\r\n            () => configService.init(),\r\n            () => moduleManager.init(),\r\n        ]);\r\n    };\r\n    return promise;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Observer } from 'rxjs';\r\nimport { concat, forkJoin } from 'rxjs';\r\nimport { ConfigService } from '@narik/infrastructure';\r\n\r\nexport interface ResourceModel {\r\n    src: string;\r\n    loaded?: boolean;\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class NarikResourceLoaderService {\r\n    private resources: ResourceModel[] = [];\r\n    private dynamicResourcesPath = '';\r\n\r\n    constructor(configService: ConfigService) {\r\n        this.dynamicResourcesPath = configService.getConfig(\r\n            'dynamicResourcesPath'\r\n        );\r\n        if (this.dynamicResourcesPath) {\r\n            this.dynamicResourcesPath += '/';\r\n        }\r\n    }\r\n\r\n    public load(\r\n        items: (ResourceModel | ResourceModel[])[]\r\n    ): Observable<ResourceModel[]> {\r\n        const loaders = items.map((x) => {\r\n            if (Array.isArray(x)) {\r\n                return Observable.create((o) => {\r\n                    const allloaders = x.map((t) => this.loadInternall(t));\r\n                    concat(...allloaders).subscribe(\r\n                        (t) => {},\r\n                        () => {},\r\n                        () => {\r\n                            o.next();\r\n                            o.complete();\r\n                        }\r\n                    );\r\n                });\r\n            } else {\r\n                return this.loadInternall(x);\r\n            }\r\n        });\r\n        return Observable.create((observer) => {\r\n            forkJoin(loaders).subscribe((results) => {\r\n                observer.next(results);\r\n            });\r\n        });\r\n    }\r\n\r\n    private loadInternall(resource: ResourceModel): Observable<ResourceModel> {\r\n        return new Observable<ResourceModel>(\r\n            (observer: Observer<ResourceModel>) => {\r\n                const existingResources = this.resources.find(\r\n                    (s) => s.src === resource.src\r\n                );\r\n\r\n                // Complete if already loaded\r\n                if (existingResources && existingResources.loaded) {\r\n                    observer.next(existingResources);\r\n                    observer.complete();\r\n                } else {\r\n                    // Add the script\r\n                    this.resources = [...this.resources, resource];\r\n\r\n                    if (resource.src.toLowerCase().endsWith('.js')) {\r\n                        const scriptElement = document.createElement('script');\r\n                        scriptElement.type = 'text/javascript';\r\n                        scriptElement.src =\r\n                            this.dynamicResourcesPath + resource.src;\r\n\r\n                        scriptElement.onload = () => {\r\n                            resource.loaded = true;\r\n                            observer.next(resource);\r\n                            observer.complete();\r\n                        };\r\n\r\n                        scriptElement.onerror = (error: any) => {\r\n                            observer.error(\r\n                                \"Couldn't load script \" + resource.src\r\n                            );\r\n                        };\r\n\r\n                        document\r\n                            .getElementsByTagName('body')[0]\r\n                            .appendChild(scriptElement);\r\n                    } else {\r\n                        const cssElement = document.createElement('link');\r\n                        cssElement.rel = 'stylesheet';\r\n                        cssElement.href =\r\n                            this.dynamicResourcesPath + resource.src;\r\n\r\n                        cssElement.onload = () => {\r\n                            resource.loaded = true;\r\n                            observer.next(resource);\r\n                            observer.complete();\r\n                        };\r\n\r\n                        cssElement.onerror = (error: any) => {\r\n                            observer.error(\r\n                                \"Couldn't load style \" + resource.src\r\n                            );\r\n                        };\r\n\r\n                        document\r\n                            .getElementsByTagName('head')[0]\r\n                            .appendChild(cssElement);\r\n                    }\r\n                }\r\n            }\r\n        );\r\n    }\r\n}\r\n","import { ConfigService, HttpService } from '@narik/infrastructure';\r\nimport { TranslateLoader } from '@ngx-translate/core';\r\nimport { forkJoin, Observable, of } from 'rxjs';\r\nimport { first } from 'rxjs/operators';\r\n\r\nexport class NarikTranslateLoader implements TranslateLoader {\r\n    private root = '';\r\n\r\n    constructor(\r\n        private http: HttpService,\r\n        private configService: ConfigService,\r\n        private items: string[] = []\r\n    ) {}\r\n\r\n    private slash = '/';\r\n    public getTranslation(lang: string): any {\r\n        if (this.root) {\r\n            return this.getTranslationInternal(lang);\r\n        } else {\r\n            return new Observable((observer) => {\r\n                this.configService.configLoaded.pipe(first()).subscribe(() => {\r\n                    this.root = this.configService.getConfig(\r\n                        'translationsPath'\r\n                    );\r\n                    this.getTranslationInternal(lang).subscribe((x) =>\r\n                        observer.next(x)\r\n                    );\r\n                });\r\n            });\r\n        }\r\n    }\r\n\r\n    private getTranslationInternal(lang: string): Observable<any> {\r\n        if (this.items.length !== 0) {\r\n            const loaders: any[] = this.items.map((x) => {\r\n                return this.http.get(\r\n                    `${this.root}${this.slash}${lang}${this.slash}${x}.json`\r\n                );\r\n            });\r\n            return new Observable((observer) => {\r\n                forkJoin(loaders).subscribe((translations) => {\r\n                    let result = {};\r\n                    translations.map(\r\n                        (x) => (result = Object.assign(result, x))\r\n                    );\r\n                    observer.next(result);\r\n                });\r\n            });\r\n        } else {\r\n            return of({});\r\n        }\r\n    }\r\n\r\n    public addTranslationItem(item: string) {\r\n        this.items.push(item);\r\n    }\r\n\r\n    public getTranslateFilePath(lang: string, item: string) {\r\n        return `${this.root}${this.slash}${lang}${this.slash}${item}.json`;\r\n    }\r\n}\r\n","import { isString, isArray } from '@narik/common';\r\nimport { AuthorizationService } from '@narik/infrastructure';\r\nimport { Observable } from 'rxjs';\r\nimport { of } from 'rxjs';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class NarikResourceBasedAuthorizationService extends AuthorizationService {\r\n    /**\r\n     *\r\n     */\r\n    constructor() {\r\n        super();\r\n    }\r\n    hasAccess(itemKey: any): Observable<boolean> {\r\n        const key = this.extractItemKey(itemKey);\r\n        return of(false);\r\n    }\r\n\r\n    protected extractItemKey(itemKey: any): { key: string; action?: string }[] {\r\n        if (isString(itemKey)) {\r\n            return [\r\n                {\r\n                    key: itemKey,\r\n                },\r\n            ];\r\n        } else if (isArray(itemKey)) {\r\n            return itemKey;\r\n        }\r\n        return null;\r\n    }\r\n}\r\n","import { Injector, NgModuleRef } from '@angular/core';\r\nimport {\r\n    ConfigService,\r\n    HttpService,\r\n    JsonService,\r\n    ModuleInfo,\r\n    ModuleManager,\r\n} from '@narik/infrastructure';\r\nimport { Observable, of } from 'rxjs';\r\nimport { first, map } from 'rxjs/operators';\r\nimport { NarikInject } from '../decorators/narik-inject.decorator';\r\n\r\nexport abstract class NarikModule {\r\n    abstract readonly key: string;\r\n    abstract readonly moduleInfo: Observable<ModuleInfo>;\r\n\r\n    @NarikInject(ModuleManager)\r\n    protected moduleManager: ModuleManager;\r\n\r\n    @NarikInject(NgModuleRef)\r\n    private moduleRef: NgModuleRef<any>;\r\n\r\n    @NarikInject(HttpService)\r\n    private httpService: HttpService;\r\n\r\n    @NarikInject(JsonService)\r\n    private jsonService: JsonService;\r\n\r\n    @NarikInject(ConfigService)\r\n    protected configService: ConfigService;\r\n\r\n    private moduleRootPath: string;\r\n\r\n    constructor(private injector: Injector) {\r\n        this.configService.configLoaded.pipe(first()).subscribe(() => {\r\n            this.moduleRootPath = this.configService.getConfig(\r\n                'modulesMetaDataRoot'\r\n            );\r\n            if (!this.moduleRootPath) {\r\n                throw new Error('modulesMetaDataRoot is null');\r\n            }\r\n            this.registerModule();\r\n        });\r\n    }\r\n\r\n    protected registerModule() {\r\n        const moduleInfo = this.moduleInfo;\r\n        if (moduleInfo) {\r\n            moduleInfo.subscribe((info) => {\r\n                info.module = this.moduleRef;\r\n                this.moduleManager.addOrUpdateModule(this.key, info);\r\n            });\r\n        }\r\n    }\r\n\r\n    protected loadInfoFromJson(): Observable<ModuleInfo> {\r\n        return this.jsonService\r\n            .getJson(`${this.moduleRootPath}/${this.key.toLowerCase()}.json`)\r\n            .pipe(map((x) => x as ModuleInfo));\r\n    }\r\n\r\n    protected loadInfoFromData(info: ModuleInfo): Observable<ModuleInfo> {\r\n        return of(info);\r\n    }\r\n}\r\n","import {\r\n    DialogContainer,\r\n    DialogOption,\r\n    DialogAction,\r\n    DialogRef,\r\n} from '@narik/infrastructure';\r\nimport { Directive, EventEmitter, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { ComponentLoaderHostDirective } from '@narik/common';\r\nimport { AnimationEvent } from '@angular/animations';\r\nimport { state, style, transition, animate } from '@angular/animations';\r\n\r\n@Directive()\r\nexport class NarikDialogContainer implements DialogContainer {\r\n    isOpen = false;\r\n    closeAnimationCompleted = new EventEmitter<any>();\r\n    @ViewChild(ComponentLoaderHostDirective, { static: true })\r\n    loaderHost: ComponentLoaderHostDirective;\r\n    options: DialogOption;\r\n    title: string;\r\n    actions: DialogAction[] = [];\r\n    dialogRef: DialogRef<any>;\r\n    get contentContainerRef(): ViewContainerRef {\r\n        return this.loaderHost.viewContainerRef;\r\n    }\r\n\r\n    actionClick(item: DialogAction) {\r\n        this.dialogRef.close(\r\n            {\r\n                componentInstance: this.dialogRef.componentInstance,\r\n                dialogResult: item.dialogResult,\r\n            },\r\n            'DIALOG'\r\n        );\r\n    }\r\n\r\n    _onAnimationDone(event: AnimationEvent) {\r\n        if (event.toState === 'closed') {\r\n            this.closeAnimationCompleted.emit(event);\r\n        }\r\n    }\r\n}\r\n\r\nexport const DialogAnimationBody = [\r\n    state('closed', style({ opacity: 0, transform: 'scale(0.7)' })),\r\n    state('open', style({ transform: 'none' })),\r\n    transition(\r\n        'closed => open',\r\n        animate(\r\n            '150ms cubic-bezier(0, 0, 0.2, 1)',\r\n            style({ transform: 'none', opacity: 1 })\r\n        )\r\n    ),\r\n    transition(\r\n        'open => closed',\r\n        animate('75ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({ opacity: 0 }))\r\n    ),\r\n];\r\n","/*\r\n * Public API Surface of narik-core\r\n */\r\n\r\nexport * from './lib/narik-core.module';\r\nexport * from './lib/services/public_api';\r\nexport * from './lib/interfaces/public_api';\r\nexport * from './lib/base/public_api';\r\nexport * from './lib/decorators/public_api';\r\nexport * from './lib/util/public_api';\r\nexport * from './lib/injectionTokens';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}