@stemy/ngx-utils 13.0.1 → 13.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/ngx-utils/common-types.mjs +1 -1
- package/esm2020/ngx-utils/ngx-utils.imports.mjs +163 -0
- package/esm2020/ngx-utils/ngx-utils.module.mjs +75 -234
- package/esm2020/ngx-utils/services/config.service.mjs +10 -14
- package/fesm2015/stemy-ngx-utils.mjs +39 -90
- package/fesm2015/stemy-ngx-utils.mjs.map +1 -1
- package/fesm2020/stemy-ngx-utils.mjs +39 -90
- package/fesm2020/stemy-ngx-utils.mjs.map +1 -1
- package/ngx-utils/common-types.d.ts +1 -0
- package/ngx-utils/ngx-utils.module.d.ts +50 -73
- package/ngx-utils/services/config.service.d.ts +3 -2
- package/package.json +1 -1
- package/bundles/stemy-ngx-utils.umd.js +0 -6121
- package/bundles/stemy-ngx-utils.umd.js.map +0 -1
- package/bundles/stemy-ngx-utils.umd.min.js +0 -16
- package/bundles/stemy-ngx-utils.umd.min.js.map +0 -1
- package/esm2015/ngx-utils/common-types.js +0 -116
- package/esm2015/ngx-utils/components/dynamic-table/dynamic-table.component.js +0 -139
- package/esm2015/ngx-utils/components/pagination-menu/pagination-menu.component.js +0 -96
- package/esm2015/ngx-utils/components/unordered-list/unordered-list.component.js +0 -51
- package/esm2015/ngx-utils/directives/async-method.base.js +0 -54
- package/esm2015/ngx-utils/directives/async-method.directive.js +0 -24
- package/esm2015/ngx-utils/directives/background.directive.js +0 -51
- package/esm2015/ngx-utils/directives/dynamic-table-template.directive.js +0 -19
- package/esm2015/ngx-utils/directives/global-template.directive.js +0 -27
- package/esm2015/ngx-utils/directives/icon.directive.js +0 -59
- package/esm2015/ngx-utils/directives/ngx-template-outlet.directive.js +0 -88
- package/esm2015/ngx-utils/directives/pagination-item.directive.js +0 -33
- package/esm2015/ngx-utils/directives/pagination.directive.js +0 -76
- package/esm2015/ngx-utils/directives/resource-if.directive.js +0 -51
- package/esm2015/ngx-utils/directives/sticky-class.directive.js +0 -35
- package/esm2015/ngx-utils/directives/sticky.directive.js +0 -48
- package/esm2015/ngx-utils/directives/unordered-list-item.directive.js +0 -70
- package/esm2015/ngx-utils/directives/unordered-list-template.directive.js +0 -26
- package/esm2015/ngx-utils/ngx-utils.module.js +0 -238
- package/esm2015/ngx-utils/pipes/chunk.pipe.js +0 -21
- package/esm2015/ngx-utils/pipes/entries.pipe.js +0 -24
- package/esm2015/ngx-utils/pipes/extra-item-properties.pipe.js +0 -27
- package/esm2015/ngx-utils/pipes/filter.pipe.js +0 -38
- package/esm2015/ngx-utils/pipes/find.pipe.js +0 -25
- package/esm2015/ngx-utils/pipes/format-number.pipe.js +0 -19
- package/esm2015/ngx-utils/pipes/get-offset.pipe.js +0 -13
- package/esm2015/ngx-utils/pipes/get-type.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/global-template.pipe.js +0 -37
- package/esm2015/ngx-utils/pipes/group-by.pipe.js +0 -23
- package/esm2015/ngx-utils/pipes/is-type.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/join.pipe.js +0 -15
- package/esm2015/ngx-utils/pipes/keys.pipe.js +0 -18
- package/esm2015/ngx-utils/pipes/map.pipe.js +0 -25
- package/esm2015/ngx-utils/pipes/max.pipe.js +0 -22
- package/esm2015/ngx-utils/pipes/min.pipe.js +0 -22
- package/esm2015/ngx-utils/pipes/reduce.pipe.js +0 -26
- package/esm2015/ngx-utils/pipes/remap.pipe.js +0 -28
- package/esm2015/ngx-utils/pipes/replace.pipe.js +0 -12
- package/esm2015/ngx-utils/pipes/reverse.pipe.js +0 -20
- package/esm2015/ngx-utils/pipes/round.pipe.js +0 -19
- package/esm2015/ngx-utils/pipes/safe-html.pipe.js +0 -32
- package/esm2015/ngx-utils/pipes/translate.pipe.js +0 -81
- package/esm2015/ngx-utils/pipes/values.pipe.js +0 -18
- package/esm2015/ngx-utils/plugins/resize-event.plugin.js +0 -56
- package/esm2015/ngx-utils/plugins/scroll-event.plugin.js +0 -36
- package/esm2015/ngx-utils/services/acl.service.js +0 -79
- package/esm2015/ngx-utils/services/api.service.js +0 -35
- package/esm2015/ngx-utils/services/auth.service.js +0 -14
- package/esm2015/ngx-utils/services/base-http.client.js +0 -46
- package/esm2015/ngx-utils/services/base-http.service.js +0 -285
- package/esm2015/ngx-utils/services/config.service.js +0 -122
- package/esm2015/ngx-utils/services/error-handler.service.js +0 -49
- package/esm2015/ngx-utils/services/events.service.js +0 -24
- package/esm2015/ngx-utils/services/formatter.service.js +0 -44
- package/esm2015/ngx-utils/services/global-template.service.js +0 -35
- package/esm2015/ngx-utils/services/icon.service.js +0 -24
- package/esm2015/ngx-utils/services/language.service.js +0 -117
- package/esm2015/ngx-utils/services/open-api.service.js +0 -41
- package/esm2015/ngx-utils/services/promise.service.js +0 -52
- package/esm2015/ngx-utils/services/state.service.js +0 -181
- package/esm2015/ngx-utils/services/static-language.service.js +0 -152
- package/esm2015/ngx-utils/services/storage.service.js +0 -48
- package/esm2015/ngx-utils/services/toaster.service.js +0 -29
- package/esm2015/ngx-utils/services/translated-url.serializer.js +0 -70
- package/esm2015/ngx-utils/services/universal.service.js +0 -75
- package/esm2015/ngx-utils/utils/ajax-request-handler.js +0 -40
- package/esm2015/ngx-utils/utils/array.utils.js +0 -100
- package/esm2015/ngx-utils/utils/auth.guard.js +0 -156
- package/esm2015/ngx-utils/utils/canvas.utils.js +0 -388
- package/esm2015/ngx-utils/utils/date.utils.js +0 -28
- package/esm2015/ngx-utils/utils/file.utils.js +0 -90
- package/esm2015/ngx-utils/utils/generic-value.js +0 -20
- package/esm2015/ngx-utils/utils/geometry.js +0 -132
- package/esm2015/ngx-utils/utils/initializer.js +0 -20
- package/esm2015/ngx-utils/utils/loader.utils.js +0 -55
- package/esm2015/ngx-utils/utils/math.utils.js +0 -15
- package/esm2015/ngx-utils/utils/object.utils.js +0 -263
- package/esm2015/ngx-utils/utils/observable.utils.js +0 -63
- package/esm2015/ngx-utils/utils/reflect.utils.js +0 -33
- package/esm2015/ngx-utils/utils/set.utils.js +0 -20
- package/esm2015/ngx-utils/utils/string.utils.js +0 -28
- package/esm2015/ngx-utils/utils/timer.utils.js +0 -52
- package/esm2015/ngx-utils/utils/unique.utils.js +0 -24
- package/esm2015/ngx-utils/utils/vector.js +0 -77
- package/esm2015/public_api.js +0 -84
- package/esm2015/stemy-ngx-utils.js +0 -7
- package/fesm2015/stemy-ngx-utils.js +0 -4860
- package/fesm2015/stemy-ngx-utils.js.map +0 -1
- package/stemy-ngx-utils.metadata.json +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../src/ngx-utils/utils/object.utils.ts","../../src/ngx-utils/common-types.ts","../../src/ngx-utils/utils/reflect.utils.ts","../../src/ngx-utils/utils/ajax-request-handler.ts","../../src/ngx-utils/utils/date.utils.ts","../../src/ngx-utils/utils/canvas.utils.ts","../../src/ngx-utils/utils/file.utils.ts","../../src/ngx-utils/utils/generic-value.ts","../../src/ngx-utils/utils/geometry.ts","../../src/ngx-utils/utils/initializer.ts","../../src/ngx-utils/utils/loader.utils.ts","../../src/ngx-utils/utils/math.utils.ts","../../src/ngx-utils/services/state.service.ts","../../src/ngx-utils/utils/auth.guard.ts","../../src/ngx-utils/utils/timer.utils.ts","../../src/ngx-utils/utils/observable.utils.ts","../../src/ngx-utils/utils/string.utils.ts","../../src/ngx-utils/utils/array.utils.ts","../../src/ngx-utils/utils/set.utils.ts","../../src/ngx-utils/utils/unique.utils.ts","../../src/ngx-utils/utils/vector.ts","../../src/ngx-utils/services/universal.service.ts","../../src/ngx-utils/services/acl.service.ts","../../src/ngx-utils/services/base-http.client.ts","../../src/ngx-utils/services/storage.service.ts","../../src/ngx-utils/services/base-http.service.ts","../../src/ngx-utils/services/api.service.ts","../../src/ngx-utils/services/auth.service.ts","../../src/ngx-utils/services/config.service.ts","../../src/ngx-utils/services/error-handler.service.ts","../../src/ngx-utils/services/events.service.ts","../../src/ngx-utils/services/formatter.service.ts","../../src/ngx-utils/services/global-template.service.ts","../../src/ngx-utils/services/icon.service.ts","../../src/ngx-utils/services/static-language.service.ts","../../src/ngx-utils/services/language.service.ts","../../src/ngx-utils/services/open-api.service.ts","../../src/ngx-utils/services/toaster.service.ts","../../src/ngx-utils/services/translated-url.serializer.ts","../../src/ngx-utils/services/promise.service.ts","../../src/ngx-utils/plugins/resize-event.plugin.ts","../../src/ngx-utils/plugins/scroll-event.plugin.ts","../../src/ngx-utils/pipes/chunk.pipe.ts","../../src/ngx-utils/pipes/entries.pipe.ts","../../src/ngx-utils/pipes/extra-item-properties.pipe.ts","../../src/ngx-utils/pipes/filter.pipe.ts","../../src/ngx-utils/pipes/find.pipe.ts","../../src/ngx-utils/pipes/format-number.pipe.ts","../../src/ngx-utils/pipes/get-offset.pipe.ts","../../src/ngx-utils/pipes/get-type.pipe.ts","../../src/ngx-utils/pipes/global-template.pipe.ts","../../src/ngx-utils/pipes/group-by.pipe.ts","../../src/ngx-utils/pipes/is-type.pipe.ts","../../src/ngx-utils/pipes/join.pipe.ts","../../src/ngx-utils/pipes/keys.pipe.ts","../../src/ngx-utils/pipes/map.pipe.ts","../../src/ngx-utils/pipes/max.pipe.ts","../../src/ngx-utils/pipes/min.pipe.ts","../../src/ngx-utils/pipes/reduce.pipe.ts","../../src/ngx-utils/pipes/remap.pipe.ts","../../src/ngx-utils/pipes/replace.pipe.ts","../../src/ngx-utils/pipes/reverse.pipe.ts","../../src/ngx-utils/pipes/round.pipe.ts","../../src/ngx-utils/pipes/safe-html.pipe.ts","../../src/ngx-utils/pipes/translate.pipe.ts","../../src/ngx-utils/pipes/values.pipe.ts","../../src/ngx-utils/directives/async-method.directive.ts","../../src/ngx-utils/directives/background.directive.ts","../../src/ngx-utils/directives/dynamic-table-template.directive.ts","../../src/ngx-utils/directives/global-template.directive.ts","../../src/ngx-utils/directives/icon.directive.ts","../../src/ngx-utils/directives/ngx-template-outlet.directive.ts","../../src/ngx-utils/directives/pagination.directive.ts","../../src/ngx-utils/directives/pagination-item.directive.ts","../../src/ngx-utils/directives/resource-if.directive.ts","../../src/ngx-utils/directives/sticky.directive.ts","../../src/ngx-utils/directives/unordered-list-item.directive.ts","../../src/ngx-utils/directives/unordered-list-template.directive.ts","../../src/ngx-utils/components/unordered-list/unordered-list.component.ts","../../src/ngx-utils/components/dynamic-table/dynamic-table.component.ts","../../src/ngx-utils/components/pagination-menu/pagination-menu.component.ts","../../src/ngx-utils/directives/sticky-class.directive.ts","../../src/ngx-utils/ngx-utils.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","__","this","constructor","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","pop","push","__values","o","s","m","__read","ar","error","__spread","concat","StorageMode","defaultPredicate","hasBlob","Blob","hasFile","File","ObjectUtils","compare","a","localeCompare","Date","getTime","getProperties","obj","isObject","isFunction","props","Set","keys","forEach","add","getOwnPropertyNames","from","equals","keySet","at","isArray","evaluate","expr","context","res","lines","reduce","split","lastLine","replace","join","Function","exception","console","log","message","empty","iterate","cb","getValue","defaultValue","treeFallback","curKey","shift","isDefined","RegExp","mapToPath","source","path","map","item","index","isNullOrUndefined","isNaN","values","filter","predicate","copyRecursive","copy","assign","getType","regex","toString","match","toLowerCase","isPrimitive","type","isString","isDate","getDate","isBlob","isBoolean","isNumber","num","isSet","checkInterface","interFaceObject","isInterface","keys_1","keys_1_1","startsWith","substr","pad","width","chr","str","ReflectUtils","defineMetadata","data","name","getMetadata","getOwnMetadata","injector","func","factory","depends","method","find","parameters","dep","get","params","ICON_SERVICE","InjectionToken","LANGUAGE_SERVICE","AUTH_SERVICE","TOASTER_SERVICE","PROMISE_SERVICE","UnorederedListTemplate","_super","TemplateRef","FactoryDependencies","dependencies","_i","PaginationItemContext","parallelItem","count","dataIndex","even","filterRx","HttpPromise","rejectHandler","executor","_this","attachCount","runCount","onFulfilled","onRejected","reason","hasRejectHandler","catch","EXPRESS_REQUEST","API_SERVICE","CONFIG_SERVICE","BASE_CONFIG","SCRIPT_PARAMS","ROOT_ELEMENT","ERROR_HANDLER","ValuedPromise","AjaxRequestHandler","pattern","callback","listener","event","details","detail","test","url","XMLHttpRequest","isOverridden","originalOpen_1","open","async","user","password","window","dispatchEvent","CustomEvent","request","listen","addEventListener","forget","removeEventListener","DateUtils","isHoliday","date","utc","isoWeekday","isBusinessDay","amount","unit","toDate","businessAdd","signal","remaining","Math","abs","day","businessSubtract","BlurStack","mul_table","shg_table","CanvasUtils","manipulatePixels","canvas","ctx","colorTransformer","imgData","getImageData","height","pixels","clr","CanvasColor","color","putImageData","thresholding","threshold","min","max","limit","greyscale","stackBlur","radius","imageData","netscape","security","PrivilegeManager","enablePrivilege","alert","Error","x","yp","yi","yw","r_sum","g_sum","b_sum","a_sum","r_out_sum","g_out_sum","b_out_sum","a_out_sum","r_in_sum","g_in_sum","b_in_sum","a_in_sum","pr","pg","pb","pa","rbs","div","widthMinus1","heightMinus1","radiusPlus1","sumFactor","stackStart","stackEnd","stack","stackIn","stackOut","mul_sum","shg_sum","measureTextFontSize","maxWidth","maxHeight","font","lineHeightPercent","startSize","getContext","document","createElement","appendChild","fontSize","halveValidateFontSize","size","setFontProps","maxTextLinesWidth","getTextWidth","getTextBitmapHeight","drawLines","align","baseLine","line","fillText","wrapText","text","words","lineHeight","measureText","testLine","l","textAlign","textBaseline","clearRect","textY","textHeight","yLoop","lastFontSize","tempSize","floor","FileUtils","getExtension","file","lastIndexOf","getName","toFile","blob","fileName","lastModifiedDate","dataToBlob","parts","byteString","atob","mimeString","ab","ArrayBuffer","ia","Uint8Array","charCodeAt","saveBlob","saveAs","saveJson","json","JSON","stringify","readFileAsText","readFile","reader","readAsText","readFileAsBinaryString","readAsBinaryString","readFileAsDataURL","readAsDataURL","readDataFromUrl","http","first","responseType","subscribe","status","FileReader","onload","onerror","GenericValue","_value","setJustValue","Subject","Rect","rotation","Point","distance","rotateAround","center","left","right","bottom","top","sqrt","Circle","Zero","subtract","multiply","lerp","ratio","diff","perpendicularTo","perpendicular","circleWith","aSlope","bSlope","tangents","pd","asin","atan2","t1","sin","cos","angle","PI","rotated","Initializer","shouldInit","initialized","Invokable","LoaderUtils","loadScript","src","scriptPromises","script","readyState","onreadystatechange","loadStyle","stylePromises","link","rel","href","MathUtils","equal","epsilon","E","clamp","round","precision","divider","pow","emptySnapshot","ActivatedRouteSnapshot","emptyData","id","emptyParams","emptySegments","emptyComponents","StateService","zone","router","router$1","handleRouterEvent","NavigationEnd","routerStateSnapshot","routerState","snapshot","root","contexts","segments","components","snapshots","outlet","isActivated","component","children","firstChild","comp","shot","stateInfo","globalExtras","queryParamsHandling","events","rootContexts","toPath","route","routeConfig","queryParams","config","reload","resolvers","resolver","resolved","Observable","toPromise","_b","navigate","commands","extras","tree","createUrlTree","navigateByUrl","run","subscribeImmediately","complete","pipe","skipWhile","BehaviorSubject","Injectable","Injector","NgZone","Router","Optional","AuthGuard","state","auth","guardAuthenticated","isAuthenticated","guardNotAuthenticated","guardNothing","guardAuthField","expression","guardStateField","guardAuthStateField","wildRouteMatch","consumed","noRouteMatch","checkRouteMenu","checkRoute","routeData","guards","guard","all","results","indexOf","canActivate","checkAuthenticated","hasRights","getReturnState","returnState","getConfig","findIndex","config_1","config_1_1","subConfig","loadedChildren","routes","match_1","routerConfig","getReturnStateRecursive","rs","Inject","args","TimerUtils","createTimeout","time","createTimer","timer","clear","setTimeout","clearTimeout","createInterval","setInterval","clearInterval","setParams","set","ObservableUtils","toSearch","search","mergeMap","token","getSearchResults","observer","multiSubscription","subscriptions","lambda","unsubscribe","Subscription","subscribers","info","alreadyCalled","timeout","subjects","subject","ss","fromFunction","callbackFunc","subscriber","err","StringUtils","separator","strings","starts","has","lcFirst","charAt","substring","ucFirst","toUpperCase","ArrayUtils","arr","items","any","move","oldIndex","newIndex","k","undefined","splice","reversed","Number","MAX_SAFE_INTEGER","current","MIN_SAFE_INTEGER","chunk","slice","SetUtils","addArray","UniqueUtils","uuid","crypto","getRandomValues","buf","Uint16Array","pad4","random4","ret","random","Vector","z","dot","divide","theta","phi","cross","angleTo","acos","toArray","clone","init","UniversalService","platformId","dds","getDeviceInfo","crawler","userAgent","isPlatformBrowser","isPlatformServer","isServer","os","browser","device","os_version","browser_version","deviceType","orientation","isTablet","isMobile","isDesktop","PLATFORM_ID","DeviceDetectorService","emptyGuards","AclService","userChanged","dirty","getStateInfo","onUserInitialized","onUserChanged","guardType","BaseHttpClient","handler","requestHeaders","requestParams","extraRequestParams","language","makeHeaders","headers","withCredentials","authHeader","HttpHeaders","makeParams","HttpParams","encoder","HttpUrlEncodingCodec","fromObject","setExtraRequestParam","HttpClient","HttpHandler","StorageService","universal","mode","Local","localStorage","sessionStorage","getItem","parse","storage","setItem","remove","removeItem","BaseHttpService","client","toaster","configs","cache","retryFailedRequests","failedRequests","createUrl","httpParams","query","makeListParams","page","itemsPerPage","orderBy","orderDescending","sort","getPromise","options","makeOptions","deletePromise","postPromise","putPromise","patchPromise","uploadPromise","reportProgress","listPromise","total","meta","_a","response","handleUnauthorizedError","absoluteUrl","toastWarning","issueContext","warning","toastError","HttpEventType","UploadProgress","progress","percentage","loaded","HttpResponse","parseResponse","renewTokenFunc","currentTime","TimeoutError","pushFailedRequest","originalHeaders","req","checkHeaders","cookie","referer","host","observe","parseUrl","expressRequestUrl","protocol","ApiService","delete","post","put","patch","upload","list","StaticAuthService","EventEmitter","ConfigService","rootElement","baseConfig","scriptParams","enumerable","baseUrl","isBrowser","currentScript","scriptSrc","srcParts","loadedConfig","baseDomain","parseDomain","scriptParameters","loaderFunc","loader","loadJson","prepareConfig","initService","URL","port","hostname","configUrl","prepareUrl","ending","project","needsProtocol","getConfigValue","getQueryParameter","location","exec","decodeURIComponent","IConfiguration","ErrorHandlerService","errorMap","handleError","errorCb","btoa","unescape","encodeURIComponent","ErrorHandler","EventsService","eventForwarded","stickyUpdated","languageChanged","sticky","emit","updateSticky","FormatterService","roundNumber","getPrecision","defaultDivider","formatNumber","format","parseFloat","toLocaleString","currentLanguage","minimumFractionDigits","maximumFractionDigits","defaultNumberFormat","formatMillimeter","defaultPrecision","GlobalTemplateService","templatesUpdated","globalTemplates","componentModifiers","template","modifier","addComponentModifier","IconService","iconsLoaded","disabled","getIcon","icon","activeIcon","active","icons","StaticLanguageService","promises","editLang","currentLang","disableTrans","languageList","translations","none","browserLang","defaultLanguage","lang","navigator","languages","splitter","replaceLanguages","addLanguages","getTranslationSync","lowerKey","toLocaleLowerCase","translation","dictionary","interpolate","getTranslation","getTranslations","getTranslationFromObject","getTranslationFromArray","interpolateString","LanguageService","useLanguage","settings","languageSettings","loadSettings","combineLatest","translationRequests","initFromSettings","devLanguages","loadDictionary","dict","reason_1","httpClient","translationUrl","settingsPromise","de","hu","end","OpenApiService","api","getSchemas","schemasPromise","schemas","definitions","schema","properties","getSchema","ConsoleToasterService","title","translateMessage","success","TranslatedUrlSerializer","serialize","UrlTree","getDictionary","modifyTreeRecursive","segment","dict_1","segmentGroup","childrenArr","child","newGroup","UrlSegmentGroup","UrlSegment","parent","DefaultUrlSerializer","PromiseService","promiseCount","promiseChanged","runOutsideAngular","promiseFinished","promise","emptyRemove","ResizeEventPlugin","doc","supports","eventName","EVENT_NAME","element","manager","getZone","el","addListener","removeListener","addGlobalEventListener","EventManagerPlugin","DOCUMENT","ScrollEventPlugin","ChunkPipe","transform","subResult","Pipe","emptyEntries","EntriesPipe","entries","val","ExtraItemPropertiesPipe","defaultFilter","FilterPipe","filterFunc","FindPipe","defaultFilter$1","FormatNumberPipe","formatter","GetOffsetPipe","offset","GetTypePipe","GlobalTemplatePipe","cachedTemplateId","cachedTemplate","ngOnInit","ngOnDestroy","templateId","pure","GroupByPipe","records","column","groups","col","group","IsTypePipe","JoinPipe","emptyKeys","KeysPipe","defaultMapper","MapPipe","mapper","mapperFunc","MaxPipe","selector","maxSelector","MinPipe","minSelector","defaultReducer","ReducePipe","reducer","RemapPipe","every","ReplacePipe","to","emptyArray","ReversePipe","RoundPipe","SafeHtmlPipe","sanitizer","bypassSecurityTrustHtml","bypassSecurityTrustStyle","bypassSecurityTrustScript","bypassSecurityTrustUrl","bypassSecurityTrustResourceUrl","DomSanitizer","TranslatePipe","cdr","disableTranslations","validArgs","SyntaxError","lastValue","detectChanges","ChangeDetectorRef","emptyValues","ValuesPipe","AsyncMethodDirective","onSuccess","onError","loading","click","callMethod","Directive","exportAs","Input","Output","HostBinding","HostListener","defaultClass","loadingClass","BackgroundDirective","renderer","ngOnChanges","changes","setBackground","background","removeClass","nativeElement","addClass","setStyle","backgroundSize","ElementRef","Renderer2","ref","GlobalTemplateDirective","globalTemplateService","IconDirective","activeChange","changeIcon","previousValue","currentValue","isDisabled","innerHTML","NgxTemplateOutletDirective","_viewContainerRef","hasContextShapeChanged","ctxChange","prevCtxKeys","currCtxKeys","currCtxKeys_1","currCtxKeys_1_1","propName","shouldRecreateView","viewRef","ngxTemplateOutlet","createEmbeddedView","ngDoCheck","updateExistingContext","additionalContext","$implicit","aCtxChange","ctxProto","getPrototypeOf","props_1","props_1_1","bind","_c","_d","ViewContainerRef","PaginationDirective","pageChange","onRefresh","updateTimer","loadData","updateTime","waitFor","refresh","paginate","maxPage","baseIndex","ix","PaginationItemDirective","pagination","viewContainer","templateRef","renderView","ResourceIfDirective","ResourceIfContext","resource","StickyDirective","parentElement","isUpdating","isSticky","distanceToTop","getBoundingClientRect","UnorderedListItemDirective","elementRef","templates","defaultTemplates","valueIsArray","valueIsObject","valueType","classList","isClass","className","UnorderedListTemplateDirective","UnorderedListComponent","keyPrefix","listStyle","level","ngAfterContentInit","templateDirectives","ngAfterViewInit","defaultKeyTemplate","defaultValueTemplate","defaultItemTemplate","Component","ContentChildren","ViewChild","DynamicTableComponent","orders","dataLoader","loadLocalData","placeholder","tableId","directive","rowTemplate","defaultRowTemplate","filterTemplate","defaultFilterTemplate","columns","cols","parallelData","setFilter","setOrder","rowsPerPage","dataLength","filterRx_1","ContentChild","static","DynamicTableTemplateDirective","PaginationMenuComponent","maxSize","directionLinks","boundaryLinks","firstLabel","prevLabel","nextLabel","lastLabel","setPages","setIcon","urlParam","labelName","totalPages","startPage","endPage","pages","StickyClassDirective","stickyClass","pipes","directives","providers","provide","EVENT_MANAGER_PLUGINS","useClass","multi","UrlSerializer","useExisting","loadConfig","load","NgxUtilsModule","forRoot","ngModule","apiService","authService","iconService","languageService","toasterService","promiseService","configService","useValue","APP_INITIALIZER","useFactory","initializeApp","deps","NgModule","declarations","imports","CommonModule","FormsModule","exports"],"mappings":"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AK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAEpEC,EAAY,CACd,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC3D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,G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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export type FilterPredicate = (value: any, key?: any, target?: any, source?: any) => boolean;\r\nexport type IterateCallback = (value: any, key?: any) => void;\r\n\r\nconst defaultPredicate: FilterPredicate = () => true;\r\nconst hasBlob = typeof Blob !== \"undefined\";\r\nconst hasFile = typeof File !== \"undefined\";\r\n\r\nexport class ObjectUtils {\r\n\r\n static compare(a: any, b: any): number {\r\n if ((a === null || b === null) || (typeof a != typeof b)) {\r\n return null;\r\n }\r\n if (typeof a === \"string\") {\r\n return (a).localeCompare(b);\r\n } else {\r\n if (a instanceof Date) {\r\n a = a.getTime();\r\n b = b.getTime();\r\n }\r\n if (a > b) {\r\n return 1;\r\n } else if (a < b) {\r\n return -1;\r\n }\r\n return 0;\r\n }\r\n }\r\n\r\n static getProperties(obj: any): string[] {\r\n if (!ObjectUtils.isObject(obj) && !ObjectUtils.isFunction(obj)) return [];\r\n const props = new Set<string>();\r\n Object.keys(obj).forEach(p => props.add(p));\r\n Object.getOwnPropertyNames(obj).forEach(p => props.add(p));\r\n return Array.from(props);\r\n }\r\n\r\n static equals(a: any, b: any): boolean {\r\n if (a === b) return true;\r\n if (a === null || b === null) return false;\r\n if (a !== a && b !== b) return true; // NaN === NaN\r\n const at = typeof a, bt = typeof b;\r\n let length: number, key: any, keySet: any;\r\n if (at == bt && at == \"object\") {\r\n if (Array.isArray(a)) {\r\n if (!Array.isArray(b)) return false;\r\n if ((length = a.length) == b.length) {\r\n for (key = 0; key < length; key++) {\r\n if (!ObjectUtils.equals(a[key], b[key])) return false;\r\n }\r\n return true;\r\n }\r\n } else {\r\n if (Array.isArray(b)) {\r\n return false;\r\n }\r\n keySet = Object.create(null);\r\n for (key in a) {\r\n if (a.hasOwnProperty(key)) {\r\n if (!ObjectUtils.equals(a[key], b[key])) {\r\n return false;\r\n }\r\n keySet[key] = true;\r\n }\r\n }\r\n for (key in b) {\r\n if (b.hasOwnProperty(key) && !(key in keySet) && typeof b[key] !== \"undefined\") {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static evaluate(expr: string, context: any = {}, res: any = {}): any {\r\n expr = Object.keys(context).reduce((res, key) => `var ${key} = this['${key}'];\\n${res}`, expr);\r\n const lines = expr.split(\"\\n\");\r\n const lastLine = \"return \" + lines.pop().replace(\"return \", \"\");\r\n lines.push(lastLine);\r\n expr = lines.join(\"\\n\");\r\n let result = null;\r\n try {\r\n result = new Function(expr).call(context);\r\n } catch (e) {\r\n res.exception = e;\r\n console.log(`Failed to parse expression: ${e.message}`, expr, context);\r\n }\r\n res.result = result;\r\n return result;\r\n }\r\n\r\n static empty(obj: any): boolean {\r\n return !obj || Object.keys(obj).length == 0;\r\n }\r\n\r\n static iterate(obj: any, cb: IterateCallback): void {\r\n if (!obj) return;\r\n const keys: any[] = Array.isArray(obj) ? Array.from(obj.keys()) : Object.keys(obj);\r\n keys.forEach(\r\n // @dynamic\r\n key => {\r\n cb(obj[key], key);\r\n }\r\n );\r\n }\r\n\r\n static getValue(obj: any, key: string, defaultValue?: any, treeFallback: boolean = false): any {\r\n key = key || \"\";\r\n const keys = key.split(\".\");\r\n let curKey = \"\";\r\n do {\r\n curKey += keys.shift();\r\n if (ObjectUtils.isDefined(obj) && ObjectUtils.isDefined(obj[curKey]) && (typeof obj[curKey] === \"object\" || !keys.length)) {\r\n obj = obj[curKey];\r\n curKey = \"\";\r\n } else if (!keys.length) {\r\n defaultValue = typeof defaultValue == \"undefined\" ? key.replace(new RegExp(`${curKey}$`), `{${curKey}}`) : defaultValue;\r\n obj = treeFallback ? obj || defaultValue : defaultValue;\r\n } else {\r\n curKey += \".\";\r\n }\r\n } while (keys.length);\r\n return obj;\r\n }\r\n\r\n static mapToPath(target: any, source: any, path: string[]): any {\r\n if (typeof source === \"undefined\") return target;\r\n if (path.length == 0) return source;\r\n const key: any = path.shift();\r\n if (key == \"*\") {\r\n if (ObjectUtils.isArray(source)) {\r\n target = ObjectUtils.isArray(target) ? target : [];\r\n return source.map((item, index) => {\r\n return ObjectUtils.mapToPath(target[index], item, Array.from(path));\r\n });\r\n }\r\n if (ObjectUtils.isObject(source)) {\r\n target = ObjectUtils.isObject(target) ? target : {};\r\n return Object.keys(source).reduce((result, key) => {\r\n result[key] = ObjectUtils.mapToPath(target[key], source[key], Array.from(path));\r\n return result;\r\n }, {});\r\n }\r\n return ObjectUtils.isNullOrUndefined(target) ? null : target;\r\n }\r\n const isArray = ObjectUtils.isArray(target);\r\n target = ObjectUtils.isObject(target) || isArray ? target : {};\r\n target[key] = ObjectUtils.mapToPath(target[key], source, Array.from(path));\r\n return isNaN(key) || isArray ? target : Object.values(target);\r\n }\r\n\r\n static filter(obj: any, predicate: FilterPredicate): any {\r\n return ObjectUtils.copyRecursive(null, obj, predicate);\r\n }\r\n\r\n static copy<T>(obj: T): T {\r\n return ObjectUtils.copyRecursive(null, obj);\r\n }\r\n\r\n static assign<T>(target: T, source: any, predicate?: FilterPredicate): T {\r\n return ObjectUtils.copyRecursive(target, source, predicate);\r\n }\r\n\r\n static getType(obj: any): string {\r\n const regex = new RegExp(\"\\\\s([a-zA-Z]+)\");\r\n return Object.prototype.toString.call(obj).match(regex)[1].toLowerCase();\r\n }\r\n\r\n static isPrimitive(value: any): boolean {\r\n const type = typeof value;\r\n return value == null || (type !== \"object\" && type !== \"function\");\r\n }\r\n\r\n static isObject(value: any): boolean {\r\n return ObjectUtils.getType(value) === \"object\";\r\n }\r\n\r\n static isDefined(value: any): boolean {\r\n return typeof value !== \"undefined\" && value !== null;\r\n }\r\n\r\n static isNullOrUndefined(value: any): boolean {\r\n return typeof value == \"undefined\" || value == null;\r\n }\r\n\r\n static isString(value: any): value is string {\r\n return typeof value === \"string\";\r\n }\r\n\r\n static isFunction(value: any): value is Function {\r\n return typeof value === \"function\";\r\n }\r\n\r\n static isDate(value: any): value is Date {\r\n return null !== value && !isNaN(value) && \"undefined\" !== typeof value.getDate;\r\n }\r\n\r\n static isBlob(value: any): value is Blob {\r\n return (hasBlob && value instanceof Blob) || (hasFile && value instanceof File);\r\n }\r\n\r\n static isBoolean(value: any): value is boolean {\r\n return typeof(value) == typeof(true);\r\n }\r\n\r\n static isNumber(value: any): value is number {\r\n if (typeof value !== \"number\") return false;\r\n const num = +value;\r\n if ((num - num) !== 0) {\r\n return false;\r\n }\r\n if (num === value) {\r\n return true;\r\n }\r\n }\r\n\r\n static isArray(value: any): value is Array<any> {\r\n return Array.isArray(value);\r\n }\r\n\r\n static isSet(value: any): value is Set<any> {\r\n return value instanceof Set;\r\n }\r\n\r\n static checkInterface(obj: any, interFaceObject: any): boolean {\r\n return ObjectUtils.isInterface(obj, interFaceObject);\r\n }\r\n\r\n static isInterface(obj: any, interFaceObject: any): boolean {\r\n if (!obj || typeof obj !== \"object\" || ObjectUtils.isArray(obj) || !ObjectUtils.isObject(interFaceObject)) return false;\r\n const keys = Object.keys(interFaceObject);\r\n for (const key of keys) {\r\n let type = interFaceObject[key] || \"\";\r\n if (type.startsWith(\"*\")) {\r\n type = type.substr(1);\r\n if (obj.hasOwnProperty(key) && ObjectUtils.getType(obj[key]) !== type) return false;\r\n } else if (!obj.hasOwnProperty(key) || ObjectUtils.getType(obj[key]) !== type) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n static pad(obj: any, width: number, chr: string = \"0\"): string {\r\n const str = ObjectUtils.isDefined(obj) ? obj.toString() : \"\";\r\n return str.length >= width ? str : new Array(width - str.length + 1).join(chr) + str;\r\n }\r\n\r\n private static copyRecursive(target: any, source: any, predicate?: FilterPredicate): any {\r\n predicate = predicate || defaultPredicate;\r\n if (ObjectUtils.isPrimitive(source) || ObjectUtils.isDate(source) || ObjectUtils.isBlob(source) || ObjectUtils.isFunction(source)) return source;\r\n if (ObjectUtils.isArray(source)) {\r\n target = ObjectUtils.isArray(target) ? Array.from(target) : [];\r\n source.forEach((item, index) => {\r\n if (!predicate(item, index, target, source)) return;\r\n if (target.length > index)\r\n target[index] = ObjectUtils.copyRecursive(target[index], item, predicate);\r\n else\r\n target.push(ObjectUtils.copyRecursive(null, item, predicate));\r\n });\r\n return target;\r\n }\r\n return Object.keys(source).reduce((result, key) => {\r\n if (!predicate(source[key], key, result, source)) return result;\r\n result[key] = ObjectUtils.copyRecursive(result[key], source[key], predicate);\r\n return result;\r\n }, Object.assign({}, target));\r\n }\r\n}\r\n","import {EventEmitter, InjectionToken, Injector, NgZone, Provider, TemplateRef, Type} from \"@angular/core\";\r\nimport {HttpClient, HttpErrorResponse, HttpHeaders} from \"@angular/common/http\";\r\nimport {ActivatedRouteSnapshot, Data, Route} from \"@angular/router\";\r\nimport {Request} from \"express\";\r\nimport {ReflectUtils} from \"./utils/reflect.utils\";\r\nimport {ObjectUtils} from \"./utils/object.utils\";\r\n\r\n// --- Utils\r\nexport interface IResolveFactory {\r\n func: Function;\r\n type?: any;\r\n params?: any[];\r\n}\r\n\r\nexport class CanvasColor {\r\n constructor(public r: number, public g: number, public b: number, public a: number = 255) {\r\n\r\n }\r\n}\r\n\r\n// --- Icon service ---\r\nexport interface IIconService {\r\n isDisabled: boolean;\r\n iconsLoaded: EventEmitter<any>;\r\n getIcon(icon: string, activeIcon: string, active: boolean): Promise<string>;\r\n}\r\n\r\nexport const ICON_SERVICE: InjectionToken<IIconService> = new InjectionToken<IIconService>(\"icon-service\");\r\n\r\n// --- Language service ---\r\nexport interface ITranslation {\r\n lang: string;\r\n translation: string;\r\n}\r\n\r\nexport interface ITranslations {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface ILanguageSettings {\r\n languages: string[];\r\n devLanguages: string[];\r\n defaultLanguage: string;\r\n settings?: any;\r\n}\r\n\r\nexport interface ILanguageService {\r\n currentLanguage: string;\r\n editLanguage: string;\r\n disableTranslations: boolean;\r\n defaultLanguage: string;\r\n dictionary: ITranslations;\r\n readonly languages: ReadonlyArray<string>;\r\n readonly httpClient: HttpClient;\r\n replaceLanguages(languages: string[]): void;\r\n addLanguages(languages: string[]): void;\r\n getTranslationSync(key: string, params?: any): string;\r\n getTranslation(key: string, params?: any): Promise<string>;\r\n getTranslations(...keys: string[]): Promise<ITranslations>;\r\n getTranslationFromObject(translations: ITranslations, params?: any, lang?: string): string;\r\n getTranslationFromArray(translations: ITranslation[], params?: any, lang?: string): string;\r\n}\r\n\r\nexport const LANGUAGE_SERVICE: InjectionToken<ILanguageService> = new InjectionToken<ILanguageService>(\"language-service\");\r\n\r\n// --- Auth Service ---\r\nexport interface IAuthService {\r\n isAuthenticated: boolean;\r\n userChanged: EventEmitter<any>;\r\n checkAuthenticated(): Promise<boolean>;\r\n}\r\n\r\nexport type RouteValidator = (auth: IAuthService, route?: IRoute, next?: ActivatedRouteSnapshot) => Promise<boolean>;\r\n\r\nexport interface IRouteData extends Data {\r\n returnState?: string[];\r\n guards?: Array<IResolveFactory | RouteValidator>;\r\n}\r\n\r\nexport interface IRoute extends Route {\r\n data?: IRouteData;\r\n}\r\n\r\nexport const AUTH_SERVICE: InjectionToken<IAuthService> = new InjectionToken<IAuthService>(\"auth-service\");\r\n\r\n// --- Acl Service ---\r\nexport interface IAclComponent {\r\n onUserInitialized(): void;\r\n onUserChanged(): void;\r\n}\r\n\r\nexport interface IRouteStateInfo {\r\n route: IRoute;\r\n guard: any;\r\n dirty: boolean;\r\n first: boolean;\r\n component?: any;\r\n}\r\n\r\n// --- Storage Service ---\r\nexport enum StorageMode {\r\n Local,\r\n Session\r\n}\r\n\r\n// --- Toaster Service ---\r\nexport interface IToasterService {\r\n error(message: string, params?: any, title?: string): void;\r\n info(message: string, params?: any, title?: string): void;\r\n success(message: string, params?: any, title?: string): void;\r\n warning(message: string, params?: any, title?: string): void;\r\n}\r\n\r\nexport const TOASTER_SERVICE: InjectionToken<IToasterService> = new InjectionToken<IToasterService>(\"toaster-service\");\r\n\r\n// --- Promise Service ---\r\n\r\nexport interface IPromiseService {\r\n zone: NgZone;\r\n count: number;\r\n onChanged: EventEmitter<number>;\r\n create<T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void): Promise<T>;\r\n all(promises: Promise<any>[]): Promise<any>;\r\n resolve<T>(value: T | PromiseLike<T>): Promise<T>;\r\n reject<T>(value: T | PromiseLike<T>): Promise<T>;\r\n}\r\n\r\nexport const PROMISE_SERVICE = new InjectionToken<IPromiseService>(\"promise-service\");\r\n\r\n// --- Async method ---\r\nexport interface IAsyncMessage {\r\n message: string;\r\n context?: any;\r\n}\r\n\r\nexport type AsyncMethod = (context?: any) => Promise<IAsyncMessage>;\r\n\r\n// --- Unordered list ---\r\nexport abstract class UnorederedListTemplate extends TemplateRef<any> {\r\n abstract type: string;\r\n abstract selector: string;\r\n}\r\n\r\nexport interface UnorderedListTemplates {\r\n [type: string]: TemplateRef<any>;\r\n}\r\n\r\nexport type UnorderedListStyle = \"table\" | \"list\";\r\n\r\n// --- Ajax request ---\r\nexport interface IAjaxRequestDetails {\r\n request: XMLHttpRequest,\r\n method: string;\r\n url: string;\r\n}\r\n\r\nexport type AjaxRequestCallback = (details: IAjaxRequestDetails, params: any) => void;\r\n\r\n// --- Loader utils ---\r\nexport interface IScriptPromises {\r\n [src: string]: Promise<HTMLScriptElement>;\r\n}\r\nexport interface IStylePromises {\r\n [src: string]: Promise<HTMLLinkElement>;\r\n}\r\n\r\n// --- Observable utils ---\r\nexport interface ISearchObservable {\r\n search: string;\r\n getSearchResults(token: string): Promise<any[]>;\r\n}\r\n\r\n// --- Reflect utils ---\r\nexport function FactoryDependencies(...dependencies: Array<InjectionToken<any> | Provider>): MethodDecorator {\r\n return function (target: any, method: string): void {\r\n ReflectUtils.defineMetadata(\"factoryDependencies\", dependencies, target, method);\r\n };\r\n}\r\n\r\n// --- Timer utils ---\r\nexport interface ITimer {\r\n id?: any;\r\n func?: Function;\r\n time?: number;\r\n run?: () => void;\r\n set?: (func: Function, time: number) => void;\r\n clear?: () => void;\r\n}\r\n\r\n// --- ExtraItemProperties ---\r\nexport interface IExtraProperties {\r\n [prop: string]: any;\r\n}\r\n\r\n// --- Group by ---\r\nexport interface IGroupMap {\r\n [column: string]: any;\r\n}\r\n\r\n// --- Translate ---\r\nexport type TranslationQuery = string | ITranslations | ITranslation[];\r\n\r\n// --- Pagination ---\r\nexport interface IPageInfo {\r\n text: string;\r\n number: number;\r\n active: boolean;\r\n}\r\n\r\nexport interface IPaginationData {\r\n total: number;\r\n items: any[];\r\n meta?: any;\r\n}\r\n\r\nexport type PaginationDataLoader = (page: number, itemsPerPage: number) => Promise<IPaginationData>;\r\n\r\nexport class PaginationItemContext {\r\n\r\n constructor(public item: any, public parallelItem: any, public count: number, public index: number, public dataIndex: number) {\r\n }\r\n\r\n get first(): boolean {\r\n return this.index === 0;\r\n }\r\n\r\n get last(): boolean {\r\n return this.index === this.count - 1;\r\n }\r\n\r\n get even(): boolean {\r\n return this.index % 2 === 0;\r\n }\r\n\r\n get odd(): boolean {\r\n return !this.even;\r\n }\r\n\r\n // Support for old dynamic table implementation\r\n get row(): any {\r\n console.log(\"DynamicTable row is deprecated use item instead\");\r\n return this.item;\r\n }\r\n\r\n // Support for old dynamic table implementation\r\n get parallelRow(): any {\r\n console.log(\"DynamicTable parallelRow is deprecated use parallelItem instead\");\r\n return this.parallelItem;\r\n }\r\n\r\n filter(filterRx: RegExp): boolean {\r\n const keys = Object.keys(this.item);\r\n for (const key of keys) {\r\n const value = this.item[key];\r\n if (ObjectUtils.isNullOrUndefined(value) || ObjectUtils.isObject(value)) continue;\r\n const testValue = ObjectUtils.isString(value) ? value : value.toString();\r\n if (testValue.match(filterRx)) return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n// --- Http service ---\r\nexport interface IHttpHeaders {\r\n [header: string]: string | string[];\r\n}\r\n\r\nexport interface IHttpParams {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IRequestOptions {\r\n method?: string;\r\n body?: any;\r\n headers?: IHttpHeaders | HttpHeaders;\r\n originalHeaders?: IHttpHeaders;\r\n params?: IHttpParams;\r\n observe?: \"body\";\r\n reportProgress?: boolean;\r\n responseType?: \"arraybuffer\" | \"blob\" | \"json\" | \"text\";\r\n withCredentials?: boolean;\r\n timeout?: number;\r\n}\r\n\r\nexport interface IIssueContext {\r\n url: string;\r\n}\r\n\r\nexport interface IProgress {\r\n percentage?: number;\r\n loaded?: number;\r\n total?: number;\r\n}\r\n\r\nexport type ProgressListener = (progress: IProgress) => void;\r\n\r\nexport type PromiseExecutor = (resolve: (value?: any | PromiseLike<any>) => void, reject: (reason?: any) => void) => void;\r\n\r\nexport class HttpPromise extends Promise<any> {\r\n\r\n protected rejectHandler: (reason?: HttpErrorResponse) => void;\r\n protected hasRejectHandler: boolean;\r\n protected attachCount: number;\r\n protected runCount: number;\r\n\r\n constructor(rejectHandler: (reason?: HttpErrorResponse) => void, executor: PromiseExecutor) {\r\n super(executor);\r\n this.rejectHandler = rejectHandler;\r\n this.attachCount = 0;\r\n this.runCount = 0;\r\n }\r\n\r\n then<TResult1, TResult2>(onFulfilled?: ((value: any) => (PromiseLike<TResult1> | TResult1)) | null | undefined,\r\n onRejected?: ((reason: HttpErrorResponse) => (PromiseLike<TResult2> | TResult2)) | null | undefined): Promise<TResult1 | TResult2> {\r\n this.attachCount++;\r\n return super.then(value => {\r\n this.runCount++;\r\n return onFulfilled ? onFulfilled(value) : null;\r\n }, (reason: HttpErrorResponse) => {\r\n const result: any = onRejected ? onRejected(reason) : null;\r\n this.hasRejectHandler = this.hasRejectHandler || (onRejected && result !== false);\r\n this.runCount++;\r\n this.rejectHandler(this.runCount == this.attachCount && !this.hasRejectHandler ? reason : null);\r\n return result;\r\n });\r\n }\r\n\r\n catch<TResult = never>(onRejected?: ((reason: HttpErrorResponse) => (PromiseLike<TResult> | TResult)) | null | undefined): Promise<any | TResult> {\r\n return this.then(null, onRejected);\r\n }\r\n}\r\n\r\nexport interface IHttpService {\r\n language: ILanguageService;\r\n url(url: string): string;\r\n makeListParams(page: number, itemsPerPage: number, orderBy?: string, orderDescending?: boolean, filter?: string): IHttpParams;\r\n}\r\n\r\nexport const EXPRESS_REQUEST = new InjectionToken<Request>(\"express-request\");\r\n\r\n// --- Api service ---\r\n\r\nexport interface IApiService extends IHttpService {\r\n cache: any;\r\n client: HttpClient;\r\n get(url: string, options?: IRequestOptions): Promise<any>;\r\n delete(url: string, options?: IRequestOptions): Promise<any>;\r\n post(url: string, body?: any, options?: IRequestOptions): Promise<any>;\r\n put(url: string, body?: any, options?: IRequestOptions): Promise<any>;\r\n patch(url: string, body?: any, options?: IRequestOptions): Promise<any>;\r\n upload(url: string, body: any, listener?: ProgressListener, options?: IRequestOptions): Promise<any>;\r\n list(url: string, params: IHttpParams): Promise<IPaginationData>;\r\n}\r\n\r\nexport const API_SERVICE: InjectionToken<IApiService> = new InjectionToken<IApiService>(\"api-service\");\r\n\r\n// --- OpenApi service ---\r\nexport interface IOpenApiSchemaProperty {\r\n id: string;\r\n type?: string;\r\n format?: string;\r\n column?: boolean;\r\n additionalProperties?: any;\r\n $ref?: string;\r\n items?: IOpenApiSchemaProperty;\r\n enum?: string[];\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IOpenApiSchema {\r\n properties: {\r\n [name: string]: IOpenApiSchemaProperty;\r\n };\r\n required: string[];\r\n}\r\n\r\nexport interface IOpenApiSchemas {\r\n [name: string]: IOpenApiSchema;\r\n}\r\n\r\n// --- Dynamic table ---\r\nexport interface ITableColumns {\r\n [column: string]: string;\r\n}\r\n\r\nexport interface ITableTemplate {\r\n column: string | string[];\r\n pure: boolean;\r\n ref: TemplateRef<any>;\r\n}\r\n\r\nexport interface ITableTemplates {\r\n [column: string]: ITableTemplate;\r\n}\r\n\r\nexport type TableDataLoader = (page: number, rowsPerPage: number, orderBy: string, orderDescending: boolean, filter: string) => Promise<IPaginationData>;\r\n\r\n// --- Resource if ---\r\nexport class ResourceIfContext {\r\n resource: string;\r\n url: string;\r\n}\r\n\r\n// --- ConfigService ---\r\nexport class IConfiguration {\r\n baseUrl?: string;\r\n baseDomain?: string;\r\n translationUrl?: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IConfigService {\r\n config: IConfiguration;\r\n readonly load: () => Promise<IConfiguration>;\r\n prepareUrl(url: string, ending: string): string;\r\n getConfigValue(key: string): any;\r\n getQueryParameter(name: string, url?: string): string;\r\n}\r\n\r\nexport const CONFIG_SERVICE = new InjectionToken<IConfigService>(\"config-service\");\r\n\r\nexport const BASE_CONFIG = new InjectionToken<IConfiguration>(\"base-config\");\r\n\r\nexport const SCRIPT_PARAMS = new InjectionToken<any>(\"script-params\");\r\n\r\nexport const ROOT_ELEMENT: InjectionToken<HTMLElement> = new InjectionToken<HTMLElement>(\"app-root-element\");\r\n\r\n// --- Error handler service ---\r\nexport type ErrorHandlerCallback = (error: string) => any;\r\n\r\nexport const ERROR_HANDLER = new InjectionToken<ErrorHandlerCallback>(\"error-handler-callback\");\r\n\r\n// --- Module ---\r\nexport type AppInitializerFunc = () => Promise<void> | void;\r\n\r\nexport interface IModuleConfig {\r\n apiService?: Type<IApiService>\r\n authService?: Type<IAuthService>;\r\n iconService?: Type<IIconService>;\r\n languageService?: Type<ILanguageService>;\r\n toasterService?: Type<IToasterService>;\r\n promiseService?: Type<IPromiseService>;\r\n configService?: Type<IConfigService>;\r\n initializeApp?: (injector: Injector) => AppInitializerFunc;\r\n}\r\n\r\n// --- Valued promise ---\r\nexport class ValuedPromise<T> extends Promise<T> {\r\n value: T;\r\n}\r\n","import \"reflect-metadata\";\r\nimport {Injector, TypeProvider} from \"@angular/core\";\r\nimport {IResolveFactory} from \"../common-types\";\r\nimport {ObjectUtils} from \"./object.utils\";\r\n\r\nexport class ReflectUtils {\r\n\r\n static defineMetadata(key: string, data: any, target: any, name?: string): void {\r\n Reflect.defineMetadata(key, data, target, name);\r\n }\r\n\r\n static getMetadata(key: string, target: any, name?: string): any {\r\n return Reflect.getMetadata(key, target, name);\r\n }\r\n\r\n static getOwnMetadata(key: string, target: any, name?: string): any {\r\n return Reflect.getOwnMetadata(key, target, name);\r\n }\r\n\r\n static resolve<T>(obj: IResolveFactory | T, injector: Injector): T {\r\n if (!ObjectUtils.checkInterface(obj, {func: \"function\"})) return <T>obj;\r\n const factory = <IResolveFactory>obj;\r\n let depends: TypeProvider[] = [];\r\n if (factory.type) {\r\n const method = ObjectUtils.getProperties(factory.type).find(function (key) {\r\n return factory.type[key] === factory.func;\r\n });\r\n depends = ReflectUtils.getMetadata(\"factoryDependencies\", factory.type, method) || [];\r\n } else {\r\n depends = ReflectUtils.getMetadata(\"factoryDependencies\", factory.func) || [];\r\n }\r\n const parameters = depends.map(function (dep) {\r\n return injector.get(dep);\r\n }).concat(factory.params);\r\n return factory.func.apply(null, parameters);\r\n }\r\n}\r\n","import {AjaxRequestCallback, IAjaxRequestDetails} from \"../common-types\";\r\n\r\nexport class AjaxRequestHandler {\r\n\r\n private static isOverridden: boolean = false;\r\n\r\n public params: any;\r\n\r\n constructor(private pattern: RegExp, private callback: AjaxRequestCallback) {\r\n this.params = {};\r\n if (typeof XMLHttpRequest !== \"undefined\" && !AjaxRequestHandler.isOverridden) {\r\n AjaxRequestHandler.isOverridden = true;\r\n const originalOpen = XMLHttpRequest.prototype.open;\r\n XMLHttpRequest.prototype.open = function (method: string, url?: string, async?: boolean, user?: string, password?: string): void {\r\n originalOpen.apply(this, arguments);\r\n window.dispatchEvent(new CustomEvent(\"ajaxRequest\", {\r\n detail: {\r\n request: this,\r\n method: method,\r\n url: url\r\n }\r\n }))\r\n };\r\n }\r\n }\r\n\r\n listen(): AjaxRequestHandler {\r\n if (typeof window === \"undefined\") return this;\r\n window.addEventListener(\"ajaxRequest\", this.listener);\r\n return this;\r\n }\r\n\r\n forget(): AjaxRequestHandler {\r\n if (typeof window === \"undefined\") return;\r\n window.removeEventListener(\"ajaxRequest\", this.listener);\r\n return this;\r\n }\r\n\r\n private listener = (event: CustomEvent): void => {\r\n const details: IAjaxRequestDetails = event.detail;\r\n if (this.pattern.test(details.url)) this.callback(details, this.params);\r\n };\r\n}\r\n","import {DurationInputArg1, DurationInputArg2, utc} from \"moment\";\r\n\r\nexport class DateUtils {\r\n\r\n static isHoliday(date: Date): boolean {\r\n return utc(date).isoWeekday() > 5;\r\n }\r\n\r\n static isBusinessDay(date: Date): boolean {\r\n return utc(date).isoWeekday() < 6;\r\n }\r\n\r\n static add(date: Date, amount?: DurationInputArg1, unit?: DurationInputArg2): Date {\r\n return utc(date).add(amount, unit).toDate();\r\n }\r\n\r\n static businessAdd(date: Date, amount: number, unit?: DurationInputArg2): Date {\r\n const signal = amount < 0 ? -1 : 1;\r\n let remaining = Math.abs(amount);\r\n let day = date;\r\n while (remaining) {\r\n day = DateUtils.add(day, signal, unit);\r\n if (DateUtils.isBusinessDay(day)) {\r\n remaining--;\r\n }\r\n }\r\n return day;\r\n }\r\n\r\n static businessSubtract(date: Date, amount: number, unit?: DurationInputArg2): Date {\r\n return DateUtils.businessAdd(date, -amount, unit);\r\n }\r\n}\r\n","import {CanvasColor} from \"../common-types\";\r\nimport {ObjectUtils} from \"./object.utils\";\r\n\r\ndeclare const netscape: any;\r\n\r\nclass BlurStack {\r\n r: number = 0;\r\n g: number = 0;\r\n b: number = 0;\r\n a: number = 0;\r\n next: BlurStack = null;\r\n}\r\n\r\nconst mul_table = [\r\n 512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512,\r\n 454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512,\r\n 482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456,\r\n 437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512,\r\n 497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328,\r\n 320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456,\r\n 446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335,\r\n 329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512,\r\n 505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405,\r\n 399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328,\r\n 324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271,\r\n 268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456,\r\n 451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388,\r\n 385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335,\r\n 332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292,\r\n 289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259];\r\n\r\nconst shg_table = [\r\n 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17,\r\n 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19,\r\n 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20,\r\n 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,\r\n 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\r\n 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22,\r\n 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\r\n 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23,\r\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\r\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\r\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\r\n 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\r\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\r\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\r\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\r\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24];\r\n\r\nexport class CanvasUtils {\r\n\r\n static manipulatePixels(canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D, colorTransformer: (color: CanvasColor, greyscale?: number) => CanvasColor): void {\r\n const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imgData.data;\r\n for (let i = 0, n = pixels.length; i < n; i += 4) {\r\n const clr = new CanvasColor(pixels[i], pixels[i + 1], pixels[i + 2], pixels[i + 3]);\r\n const greyscale = clr.r * .3 + clr.g * .59 + clr.b * .11;\r\n const color = colorTransformer(clr, greyscale);\r\n pixels[i] = color.r;\r\n pixels[i + 1] = color.g;\r\n pixels[i + 2] = color.b;\r\n pixels[i + 3] = color.a;\r\n }\r\n ctx.putImageData(imgData, 0, 0);\r\n }\r\n\r\n static thresholding(canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D, threshold: number = 50, colorTransformer: (color: CanvasColor, limit: boolean, greyscale?: number) => CanvasColor): void {\r\n const min = new CanvasColor(0, 0, 0, 255);\r\n const max = new CanvasColor(0, 0, 0, 0);\r\n colorTransformer = ObjectUtils.isFunction(colorTransformer) ? colorTransformer : ((color: CanvasColor, limit: boolean): CanvasColor => {\r\n return limit ? max : min;\r\n });\r\n CanvasUtils.manipulatePixels(canvas, ctx, (color, greyscale) => {\r\n return colorTransformer(color, greyscale > threshold, greyscale);\r\n });\r\n }\r\n\r\n static stackBlur(canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D, radius: number = 10): void {\r\n if (isNaN(radius) || radius < 1) return;\r\n radius |= 0;\r\n\r\n const top_x = 0;\r\n const top_y = 0;\r\n const width = canvas.width;\r\n const height = canvas.height;\r\n\r\n let imageData = null;\r\n\r\n try {\r\n try {\r\n imageData = ctx.getImageData(top_x, top_y, width, height);\r\n } catch (e) {\r\n\r\n // NOTE: this part is supposedly only needed if you want to work with local files\r\n // so it might be okay to remove the whole try/catch block and just use\r\n // imageData = ctx.getImageData( top_x, top_y, width, height );\r\n try {\r\n netscape.security.PrivilegeManager.enablePrivilege(\"UniversalBrowserRead\");\r\n imageData = ctx.getImageData(top_x, top_y, width, height);\r\n } catch (e) {\r\n alert(\"Cannot access local image\");\r\n throw new Error(\"unable to access local image data: \" + e);\r\n }\r\n }\r\n } catch (e) {\r\n alert(\"Cannot access image\");\r\n throw new Error(\"unable to access image data: \" + e);\r\n }\r\n\r\n const pixels = imageData.data;\r\n\r\n let x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum,\r\n r_out_sum, g_out_sum, b_out_sum, a_out_sum,\r\n r_in_sum, g_in_sum, b_in_sum, a_in_sum,\r\n pr, pg, pb, pa, rbs;\r\n\r\n const div = radius + radius + 1;\r\n const widthMinus1 = width - 1;\r\n const heightMinus1 = height - 1;\r\n const radiusPlus1 = radius + 1;\r\n const sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\r\n\r\n const stackStart = new BlurStack();\r\n let stackEnd = null;\r\n let stack = stackStart;\r\n\r\n for (i = 1; i < div; i++) {\r\n stack = stack.next = new BlurStack();\r\n if (i == radiusPlus1) {\r\n stackEnd = stack;\r\n }\r\n }\r\n stack.next = stackStart;\r\n let stackIn = null;\r\n let stackOut = null;\r\n\r\n yw = yi = 0;\r\n\r\n const mul_sum = mul_table[radius];\r\n const shg_sum = shg_table[radius];\r\n\r\n for (y = 0; y < height; y++) {\r\n r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0;\r\n\r\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\r\n g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);\r\n b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);\r\n a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]);\r\n\r\n r_sum += sumFactor * pr;\r\n g_sum += sumFactor * pg;\r\n b_sum += sumFactor * pb;\r\n a_sum += sumFactor * pa;\r\n\r\n stack = stackStart;\r\n\r\n for (i = 0; i < radiusPlus1; i++) {\r\n stack.r = pr;\r\n stack.g = pg;\r\n stack.b = pb;\r\n stack.a = pa;\r\n stack = stack.next;\r\n }\r\n\r\n for (i = 1; i < radiusPlus1; i++) {\r\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\r\n r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);\r\n g_sum += (stack.g = (pg = pixels[p + 1])) * rbs;\r\n b_sum += (stack.b = (pb = pixels[p + 2])) * rbs;\r\n a_sum += (stack.a = (pa = pixels[p + 3])) * rbs;\r\n\r\n r_in_sum += pr;\r\n g_in_sum += pg;\r\n b_in_sum += pb;\r\n a_in_sum += pa;\r\n\r\n stack = stack.next;\r\n }\r\n\r\n\r\n stackIn = stackStart;\r\n stackOut = stackEnd;\r\n for (x = 0; x < width; x++) {\r\n pixels[yi + 3] = pa = (a_sum * mul_sum) >> shg_sum;\r\n if (pa != 0) {\r\n pa = 255 / pa;\r\n pixels[yi] = ((r_sum * mul_sum) >> shg_sum) * pa;\r\n pixels[yi + 1] = ((g_sum * mul_sum) >> shg_sum) * pa;\r\n pixels[yi + 2] = ((b_sum * mul_sum) >> shg_sum) * pa;\r\n } else {\r\n pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;\r\n }\r\n\r\n r_sum -= r_out_sum;\r\n g_sum -= g_out_sum;\r\n b_sum -= b_out_sum;\r\n a_sum -= a_out_sum;\r\n\r\n r_out_sum -= stackIn.r;\r\n g_out_sum -= stackIn.g;\r\n b_out_sum -= stackIn.b;\r\n a_out_sum -= stackIn.a;\r\n\r\n p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;\r\n\r\n r_in_sum += (stackIn.r = pixels[p]);\r\n g_in_sum += (stackIn.g = pixels[p + 1]);\r\n b_in_sum += (stackIn.b = pixels[p + 2]);\r\n a_in_sum += (stackIn.a = pixels[p + 3]);\r\n\r\n r_sum += r_in_sum;\r\n g_sum += g_in_sum;\r\n b_sum += b_in_sum;\r\n a_sum += a_in_sum;\r\n\r\n stackIn = stackIn.next;\r\n\r\n r_out_sum += (pr = stackOut.r);\r\n g_out_sum += (pg = stackOut.g);\r\n b_out_sum += (pb = stackOut.b);\r\n a_out_sum += (pa = stackOut.a);\r\n\r\n r_in_sum -= pr;\r\n g_in_sum -= pg;\r\n b_in_sum -= pb;\r\n a_in_sum -= pa;\r\n\r\n stackOut = stackOut.next;\r\n\r\n yi += 4;\r\n }\r\n yw += width;\r\n }\r\n\r\n\r\n for (x = 0; x < width; x++) {\r\n g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0;\r\n\r\n yi = x << 2;\r\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\r\n g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);\r\n b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);\r\n a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]);\r\n\r\n r_sum += sumFactor * pr;\r\n g_sum += sumFactor * pg;\r\n b_sum += sumFactor * pb;\r\n a_sum += sumFactor * pa;\r\n\r\n stack = stackStart;\r\n\r\n for (i = 0; i < radiusPlus1; i++) {\r\n stack.r = pr;\r\n stack.g = pg;\r\n stack.b = pb;\r\n stack.a = pa;\r\n stack = stack.next;\r\n }\r\n\r\n yp = width;\r\n\r\n for (i = 1; i <= radius; i++) {\r\n yi = (yp + x) << 2;\r\n\r\n r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);\r\n g_sum += (stack.g = (pg = pixels[yi + 1])) * rbs;\r\n b_sum += (stack.b = (pb = pixels[yi + 2])) * rbs;\r\n a_sum += (stack.a = (pa = pixels[yi + 3])) * rbs;\r\n\r\n r_in_sum += pr;\r\n g_in_sum += pg;\r\n b_in_sum += pb;\r\n a_in_sum += pa;\r\n\r\n stack = stack.next;\r\n\r\n if (i < heightMinus1) {\r\n yp += width;\r\n }\r\n }\r\n\r\n yi = x;\r\n stackIn = stackStart;\r\n stackOut = stackEnd;\r\n for (y = 0; y < height; y++) {\r\n p = yi << 2;\r\n pixels[p + 3] = pa = (a_sum * mul_sum) >> shg_sum;\r\n if (pa > 0) {\r\n pa = 255 / pa;\r\n pixels[p] = ((r_sum * mul_sum) >> shg_sum) * pa;\r\n pixels[p + 1] = ((g_sum * mul_sum) >> shg_sum) * pa;\r\n pixels[p + 2] = ((b_sum * mul_sum) >> shg_sum) * pa;\r\n } else {\r\n pixels[p] = pixels[p + 1] = pixels[p + 2] = 0;\r\n }\r\n\r\n r_sum -= r_out_sum;\r\n g_sum -= g_out_sum;\r\n b_sum -= b_out_sum;\r\n a_sum -= a_out_sum;\r\n\r\n r_out_sum -= stackIn.r;\r\n g_out_sum -= stackIn.g;\r\n b_out_sum -= stackIn.b;\r\n a_out_sum -= stackIn.a;\r\n\r\n p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;\r\n\r\n r_sum += (r_in_sum += (stackIn.r = pixels[p]));\r\n g_sum += (g_in_sum += (stackIn.g = pixels[p + 1]));\r\n b_sum += (b_in_sum += (stackIn.b = pixels[p + 2]));\r\n a_sum += (a_in_sum += (stackIn.a = pixels[p + 3]));\r\n\r\n stackIn = stackIn.next;\r\n\r\n r_out_sum += (pr = stackOut.r);\r\n g_out_sum += (pg = stackOut.g);\r\n b_out_sum += (pb = stackOut.b);\r\n a_out_sum += (pa = stackOut.a);\r\n\r\n r_in_sum -= pr;\r\n g_in_sum -= pg;\r\n b_in_sum -= pb;\r\n a_in_sum -= pa;\r\n\r\n stackOut = stackOut.next;\r\n\r\n yi += width;\r\n }\r\n }\r\n\r\n ctx.putImageData(imageData, top_x, top_y);\r\n }\r\n\r\n static measureTextFontSize(maxWidth: number, maxHeight: number, lines: string[], font: string, lineHeightPercent: number = 1.1, canvas?: HTMLCanvasElement): number {\r\n\r\n const startSize: number = maxHeight;\r\n const context: CanvasRenderingContext2D = canvas.getContext(\"2d\");\r\n\r\n if (!canvas) {\r\n canvas = <HTMLCanvasElement>document.createElement(\"canvas\");\r\n document.body.appendChild(canvas);\r\n }\r\n\r\n canvas.width = maxWidth + maxHeight;\r\n canvas.height = maxHeight * 2;\r\n\r\n let fontSize: number = CanvasUtils.halveValidateFontSize(startSize, (size: number) => {\r\n CanvasUtils.setFontProps(context, font, size);\r\n const maxTextLinesWidth = CanvasUtils.getTextWidth(context, lines);\r\n return maxWidth - maxTextLinesWidth;\r\n });\r\n\r\n const bitmapHeight: number = CanvasUtils.getTextBitmapHeight(canvas, context, lines, font, fontSize, lineHeightPercent);\r\n if (bitmapHeight > maxHeight) {\r\n fontSize = CanvasUtils.halveValidateFontSize(fontSize, (size: number) => {\r\n return maxHeight - CanvasUtils.getTextBitmapHeight(canvas, context, lines, font, size, lineHeightPercent);\r\n });\r\n }\r\n\r\n return fontSize;\r\n }\r\n\r\n static drawLines(context: CanvasRenderingContext2D, lines: string[], font: string, size: number, lineHeightPercent: number = 1.1, align: string = \"left\", baseLine: string = \"top\", x: number = 0, y: number = 0): number {\r\n CanvasUtils.setFontProps(context, font, size, align, baseLine);\r\n for (let i: number = 0; i < lines.length; i++) {\r\n const line: string = lines[i];\r\n context.fillText(line, x, y);\r\n if (i < lines.length - 1) {\r\n y += size * lineHeightPercent;\r\n }\r\n }\r\n return y;\r\n }\r\n\r\n static wrapText(context: CanvasRenderingContext2D, text: string, x: number, y: number, maxWidth: number): void {\r\n const words = text.split(\" \");\r\n const lineHeight = context.measureText(\"M\").width * 1.3;\r\n const lines: string[] = [];\r\n let line = \"\";\r\n for (let n = 0; n < words.length; n++) {\r\n const testLine = line + words[n] + \" \";\r\n const metrics = context.measureText(testLine);\r\n const testWidth = metrics.width;\r\n if (testWidth > maxWidth && n > 0) {\r\n lines.push(line);\r\n line = words[n] + \" \";\r\n }\r\n else {\r\n line = testLine;\r\n }\r\n }\r\n lines.push(line);\r\n y -= lineHeight * .5 * lines.length;\r\n lines.forEach(l => {\r\n context.fillText(l, x, y);\r\n y += lineHeight;\r\n });\r\n }\r\n\r\n static setFontProps(context: CanvasRenderingContext2D, font: string, fontSize: number, align: string = \"left\", baseLine: string = \"top\"): void {\r\n context.font = `${fontSize}px ${font}`;\r\n context.textAlign = <any>align;\r\n context.textBaseline = <any>baseLine;\r\n }\r\n\r\n private static getTextWidth(context: CanvasRenderingContext2D, lines: string[]): number {\r\n let maxWidth: number = 0;\r\n for (let i: number = 0; i < lines.length; i++) {\r\n const line: string = lines[i];\r\n maxWidth = Math.max(maxWidth, context.measureText(line).width);\r\n }\r\n return maxWidth;\r\n }\r\n\r\n private static getTextBitmapHeight(canvas: HTMLCanvasElement, context: CanvasRenderingContext2D, lines: string[], font: string, fontSize: number, lineHeightPercent: number): number {\r\n const width: number = canvas.width;\r\n const height: number = canvas.height;\r\n context.clearRect(0, 0, width, height);\r\n\r\n const textY = CanvasUtils.drawLines(context, lines, font, fontSize, lineHeightPercent, \"left\", \"top\", fontSize * .5, fontSize * .5);\r\n const imageData: ImageData = context.getImageData(0, 0, width, height);\r\n\r\n let textHeight: number = 0;\r\n\r\n yLoop:for (let y: number = 0; y < height; y++) {\r\n for (let x: number = 0; x < width; x++) {\r\n const index: number = (x + y * width) * 4;\r\n if (imageData.data[index + 3] > 0) {\r\n textHeight = y + 1;\r\n continue yLoop;\r\n }\r\n }\r\n }\r\n\r\n return Math.max(textHeight, textY + fontSize);\r\n }\r\n\r\n private static halveValidateFontSize(startSize: number, callback: (size: number) => number): number {\r\n let fontSize: number = startSize;\r\n let lastFontSize: number = 0;\r\n let direction: number;\r\n\r\n for (let i: number = 0; i < 20; i++) {\r\n direction = callback(fontSize);\r\n const tempSize: number = fontSize;\r\n if (direction < 0) {\r\n fontSize = fontSize - (Math.abs(fontSize - lastFontSize) / 2);\r\n } else {\r\n fontSize = fontSize + (Math.abs(fontSize - lastFontSize) / 2);\r\n }\r\n lastFontSize = tempSize;\r\n if (Math.abs(fontSize - lastFontSize) < 0.1) {\r\n break;\r\n }\r\n }\r\n fontSize = Math.floor(fontSize);\r\n return fontSize;\r\n }\r\n}\r\n","import {HttpClient} from \"@angular/common/http\";\r\nimport {first} from \"rxjs/operators\";\r\nimport {ObjectUtils} from \"./object.utils\";\r\n\r\ndeclare const saveAs: any;\r\n\r\nexport class FileUtils {\r\n\r\n static getExtension(file: File): string {\r\n return file ? file.name.substr(file.name.lastIndexOf(\".\")).toLowerCase() : null;\r\n }\r\n\r\n static getName(file: File): string {\r\n return file ? file.name.substr(0, file.name.lastIndexOf(\".\")) : null;\r\n }\r\n\r\n static toFile(blob: Blob, fileName: string): File {\r\n const data: any = blob;\r\n data.lastModifiedDate = new Date();\r\n data.name = fileName.split(/\\\\|\\//g).pop();\r\n return <File>data;\r\n }\r\n\r\n static dataToBlob(data: string): Blob {\r\n const parts = data.split(\",\");\r\n const byteString = atob(parts[1]);\r\n const mimeString = parts[0].split(\":\")[1].split(\";\")[0];\r\n\r\n const ab = new ArrayBuffer(byteString.length);\r\n const ia = new Uint8Array(ab);\r\n for (let i = 0; i < byteString.length; i++) {\r\n ia[i] = byteString.charCodeAt(i);\r\n }\r\n\r\n return new Blob([ab], {type: mimeString});\r\n }\r\n\r\n static saveBlob(blob: Blob, fileName: string): void {\r\n if (typeof saveAs == \"undefined\") {\r\n throw Error(\"FileSaver library is not loaded. Please load it: https://www.npmjs.com/package/file-saver\");\r\n }\r\n saveAs(blob, fileName);\r\n }\r\n\r\n static saveJson(json: any, fileName: string): void {\r\n if (!ObjectUtils.isObject(json)) return;\r\n FileUtils.saveBlob(new Blob([JSON.stringify(json, null, 4)]), fileName);\r\n }\r\n\r\n static readFileAsText(file: Blob): Promise<string> {\r\n return FileUtils.readFile(\r\n // @dynamic\r\n reader => reader.readAsText(file)\r\n );\r\n }\r\n\r\n static readFileAsBinaryString(file: Blob): Promise<string> {\r\n return FileUtils.readFile(\r\n // @dynamic\r\n reader => reader.readAsBinaryString(file)\r\n );\r\n }\r\n\r\n static readFileAsDataURL(file: Blob): Promise<string> {\r\n return FileUtils.readFile(\r\n // @dynamic\r\n reader => reader.readAsDataURL(file)\r\n );\r\n }\r\n\r\n static readDataFromUrl(http: HttpClient, url: string): Promise<string> {\r\n return new Promise<string>(\r\n // @dynamic\r\n (resolve, reject) => {\r\n if (!url) {\r\n reject({\r\n message: \"The url is not specified\"\r\n });\r\n return;\r\n }\r\n if ((/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/g).test(url)) {\r\n resolve(url);\r\n return;\r\n }\r\n first()(http.get(url, {\r\n responseType: \"blob\"\r\n })).subscribe((blob: Blob) => {\r\n FileUtils.readFileAsDataURL(blob).then(resolve, reject);\r\n }, reason => {\r\n if (reason.status > 0)\r\n reject(reason);\r\n else\r\n resolve(url);\r\n });\r\n }\r\n );\r\n }\r\n\r\n private static readFile(callback: (reader: FileReader) => void): Promise<string> {\r\n return new Promise<string>(\r\n // @dynamic\r\n (resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (event: any) => resolve(event.target.result);\r\n reader.onerror = reject;\r\n callback(reader);\r\n }\r\n );\r\n }\r\n}\r\n","import {Subject} from \"rxjs\";\r\n\r\nexport class GenericValue<T> extends Subject<T> {\r\n\r\n get value(): T {\r\n return this._value;\r\n }\r\n\r\n set value(value: T) {\r\n if (value == this._value) return;\r\n this._value = value;\r\n this.next(value);\r\n }\r\n\r\n private _value: T;\r\n\r\n constructor(value: T = null) {\r\n super();\r\n this._value = value;\r\n }\r\n\r\n setJustValue(value: T): void {\r\n this._value = value;\r\n }\r\n}\r\n","export interface IShape {\r\n x: number;\r\n y: number;\r\n\r\n distance(shape: IShape): number;\r\n}\r\n\r\nexport class Rect implements IShape {\r\n\r\n get center(): Point {\r\n return new Point(this.x, this.y);\r\n }\r\n\r\n get left(): number {\r\n return this.x - this.width * .5;\r\n }\r\n\r\n get right(): number {\r\n return this.x + this.width * .5;\r\n }\r\n\r\n get bottom(): number {\r\n return this.y - this.height * .5;\r\n }\r\n\r\n get top(): number {\r\n return this.y + this.height * .5;\r\n }\r\n\r\n constructor(readonly x: number, readonly y: number, readonly width: number, readonly height: number, readonly rotation: number = 0) {\r\n\r\n }\r\n\r\n distance(p: Point): number {\r\n p = p.rotateAround(this.center, -this.rotation);\r\n const x = Math.max(this.left - p.x, 0, p.x - this.right);\r\n const y = Math.max(this.bottom - p.y, 0, p.y - this.top);\r\n return Math.sqrt(x*x + y*y);\r\n }\r\n}\r\n\r\nexport class Circle implements IShape {\r\n\r\n get center(): Point {\r\n return new Point(this.x, this.y);\r\n }\r\n\r\n get left(): Point {\r\n return new Point(this.x - this.radius, this.y);\r\n }\r\n\r\n get right(): Point {\r\n return new Point(this.x + this.radius, this.y);\r\n }\r\n\r\n get top(): Point {\r\n return new Point(this.x, this.y + this.radius);\r\n }\r\n\r\n get bottom(): Point {\r\n return new Point(this.x, this.y - this.radius);\r\n }\r\n\r\n get rect(): Rect {\r\n return new Rect(this.x, this.y, this.radius * 2, this.radius * 2);\r\n }\r\n\r\n constructor(readonly x: number, readonly y: number, readonly radius: number) {\r\n\r\n }\r\n\r\n distance(p: Point): number {\r\n return this.center.distance(p) - this.radius;\r\n }\r\n}\r\n\r\nexport class Point implements IShape {\r\n\r\n static Zero: Point = new Point(0, 0);\r\n\r\n get length(): number {\r\n return this.distance(Point.Zero);\r\n }\r\n\r\n get perpendicular(): Point {\r\n return new Point(this.y, -this.x);\r\n }\r\n\r\n constructor(readonly x: number, readonly y: number) {\r\n }\r\n\r\n add(p: Point): Point {\r\n return new Point(this.x + p.x, this.y + p.y);\r\n }\r\n\r\n subtract(p: Point): Point {\r\n return new Point(this.x - p.x, this.y - p.y);\r\n }\r\n\r\n multiply(p: Point | number): Point {\r\n if (p instanceof Point) {\r\n return new Point(this.x * p.x, this.y * p.y);\r\n }\r\n return new Point(this.x * p, this.y * p);\r\n }\r\n\r\n distance(b: Point): number {\r\n const x = b.x - this.x;\r\n const y = b.y - this.y;\r\n return Math.sqrt(x * x + y * y);\r\n }\r\n\r\n lerp(p: Point, ratio: number): Point {\r\n const diff = p.subtract(this);\r\n return this.add(diff.multiply(ratio));\r\n }\r\n\r\n perpendicularTo(p: Point, length: number): Point {\r\n const diff = p.perpendicular.subtract(this.perpendicular);\r\n const ratio = length / diff.length;\r\n const center = this.lerp(p, .5);\r\n return center.add(diff.multiply(ratio));\r\n }\r\n\r\n circleWith(a: Point, b: Point): Circle {\r\n const yDelta_a = b.y - a.y;\r\n const xDelta_a = b.x - a.x;\r\n const yDelta_b = this.y - b.y;\r\n const xDelta_b = this.x - b.x;\r\n\r\n const aSlope = yDelta_a / xDelta_a;\r\n const bSlope = yDelta_b / xDelta_b;\r\n\r\n const x = (aSlope * bSlope * (a.y - this.y) + bSlope * (a.x + b.x) - aSlope * (b.x + this.x)) / (2 * (bSlope - aSlope));\r\n const y = -1 * (x - (a.x + b.x) / 2) / aSlope + (a.y + b.y) / 2;\r\n const center = new Point(x, y);\r\n return new Circle(center.x, center.y, center.distance(this));\r\n }\r\n\r\n tangents(c: Circle): Point[] {\r\n const pd = c.center.subtract(this);\r\n const a = Math.asin(c.radius / pd.length);\r\n const b = Math.atan2(pd.y, pd.x);\r\n // Tangent points\r\n let t = b - a;\r\n const t1 = new Point(c.x + c.radius * Math.sin(t), c.y + c.radius * -Math.cos(t));\r\n t = b + a;\r\n const t2 = new Point(c.x + c.radius * -Math.sin(t), c.y + c.radius * Math.cos(t));\r\n return [t1, t2];\r\n }\r\n\r\n angle(p: Point): number {\r\n const diff = p.subtract(this);\r\n return Math.atan2(diff.y, diff.x) * 180 / Math.PI;\r\n }\r\n\r\n rotateAround(p: Point, angle: number): Point {\r\n const rotation = (p.angle(this) + angle) * Math.PI / 180;\r\n const distance = p.distance(this);\r\n const rotated = new Point(Math.cos(rotation) * distance, Math.sin(rotation) * distance);\r\n return p.add(rotated);\r\n }\r\n}\r\n","import {Invokable} from \"invokable\";\r\n\r\nexport class Initializer<T> {\r\n\r\n private initialized: boolean;\r\n\r\n get isInitialized(): boolean {\r\n return this.initialized;\r\n }\r\n\r\n constructor(private callback: () => T, private shouldInit: boolean = true) {\r\n this.initialized = !this.shouldInit;\r\n // @ts-ignore\r\n return Invokable.create(this);\r\n }\r\n\r\n [Invokable.call](): T {\r\n if (this.initialized) return null;\r\n this.initialized = true;\r\n return this.callback();\r\n }\r\n}\r\n\r\nexport interface Initializer<T> {\r\n (): T;\r\n}\r\n","import {IScriptPromises, IStylePromises} from \"../common-types\";\r\n\r\nexport class LoaderUtils {\r\n\r\n static scriptPromises: IScriptPromises = {};\r\n static stylePromises: IStylePromises = {};\r\n\r\n static loadScript(src: string, async: boolean = false): Promise<HTMLScriptElement> {\r\n this.scriptPromises[src] = this.scriptPromises[src] || new Promise<any>((resolve, reject) => {\r\n // Load script\r\n const script: any = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = src;\r\n script.async = async;\r\n if (script.readyState) {\r\n // Internet explorer\r\n script.onreadystatechange = () => {\r\n if (script.readyState === \"loaded\" || script.readyState === \"complete\") {\r\n script.onreadystatechange = null;\r\n resolve(script);\r\n }\r\n };\r\n } else {\r\n // Other browsers\r\n script.onload = () => resolve(script);\r\n }\r\n script.onerror = (error: any) => reject(error);\r\n document.body.appendChild(script);\r\n });\r\n return this.scriptPromises[src];\r\n }\r\n\r\n static loadStyle(src: string): Promise<HTMLLinkElement> {\r\n this.stylePromises[src] = this.stylePromises[src] || new Promise<any>((resolve, reject) => {\r\n // Load script\r\n const link: any = document.createElement(\"link\");\r\n link.rel = \"stylesheet\";\r\n link.type = \"text/css\";\r\n link.href = src;\r\n\r\n if (link.readyState) {\r\n // Internet explorer\r\n link.onreadystatechange = () => {\r\n if (link.readyState === \"loaded\" || link.readyState === \"complete\") {\r\n link.onreadystatechange = null;\r\n resolve(link);\r\n }\r\n };\r\n } else {\r\n // Other browsers\r\n link.onload = () => resolve(link);\r\n }\r\n link.onerror = (error: any) => reject(error);\r\n document.body.appendChild(link);\r\n });\r\n return this.stylePromises[src];\r\n }\r\n}\r\n","import {ObjectUtils} from \"./object.utils\";\r\n\r\nexport class MathUtils {\r\n\r\n static equal(a: number, b: number, epsilon: number = null): boolean {\r\n epsilon = ObjectUtils.isNumber(epsilon) ? epsilon : Math.E;\r\n return Math.abs( a - b ) < epsilon;\r\n }\r\n\r\n static clamp(value: number, min: number, max: number): number {\r\n return Math.max(Math.min(value, max), min)\r\n }\r\n\r\n static round(value: number, precision: number = 2, divider: number = 1): number {\r\n precision = Math.pow(10, precision);\r\n return Math.round(value * precision / divider) / precision;\r\n }\r\n}\r\n","import {Injectable, Injector, NgZone, Optional} from \"@angular/core\";\r\nimport {\r\n ActivatedRouteSnapshot,\r\n ChildrenOutletContexts,\r\n Data,\r\n Event,\r\n NavigationEnd,\r\n NavigationExtras,\r\n OutletContext,\r\n Params,\r\n Resolve,\r\n Route,\r\n Router,\r\n UrlSegment,\r\n UrlTree\r\n} from \"@angular/router\";\r\nimport {BehaviorSubject, Observable, Subscription} from \"rxjs\";\r\nimport {skipWhile} from \"rxjs/operators\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\nimport {IRoute} from \"../common-types\";\r\n\r\nexport const emptySnapshot: ActivatedRouteSnapshot = new ActivatedRouteSnapshot();\r\nexport const emptyData: Data = {id: \"\"};\r\nexport const emptyParams: Params = {};\r\nexport const emptySegments: UrlSegment[] = [];\r\nexport const emptyComponents: any[] = [];\r\n\r\nexport interface IStateInfo {\r\n url: string;\r\n segments: UrlSegment[];\r\n components: any[];\r\n}\r\n\r\n@Injectable()\r\nexport class StateService extends BehaviorSubject<any> {\r\n\r\n readonly globalExtras: NavigationExtras;\r\n\r\n private shot: ActivatedRouteSnapshot;\r\n private comp: any;\r\n private stateInfo: IStateInfo;\r\n private contexts: ChildrenOutletContexts;\r\n\r\n static toPath(route: Route, params: any): string {\r\n let path = route.path || \"\";\r\n ObjectUtils.iterate(params, (value: any, key: string) => {\r\n path = path.replace(`:${key}`, `${value}`);\r\n });\r\n return path;\r\n }\r\n\r\n get component(): any {\r\n return this.comp;\r\n }\r\n\r\n get snapshot(): ActivatedRouteSnapshot {\r\n return this.shot || emptySnapshot;\r\n }\r\n\r\n get route(): IRoute {\r\n return this.snapshot.routeConfig;\r\n }\r\n\r\n get data(): Data {\r\n return this.snapshot.data || emptyData;\r\n }\r\n\r\n get params(): Params {\r\n return this.snapshot.params || emptyParams;\r\n }\r\n\r\n get queryParams(): Params {\r\n return this.snapshot.queryParams || emptyParams;\r\n }\r\n\r\n get url(): string {\r\n return this.stateInfo.url || \"\";\r\n }\r\n\r\n get urlSegments(): UrlSegment[] {\r\n return this.stateInfo.segments || emptySegments;\r\n }\r\n\r\n get components(): any[] {\r\n return this.stateInfo.components || emptyComponents;\r\n }\r\n\r\n get routerConfig(): IRoute[] {\r\n return this.router.config;\r\n }\r\n\r\n constructor(readonly injector: Injector, readonly zone: NgZone, @Optional() readonly router: Router = null) {\r\n super(null);\r\n if (!this.router) return;\r\n this.globalExtras = {\r\n queryParamsHandling: \"merge\"\r\n };\r\n this.router.events.subscribe(this.handleRouterEvent);\r\n this.stateInfo = {\r\n url: \"\",\r\n segments: [],\r\n components: []\r\n };\r\n this.contexts = (<any>router).rootContexts;\r\n }\r\n\r\n async reload(): Promise<any> {\r\n const routerStateSnapshot = this.router.routerState.snapshot;\r\n const resolvers = this.route.resolve || {};\r\n const keys = Object.keys(resolvers);\r\n for (const key of keys) {\r\n const resolver = this.injector.get(resolvers[key]) as Resolve<any>;\r\n let resolved = resolver.resolve(this.snapshot, routerStateSnapshot);\r\n if (resolved instanceof Observable) {\r\n resolved = resolved.toPromise();\r\n }\r\n if (resolved instanceof Promise) {\r\n resolved = await resolved;\r\n }\r\n this.data[key] = resolved;\r\n }\r\n }\r\n\r\n navigate(commands: any[], extras?: NavigationExtras): Promise<boolean> {\r\n if (!this.router) return Promise.resolve(false);\r\n extras = Object.assign({}, this.globalExtras, extras || {});\r\n const tree = this.router.createUrlTree(commands, extras);\r\n return this.navigateByUrl(tree, extras);\r\n }\r\n\r\n navigateByUrl(url: string | UrlTree, extras?: NavigationExtras): Promise<boolean> {\r\n if (!this.router) return Promise.resolve(false);\r\n extras = Object.assign({}, this.globalExtras, extras || {});\r\n return new Promise<boolean>(resolve => {\r\n this.zone.run(() => {\r\n this.router.navigateByUrl(url, extras).then(resolve, () => resolve(false));\r\n })\r\n });\r\n }\r\n\r\n subscribeImmediately(next?: (value: ActivatedRouteSnapshot) => void, error?: (error: any) => void, complete?: () => void): Subscription {\r\n return this.pipe(skipWhile(v => v == null)).subscribe(next, error, complete);\r\n }\r\n\r\n private handleRouterEvent = (event: Event): void => {\r\n if (!(event instanceof NavigationEnd)) return;\r\n const routerStateSnapshot = this.router.routerState.snapshot;\r\n let snapshot = routerStateSnapshot.root;\r\n let context: OutletContext = this.contexts.getContext(\"primary\");\r\n let segments = snapshot.url;\r\n const components: any[] = [];\r\n const snapshots: ActivatedRouteSnapshot[] = [];\r\n while (snapshot) {\r\n snapshots.push(snapshot);\r\n segments = segments.concat(snapshot.url);\r\n if (context) {\r\n if (context.outlet && context.outlet.isActivated)\r\n components.push(context.outlet.component);\r\n context = context.children.getContext(\"primary\");\r\n }\r\n snapshot = snapshot.firstChild;\r\n }\r\n this.comp = components[components.length - 1];\r\n this.shot = snapshots[snapshots.length - 1];\r\n this.stateInfo = {\r\n url: routerStateSnapshot.url,\r\n segments: segments,\r\n components: components\r\n };\r\n this.next(this.shot);\r\n };\r\n}\r\n","import {Inject, Injectable, Injector} from \"@angular/core\";\r\nimport {ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, UrlSegment} from \"@angular/router\";\r\nimport {AUTH_SERVICE, FactoryDependencies, IAuthService, IRoute, RouteValidator} from \"../common-types\";\r\nimport {ReflectUtils} from \"./reflect.utils\";\r\nimport {ObjectUtils} from \"./object.utils\";\r\nimport {StateService} from \"../services/state.service\";\r\n\r\n@Injectable()\r\nexport class AuthGuard implements CanActivate {\r\n\r\n static guardAuthenticated(auth: IAuthService): Promise<boolean> {\r\n return Promise.resolve(auth.isAuthenticated);\r\n }\r\n\r\n static guardNotAuthenticated(auth: IAuthService): Promise<boolean> {\r\n return Promise.resolve(!auth.isAuthenticated);\r\n }\r\n\r\n static guardNothing(): Promise<boolean> {\r\n return Promise.resolve(true);\r\n }\r\n\r\n @FactoryDependencies(AUTH_SERVICE)\r\n static guardAuthField(auth: IAuthService, expression: string = `auth.isAuthenticated`): RouteValidator {\r\n // @dynamic\r\n const lambda = (): Promise<boolean> => {\r\n return Promise.resolve(ObjectUtils.evaluate(expression, {auth}));\r\n };\r\n return lambda;\r\n }\r\n\r\n @FactoryDependencies(StateService)\r\n static guardStateField(state: StateService, expression: string = `state.data`): RouteValidator {\r\n // @dynamic\r\n const lambda = (): Promise<boolean> => {\r\n return Promise.resolve(ObjectUtils.evaluate(expression, {state}));\r\n };\r\n return lambda;\r\n }\r\n\r\n @FactoryDependencies(AUTH_SERVICE, StateService)\r\n static guardAuthStateField(auth: IAuthService, state: StateService, expression: string = `auth.isAuthenticated`): RouteValidator {\r\n // @dynamic\r\n const lambda = (): Promise<boolean> => {\r\n return Promise.resolve(ObjectUtils.evaluate(expression, {auth, state}));\r\n };\r\n return lambda;\r\n }\r\n\r\n static wildRouteMatch(segments: UrlSegment[]) {\r\n return {consumed: segments};\r\n }\r\n\r\n static noRouteMatch() {\r\n return null;\r\n }\r\n\r\n constructor(@Inject(Injector) readonly injector: Injector,\r\n @Inject(StateService) readonly state: StateService,\r\n @Inject(AUTH_SERVICE) readonly auth: IAuthService) {\r\n }\r\n\r\n checkRouteMenu(route: IRoute): Promise<boolean> {\r\n if (!route.data || !route.data.name) return Promise.resolve(false);\r\n return this.checkRoute(route);\r\n }\r\n\r\n checkRoute(route: IRoute, next?: ActivatedRouteSnapshot): Promise<boolean> {\r\n const routeData = route.data || {};\r\n if (!routeData.guards)\r\n return Promise.resolve(!route.canActivate || this.auth.isAuthenticated);\r\n return new Promise<boolean>(resolve => {\r\n const guards = routeData.guards.map(g => {\r\n const guard = ReflectUtils.resolve<RouteValidator>(g, this.injector);\r\n return guard(this.auth, route, next);\r\n });\r\n Promise.all(guards).then(results => {\r\n resolve(results.indexOf(false) < 0);\r\n });\r\n });\r\n }\r\n\r\n canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {\r\n const route = <IRoute>next.routeConfig;\r\n return new Promise<boolean>(resolve => {\r\n this.auth.checkAuthenticated().then(() => {\r\n this.checkRoute(route, next).then(hasRights => {\r\n resolve(hasRights);\r\n if (!hasRights) {\r\n this.getReturnState(route).then(returnState => {\r\n if (!returnState) return;\r\n this.state.navigate(returnState, {queryParams: next.queryParams});\r\n });\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n getConfig(route: IRoute, config: IRoute[], path: string[]): IRoute[] {\r\n if (!config) return null;\r\n const match = config.findIndex(t => t == route);\r\n if (match >= 0) return config;\r\n for (const subConfig of config) {\r\n if (subConfig.path)\r\n path.push(subConfig.path);\r\n const loadedChildren = (subConfig[\"_loadedConfig\"] || {routes: null}).routes;\r\n const match = this.getConfig(route, subConfig.children || loadedChildren, path);\r\n if (!match) {\r\n if (subConfig.path)\r\n path.length -= 1;\r\n continue;\r\n }\r\n return match;\r\n }\r\n return null;\r\n }\r\n\r\n getReturnState(route: IRoute): Promise<string[]> {\r\n if (!route) return Promise.resolve(null);\r\n if (ObjectUtils.isObject(route.data) && ObjectUtils.isArray(route.data.returnState)) {\r\n return Promise.resolve(route.data.returnState);\r\n }\r\n const path = [];\r\n const config = this.getConfig(route, this.state.routerConfig, path);\r\n return new Promise<string[]>(resolve => {\r\n this.getReturnStateRecursive(config).then(rs => {\r\n if (!ObjectUtils.isArray(rs)) {\r\n resolve(rs);\r\n return;\r\n }\r\n resolve(path.concat(rs));\r\n });\r\n });\r\n }\r\n\r\n private getReturnStateRecursive(config: IRoute[], c: number = 0): Promise<string[]> {\r\n if (!config || c >= config.length) return Promise.resolve(null);\r\n return new Promise<string[]>(resolve => {\r\n const route = config[c];\r\n const check = !route.component ? Promise.resolve(false) : this.checkRoute(route);\r\n check.then(res => {\r\n if (res) {\r\n resolve([route.path]);\r\n return;\r\n }\r\n this.getReturnStateRecursive(config, c + 1).then(resolve);\r\n });\r\n });\r\n }\r\n}\r\n","import {ITimer} from \"../common-types\";\r\nimport {ObjectUtils} from \"./object.utils\";\r\n\r\ntype TimerFunc = (timer: ITimer) => void;\r\n\r\nexport class TimerUtils {\r\n\r\n static createTimeout(func?: Function, time?: number): ITimer {\r\n // @dynamic\r\n const run = (timer: ITimer) => {\r\n timer.clear();\r\n timer.id = setTimeout(() => {\r\n timer.id = null;\r\n timer.func();\r\n }, timer.time);\r\n };\r\n // @dynamic\r\n const clear = (timer: ITimer) => {\r\n if (!timer.id) return;\r\n clearTimeout(timer.id);\r\n timer.id = null;\r\n };\r\n return TimerUtils.createTimer(run, clear, func, time);\r\n }\r\n\r\n static createInterval(func?: Function, time?: number): ITimer {\r\n // @dynamic\r\n const run = (timer: ITimer) => {\r\n timer.clear();\r\n timer.id = setInterval(timer.func, timer.time);\r\n };\r\n // @dynamic\r\n const clear = (timer: ITimer) => {\r\n if (!timer.id) return;\r\n clearInterval(timer.id);\r\n timer.id = null;\r\n };\r\n return TimerUtils.createTimer(run, clear, func, time);\r\n }\r\n\r\n private static createTimer(run: TimerFunc, clear: TimerFunc, func: Function, time: number): ITimer {\r\n const timer: ITimer = {};\r\n const setParams = (func: Function, time: number) => {\r\n timer.func = !ObjectUtils.isFunction(func) ? (() => {}) : func;\r\n timer.time = !ObjectUtils.isNumber(time) ? 100 : time;\r\n };\r\n timer.run = () => run(timer);\r\n timer.clear = () => clear(timer);\r\n timer.set = (func: Function, time: number) => {\r\n setParams(func, time);\r\n timer.run();\r\n };\r\n setParams(func, time);\r\n return timer;\r\n }\r\n}\r\n","import {from, Observable, Subject, Subscription} from \"rxjs\";\r\nimport {mergeMap} from \"rxjs/operators\";\r\n\r\nimport {ISearchObservable} from \"../common-types\";\r\nimport {TimerUtils} from \"./timer.utils\";\r\n\r\nexport interface ISubscriberInfo {\r\n subjects: Observable<any>[];\r\n cb: (ev?: Observable<any>, ...args: any[]) => any;\r\n timeout?: number;\r\n}\r\n\r\nexport class ObservableUtils {\r\n\r\n static toSearch(search: ISearchObservable): Observable<any> {\r\n return mergeMap(\r\n // @dynamic\r\n (token: string) => search.getSearchResults(token)\r\n )(\r\n Observable.create(\r\n // @dynamic\r\n (observer: any) => {\r\n observer.next(search.search);\r\n }\r\n )\r\n );\r\n }\r\n\r\n static multiSubscription(...subscriptions: Subscription[]): Subscription {\r\n // @dynamic\r\n const lambda = () => {\r\n subscriptions.forEach(s => {\r\n s.unsubscribe();\r\n });\r\n };\r\n return new Subscription(lambda);\r\n }\r\n\r\n static subscribe(...subscribers: ISubscriberInfo[]): Subscription {\r\n const subscriptions: Subscription[] = [];\r\n subscribers.forEach(info => {\r\n let alreadyCalled = false;\r\n const timer = info.timeout > 0 ? TimerUtils.createTimeout() : 0;\r\n const cb = timer ? function () {\r\n const args = Array.from(arguments);\r\n timer.set(() => {\r\n info.cb.apply(null, args);\r\n }, info.timeout);\r\n } : info.cb;\r\n info.subjects.forEach(subject => {\r\n const ss = subject.subscribe((value) => {\r\n alreadyCalled = true;\r\n cb.call(null, subject, value);\r\n });\r\n subscriptions.push(ss);\r\n });\r\n if (alreadyCalled) return;\r\n cb();\r\n });\r\n return ObservableUtils.multiSubscription(...subscriptions);\r\n }\r\n\r\n static fromFunction(callbackFunc: () => any): Observable<any> {\r\n let subject: any;\r\n return new Observable<any>((subscriber) => {\r\n if (!subject) {\r\n subject = new Subject();\r\n try {\r\n subject = from(callbackFunc());\r\n } catch (err) {\r\n subject.error(err);\r\n }\r\n }\r\n return subject.subscribe(subscriber);\r\n });\r\n }\r\n}\r\n","export class StringUtils {\r\n\r\n static concat(separator: string, ...strings: string[]): string {\r\n return strings.filter(\r\n // @dynamic\r\n str => !!str\r\n ).join(separator);\r\n }\r\n\r\n static startsWith(str: string, ...starts: string[]): boolean {\r\n for (let i = 0; i < starts.length; i++) {\r\n if (str.startsWith(starts[i])) return true;\r\n }\r\n return false;\r\n }\r\n\r\n static has(str: string, ...parts: string[]): boolean {\r\n for (let i = 0; i < parts.length; i++) {\r\n if (str.indexOf(parts[i]) >= 0) return true;\r\n }\r\n return false;\r\n }\r\n\r\n static lcFirst(str: string): string {\r\n return str ? str.charAt(0).toLowerCase() + str.substring(1) : \"\";\r\n }\r\n\r\n static ucFirst(str: string): string {\r\n return str ? str.charAt(0).toUpperCase() + str.substring(1) : \"\";\r\n }\r\n}\r\n","import {ObjectUtils} from \"./object.utils\";\r\n\r\nexport class ArrayUtils {\r\n\r\n static has(arr: any[], ...items: any[]): boolean {\r\n if (!ObjectUtils.isArray(arr) || !ObjectUtils.isArray(items)) return false;\r\n for (let i = 0; i < items.length; i++) {\r\n if (arr.indexOf(items[i]) >= 0) return true;\r\n }\r\n return false;\r\n }\r\n\r\n static match(arr: any[], str: string): boolean {\r\n if (!ObjectUtils.isArray(arr) || !ObjectUtils.isString(str)) return false;\r\n for (let i = 0; i < arr.length; i++) {\r\n if (arr[i] instanceof RegExp) {\r\n const regex = <RegExp>arr[i];\r\n if (regex.test(str)) return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static any<T>(arr: T[], cb: (item: T) => boolean): boolean {\r\n if (!ObjectUtils.isArray(arr) || !ObjectUtils.isFunction(cb)) return false;\r\n for (let i = 0; i < arr.length; i++) {\r\n if (cb(arr[i])) return true;\r\n }\r\n return false;\r\n }\r\n\r\n static move<T>(arr: T[], oldIndex: number, newIndex: number): T[] {\r\n if (!ObjectUtils.isArray(arr)) return [];\r\n const length = arr.length;\r\n while (oldIndex < 0) {\r\n oldIndex += length;\r\n }\r\n while (newIndex < 0) {\r\n newIndex += length;\r\n }\r\n if (newIndex >= length) {\r\n let k = newIndex - length + 1;\r\n while (k--) {\r\n arr.push(undefined);\r\n }\r\n }\r\n arr.splice(newIndex, 0, arr.splice(oldIndex, 1)[0]);\r\n return arr;\r\n }\r\n\r\n static reversed(arr: any[]): any[] {\r\n const result = [];\r\n if (!ObjectUtils.isArray(arr)) return result;\r\n for (let i = arr.length - 1; i >= 0; i--) {\r\n result.push(arr[i]);\r\n }\r\n return result;\r\n }\r\n\r\n static min<T>(arr: T[], cb: (item: T, index?: number) => number): T {\r\n if (!ObjectUtils.isArray(arr)) return null;\r\n let min = Number.MAX_SAFE_INTEGER;\r\n let result = null;\r\n for (let i = 0; i < arr.length; i++) {\r\n const current = cb(arr[i], i);\r\n if (current < min || result === null) {\r\n min = current;\r\n result = arr[i];\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n static max<T>(arr: T[], cb: (item: T, index?: number) => number): T {\r\n if (!ObjectUtils.isArray(arr)) return null;\r\n let max = Number.MIN_SAFE_INTEGER;\r\n let result = null;\r\n for (let i = 0; i < arr.length; i++) {\r\n const current = cb(arr[i], i);\r\n if (current > max || result === null) {\r\n max = current;\r\n result = arr[i];\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n static chunk<T>(arr: T[], size: number): Array<T[]> {\r\n if (!ObjectUtils.isArray(arr)) return [];\r\n size = Math.max(1, size);\r\n const result = []\r\n for (let i = 0; i < arr.length; i += size) {\r\n result.push(arr.slice(i, i + size))\r\n }\r\n return result\r\n }\r\n}\r\n","import {ObjectUtils} from \"./object.utils\";\r\n\r\nexport class SetUtils {\r\n static equals(set: Set<any>, obj: any): boolean {\r\n if (!ObjectUtils.isSet(set) || !ObjectUtils.isSet(obj))\r\n return false;\r\n if (set.size != obj.size)\r\n return false;\r\n for (const item in set) {\r\n if (!obj.has(item)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n static addArray(set: Set<any>, items: any[]): void {\r\n if (!ObjectUtils.isSet(set) || !ObjectUtils.isArray(items)) return;\r\n items.forEach(i => set.add(i));\r\n }\r\n}\r\n","export class UniqueUtils {\r\n\r\n static uuid(): string {\r\n if (typeof window !== \"undefined\" && typeof window.crypto !== \"undefined\" && typeof window.crypto.getRandomValues !== \"undefined\") {\r\n const buf = new Uint16Array(8);\r\n window.crypto.getRandomValues(buf);\r\n return (this.pad4(buf[0]) + this.pad4(buf[1]) + \"-\" + this.pad4(buf[2]) + \"-\" + this.pad4(buf[3]) + \"-\" + this.pad4(buf[4]) + \"-\" + this.pad4(buf[5]) + this.pad4(buf[6]) + this.pad4(buf[7]));\r\n }\r\n return this.random4() + this.random4() + \"-\" + this.random4() + \"-\" + this.random4() + \"-\" +\r\n this.random4() + \"-\" + this.random4() + this.random4() + this.random4();\r\n }\r\n\r\n private static pad4(num: number): string {\r\n let ret = num.toString(16);\r\n while (ret.length < 4) {\r\n ret = \"0\" + ret;\r\n }\r\n return ret;\r\n }\r\n\r\n private static random4(): string {\r\n return Math.floor((1 + Math.random()) * 0x10000)\r\n .toString(16)\r\n .substring(1);\r\n }\r\n}\r\n","export class Vector {\r\n\r\n get negative(): Vector {\r\n return new Vector(-this.x, -this.y, -this.z);\r\n }\r\n\r\n get length(): number {\r\n return Math.sqrt(this.dot(this));\r\n }\r\n\r\n get unit(): Vector {\r\n return this.divide(this.length);\r\n }\r\n\r\n get min(): number {\r\n return Math.min(Math.min(this.x, this.y), this.z);\r\n }\r\n\r\n get max(): number {\r\n return Math.max(Math.max(this.x, this.y), this.z);\r\n }\r\n\r\n get angles(): any {\r\n return {\r\n theta: Math.atan2(this.z, this.x),\r\n phi: Math.asin(this.y / this.length)\r\n };\r\n }\r\n\r\n constructor(public x: number, public y: number, public z: number) {\r\n }\r\n\r\n add(v: Vector | number): Vector {\r\n if (v instanceof Vector) return new Vector(this.x + v.x, this.y + v.y, this.z + v.z);\r\n else return new Vector(this.x + v, this.y + v, this.z + v);\r\n }\r\n\r\n subtract(v: Vector | number): Vector {\r\n if (v instanceof Vector) return new Vector(this.x - v.x, this.y - v.y, this.z - v.z);\r\n else return new Vector(this.x - v, this.y - v, this.z - v);\r\n }\r\n\r\n multiply(v: Vector | number): Vector {\r\n if (v instanceof Vector) return new Vector(this.x * v.x, this.y * v.y, this.z * v.z);\r\n else return new Vector(this.x * v, this.y * v, this.z * v);\r\n }\r\n\r\n divide(v: Vector | number): Vector {\r\n if (v instanceof Vector) return new Vector(this.x / v.x, this.y / v.y, this.z / v.z);\r\n else return new Vector(this.x / v, this.y / v, this.z / v);\r\n }\r\n\r\n equals(v: Vector): boolean {\r\n return this.x == v.x && this.y == v.y && this.z == v.z;\r\n }\r\n\r\n dot(v: Vector): number {\r\n return this.x * v.x + this.y * v.y + this.z * v.z;\r\n }\r\n\r\n cross(v: Vector): Vector {\r\n return new Vector(\r\n this.y * v.z - this.z * v.y,\r\n this.z * v.x - this.x * v.z,\r\n this.x * v.y - this.y * v.x\r\n );\r\n }\r\n\r\n angleTo(v: Vector): number {\r\n return Math.acos(this.dot(v) / (this.length * v.length));\r\n }\r\n\r\n toArray(n?: number): number[] {\r\n return [this.x, this.y, this.z].slice(0, n || 3);\r\n }\r\n\r\n clone(): Vector {\r\n return new Vector(this.x, this.y, this.z);\r\n }\r\n\r\n init(x: number, y: number, z: number): Vector {\r\n this.x = x;\r\n this.y = y;\r\n this.z = z;\r\n return this;\r\n }\r\n}\r\n","import {Inject, Injectable, PLATFORM_ID} from \"@angular/core\";\r\nimport {isPlatformBrowser, isPlatformServer} from \"@angular/common\";\r\nimport {DeviceDetectorService, DeviceInfo} from \"ngx-device-detector\";\r\n\r\n/**\r\n * Use this service to determine which is the current environment\r\n */\r\n@Injectable()\r\nexport class UniversalService {\r\n\r\n get isBrowser(): boolean {\r\n return isPlatformBrowser(this.platformId);\r\n }\r\n\r\n get isServer(): boolean {\r\n return isPlatformServer(this.platformId);\r\n }\r\n\r\n get deviceInfo(): DeviceInfo {\r\n return this.isServer\r\n ? {\r\n userAgent: \"angular-universal\",\r\n os: \"unknown\",\r\n browser: \"node\",\r\n device: \"node\",\r\n os_version: \"unknown\",\r\n browser_version: \"unknown\",\r\n deviceType: \"unknown\",\r\n orientation: \"landscape\"\r\n } as any\r\n : this.dds.getDeviceInfo();\r\n }\r\n\r\n get browserName(): string {\r\n return this.dds.browser;\r\n }\r\n\r\n get browserVersion(): string {\r\n return this.dds.browser_version;\r\n }\r\n\r\n get isExplorer(): boolean {\r\n return this.dds.browser == \"ie\";\r\n }\r\n\r\n get isEdge(): boolean {\r\n return this.dds.browser == \"ms-edge\";\r\n }\r\n\r\n get isChrome(): boolean {\r\n return this.dds.browser == \"chrome\";\r\n }\r\n\r\n get isFirefox(): boolean {\r\n return this.dds.browser == \"firefox\";\r\n }\r\n\r\n get isSafari(): boolean {\r\n return this.dds.browser == \"safari\";\r\n }\r\n\r\n get isTablet(): boolean {\r\n return this.dds.isTablet();\r\n }\r\n\r\n get isMobile(): boolean {\r\n return this.dds.isMobile();\r\n }\r\n\r\n get isDesktop(): boolean {\r\n return this.dds.isDesktop();\r\n }\r\n\r\n get isCrawler(): boolean {\r\n return this.crawler;\r\n }\r\n\r\n private readonly crawler: boolean;\r\n\r\n constructor(@Inject(PLATFORM_ID) private platformId: string, private dds: DeviceDetectorService) {\r\n const info = this.dds.getDeviceInfo();\r\n this.crawler = /(bot|google|baidu|bing|msn|duckduckbot|teoma|slurp|yandex|lighthouse|angular-universal|PTST)/gi.test(info.userAgent);\r\n }\r\n}\r\n","import {Inject, Injectable, Injector, Type} from \"@angular/core\";\r\nimport {StateService} from \"./state.service\";\r\nimport {AUTH_SERVICE, IAclComponent, IAuthService, IRouteStateInfo} from \"../common-types\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\nimport {AuthGuard} from \"../utils/auth.guard\";\r\n\r\nconst emptyGuards: any[] = [];\r\n\r\n@Injectable()\r\nexport class AclService {\r\n\r\n protected components: IRouteStateInfo[];\r\n\r\n constructor(readonly injector: Injector, readonly state: StateService, @Inject(AUTH_SERVICE) readonly auth: IAuthService) {\r\n this.components = [];\r\n this.auth.userChanged.subscribe(() => {\r\n this.components.forEach(t => t.dirty = true);\r\n const info = this.getStateInfo();\r\n const check: Promise<boolean> = info && info.guard instanceof AuthGuard ? info.guard.checkRoute(info.route) : Promise.resolve(true);\r\n check.then(result => {\r\n if (result) {\r\n if (!info || !info.dirty) return;\r\n info.dirty = false;\r\n const component: IAclComponent = info.component;\r\n if (info.first) {\r\n if (ObjectUtils.isFunction(component.onUserInitialized)) {\r\n component.onUserInitialized();\r\n }\r\n info.first = false;\r\n return;\r\n }\r\n if (ObjectUtils.isFunction(component.onUserChanged)) {\r\n component.onUserChanged();\r\n }\r\n return;\r\n }\r\n (info.guard as AuthGuard).getReturnState(info.route).then(returnState => {\r\n if (!returnState) return;\r\n this.state.navigate(returnState);\r\n });\r\n });\r\n });\r\n this.state.subscribe(() => {\r\n const info = this.getStateInfo();\r\n if (!info?.component) return;\r\n const component: IAclComponent = info.component;\r\n if (ObjectUtils.isFunction(component.onUserInitialized)) {\r\n component.onUserInitialized();\r\n }\r\n });\r\n }\r\n\r\n protected getStateInfo(): IRouteStateInfo {\r\n const route = this.state.route;\r\n if (!route) return null;\r\n let info = this.components.find(t => t.route == this.state.route);\r\n if (!info) {\r\n const guardType: Type<AuthGuard> = (route.canActivate || emptyGuards)[0];\r\n info = {\r\n route: this.state.route,\r\n guard: guardType ? this.injector.get(guardType) : null,\r\n dirty: true,\r\n first: true\r\n };\r\n this.components.push(info);\r\n }\r\n info.component = this.state.component;\r\n return info;\r\n }\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\nimport {HttpClient, HttpHandler, HttpHeaders, HttpParams, HttpUrlEncodingCodec} from \"@angular/common/http\";\r\nimport {IHttpHeaders, IHttpParams} from \"../common-types\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\n@Injectable()\r\nexport class BaseHttpClient extends HttpClient {\r\n\r\n requestHeaders: IHttpHeaders;\r\n requestParams: IHttpParams;\r\n renewTokenFunc: () => void;\r\n\r\n protected extraRequestParams: IHttpParams;\r\n\r\n constructor(handler: HttpHandler) {\r\n super(handler);\r\n this.requestHeaders = {};\r\n this.requestParams = {};\r\n this.extraRequestParams = {\r\n language: \"en\"\r\n };\r\n }\r\n\r\n makeHeaders(headers?: IHttpHeaders, withCredentials: boolean = true): HttpHeaders {\r\n headers = Object.assign({}, this.requestHeaders, headers);\r\n const authHeader = headers[\"Authorization\"] as string || \"\";\r\n if (!withCredentials && !authHeader.startsWith(\"Bearer\")) {\r\n delete headers[\"Authorization\"];\r\n }\r\n return new HttpHeaders(headers);\r\n }\r\n\r\n makeParams(params?: IHttpParams): HttpParams {\r\n params = Object.assign({}, this.extraRequestParams, this.requestParams, params);\r\n return new HttpParams({\r\n encoder: new HttpUrlEncodingCodec(),\r\n fromObject: Object.keys(params || {}).reduce((result, key) => {\r\n const value = params[key];\r\n result[key] = ObjectUtils.isObject(value) ? JSON.stringify(value) : (ObjectUtils.isNullOrUndefined(value) ? \"\" : value.toString());\r\n return result;\r\n }, {})\r\n });\r\n }\r\n\r\n setExtraRequestParam(name: string, value?: any): void {\r\n if (typeof value == \"undefined\") {\r\n delete this.extraRequestParams[name];\r\n return;\r\n }\r\n this.extraRequestParams[name] = value;\r\n }\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\nimport {StorageMode} from \"../common-types\";\r\nimport {UniversalService} from \"./universal.service\";\r\n\r\n/**\r\n * Use this service instead of Storage to avoid Angular Universal breaks on server environment\r\n */\r\n@Injectable()\r\nexport class StorageService {\r\n\r\n constructor(readonly universal: UniversalService) {\r\n }\r\n\r\n get(key: string, defaultValue?: any, mode: StorageMode = StorageMode.Local): any {\r\n if (this.universal.isServer) return defaultValue;\r\n const storage = mode == StorageMode.Local ? localStorage : sessionStorage;\r\n const item = storage.getItem(key);\r\n if (!item) return defaultValue;\r\n try {\r\n return JSON.parse(item);\r\n } catch (e) {\r\n return item;\r\n }\r\n }\r\n\r\n set(key: string, value: any, mode: StorageMode = StorageMode.Local): void {\r\n if (this.universal.isServer) return;\r\n const storage = mode == StorageMode.Local ? localStorage : sessionStorage;\r\n if (typeof value == \"string\") {\r\n storage.setItem(key, value);\r\n return;\r\n }\r\n storage.setItem(key, JSON.stringify(value));\r\n }\r\n\r\n remove(key: string, mode: StorageMode = StorageMode.Local): void {\r\n if (this.universal.isServer) return;\r\n const storage = mode == StorageMode.Local ? localStorage : sessionStorage;\r\n storage.removeItem(key);\r\n }\r\n}\r\n","import {Inject, Injectable, Optional} from \"@angular/core\";\r\nimport {HttpErrorResponse, HttpEventType, HttpHeaders, HttpParams, HttpResponse} from \"@angular/common/http\";\r\nimport {Request} from \"express\";\r\n\r\nimport {\r\n CONFIG_SERVICE,\r\n EXPRESS_REQUEST,\r\n HttpPromise,\r\n IConfigService,\r\n IHttpHeaders,\r\n IHttpParams,\r\n IHttpService,\r\n IIssueContext,\r\n ILanguageService,\r\n IPaginationData,\r\n IRequestOptions,\r\n IToasterService,\r\n LANGUAGE_SERVICE,\r\n ProgressListener,\r\n TOASTER_SERVICE\r\n} from \"../common-types\";\r\n\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\nimport {MathUtils} from \"../utils/math.utils\";\r\n\r\nimport {BaseHttpClient} from \"./base-http.client\";\r\nimport {UniversalService} from \"./universal.service\";\r\nimport {StorageService} from \"./storage.service\";\r\nimport {timeout} from \"rxjs/operators\";\r\nimport {TimeoutError} from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class BaseHttpService implements IHttpService {\r\n\r\n protected static failedRequests: Array<() => void> = [];\r\n\r\n get name(): string {\r\n return \"base\";\r\n }\r\n\r\n protected get withCredentials(): boolean {\r\n return true;\r\n }\r\n\r\n requestHeaders: IHttpHeaders;\r\n requestParams: IHttpParams;\r\n cache: any;\r\n\r\n protected static retryFailedRequests(): void {\r\n BaseHttpService.failedRequests.forEach(r => r());\r\n BaseHttpService.failedRequests = [];\r\n }\r\n\r\n get universal(): UniversalService {\r\n return this.storage.universal;\r\n }\r\n\r\n constructor(@Inject(BaseHttpClient) readonly client: BaseHttpClient,\r\n @Inject(StorageService) readonly storage: StorageService,\r\n @Inject(LANGUAGE_SERVICE) readonly language: ILanguageService,\r\n @Inject(TOASTER_SERVICE) readonly toaster: IToasterService,\r\n @Inject(CONFIG_SERVICE) readonly configs: IConfigService,\r\n @Optional() @Inject(EXPRESS_REQUEST) readonly request: Request = null\r\n ) {\r\n this.requestHeaders = {};\r\n this.requestParams = {};\r\n this.cache = {};\r\n }\r\n\r\n url(url: string): string {\r\n return url;\r\n }\r\n\r\n createUrl(url: string, params: IHttpParams): string {\r\n const httpParams = this.client.makeParams(params);\r\n const query = httpParams.keys().map(key => {\r\n return `${key}=${httpParams.get(key)}`;\r\n }).join(\"&\");\r\n return `${this.url(url)}?${query}`;\r\n }\r\n\r\n makeListParams(page: number, itemsPerPage: number, orderBy: string = null, orderDescending: boolean = null, filter: string = null): IHttpParams {\r\n const params: IHttpParams = {\r\n page: (page - 1),\r\n limit: itemsPerPage\r\n };\r\n if (!ObjectUtils.isNullOrUndefined(orderBy) && !ObjectUtils.isNullOrUndefined(orderDescending)) {\r\n params.sort = `${orderDescending ? \"-\" : \"\"}${orderBy}`;\r\n }\r\n if (!ObjectUtils.isNullOrUndefined(filter)) {\r\n params.filter = filter;\r\n }\r\n return params;\r\n }\r\n\r\n protected getPromise(url: string, options?: IRequestOptions, body?: any): HttpPromise {\r\n options = this.makeOptions(options, \"GET\", body);\r\n return this.toPromise(url, options);\r\n }\r\n\r\n protected deletePromise(url: string, options?: IRequestOptions, body?: any): HttpPromise {\r\n options = this.makeOptions(options, \"DELETE\", body);\r\n return this.toPromise(url, options);\r\n }\r\n\r\n protected postPromise(url: string, body?: any, options?: IRequestOptions): HttpPromise {\r\n options = this.makeOptions(options, \"POST\", body);\r\n return this.toPromise(url, options);\r\n }\r\n\r\n protected putPromise(url: string, body?: any, options?: IRequestOptions): HttpPromise {\r\n options = this.makeOptions(options, \"PUT\", body);\r\n return this.toPromise(url, options);\r\n }\r\n\r\n protected patchPromise(url: string, body?: any, options?: IRequestOptions): HttpPromise {\r\n options = this.makeOptions(options, \"PATCH\", body);\r\n return this.toPromise(url, options);\r\n }\r\n\r\n protected uploadPromise(url: string, body: any, listener?: ProgressListener, options?: IRequestOptions): HttpPromise {\r\n const headers: any = {};\r\n if (body instanceof Blob) {\r\n headers[\"Content-Type\"] = \"application/octet-stream\";\r\n }\r\n options = this.makeOptions(Object.assign({\r\n headers: headers,\r\n reportProgress: true\r\n }, options), \"POST\", body);\r\n return this.toPromise(url, options, listener);\r\n }\r\n\r\n protected listPromise(url: string, params: IHttpParams): Promise<IPaginationData> {\r\n return new Promise<IPaginationData>(resolve => {\r\n this.getPromise(url, {params: params}).then(data => {\r\n if (ObjectUtils.isArray(data)) {\r\n resolve({\r\n total: data.length,\r\n items: data,\r\n meta: {}\r\n });\r\n return;\r\n }\r\n resolve({\r\n total: data.meta?.total || data?.total || data.items?.length || 0,\r\n items: data.items || [],\r\n meta: data.meta || {}\r\n });\r\n }, response => {\r\n if (response.status == 0 || response.status == 301) {\r\n resolve({\r\n total: 1,\r\n items: [{\r\n id: null,\r\n label: \"Not implemented.\"\r\n }],\r\n meta: {}\r\n });\r\n return true;\r\n }\r\n resolve({\r\n total: 0,\r\n items: [],\r\n meta: {}\r\n });\r\n return false;\r\n });\r\n });\r\n }\r\n\r\n protected handleUnauthorizedError(absoluteUrl: string, options: IRequestOptions, reject: () => void): void {\r\n reject();\r\n if (BaseHttpService.failedRequests.length > 1) {\r\n return;\r\n }\r\n if (this.universal.isServer) return;\r\n console.log(\"User auth error\", absoluteUrl, options);\r\n }\r\n\r\n protected toastWarning(message: string, issueContext: IIssueContext, reason: any, options: IRequestOptions): void {\r\n this.toaster.warning(message, {issueContext, reason, options});\r\n }\r\n\r\n protected toastError(message: string, issueContext: IIssueContext, reason: any, options: IRequestOptions): void {\r\n this.toaster.warning(message, {issueContext, reason, options});\r\n }\r\n\r\n protected toPromise(url: string, options: IRequestOptions, listener?: ProgressListener): HttpPromise {\r\n const issueContext: IIssueContext = {url: \"\"};\r\n\r\n return new HttpPromise(response => {\r\n if (!response) {\r\n if (this.universal.isServer) return;\r\n console.log(\"You may not need a reject Handler for this request!\", this.name, url, options);\r\n return;\r\n }\r\n const reason = response.error || {};\r\n if (response.status == 0 || response.status == 301) {\r\n this.toastWarning(`${url} endpoint is not implemented! Click here, to quickly create an issue.`, issueContext, reason, options);\r\n return;\r\n }\r\n const regex = /((E11000 duplicate key error collection: (.)+\\.)|(_1 dup key:(.)+))/g;\r\n if (reason.message && regex.test(reason.message)) {\r\n this.toastError(\"message.duplicate-key.error.\" + reason.message.replace(regex, \"\").replace(\" index: \", \"-\"), issueContext, reason, options);\r\n return;\r\n }\r\n this.toastWarning(`${url} endpoint error is not handled properly! Click here, to quickly create an issue.`, issueContext, reason, options);\r\n }, (resolve, reject) => {\r\n this.absoluteUrl(url, options).then(absoluteUrl => {\r\n issueContext.url = absoluteUrl;\r\n const request = this.client.request(options.method, absoluteUrl, options);\r\n const finalRequest = ObjectUtils.isNumber(options.timeout) && options.timeout > 0\r\n ? request.pipe(timeout(options.timeout)) : request;\r\n finalRequest.subscribe((event: any) => {\r\n if (options.reportProgress && event.type === HttpEventType.UploadProgress) {\r\n const progress = {\r\n percentage: MathUtils.round(event.loaded / event.total, 2, 0.01),\r\n loaded: event.loaded,\r\n total: event.total\r\n };\r\n if (listener) {\r\n listener(progress);\r\n }\r\n return;\r\n }\r\n const response = event instanceof HttpResponse ? event.body : event;\r\n resolve(this.parseResponse(response, url, options));\r\n const headers = options.headers as HttpHeaders;\r\n const authKey = \"Authorization\";\r\n // If we use token auth\r\n if (this.client.renewTokenFunc && headers.has(authKey)) {\r\n const currentTime = new Date().getTime();\r\n const userTokenTime = this.storage.get(\"userTokenTime\") || currentTime;\r\n // And the last request was a long long time ago\r\n if (currentTime - 600000 > userTokenTime) {\r\n this.client.renewTokenFunc();\r\n }\r\n }\r\n }, (response: HttpErrorResponse | TimeoutError) => {\r\n if (response instanceof TimeoutError || response.status == 0 || response.status == 301) {\r\n reject(response);\r\n return;\r\n }\r\n const headers = options.headers as HttpHeaders;\r\n const authKey = \"Authorization\";\r\n // If an authorization header exists and we still have an Unauthorized response prompt the user to log in again\r\n if (headers.has(authKey) && response.status == 401) {\r\n const pushed = this.pushFailedRequest(url, options, () => {\r\n options.headers = this.makeHeaders(options.originalHeaders);\r\n this.toPromise(url, options, listener).then(resolve, reject);\r\n });\r\n if (pushed)\r\n this.handleUnauthorizedError(absoluteUrl, options, () => reject(response));\r\n return;\r\n }\r\n reject(response);\r\n });\r\n });\r\n });\r\n }\r\n\r\n protected pushFailedRequest(url: string, options: IRequestOptions, req: () => void): boolean {\r\n if (url.indexOf(\"tokens\") >= 0) return false;\r\n BaseHttpService.failedRequests.push(req);\r\n return true;\r\n }\r\n\r\n protected checkHeaders(headers: any): boolean {\r\n if (!headers || !headers.cookie || !headers.referer || !headers.host) {\r\n return false;\r\n }\r\n return headers.referer.indexOf(headers.host) >= 0;\r\n }\r\n\r\n protected makeOptions(options?: IRequestOptions, method: string = \"GET\", body?: any): IRequestOptions {\r\n // Set base options\r\n options = options ? {...options} : {};\r\n options.method = method;\r\n options.observe = \"body\";\r\n options.originalHeaders = options.originalHeaders || (options.headers as IHttpHeaders) || {};\r\n options.withCredentials = ObjectUtils.isBoolean(options.withCredentials) ? options.withCredentials : this.withCredentials;\r\n options.body = body || {};\r\n // Set cookies from server side request\r\n const headers = !this.request ? null : this.request.headers;\r\n if (this.checkHeaders(headers)) {\r\n options.headers[\"Cookie\"] = headers.cookie;\r\n }\r\n options.headers = this.makeHeaders(options);\r\n options.params = this.makeParams(options);\r\n return options;\r\n }\r\n\r\n protected makeHeaders(options: IRequestOptions): HttpHeaders {\r\n return this.client.makeHeaders(Object.assign({}, this.requestHeaders, options?.headers || {}));\r\n }\r\n\r\n protected makeParams(options: IRequestOptions): HttpParams {\r\n return this.client.makeParams(Object.assign({}, this.requestParams, options?.params || {}));\r\n }\r\n\r\n protected parseResponse(response: any, url: string, options: IRequestOptions): any {\r\n return response;\r\n }\r\n\r\n protected parseUrl(url: string): string {\r\n return this.url(url).replace(/(?:((?!:).\\/)\\/)/g, \"$1\");\r\n }\r\n\r\n protected async absoluteUrl(url: string, options: IRequestOptions): Promise<string> {\r\n const absoluteUrl = this.parseUrl(url);\r\n if (url == \"api-docs\") {\r\n return absoluteUrl.replace(\"/api\", \"\");\r\n }\r\n return absoluteUrl;\r\n }\r\n\r\n protected expressRequestUrl(url: string): string {\r\n const req = this.request;\r\n if (!req || !url || url.startsWith(\"http\") || url.startsWith(\"//\")) return url;\r\n const separator = url.startsWith(\"/\") ? \"\" : \"/\";\r\n return `${req.protocol}://${req.get(\"host\")}${separator}${url}`;\r\n }\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\n\r\nimport {IApiService, IHttpParams, IRequestOptions, ProgressListener} from \"../common-types\";\r\nimport {BaseHttpService} from \"./base-http.service\";\r\nimport {IPaginationData} from \"../common-types\";\r\n\r\n@Injectable()\r\nexport class ApiService extends BaseHttpService implements IApiService {\r\n\r\n get name(): string {\r\n return \"api\";\r\n }\r\n\r\n url(url: string): string {\r\n return this.expressRequestUrl(`/api/${url}`);\r\n }\r\n\r\n get(url: string, options?: IRequestOptions, body?: any): Promise<any> {\r\n return this.getPromise(url, options, body);\r\n }\r\n\r\n delete(url: string, options?: IRequestOptions, body?: any): Promise<any> {\r\n return this.deletePromise(url, options, body);\r\n }\r\n\r\n post(url: string, body?: any, options?: IRequestOptions): Promise<any> {\r\n return this.postPromise(url, body, options);\r\n }\r\n\r\n put(url: string, body?: any, options?: IRequestOptions): Promise<any> {\r\n return this.putPromise(url, body, options);\r\n }\r\n\r\n patch(url: string, body?: any, options?: IRequestOptions): Promise<any> {\r\n return this.patchPromise(url, body, options);\r\n }\r\n\r\n upload(url: string, body: any, listener?: ProgressListener, options?: IRequestOptions): Promise<any> {\r\n return this.uploadPromise(url, body, listener, options);\r\n }\r\n\r\n list(url: string, params: IHttpParams): Promise<IPaginationData> {\r\n return this.listPromise(url, params);\r\n }\r\n}\r\n","import {EventEmitter} from \"@angular/core\";\r\nimport {IRoute, IAuthService} from \"../common-types\";\r\n\r\nexport class StaticAuthService implements IAuthService {\r\n\r\n isAuthenticated: boolean = true;\r\n userChanged: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n checkAuthenticated(): Promise<boolean> {\r\n return Promise.resolve(this.isAuthenticated);\r\n }\r\n\r\n getReturnState(route: IRoute): string[] {\r\n return null;\r\n }\r\n}\r\n","import {Inject, Injectable, Optional} from \"@angular/core\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {UniversalService} from \"./universal.service\";\r\nimport {BASE_CONFIG, IConfigService, IConfiguration, ROOT_ELEMENT, SCRIPT_PARAMS} from \"../common-types\";\r\n\r\n@Injectable()\r\nexport class ConfigService implements IConfigService {\r\n\r\n protected baseConfig: IConfiguration;\r\n protected loadedConfig: IConfiguration;\r\n protected scriptParameters: any;\r\n protected loader: Promise<IConfiguration>;\r\n protected readonly loaderFunc: () => Promise<IConfiguration>;\r\n\r\n get load(): () => Promise<IConfiguration> {\r\n return this.loaderFunc;\r\n }\r\n\r\n get config(): IConfiguration {\r\n return this.loadedConfig;\r\n }\r\n\r\n get configUrl(): string {\r\n return `${this.loadedConfig.baseUrl}config/config.json`;\r\n }\r\n\r\n constructor(readonly http: HttpClient,\r\n readonly universal: UniversalService,\r\n @Inject(ROOT_ELEMENT) readonly rootElement: any,\r\n @Optional() @Inject(BASE_CONFIG) baseConfig: IConfiguration = null,\r\n @Optional() @Inject(SCRIPT_PARAMS) scriptParams: any = null) {\r\n for (const key in []) {\r\n Object.defineProperty(Array.prototype, key, {\r\n enumerable: false\r\n });\r\n }\r\n let baseUrl = \"\";\r\n if (this.universal.isBrowser) {\r\n const currentScript = (document.currentScript as HTMLScriptElement);\r\n if (!!currentScript) {\r\n const scriptSrc = currentScript.src;\r\n const srcParts = scriptSrc.split(\".js\");\r\n baseUrl = scriptSrc.substr(0, srcParts[0].lastIndexOf(\"/\") + 1);\r\n }\r\n }\r\n this.baseConfig = baseConfig || {};\r\n this.loadedConfig = Object.assign(\r\n !baseUrl ? {} : {baseUrl, baseDomain: this.parseDomain(baseUrl)},\r\n this.baseConfig\r\n );\r\n this.scriptParameters = scriptParams || {};\r\n this.loaderFunc = () => {\r\n this.loader = this.loader || new Promise<any>((resolve, reject) => {\r\n this.loadJson().then(config => {\r\n this.loadedConfig = config = Object.assign(this.loadedConfig, config);\r\n this.prepareConfig(config).then(c => {\r\n this.loadedConfig = c;\r\n c.baseUrl = c.baseUrl || \"/\";\r\n resolve(c);\r\n });\r\n }, reject);\r\n });\r\n return this.loader;\r\n };\r\n this.initService();\r\n }\r\n\r\n protected parseDomain(baseUrl: string): string {\r\n try {\r\n const url = new URL(baseUrl);\r\n const port = url.port && url.port !== \"443\" && url.port !== \"80\" ? `:${url.port}` : ``;\r\n return `${url.protocol}//${url.hostname}${port}/`;\r\n } catch {\r\n return \"/\";\r\n }\r\n }\r\n\r\n protected initService(): void {\r\n\r\n }\r\n\r\n protected loadJson(): Promise<IConfiguration> {\r\n if (this.universal.isServer) {\r\n return Promise.resolve(this.loadedConfig);\r\n }\r\n const configUrl = this.configUrl;\r\n return new Promise<any>((resolve, reject) => {\r\n this.http.get(configUrl).toPromise().then(response => {\r\n resolve(response);\r\n }, () => {\r\n reject(`Config file not found at: ${configUrl}`);\r\n });\r\n });\r\n }\r\n\r\n protected prepareConfig(config: IConfiguration): Promise<IConfiguration> {\r\n return Promise.resolve(config);\r\n }\r\n\r\n prepareUrl(url: string, ending: string): string {\r\n const project = !this.loadedConfig ? \"\" : this.loadedConfig.project;\r\n const needsProtocol = url?.startsWith(\"//\") ?? false;\r\n url = !needsProtocol && url?.startsWith(\"/\") ? this.loadedConfig.baseDomain + url.substr(1) : url || \"\";\r\n url = `${url.replace(/\\/+$/, \"\")}${ending}`.replace(\"[project]\", project);\r\n return this.universal.isServer && needsProtocol ? `http:${url}` : url;\r\n }\r\n\r\n getConfigValue(key: string): any {\r\n return this.loadedConfig[key];\r\n }\r\n\r\n getQueryParameter(name: string, url?: string): string {\r\n url = url || (this.universal.isServer ? \"\" : window.location.href);\r\n name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\r\n const regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\"),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return \"\";\r\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\r\n }\r\n}\r\n","import {ErrorHandler, Injectable, Injector} from \"@angular/core\";\r\nimport {UniversalService} from \"./universal.service\";\r\nimport {ERROR_HANDLER, ErrorHandlerCallback, IToasterService, TOASTER_SERVICE} from \"../common-types\";\r\n\r\n@Injectable()\r\nexport class ErrorHandlerService extends ErrorHandler {\r\n\r\n private toaster: IToasterService;\r\n private universal: UniversalService;\r\n private errorCb: ErrorHandlerCallback;\r\n private readonly errorMap: any;\r\n\r\n constructor(readonly injector: Injector) {\r\n super();\r\n this.errorMap = {};\r\n }\r\n\r\n handleError(error: Error): void {\r\n try {\r\n this.universal = this.universal || this.injector.get(UniversalService);\r\n } catch (e) {\r\n return;\r\n }\r\n const date = new Date();\r\n try {\r\n this.errorCb = this.errorCb || this.injector.get(ERROR_HANDLER);\r\n this.errorCb(`[${date}]: ${error.message}\\n${error.stack}`);\r\n } catch (e) {\r\n if (this.universal.isServer) {\r\n console.error(`[${date}]: ${error.message}\\n${error.stack}`);\r\n return;\r\n }\r\n }\r\n if (this.universal.isServer) return;\r\n const key = btoa(unescape(encodeURIComponent(`${error.message} ${error.stack}`)));\r\n if (this.errorMap[key] && this.errorMap[key].getTime() > date.getTime() - 5000) return;\r\n this.errorMap[key] = date;\r\n try {\r\n this.toaster = this.toaster || this.injector.get(TOASTER_SERVICE);\r\n this.toaster.error(`[${date}]: ${error.message}\\n${error.stack}`);\r\n } catch (e) {\r\n }\r\n console.error(`[${date}]: ${error.message}\\n${error.stack}`);\r\n }\r\n}\r\n","import {EventEmitter, Injectable} from \"@angular/core\";\r\n\r\n@Injectable()\r\nexport class EventsService {\r\n\r\n readonly eventForwarded: EventEmitter<Event>;\r\n readonly stickyUpdated: EventEmitter<boolean>;\r\n readonly languageChanged: EventEmitter<string>;\r\n\r\n private sticky: boolean;\r\n\r\n public get isSticky(): boolean {\r\n return this.sticky;\r\n }\r\n\r\n constructor() {\r\n this.eventForwarded = new EventEmitter<Event>();\r\n this.stickyUpdated = new EventEmitter<boolean>();\r\n this.languageChanged = new EventEmitter<string>();\r\n this.sticky = false;\r\n }\r\n\r\n event(e: Event): void {\r\n this.eventForwarded.emit(e);\r\n }\r\n\r\n updateSticky(sticky: boolean): void {\r\n this.sticky = sticky;\r\n this.stickyUpdated.emit(sticky);\r\n }\r\n}\r\n","import {Inject, Injectable} from \"@angular/core\";\r\nimport {ILanguageService, LANGUAGE_SERVICE} from \"../common-types\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\nimport {MathUtils} from \"../utils/math.utils\";\r\n\r\n@Injectable()\r\nexport class FormatterService {\r\n\r\n get defaultPrecision(): number {\r\n return 2;\r\n }\r\n\r\n get defaultNumberFormat(): string {\r\n return `num + ' mm'`;\r\n }\r\n\r\n get defaultDivider(): number {\r\n return 1;\r\n }\r\n\r\n constructor(@Inject(LANGUAGE_SERVICE) public language: ILanguageService) {\r\n\r\n }\r\n\r\n roundNumber(value: number, precision?: number, divider?: number): number {\r\n return MathUtils.round(value, this.getPrecision(precision), divider || this.defaultDivider);\r\n }\r\n\r\n formatNumber(value: number | string, format?: string, precision?: number, divider?: number): string {\r\n precision = this.getPrecision(precision);\r\n divider = divider || this.defaultDivider;\r\n const num = ObjectUtils.isNumber(value) ? <number>value : parseFloat(<string>value) || 0;\r\n const str = (num / divider).toLocaleString(this.language.currentLanguage, {\r\n minimumFractionDigits: precision,\r\n maximumFractionDigits: precision\r\n });\r\n return ObjectUtils.evaluate(format || this.defaultNumberFormat, {num: str});\r\n }\r\n\r\n formatMillimeter(value: number, precision?: number, divider?: number): string {\r\n return this.formatNumber(value, `num + ' mm'`, precision, divider);\r\n }\r\n\r\n protected getPrecision(precision: number): number {\r\n return ObjectUtils.isNumber(precision) ? precision : this.defaultPrecision;\r\n }\r\n}\r\n","import {EventEmitter, Injectable, TemplateRef} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\nexport type GlobalComponentModifier = (component: any) => any;\r\n\r\n@Injectable()\r\nexport class GlobalTemplateService {\r\n\r\n public readonly templatesUpdated: EventEmitter<void>;\r\n\r\n protected globalTemplates: {[id: string]: TemplateRef<any>};\r\n protected componentModifiers: {[id: string]: GlobalComponentModifier};\r\n\r\n constructor() {\r\n this.templatesUpdated = new EventEmitter<any>();\r\n this.globalTemplates = {};\r\n this.componentModifiers = {};\r\n }\r\n\r\n get(id: string, component?: any): TemplateRef<any> {\r\n const template = this.globalTemplates[id];\r\n if (!template) return null;\r\n const modifier = this.componentModifiers[id];\r\n if (ObjectUtils.isFunction(modifier) && component) {\r\n modifier(component);\r\n }\r\n return template;\r\n }\r\n\r\n add(id: string, template: TemplateRef<any>): void {\r\n this.globalTemplates[id] = template;\r\n this.templatesUpdated.emit();\r\n }\r\n\r\n remove(id: string): void {\r\n delete this.globalTemplates[id];\r\n this.templatesUpdated.emit();\r\n }\r\n\r\n addComponentModifier(id: string, modifier: GlobalComponentModifier): void {\r\n this.componentModifiers[id] = modifier;\r\n }\r\n}\r\n","import {EventEmitter, Injectable} from \"@angular/core\";\r\nimport {IIconService} from \"../common-types\";\r\n\r\ndeclare const icons: {\r\n [icon: string]: string;\r\n};\r\n\r\n@Injectable()\r\nexport class IconService implements IIconService {\r\n\r\n get isDisabled(): boolean {\r\n return this.disabled;\r\n }\r\n\r\n set isDisabled(value: boolean) {\r\n this.disabled = value;\r\n this.iconsLoaded.emit();\r\n }\r\n\r\n public readonly iconsLoaded: EventEmitter<any>;\r\n\r\n protected disabled: boolean;\r\n\r\n constructor() {\r\n this.iconsLoaded = new EventEmitter<any>();\r\n this.disabled = false;\r\n }\r\n\r\n getIcon(icon: string, activeIcon: string, active: boolean): Promise<string> {\r\n icon = typeof icons == \"undefined\" ? icon : (icons[icon] || icon);\r\n activeIcon = typeof icons == \"undefined\" ? activeIcon : (icons[activeIcon] || icon);\r\n return Promise.resolve(active ? activeIcon : icon);\r\n }\r\n}\r\n","import {Inject, Injectable} from \"@angular/core\";\r\nimport {\r\n CONFIG_SERVICE,\r\n IConfigService,\r\n IConfiguration,\r\n ILanguageService,\r\n IPromiseService,\r\n ITranslation,\r\n ITranslations,\r\n PROMISE_SERVICE\r\n} from \"../common-types\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\nimport {EventsService} from \"./events.service\";\r\nimport {StorageService} from \"./storage.service\";\r\nimport {UniversalService} from \"./universal.service\";\r\nimport {BaseHttpClient} from \"./base-http.client\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\n\r\n@Injectable()\r\nexport class StaticLanguageService implements ILanguageService {\r\n\r\n get defaultLanguage(): string {\r\n return this.configs.getQueryParameter(\"lang\") || this.storage.get(\"language\", this.browserLang);\r\n }\r\n\r\n get dictionary(): ITranslations {\r\n return this.translations[this.currentLanguage] || {};\r\n }\r\n\r\n set dictionary(value: ITranslations) {\r\n this.translations[this.currentLanguage] = value;\r\n }\r\n\r\n get languages(): ReadonlyArray<string> {\r\n return this.languageList;\r\n }\r\n\r\n get currentLanguage(): string {\r\n return this.currentLang || this.defaultLanguage;\r\n }\r\n\r\n set currentLanguage(lang: string) {\r\n this.currentLang = lang;\r\n this.events.languageChanged.emit(lang);\r\n }\r\n\r\n get editLanguage(): string {\r\n return this.editLang || this.currentLanguage;\r\n }\r\n\r\n set editLanguage(lang: string) {\r\n this.editLang = lang || this.currentLanguage;\r\n }\r\n\r\n get disableTranslations(): boolean {\r\n return this.disableTrans;\r\n }\r\n\r\n set disableTranslations(value: boolean) {\r\n this.disableTrans = value;\r\n this.events.languageChanged.emit(this.currentLang);\r\n }\r\n\r\n get httpClient(): HttpClient {\r\n return this.client;\r\n }\r\n\r\n get config(): IConfiguration {\r\n return this.configs.config;\r\n }\r\n\r\n get browserLang(): string {\r\n if (this.universal.isServer || typeof window.navigator === \"undefined\") {\r\n return \"de\";\r\n }\r\n let browserLang: string = (window.navigator.languages ? window.navigator.languages[0] : null)\r\n || window.navigator.language || window.navigator[\"browserLanguage\"] || window.navigator[\"userLanguage\"] || null;\r\n if (!browserLang) return browserLang;\r\n\r\n [\"-\", \"_\"].forEach(splitter => {\r\n if (browserLang.indexOf(splitter) >= 0) {\r\n browserLang = browserLang.split(splitter)[0];\r\n }\r\n })\r\n return browserLang;\r\n }\r\n\r\n get universal(): UniversalService {\r\n return this.storage.universal;\r\n }\r\n\r\n protected editLang: string;\r\n protected currentLang: string;\r\n protected disableTrans: boolean;\r\n protected languageList: string[];\r\n protected readonly translations: ITranslations;\r\n\r\n constructor(@Inject(EventsService) readonly events: EventsService,\r\n @Inject(StorageService) readonly storage: StorageService,\r\n @Inject(CONFIG_SERVICE) readonly configs: IConfigService,\r\n @Inject(PROMISE_SERVICE) protected promises: IPromiseService,\r\n @Inject(BaseHttpClient) protected client: BaseHttpClient) {\r\n this.editLang = null;\r\n this.currentLang = null;\r\n this.disableTrans = false;\r\n this.languageList = [];\r\n this.translations = {\r\n none: {}\r\n };\r\n this.initService();\r\n }\r\n\r\n protected initService(): void {\r\n\r\n }\r\n\r\n replaceLanguages(languages: string[]): void {\r\n languages = Array.isArray(languages) && languages.length > 0 ? languages : this.languageList;\r\n this.languageList = Array.from(new Set<string>(languages));\r\n this.languageList.forEach(lang => {\r\n this.translations[lang] = this.translations[lang] || {};\r\n });\r\n }\r\n\r\n addLanguages(languages: string[]): void {\r\n if (!Array.isArray(languages) || languages.length == 0) return;\r\n this.replaceLanguages(this.languageList.concat(languages));\r\n }\r\n\r\n getTranslationSync(key: string, params: any = null): string {\r\n const lowerKey = (key || \"\").toLocaleLowerCase();\r\n const translation = this.dictionary[lowerKey] || lowerKey;\r\n return this.interpolate(translation == lowerKey ? key : translation, params);\r\n }\r\n\r\n getTranslation(key: string, params?: any): Promise<string> {\r\n if (!ObjectUtils.isString(key) || !key.length) {\r\n throw new Error(`Parameter \"key\" required`);\r\n }\r\n const translation = ObjectUtils.getValue(this.dictionary, key, key) || key;\r\n return this.promises.resolve(this.interpolate(translation, params));\r\n }\r\n\r\n getTranslations(...keys: string[]): Promise<ITranslations> {\r\n return this.promises.create<ITranslations>(resolve => {\r\n this.promises.all(keys.map(key => this.getTranslation(key))).then(translations => {\r\n resolve(keys.reduce((result, key, i) => {\r\n result[key] = translations[i];\r\n return result;\r\n }, {}));\r\n });\r\n });\r\n }\r\n\r\n getTranslationFromObject(translations: ITranslations, params?: any, lang?: string): string {\r\n lang = lang || this.currentLanguage;\r\n return this.interpolate(translations ? (translations[lang] || \"\") : \"\")\r\n }\r\n\r\n getTranslationFromArray(translations: ITranslation[], params?: any, lang?: string): string {\r\n lang = lang || this.currentLanguage;\r\n const translation = translations ? translations.find(t => t.lang == lang) : null;\r\n return this.interpolate(translation ? translation.translation : \"\", params);\r\n }\r\n\r\n protected interpolate(expr: string | Function, params?: any): string {\r\n if (typeof expr === \"string\") {\r\n return this.interpolateString(expr, params);\r\n }\r\n if (typeof expr === \"function\") {\r\n return expr(params);\r\n }\r\n return expr as string;\r\n }\r\n\r\n protected interpolateString(expr: string, params?: any) {\r\n if (!expr || !params) return expr;\r\n return expr.replace(/{{\\s?([^{}\\s]*)\\s?}}/g, (substring: string, b: string) => {\r\n const r = ObjectUtils.getValue(params, b);\r\n return ObjectUtils.isDefined(r) ? r : substring;\r\n });\r\n }\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\nimport {BehaviorSubject, combineLatest, Observable} from \"rxjs\";\r\nimport {map} from \"rxjs/operators\";\r\nimport {ILanguageSettings, ITranslations} from \"../common-types\";\r\nimport {StaticLanguageService} from \"./static-language.service\";\r\n\r\n@Injectable()\r\nexport class LanguageService extends StaticLanguageService {\r\n\r\n protected translationRequests: ITranslations;\r\n protected settingsPromise: Promise<ILanguageSettings>;\r\n protected languageSettings: BehaviorSubject<ILanguageSettings>;\r\n\r\n get currentLanguage(): string {\r\n return this.currentLang || this.defaultLanguage;\r\n }\r\n\r\n set currentLanguage(lang: string) {\r\n this.useLanguage(lang).then(() => {\r\n this.events.languageChanged.emit(lang);\r\n });\r\n }\r\n\r\n get settings(): ILanguageSettings {\r\n const settings = this.languageSettings.value;\r\n return !settings ? {} : settings.settings[this.currentLanguage] || {};\r\n }\r\n\r\n get $settings(): Observable<any> {\r\n this.loadSettings().then(s => this.languageSettings.next(s));\r\n return combineLatest([this.languageSettings, this.events.languageChanged]).pipe(map(([settings, lang]) => {\r\n return !settings ? {} : settings.settings[lang as string] || {};\r\n }));\r\n }\r\n\r\n protected initService(): void {\r\n this.client.setExtraRequestParam(\"language\", \"de\");\r\n this.translationRequests = {};\r\n this.languageSettings = new BehaviorSubject<ILanguageSettings>(null);\r\n if (this.universal.isServer) return;\r\n window[\"setLanguage\"] = (lang: string) => {\r\n this.currentLanguage = lang;\r\n };\r\n }\r\n\r\n async initFromSettings(): Promise<any> {\r\n const defaultLanguage = this.defaultLanguage;\r\n const settings = await this.loadSettings();\r\n this.languageSettings.next(settings);\r\n const devLanguages = settings.devLanguages || [];\r\n this.languageList = (settings.languages || []).filter(lang => {\r\n return devLanguages.indexOf(lang) < 0;\r\n });\r\n const lang = this.languages.indexOf(defaultLanguage) < 0 ? settings.defaultLanguage : defaultLanguage;\r\n await this.useLanguage(lang);\r\n this.events.languageChanged.emit(lang);\r\n }\r\n\r\n async getTranslation(key: string, params: any = null): Promise<string> {\r\n if (!key) return \"\";\r\n try {\r\n const lowerKey = key.toLocaleLowerCase();\r\n const dict = await this.loadDictionary();\r\n if (lowerKey in dict) {\r\n return this.interpolate(dict[lowerKey], params);\r\n }\r\n return this.interpolate(key, params);\r\n } catch (reason) {\r\n console.log(\"ERROR IN TRANSLATIONS\", reason);\r\n return key;\r\n }\r\n }\r\n\r\n protected async useLanguage(lang: string): Promise<ITranslations> {\r\n lang = this.languages.indexOf(lang) < 0 ? this.languages[0] : lang;\r\n this.client.setExtraRequestParam(\"language\", lang);\r\n if (lang == this.currentLang) return this.dictionary;\r\n this.storage.set(\"language\", lang);\r\n this.currentLang = lang;\r\n const dict = await this.loadDictionary();\r\n this.translations[lang] = dict;\r\n return dict;\r\n }\r\n\r\n protected loadDictionary(): Promise<any> {\r\n const lang = this.currentLanguage;\r\n this.translationRequests[lang] = this.translationRequests[lang] || new Promise(resolve => {\r\n this.httpClient.get(`${this.config.translationUrl}${lang}`).toPromise().then(response => {\r\n response = response || {};\r\n resolve(Object.keys(response).reduce((result, key) => {\r\n result[key.toLocaleLowerCase()] = response[key];\r\n return result;\r\n }, {}));\r\n }, () => {\r\n resolve({});\r\n });\r\n });\r\n return this.translationRequests[lang];\r\n }\r\n\r\n protected loadSettings(): Promise<ILanguageSettings> {\r\n this.settingsPromise = this.settingsPromise || this.client.get(`${this.config.translationUrl}languageSettings`).toPromise()\r\n .then(\r\n (settings: ILanguageSettings) => {\r\n return settings;\r\n }, () => {\r\n return {\r\n languages: [\"de\", \"en\", \"hu\"],\r\n devLanguages: [],\r\n defaultLanguage: \"de\",\r\n settings: {\r\n de: {},\r\n hu: {},\r\n end: {}\r\n }\r\n };\r\n }\r\n );\r\n return this.settingsPromise;\r\n }\r\n}\r\n","import {Inject, Injectable} from \"@angular/core\";\r\nimport {API_SERVICE, IApiService, IOpenApiSchema, IOpenApiSchemas} from \"../common-types\";\r\n\r\n@Injectable()\r\nexport class OpenApiService {\r\n\r\n private schemasPromise: Promise<IOpenApiSchemas>;\r\n\r\n constructor(@Inject(API_SERVICE) readonly api: IApiService) {\r\n\r\n }\r\n\r\n getSchemas(): Promise<IOpenApiSchemas> {\r\n this.schemasPromise = this.schemasPromise || new Promise((resolve => {\r\n this.api.get(\"api-docs\").then(res => {\r\n const schemas: IOpenApiSchemas = res.components?.schemas || res.definitions || {};\r\n Object.values(schemas).forEach(schema => {\r\n Object.keys(schema.properties || {}).forEach(p => {\r\n schema.properties[p].id = p;\r\n });\r\n });\r\n resolve(schemas);\r\n }, () => {\r\n resolve({});\r\n });\r\n }));\r\n return this.schemasPromise;\r\n }\r\n\r\n async getSchema(name: string): Promise<IOpenApiSchema> {\r\n const schemas = await this.getSchemas();\r\n const schema = schemas[name];\r\n if (!schema) return null;\r\n return schemas[name];\r\n }\r\n}\r\n","import {Inject, Injectable} from \"@angular/core\";\r\nimport {ILanguageService, IToasterService, LANGUAGE_SERVICE} from \"../common-types\";\r\n\r\n@Injectable()\r\nexport class ConsoleToasterService implements IToasterService {\r\n\r\n constructor(@Inject(LANGUAGE_SERVICE) private language: ILanguageService) {\r\n\r\n }\r\n\r\n error(message: string, params?: any, title?: string): void {\r\n this.translateMessage(message, params, str => console.log(str, title, \"background: #BD362F; color: #ffffff\"));\r\n }\r\n\r\n info(message: string, params?: any, title?: string): void {\r\n this.translateMessage(message, params, str => console.log(str, title, \"background: #2F96B4; color: #ffffff\"));\r\n }\r\n\r\n success(message: string, params?: any, title?: string): void {\r\n this.translateMessage(message, params, str => console.log(str, title, \"background: #51A351; color: #ffffff\"));\r\n }\r\n\r\n warning(message: string, params?: any, title?: string): void {\r\n this.translateMessage(message, params, str => console.log(str, title, \"background: #F89406; color: #ffffff\"));\r\n }\r\n\r\n private translateMessage(message: string, params: any, callback: (message: string) => void): void {\r\n this.language.getTranslation(message, params).then(callback);\r\n }\r\n}\r\n","import {Inject, Injectable} from \"@angular/core\";\r\nimport {DefaultUrlSerializer, UrlSegment, UrlSegmentGroup, UrlTree} from \"@angular/router\";\r\nimport {ILanguageService, LANGUAGE_SERVICE} from \"../common-types\";\r\n\r\nexport interface IUrlDictionary {\r\n [key: string]: string\r\n}\r\n\r\n@Injectable()\r\nexport class TranslatedUrlSerializer extends DefaultUrlSerializer {\r\n\r\n protected cache: {[lang: string]: IUrlDictionary};\r\n\r\n constructor(@Inject(LANGUAGE_SERVICE) readonly language: ILanguageService) {\r\n super();\r\n this.cache = {};\r\n }\r\n\r\n serialize(tree: UrlTree): string {\r\n const copy = new UrlTree();\r\n const dictionary = this.getDictionary(true);\r\n copy.root = this.modifyTreeRecursive(tree.root, segment => {\r\n segment.path = dictionary[segment.path] || segment.path;\r\n });\r\n copy.queryParams = tree.queryParams;\r\n return super.serialize(copy);\r\n }\r\n\r\n parse(url: string): UrlTree {\r\n const tree = super.parse(url);\r\n const dictionary = this.getDictionary(false);\r\n tree.root = this.modifyTreeRecursive(tree.root, segment => {\r\n segment.path = dictionary[segment.path] || segment.path;\r\n });\r\n return tree;\r\n }\r\n\r\n getDictionary(serialize: boolean): IUrlDictionary {\r\n const method = serialize ? `serialize` : `parse`;\r\n const key = `${this.language.currentLanguage}-${method}`;\r\n if (!this.cache[key]) {\r\n const dict = this.language.dictionary;\r\n this.cache[key] = Object.keys(dict).reduce((res, key) => {\r\n if (!key.startsWith(\"route.\")) return res;\r\n const value = dict[key];\r\n key = key.replace(\"route.\", \"\");\r\n res[serialize ? key : value] = serialize ? value : key;\r\n return res;\r\n }, {});\r\n }\r\n return this.cache[key];\r\n }\r\n\r\n modifyTreeRecursive(segmentGroup: UrlSegmentGroup, cb: (segment: UrlSegment) => void): UrlSegmentGroup {\r\n if (!segmentGroup) return null;\r\n const childrenArr = [];\r\n const children = Object.keys(segmentGroup.children || {}).reduce((res, key) => {\r\n const child = this.modifyTreeRecursive(segmentGroup.children[key], cb);\r\n childrenArr.push(child);\r\n res[key] = child;\r\n return res;\r\n }, {});\r\n const newGroup = new UrlSegmentGroup(segmentGroup.segments.map(s => {\r\n s = new UrlSegment(s.path, Object.assign({}, s.parameters));\r\n cb(s);\r\n return s;\r\n }), children);\r\n childrenArr.forEach(c => {\r\n c.parent = newGroup;\r\n });\r\n return newGroup;\r\n }\r\n}\r\n","import {EventEmitter, Inject, Injectable, NgZone} from \"@angular/core\";\r\nimport {IPromiseService} from \"../common-types\";\r\n\r\n@Injectable()\r\nexport class PromiseService implements IPromiseService {\r\n\r\n get count(): number {\r\n return this.promiseCount;\r\n }\r\n\r\n get onChanged(): EventEmitter<number> {\r\n return this.promiseChanged;\r\n }\r\n\r\n protected promiseCount: number;\r\n protected readonly promiseChanged: EventEmitter<number>;\r\n\r\n constructor(@Inject(NgZone) readonly zone: NgZone) {\r\n this.promiseCount = 0;\r\n this.promiseChanged = new EventEmitter<number>();\r\n }\r\n\r\n create<T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void): Promise<T> {\r\n return this.add(this.zone.runOutsideAngular(() => new Promise<T>(executor)));\r\n }\r\n\r\n all(promises: Promise<any>[]): Promise<any> {\r\n return this.add(this.zone.runOutsideAngular(() => Promise.all(promises)));\r\n }\r\n\r\n resolve<T>(value: T | PromiseLike<T>): Promise<T> {\r\n return this.add(this.zone.runOutsideAngular(() => Promise.resolve(value)));\r\n }\r\n\r\n reject<T>(value: T | PromiseLike<T>): Promise<T> {\r\n return this.add(this.zone.runOutsideAngular(() => Promise.reject(value)));\r\n }\r\n\r\n protected promiseFinished(): void {\r\n if (this.promiseCount == 0) return;\r\n this.promiseCount--;\r\n this.promiseChanged.emit(this.promiseCount);\r\n }\r\n\r\n protected add<T>(promise: Promise<T>): Promise<T> {\r\n this.promiseCount++;\r\n this.promiseChanged.emit(this.promiseCount);\r\n return new Promise<any>((resolve, reject) => {\r\n promise.then(v => {\r\n resolve(v);\r\n this.promiseFinished();\r\n }, r => {\r\n reject(r);\r\n this.promiseFinished();\r\n });\r\n });\r\n }\r\n}\r\n","import {ɵangular_packages_platform_browser_platform_browser_g as EventManagerPlugin} from \"@angular/platform-browser\";\r\nimport {Inject, Injectable} from \"@angular/core\";\r\nimport {DOCUMENT} from \"@angular/common\";\r\nimport { addListener, removeListener } from \"resize-detector\";\r\nimport {StringUtils} from \"../utils/string.utils\";\r\nimport {UniversalService} from \"../services/universal.service\";\r\n\r\nfunction emptyRemove(): void {\r\n\r\n}\r\n\r\n@Injectable()\r\nexport class ResizeEventPlugin extends EventManagerPlugin {\r\n\r\n private static EVENT_NAME: string = \"resize\";\r\n\r\n constructor(@Inject(DOCUMENT) doc: any, public universal: UniversalService) {\r\n super(doc);\r\n }\r\n\r\n supports(eventName) {\r\n return eventName === ResizeEventPlugin.EVENT_NAME;\r\n }\r\n\r\n addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\r\n const zone = this.manager.getZone();\r\n return zone.runOutsideAngular(() => {\r\n if (this.universal.isServer) return emptyRemove;\r\n const cb = el => {\r\n zone.run(() => handler(el));\r\n };\r\n addListener(element, cb);\r\n return () => {\r\n try {\r\n removeListener(element, cb);\r\n } catch (e) {\r\n }\r\n }\r\n });\r\n }\r\n\r\n addGlobalEventListener(element: string, eventName: string, handler: Function): Function {\r\n const zone = this.manager.getZone();\r\n return zone.runOutsideAngular(() => {\r\n if (this.universal.isServer) return emptyRemove;\r\n if (!StringUtils.has(element, \"document\", \"window\")) {\r\n console.error(\"Global resize event other than window or document?\", element);\r\n return emptyRemove;\r\n }\r\n const target: EventTarget = \"window\" == element ? window : document;\r\n const listener = <EventListenerOrEventListenerObject>handler;\r\n target.addEventListener(eventName, listener);\r\n return () => target.removeEventListener(eventName, listener);\r\n });\r\n }\r\n}\r\n","import {ɵangular_packages_platform_browser_platform_browser_g as EventManagerPlugin} from \"@angular/platform-browser\";\r\nimport {Inject, Injectable} from \"@angular/core\";\r\nimport {DOCUMENT} from \"@angular/common\";\r\nimport {StringUtils} from \"../utils/string.utils\";\r\nimport {UniversalService} from \"../services/universal.service\";\r\n\r\nexport function emptyRemove(): void {\r\n\r\n}\r\n\r\n@Injectable()\r\nexport class ScrollEventPlugin extends EventManagerPlugin {\r\n\r\n private static EVENT_NAME: string = \"scroll\";\r\n\r\n constructor(@Inject(DOCUMENT) doc: any, private universal: UniversalService) {\r\n super(doc);\r\n }\r\n\r\n supports(eventName) {\r\n return eventName === ScrollEventPlugin.EVENT_NAME;\r\n }\r\n\r\n addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\r\n const zone = this.manager.getZone();\r\n return zone.runOutsideAngular(() => {\r\n if (this.universal.isServer) return emptyRemove;\r\n const callback = (e: Event) => {\r\n zone.run(() => handler(e));\r\n };\r\n element.addEventListener(eventName, callback);\r\n return () => element.removeEventListener(eventName, callback);\r\n });\r\n }\r\n\r\n addGlobalEventListener(element: string, eventName: string, handler: Function): Function {\r\n const zone = this.manager.getZone();\r\n return zone.runOutsideAngular(() => {\r\n if (this.universal.isServer) return emptyRemove;\r\n if (!StringUtils.has(element, \"document\", \"window\")) {\r\n console.error(\"Global resize event other than window or document?\", element);\r\n return emptyRemove;\r\n }\r\n const target: EventTarget = \"window\" == element ? window : document;\r\n const listener = <EventListenerOrEventListenerObject>handler;\r\n target.addEventListener(eventName, listener);\r\n return () => target.removeEventListener(eventName, listener);\r\n });\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\n\r\n@Pipe({\r\n name: \"chunk\"\r\n})\r\nexport class ChunkPipe implements PipeTransform {\r\n transform(items: any[], count: number): any[] {\r\n const result: any[] = [];\r\n let subResult: any[] = null;\r\n items.forEach((item, index) => {\r\n if (index % count == 0) {\r\n subResult = [];\r\n result.push(subResult);\r\n }\r\n subResult.push(item);\r\n });\r\n return result;\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\nexport interface IEntry {\r\n key: string;\r\n value: any;\r\n index: number;\r\n}\r\n\r\nconst emptyEntries: IEntry[] = [];\r\n\r\n@Pipe({\r\n name: \"entries\"\r\n})\r\nexport class EntriesPipe implements PipeTransform {\r\n\r\n transform(value: any): IEntry[] {\r\n if (!value) return emptyEntries;\r\n const entries: IEntry[] = [];\r\n ObjectUtils.iterate(value, (val, key) => {\r\n entries.push({\r\n key: key,\r\n value: val,\r\n index: entries.length\r\n });\r\n });\r\n return entries;\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {IExtraProperties} from \"../common-types\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\n@Pipe({\r\n name: \"extraItemProperties\"\r\n})\r\nexport class ExtraItemPropertiesPipe implements PipeTransform {\r\n transform(items: any[], properties: IExtraProperties, params: any = {}): any[] {\r\n const keys = Object.keys(properties);\r\n keys.forEach(key => {\r\n const value = properties[key];\r\n properties[key] = ObjectUtils.isFunction(value) ? value : (item, index, params) => {\r\n return ObjectUtils.evaluate(value, {\r\n item: item,\r\n index: index,\r\n params: params\r\n });\r\n };\r\n });\r\n return (items || []).map((item, index) => keys.reduce((result, key) => {\r\n result[key] = properties[key](item, index, params);\r\n return result;\r\n }, {...item}));\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\nexport function defaultFilter() {\r\n return true;\r\n}\r\n\r\n@Pipe({\r\n name: \"filter\"\r\n})\r\nexport class FilterPipe implements PipeTransform {\r\n transform(values: any, filter: any = defaultFilter, params: any = {}): any {\r\n const isObject = ObjectUtils.isObject(values);\r\n if (!isObject && !ObjectUtils.isArray(values)) return [];\r\n const filterFunc = ObjectUtils.isFunction(filter) ? filter : (value, key, params) => {\r\n return ObjectUtils.evaluate(filter, {\r\n value: value,\r\n key: key,\r\n item: value,\r\n index: key,\r\n params: params\r\n });\r\n };\r\n if (isObject) {\r\n return Object.keys(values).filter(key => {\r\n return filterFunc(values[key], key, params);\r\n }).reduce((result, key) => {\r\n result[key] = values[key];\r\n return result;\r\n }, {})\r\n }\r\n return values.filter((value, key) => {\r\n return filterFunc(value, key, params);\r\n });\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\nexport function defaultFilter() {\r\n return true;\r\n}\r\n\r\n@Pipe({\r\n name: \"find\"\r\n})\r\nexport class FindPipe implements PipeTransform {\r\n transform(values: any[], filter: any = defaultFilter, params: any = {}): any[] {\r\n if (!ObjectUtils.isArray(values)) return [];\r\n const filterFunc = ObjectUtils.isFunction(filter) ? filter : (value, index, params) => {\r\n return ObjectUtils.evaluate(filter, {\r\n value: value,\r\n index: index,\r\n params: params\r\n });\r\n };\r\n return values.find((value, index) => filterFunc(value, index, params));\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {FormatterService} from \"../services/formatter.service\";\r\n\r\n@Pipe({\r\n name: \"formatNumber\"\r\n})\r\nexport class FormatNumberPipe implements PipeTransform {\r\n\r\n constructor(private formatter: FormatterService) {\r\n }\r\n\r\n transform(value: number, format?: string, precision?: number, divider?: number): string {\r\n return this.formatter.formatNumber(value, format, precision, divider);\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\n@Pipe({\r\n name: \"getOffset\"\r\n})\r\nexport class GetOffsetPipe implements PipeTransform {\r\n transform(value: any, offset: any): any {\r\n return value ? (ObjectUtils.isNullOrUndefined(offset) ? value : value[offset]) : null;\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\n\r\n@Pipe({\r\n name: \"getType\"\r\n})\r\nexport class GetTypePipe implements PipeTransform {\r\n transform(value: any): any {\r\n return typeof value;\r\n }\r\n}\r\n","import {OnDestroy, OnInit, Pipe, PipeTransform, TemplateRef} from \"@angular/core\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {GlobalTemplateService} from \"../services/global-template.service\";\r\n\r\n@Pipe({\r\n pure: false,\r\n name: \"globalTemplate\"\r\n})\r\nexport class GlobalTemplatePipe implements PipeTransform, OnInit, OnDestroy {\r\n\r\n protected templatesUpdated: Subscription;\r\n\r\n protected cachedTemplateId: string;\r\n protected cachedTemplate: TemplateRef<any>;\r\n\r\n constructor(protected globalTemplates: GlobalTemplateService) {\r\n this.cachedTemplateId = null;\r\n this.cachedTemplate = null;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.templatesUpdated = this.globalTemplates.templatesUpdated.subscribe(() => {\r\n this.cachedTemplate = null;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.templatesUpdated)\r\n this.templatesUpdated.unsubscribe();\r\n }\r\n\r\n transform(templateId: string, component?: any): TemplateRef<string> {\r\n if (this.cachedTemplate == null || this.cachedTemplateId !== templateId) {\r\n this.cachedTemplateId = templateId;\r\n this.cachedTemplate = this.globalTemplates.get(templateId, component);\r\n }\r\n return this.cachedTemplate;\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {IGroupMap} from \"../common-types\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\n@Pipe({\r\n name: \"groupBy\"\r\n})\r\nexport class GroupByPipe implements PipeTransform {\r\n\r\n transform(records: any[], column: string, map: IGroupMap = null): any {\r\n const groups = (records || []).reduce((result: any, item: any) => {\r\n const key = ObjectUtils.getValue(item, column) || \"\";\r\n const col = map ? (map[key] || \"\") : key;\r\n const group: any[] = result[col] || [];\r\n group.push(item);\r\n result[col] = group;\r\n return result;\r\n }, {});\r\n return Object.keys(groups).map(key => {\r\n return {group: key, items: groups[key]};\r\n });\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\n\r\n@Pipe({\r\n name: \"isType\"\r\n})\r\nexport class IsTypePipe implements PipeTransform {\r\n transform(value: any, type: string): any {\r\n return (typeof value) === type;\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\n@Pipe({\r\n name: \"join\"\r\n})\r\nexport class JoinPipe implements PipeTransform {\r\n\r\n transform(value: any, separator: string = \", \"): string {\r\n return (ObjectUtils.isArray(value))\r\n ? value.join(separator)\r\n : \"\";\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\nconst emptyKeys: any[] = [];\r\n\r\n@Pipe({\r\n name: \"keys\"\r\n})\r\nexport class KeysPipe implements PipeTransform {\r\n\r\n transform(value: any): any[] {\r\n if (!value) return emptyKeys;\r\n return ObjectUtils.isArray(value)\r\n ? Array.from(value.keys())\r\n : Object.keys(value);\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\nexport function defaultMapper(item) {\r\n return item;\r\n}\r\n\r\n@Pipe({\r\n name: \"map\"\r\n})\r\nexport class MapPipe implements PipeTransform {\r\n transform(values: any[], mapper: any = defaultMapper, params: any = {}): any[] {\r\n if (!ObjectUtils.isArray(values)) return [];\r\n const mapperFunc = ObjectUtils.isFunction(mapper) ? mapper : (value, index, params) => {\r\n return ObjectUtils.evaluate(mapper, {\r\n value: value,\r\n index: index,\r\n params: params\r\n });\r\n };\r\n return values.map((value, index) => mapperFunc(value, index, params));\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\nimport {ArrayUtils} from \"../utils/array.utils\";\r\n\r\n@Pipe({\r\n name: \"max\"\r\n})\r\nexport class MaxPipe implements PipeTransform {\r\n transform(value: any[], selector: any = null, params: any = {}): number {\r\n selector = selector || (item => <number>item);\r\n const maxSelector: Function = ObjectUtils.isFunction(value) ? value : (item, index, params) => {\r\n return ObjectUtils.evaluate(selector, {\r\n item: item,\r\n index: index,\r\n params: params\r\n });\r\n };\r\n return ArrayUtils.max(value, (item, index) => maxSelector(item, index, params));\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\nimport {ArrayUtils} from \"../utils/array.utils\";\r\n\r\n@Pipe({\r\n name: \"min\"\r\n})\r\nexport class MinPipe implements PipeTransform {\r\n transform(value: any, selector: any = null, params: any = {}): number {\r\n selector = selector || (item => <number>item);\r\n const minSelector: Function = ObjectUtils.isFunction(value) ? value : (item, index, params) => {\r\n return ObjectUtils.evaluate(selector, {\r\n item: item,\r\n index: index,\r\n params: params\r\n });\r\n };\r\n return ArrayUtils.min(value, (item, index) => minSelector(item, index, params));\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\nexport function defaultReducer(result) {\r\n return result;\r\n}\r\n\r\n@Pipe({\r\n name: \"reduce\"\r\n})\r\nexport class ReducePipe implements PipeTransform {\r\n transform(values: any[], source: any, reducer: any = defaultReducer, params: any = {}): any {\r\n if (!ObjectUtils.isArray(values)) return [];\r\n const mapperFunc = ObjectUtils.isFunction(reducer) ? reducer : (result, value, index, params) => {\r\n return ObjectUtils.evaluate(reducer, {\r\n result: result,\r\n value: value,\r\n index: index,\r\n params: params\r\n });\r\n };\r\n return values.reduce((result, value, index) => mapperFunc(result, value, index, params), source);\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\nconst empty: any = {};\r\n\r\n@Pipe({\r\n name: \"remap\"\r\n})\r\nexport class RemapPipe implements PipeTransform {\r\n\r\n transform(map: any, source: any, defaultValue: string = \"key\"): any {\r\n if (!map) return empty;\r\n if (!source) return map;\r\n const remapped = ObjectUtils.filter({map: ObjectUtils.copy(map)}, (value, key, target) => {\r\n if (ObjectUtils.isArray(value) && value.every(ObjectUtils.isString)) {\r\n target[key] = value.reduce((result, k) => {\r\n result[k] = ObjectUtils.getValue(source, k, ObjectUtils.evaluate(defaultValue, {key: k, map: map, source: source}));\r\n return result;\r\n }, {});\r\n return false;\r\n }\r\n return true;\r\n });\r\n return remapped.map;\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\n\r\n@Pipe({\r\n name: \"replace\"\r\n})\r\nexport class ReplacePipe implements PipeTransform {\r\n\r\n transform(value: string, from: string | RegExp, to: string): string {\r\n return value ? value.replace(from, to) : value;\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\nconst emptyArray: any[] = [];\r\n\r\n@Pipe({\r\n name: \"reverse\"\r\n})\r\nexport class ReversePipe implements PipeTransform {\r\n\r\n transform(value: any[]): any[] {\r\n if (!ObjectUtils.isArray(value)) return emptyArray;\r\n const result = [];\r\n for (let i = value.length - 1; i >= 0; i--) {\r\n result.push(value[i]);\r\n }\r\n return result;\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {FormatterService} from \"../services/formatter.service\";\r\n\r\n@Pipe({\r\n name: \"round\"\r\n})\r\nexport class RoundPipe implements PipeTransform {\r\n\r\n constructor(private formatter: FormatterService) {\r\n }\r\n\r\n transform(value: number, precision: number = 2, divider: number = 1): number {\r\n return this.formatter.roundNumber(value, precision, divider);\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {DomSanitizer, SafeHtml} from \"@angular/platform-browser\";\r\n\r\n@Pipe({\r\n name: \"safe\"\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n\r\n }\r\n\r\n transform(value: string, type: string = \"html\"): SafeHtml {\r\n switch (type) {\r\n case \"html\":\r\n return this.sanitizer.bypassSecurityTrustHtml(value);\r\n case \"style\":\r\n return this.sanitizer.bypassSecurityTrustStyle(value);\r\n case \"script\":\r\n return this.sanitizer.bypassSecurityTrustScript(value);\r\n case \"url\":\r\n return this.sanitizer.bypassSecurityTrustUrl(value);\r\n case \"resourceUrl\":\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(value);\r\n default:\r\n throw new Error(`SafePipe unable to bypass security for invalid type: ${type}`);\r\n }\r\n }\r\n}\r\n","import {ChangeDetectorRef, Inject, Injectable, Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ILanguageService, LANGUAGE_SERVICE, TranslationQuery} from \"../common-types\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: \"translate\",\r\n pure: false\r\n})\r\nexport class TranslatePipe implements PipeTransform {\r\n\r\n private lang: string;\r\n private disabled: boolean;\r\n private query: TranslationQuery;\r\n private args: any[];\r\n private params: any;\r\n private lastValue: string;\r\n\r\n get currentLang(): string {\r\n return this.language.currentLanguage\r\n }\r\n\r\n constructor(readonly cdr: ChangeDetectorRef, @Inject(LANGUAGE_SERVICE) readonly language: ILanguageService) {\r\n\r\n }\r\n\r\n transform(query: TranslationQuery, ...args: any[]): string {\r\n if (!query) return \"\";\r\n let dirty = false;\r\n const lang = this.currentLang;\r\n if (this.lang !== lang) {\r\n this.lang = lang;\r\n dirty = true;\r\n }\r\n const disabled = this.language.disableTranslations;\r\n if (this.disabled !== disabled) {\r\n this.disabled = disabled;\r\n dirty = true;\r\n }\r\n if (!ObjectUtils.equals(this.query, query)) {\r\n this.query = query;\r\n dirty = true;\r\n }\r\n if (!ObjectUtils.equals(this.args, args)) {\r\n this.args = args;\r\n this.params = null;\r\n if (ObjectUtils.isDefined(args[0]) && args.length) {\r\n if (typeof args[0] === \"string\" && args[0].length) {\r\n const validArgs: string = args[0]\r\n .replace(/(\\')?([a-zA-Z0-9_]+)(\\')?(\\s)?:/g, `\"$2\":`)\r\n .replace(/:(\\s)?(\\')(.*?)(\\')/g, `:\"$3\"`);\r\n try {\r\n this.params = JSON.parse(validArgs);\r\n } catch (e) {\r\n throw new SyntaxError(`Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`);\r\n }\r\n } else if (typeof args[0] === \"object\" && !Array.isArray(args[0])) {\r\n this.params = args[0];\r\n }\r\n }\r\n dirty = true;\r\n }\r\n if (dirty) {\r\n if (typeof query === \"object\") {\r\n this.lastValue = Array.isArray(query) ? this.language.getTranslationFromArray(query, this.params, lang) : this.language.getTranslationFromObject(query, this.params, lang);\r\n return this.lastValue;\r\n }\r\n if (this.disabled) {\r\n this.lastValue = query;\r\n return this.lastValue;\r\n }\r\n this.language.getTranslation(query, this.params).then(value => {\r\n this.lastValue = value;\r\n if (!this.cdr[\"destroyed\"]) {\r\n this.cdr.detectChanges();\r\n }\r\n });\r\n }\r\n return this.lastValue;\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\nconst emptyValues: any[] = [];\r\n\r\n@Pipe({\r\n name: \"values\"\r\n})\r\nexport class ValuesPipe implements PipeTransform {\r\n\r\n transform(value: any): any[] {\r\n if (!value) return emptyValues;\r\n return ObjectUtils.isArray(value)\r\n ? value\r\n : Object.keys(value).map(key => value[key]);\r\n }\r\n}\r\n","import {EventEmitter, Inject, Input, Output, Directive, HostBinding, HostListener} from \"@angular/core\";\r\nimport {TOASTER_SERVICE, IToasterService, IAsyncMessage, AsyncMethod} from \"../common-types\";\r\n\r\n@Directive({\r\n selector: \"[async-method]\",\r\n exportAs: \"async-method\"\r\n})\r\nexport class AsyncMethodDirective {\r\n\r\n @Input(\"async-method\") method: AsyncMethod;\r\n @Input() disabled: boolean;\r\n @Input() context: any;\r\n\r\n @Output() onSuccess: EventEmitter<IAsyncMessage>;\r\n @Output() onError: EventEmitter<IAsyncMessage>;\r\n\r\n private loading: boolean;\r\n\r\n @HostBinding(\"class.disabled\")\r\n get isDisabled(): boolean {\r\n return this.disabled;\r\n }\r\n\r\n @HostBinding(\"class.loading\")\r\n get isLoading(): boolean {\r\n return this.loading;\r\n }\r\n\r\n constructor(@Inject(TOASTER_SERVICE) private toaster: IToasterService) {\r\n this.onSuccess = new EventEmitter<IAsyncMessage>();\r\n this.onError = new EventEmitter<IAsyncMessage>();\r\n }\r\n\r\n @HostListener(\"click\")\r\n click(): void {\r\n if (this.disabled) return;\r\n this.callMethod();\r\n }\r\n\r\n callMethod(): void {\r\n if (this.loading) return;\r\n this.loading = true;\r\n this.method(this.context).then(result => {\r\n this.loading = false;\r\n if (result) {\r\n this.onSuccess.emit(result);\r\n this.toaster.success(result.message, result.context);\r\n }\r\n }, reason => {\r\n if (!reason || !reason.message)\r\n throw new Error(\"Reason must implement IAsyncMessage interface\");\r\n this.loading = false;\r\n this.onError.emit(reason);\r\n this.toaster.error(reason.message, reason.context);\r\n });\r\n }\r\n}\r\n","import {Directive, ElementRef, Input, OnChanges, Renderer2, SimpleChanges} from \"@angular/core\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {FileUtils} from \"../utils/file.utils\";\r\nimport {UniversalService} from \"../services/universal.service\";\r\n\r\nconst defaultClass = \"default-image\";\r\nconst loadingClass = \"loading-image\";\r\n\r\n@Directive({\r\n selector: \"[background]\"\r\n})\r\nexport class BackgroundDirective implements OnChanges {\r\n\r\n @Input() background: string;\r\n @Input() backgroundSize: string;\r\n\r\n constructor(private http: HttpClient, private element: ElementRef, private renderer: Renderer2, private universal: UniversalService) {\r\n\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.universal.isServer) {\r\n this.setBackground(this.background);\r\n return;\r\n }\r\n this.renderer.removeClass(this.element.nativeElement, defaultClass);\r\n this.renderer.addClass(this.element.nativeElement, loadingClass);\r\n FileUtils.readDataFromUrl(this.http, this.background).then(url => {\r\n this.setBackground(url);\r\n }, () => {\r\n this.renderer.removeClass(this.element.nativeElement, loadingClass);\r\n this.renderer.addClass(this.element.nativeElement, defaultClass);\r\n });\r\n }\r\n\r\n private setBackground(url: string): void {\r\n this.renderer.removeClass(this.element.nativeElement, loadingClass);\r\n this.renderer.setStyle(this.element.nativeElement, \"background-image\", `url('${url}')`);\r\n if (!this.backgroundSize) return;\r\n this.renderer.setStyle(this.element.nativeElement, \"background-size\", this.backgroundSize);\r\n }\r\n}\r\n","import {Directive, Input, TemplateRef} from \"@angular/core\";\r\nimport {ITableTemplate} from \"../common-types\";\r\n\r\n@Directive({\r\n selector: \"ng-template[column]\"\r\n})\r\n\r\nexport class DynamicTableTemplateDirective implements ITableTemplate {\r\n\r\n @Input() column: string | string[];\r\n @Input() pure: boolean;\r\n\r\n constructor(public ref: TemplateRef<any>) {\r\n }\r\n}\r\n","import {Directive, Input, OnDestroy, OnInit, TemplateRef} from \"@angular/core\";\r\nimport {GlobalTemplateService} from \"../services/global-template.service\";\r\n\r\n@Directive({\r\n selector: \"[globalTemplate]\"\r\n})\r\nexport class GlobalTemplateDirective implements OnInit, OnDestroy {\r\n\r\n @Input(\"globalTemplate\") id: string;\r\n\r\n constructor(public readonly globalTemplateService: GlobalTemplateService,\r\n public readonly template: TemplateRef<any>) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.globalTemplateService.add(this.id, this.template);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.globalTemplateService.remove(this.id);\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n SimpleChanges\r\n} from \"@angular/core\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {ICON_SERVICE, IIconService} from \"../common-types\";\r\n\r\n@Directive({\r\n selector: \"[icon]\"\r\n})\r\nexport class IconDirective implements OnChanges, OnInit, OnDestroy {\r\n\r\n @Input() icon: string;\r\n @Input() activeIcon: string;\r\n @Input() active: boolean;\r\n @Output() activeChange: EventEmitter<boolean>;\r\n\r\n @HostBinding(\"class.active\")\r\n get isActive() {\r\n return this.active;\r\n }\r\n\r\n protected iconsLoaded: Subscription;\r\n\r\n constructor(private element: ElementRef, private renderer: Renderer2, @Inject(ICON_SERVICE) private icons: IIconService) {\r\n this.renderer.addClass(this.element.nativeElement, \"svg-icon\");\r\n this.activeChange = new EventEmitter<boolean>();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.iconsLoaded = this.icons.iconsLoaded.subscribe(() => this.changeIcon());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.iconsLoaded)\r\n this.iconsLoaded.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.icon) {\r\n this.renderer.removeClass(this.element.nativeElement, `svg-icon-${changes.icon.previousValue}`);\r\n this.renderer.addClass(this.element.nativeElement, `svg-icon-${changes.icon.currentValue}`);\r\n }\r\n this.changeIcon();\r\n }\r\n\r\n @HostListener(\"click\")\r\n click(): void {\r\n this.active = !this.active;\r\n this.activeChange.emit(this.active);\r\n this.changeIcon();\r\n }\r\n\r\n private changeIcon(): void {\r\n this.icons.getIcon(this.icon, this.activeIcon || `${this.icon}-active`, this.active).then(icon => {\r\n if (this.icons.isDisabled) return;\r\n this.element.nativeElement.innerHTML = icon;\r\n });\r\n }\r\n}\r\n","import {\r\n Directive, DoCheck,\r\n EmbeddedViewRef,\r\n Input,\r\n OnChanges,\r\n SimpleChange,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewContainerRef\r\n} from \"@angular/core\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\n\r\n@Directive({\r\n selector: \"[ngxTemplateOutlet]\"\r\n})\r\nexport class NgxTemplateOutletDirective implements OnChanges, DoCheck {\r\n\r\n private viewRef: EmbeddedViewRef<any>;\r\n\r\n @Input() public context: Object;\r\n @Input() public additionalContext: Object;\r\n @Input() public ngxTemplateOutlet: TemplateRef<any>;\r\n\r\n private static hasContextShapeChanged(ctxChange: SimpleChange): boolean {\r\n const prevCtxKeys = Object.keys(ctxChange.previousValue || {});\r\n const currCtxKeys = Object.keys(ctxChange.currentValue || {});\r\n\r\n if (prevCtxKeys.length === currCtxKeys.length) {\r\n for (const propName of currCtxKeys) {\r\n if (prevCtxKeys.indexOf(propName) === -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n constructor(private _viewContainerRef: ViewContainerRef) {}\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const recreateView = this.shouldRecreateView(changes);\r\n if (recreateView) {\r\n if (this.viewRef)\r\n this._viewContainerRef.remove(this._viewContainerRef.indexOf(this.viewRef));\r\n if (this.ngxTemplateOutlet)\r\n this.viewRef = this._viewContainerRef.createEmbeddedView(this.ngxTemplateOutlet, {});\r\n }\r\n this.ngDoCheck();\r\n }\r\n\r\n ngDoCheck(): void {\r\n if (!this.viewRef) return;\r\n const context = this.viewRef.context;\r\n this.updateExistingContext(this.context, context);\r\n this.updateExistingContext(this.additionalContext, context);\r\n context.$implicit = context;\r\n }\r\n\r\n private shouldRecreateView(changes: SimpleChanges): boolean {\r\n const ctxChange = changes[\"context\"];\r\n const aCtxChange = changes[\"additionalContext\"];\r\n return !!changes[\"ngxTemplateOutlet\"]\r\n || (ctxChange && NgxTemplateOutletDirective.hasContextShapeChanged(ctxChange))\r\n || (aCtxChange && NgxTemplateOutletDirective.hasContextShapeChanged(aCtxChange));\r\n }\r\n\r\n private updateExistingContext(ctx: any, context: any): void {\r\n if (!ctx) return;\r\n let ctxProto = Object.getPrototypeOf(ctx);\r\n if (ctxProto == Object.prototype) {\r\n ctxProto = ctx;\r\n }\r\n const props = Object.getOwnPropertyNames(ctxProto);\r\n for (const propName of props) {\r\n const desc = Object.getOwnPropertyDescriptor(ctxProto, propName);\r\n // Copy if its a getter and it is not $implicit\r\n if (desc.get && propName !== \"$implicit\") {\r\n Object.defineProperty(context, propName, desc);\r\n continue;\r\n }\r\n const func: Function = ObjectUtils.isFunction(desc.value) ? desc.value.bind(ctx) : null;\r\n if (func && func !== ctxProto.constructor) {\r\n context[propName] = func;\r\n }\r\n }\r\n for (const propName of Object.keys(ctx)) {\r\n\r\n const desc = Object.getOwnPropertyDescriptor(ctxProto, propName);\r\n if (desc && desc.get && !desc.set) continue;\r\n context[propName] = ctx[propName];\r\n }\r\n }\r\n}\r\n","import {Directive, EventEmitter, Input, NgZone, OnChanges, Output, SimpleChanges} from \"@angular/core\";\r\nimport {IPaginationData, ITimer, PaginationDataLoader, PaginationItemContext} from \"../common-types\";\r\nimport {TimerUtils} from \"../utils/timer.utils\";\r\n\r\n@Directive({\r\n selector: \"[pagination]\",\r\n exportAs: \"pagination\"\r\n})\r\nexport class PaginationDirective implements OnChanges {\r\n\r\n get total(): number {\r\n return this.data ? this.data.total : 0;\r\n }\r\n\r\n get items(): any[] {\r\n return this.data ? this.data.items : [];\r\n }\r\n\r\n @Input(\"pagination\") loader: PaginationDataLoader;\r\n @Input() page: number;\r\n @Input() itemsPerPage: number;\r\n @Input() updateTime: number;\r\n @Input() waitFor: Promise<any>;\r\n\r\n @Output() pageChange: EventEmitter<number>;\r\n @Output() onRefresh: EventEmitter<PaginationDirective>;\r\n\r\n maxPage: number;\r\n\r\n private data: IPaginationData;\r\n private updateTimer: ITimer;\r\n\r\n constructor(private zone: NgZone) {\r\n this.pageChange = new EventEmitter<number>();\r\n this.onRefresh = new EventEmitter<PaginationDirective>();\r\n this.updateTimer = TimerUtils.createTimeout(() => this.loadData(), this.updateTime);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!changes.loader && !changes.itemsPerPage && !changes.page) return;\r\n this.page = isNaN(this.page) || this.page < 1 ? 1 : this.page;\r\n this.itemsPerPage = isNaN(this.itemsPerPage) || this.itemsPerPage < 1 ? 20 : this.itemsPerPage;\r\n this.updateTimer.time = isNaN(this.updateTime) || this.updateTime < 0 ? 100 : this.updateTime;\r\n this.waitFor = this.waitFor || Promise.resolve(true);\r\n this.refresh();\r\n }\r\n\r\n refresh(): void {\r\n this.waitFor.then(() => {\r\n this.updateTimer.run();\r\n });\r\n }\r\n\r\n paginate(page: number): void {\r\n this.page = page;\r\n this.pageChange.emit(page);\r\n this.refresh();\r\n }\r\n\r\n private loadData(): void {\r\n if (!this.loader) return;\r\n this.loader(this.page, this.itemsPerPage).then(data => {\r\n this.maxPage = !data || data.total <= 0 ? 1 : Math.floor((data.total - 1) / this.itemsPerPage) + 1;\r\n this.data = data;\r\n const baseIndex = (this.page - 1) * this.itemsPerPage;\r\n const items = (data.items || []);\r\n data.items = items.map((item, index) => {\r\n const ix = baseIndex + index;\r\n return item instanceof PaginationItemContext\r\n ? item\r\n : new PaginationItemContext(item, items, items.length, index, ix);\r\n });\r\n if (this.page > this.maxPage) {\r\n this.paginate(this.maxPage);\r\n return;\r\n }\r\n this.zone.run(() => this.onRefresh.emit(this));\r\n });\r\n }\r\n}\r\n","import {Directive, OnDestroy, OnInit, TemplateRef, ViewContainerRef} from \"@angular/core\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {PaginationDirective} from \"./pagination.directive\";\r\n\r\n@Directive({\r\n selector: \"[paginationItem]\"\r\n})\r\nexport class PaginationItemDirective implements OnInit, OnDestroy {\r\n\r\n private onRefresh: Subscription;\r\n\r\n constructor(private pagination: PaginationDirective, private viewContainer: ViewContainerRef, private templateRef: TemplateRef<any>) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.onRefresh = this.pagination.onRefresh.subscribe(() => this.renderView());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.onRefresh.unsubscribe();\r\n }\r\n\r\n private renderView(): void {\r\n this.viewContainer.clear();\r\n this.pagination.items.forEach((item: any) => {\r\n item.$implicit = item;\r\n this.viewContainer.createEmbeddedView(this.templateRef, item);\r\n });\r\n }\r\n}\r\n","import {Directive, ViewContainerRef, TemplateRef, Input} from \"@angular/core\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {ResourceIfContext} from \"../common-types\";\r\nimport {FileUtils} from \"../utils/file.utils\";\r\nimport {UniversalService} from \"../services/universal.service\";\r\n\r\n@Directive({\r\n selector: \"[resourceIf]\",\r\n exportAs: \"resourceIf\"\r\n})\r\nexport class ResourceIfDirective {\r\n\r\n private context: ResourceIfContext;\r\n private resource: string;\r\n\r\n @Input()\r\n set resourceIf(resource: string) {\r\n this.resource = resource;\r\n this.renderView();\r\n }\r\n\r\n get resourceIf(): string {\r\n return this.resource;\r\n }\r\n\r\n get url(): string {\r\n return this.context.url;\r\n }\r\n\r\n constructor(private http: HttpClient, private viewContainer: ViewContainerRef, private templateRef: TemplateRef<any>, private universal: UniversalService) {\r\n this.context = new ResourceIfContext();\r\n }\r\n\r\n private renderView(): void {\r\n this.context = new ResourceIfContext();\r\n this.context.resource = this.resource;\r\n this.viewContainer.clear();\r\n if (this.universal.isBrowser && this.resource) {\r\n FileUtils.readDataFromUrl(this.http, this.resource).then(url => {\r\n this.context.url = url;\r\n this.viewContainer.createEmbeddedView(this.templateRef, this.context);\r\n }, console.log);\r\n }\r\n }\r\n}\r\n","import {ChangeDetectorRef, Directive, ElementRef, HostBinding, HostListener, OnDestroy, OnInit} from \"@angular/core\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {ITimer} from \"../common-types\";\r\nimport {TimerUtils} from \"../utils/timer.utils\";\r\nimport {EventsService} from \"../services/events.service\";\r\n\r\n@Directive({\r\n selector: \"[sticky]\"\r\n})\r\nexport class StickyDirective implements OnInit, OnDestroy {\r\n\r\n @HostBinding(\"class.sticky\") isSticky: boolean;\r\n @HostBinding(\"class.sticky-update\") isUpdating: boolean;\r\n parentElement: HTMLElement;\r\n\r\n private updateTimer: ITimer;\r\n private eventForwarded: Subscription;\r\n\r\n constructor(private cdr: ChangeDetectorRef, private events: EventsService, private element: ElementRef) {\r\n this.parentElement = this.element.nativeElement.parentElement;\r\n this.updateTimer = TimerUtils.createTimeout(() => {\r\n this.isUpdating = false;\r\n this.cdr.detectChanges();\r\n this.events.updateSticky(this.isSticky);\r\n }, 10);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.eventForwarded = this.events.eventForwarded.subscribe((e: Event) => {\r\n if (e && e.type === \"scroll\") this.updateSticky();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.eventForwarded.unsubscribe();\r\n }\r\n\r\n @HostListener(\"window:resize\")\r\n @HostListener(\"window:scroll\")\r\n updateSticky(): void {\r\n const distanceToTop = this.parentElement.getBoundingClientRect().top;\r\n this.isSticky = distanceToTop < 1;\r\n this.isUpdating = true;\r\n this.cdr.detectChanges();\r\n this.updateTimer.run();\r\n }\r\n}\r\n","import {Directive, ElementRef, Input, OnChanges, Renderer2, SimpleChanges, ViewContainerRef} from \"@angular/core\";\r\nimport {UnorderedListStyle, UnorderedListTemplates, UnorederedListTemplate} from \"../common-types\";\r\nimport {ObjectUtils} from \"../utils/object.utils\";\r\nimport {StringUtils} from \"../utils/string.utils\";\r\n\r\n@Directive({\r\n selector: \"[unorderedListItem]\"\r\n})\r\nexport class UnorderedListItemDirective implements OnChanges {\r\n\r\n @Input(\"unorderedListItem\") item: any;\r\n @Input() type: string;\r\n @Input() data: any;\r\n @Input() keyPrefix: string;\r\n @Input() listStyle: UnorderedListStyle;\r\n @Input() path: string;\r\n @Input() level: number;\r\n @Input() templates: UnorederedListTemplate[];\r\n @Input() defaultTemplates: UnorderedListTemplates;\r\n\r\n isArray: boolean;\r\n isObject: boolean;\r\n valueIsArray: boolean;\r\n valueIsObject: boolean;\r\n valueType: string;\r\n\r\n get elem(): HTMLElement {\r\n return this.elementRef.nativeElement;\r\n }\r\n\r\n constructor(private elementRef: ElementRef, private renderer: Renderer2, private viewContainer: ViewContainerRef) {\r\n\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.templates || !this.defaultTemplates || !this.item) return;\r\n const promise = this.item.value instanceof Promise ? this.item.value : Promise.resolve(this.item.value);\r\n promise.then(value => {\r\n this.item.value = value;\r\n this.path = ObjectUtils.isNullOrUndefined(this.path) ? \"\" : this.path.toString();\r\n this.isArray = ObjectUtils.isArray(this.data);\r\n this.isObject = ObjectUtils.isObject(this.data);\r\n this.valueIsArray = ObjectUtils.isArray(this.item.value);\r\n this.valueIsObject = ObjectUtils.isObject(this.item.value);\r\n this.valueType = ObjectUtils.getType(this.item.value);\r\n const context: any = this;\r\n const template = this.templates.find(t => t.type == this.type && ObjectUtils.evaluate(t.selector, context)) || this.defaultTemplates[this.type];\r\n // Set view\r\n this.viewContainer.clear();\r\n this.viewContainer.createEmbeddedView(template, context);\r\n // Set classes\r\n if (this.type !== \"item\") return;\r\n this.item.classList = [];\r\n this.isClass(\"is-array\", this.valueIsArray);\r\n this.isClass(\"is-object\", this.valueIsObject);\r\n this.isClass(\"is-value\", !this.valueIsObject && !this.valueIsArray);\r\n this.isClass(`type-${this.valueType}`);\r\n this.isClass(`path-${this.path.replace(/\\./g, \"-\")}`);\r\n this.isClass(`key-${this.item.key}`);\r\n }, reason => {\r\n console.log(\"Can't handle promise rejection\", reason);\r\n });\r\n }\r\n\r\n private isClass(className: string, value: boolean = true): void {\r\n if (!value) return;\r\n this.item.classList.push(className);\r\n }\r\n}\r\n","import {Directive, ElementRef, EmbeddedViewRef, Input, TemplateRef} from \"@angular/core\";\r\nimport {UnorederedListTemplate} from \"../common-types\";\r\n\r\n@Directive({\r\n selector: \"ng-template[type][selector]\"\r\n})\r\n\r\nexport class UnorderedListTemplateDirective extends UnorederedListTemplate {\r\n\r\n @Input() type: string;\r\n @Input() selector: string;\r\n\r\n constructor(public elementRef: ElementRef, public templateRef: TemplateRef<any>) {\r\n super();\r\n }\r\n\r\n createEmbeddedView(context: any): EmbeddedViewRef<any> {\r\n return this.templateRef.createEmbeddedView(context);\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n Input,\r\n OnChanges,\r\n QueryList,\r\n SimpleChanges, TemplateRef, ViewChild\r\n} from \"@angular/core\";\r\nimport {UnorderedListStyle, UnorderedListTemplates, UnorederedListTemplate} from \"../../common-types\";\r\nimport {ObjectUtils} from \"../../utils/object.utils\";\r\nimport {UnorderedListTemplateDirective} from \"../../directives/unordered-list-template.directive\";\r\n\r\n@Component({\r\n selector: \"unordered-list\",\r\n templateUrl: \"./unordered-list.component.html\"\r\n})\r\nexport class UnorderedListComponent implements OnChanges, AfterContentInit, AfterViewInit {\r\n\r\n @Input() data: any;\r\n @Input() keyPrefix: string;\r\n @Input() listStyle: UnorderedListStyle;\r\n @Input() path: string;\r\n @Input() level: number;\r\n @Input() templates: UnorederedListTemplate[];\r\n\r\n isArray: boolean;\r\n isObject: boolean;\r\n defaultTemplates: UnorderedListTemplates;\r\n\r\n @ContentChildren(UnorderedListTemplateDirective)\r\n private templateDirectives: QueryList<UnorderedListTemplateDirective>;\r\n\r\n @ViewChild(\"defaultKeyTemplate\")\r\n private defaultKeyTemplate: TemplateRef<any>;\r\n @ViewChild(\"defaultValueTemplate\")\r\n private defaultValueTemplate: TemplateRef<any>;\r\n @ViewChild(\"defaultItemTemplate\")\r\n private defaultItemTemplate: TemplateRef<any>;\r\n\r\n constructor(private cdr: ChangeDetectorRef) {\r\n this.keyPrefix = \"\";\r\n this.listStyle = \"table\";\r\n this.path = \"\";\r\n this.level = 0;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.isArray = ObjectUtils.isArray(this.data);\r\n this.isObject = ObjectUtils.isObject(this.data);\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n const templates = this.templateDirectives.toArray();\r\n this.templates = this.templates ? this.templates.concat(templates) : templates;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.defaultTemplates = {\r\n key: this.defaultKeyTemplate,\r\n value: this.defaultValueTemplate,\r\n item: this.defaultItemTemplate\r\n };\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n","import {\r\n AfterContentInit, AfterViewInit,\r\n Component,\r\n ContentChild,\r\n ContentChildren,\r\n Input,\r\n OnChanges,\r\n QueryList,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild\r\n} from \"@angular/core\";\r\nimport {\r\n IPaginationData,\r\n ITableColumns,\r\n ITableTemplates,\r\n PaginationItemContext,\r\n TableDataLoader\r\n} from \"../../common-types\";\r\nimport {ObjectUtils} from \"../../utils/object.utils\";\r\nimport {DynamicTableTemplateDirective} from \"../../directives/dynamic-table-template.directive\";\r\nimport {PaginationDirective} from \"../../directives/pagination.directive\";\r\nimport {UniqueUtils} from \"../../utils/unique.utils\";\r\n\r\n@Component({\r\n selector: \"dynamic-table\",\r\n templateUrl: \"./dynamic-table.component.html\",\r\n})\r\nexport class DynamicTableComponent implements AfterContentInit, AfterViewInit, OnChanges {\r\n\r\n @Input() label: string;\r\n @Input() placeholder: string;\r\n @Input() dataLoader: TableDataLoader;\r\n @Input() data: any[];\r\n @Input() parallelData: any[];\r\n @Input() columns: ITableColumns | string[];\r\n @Input() showFilter: boolean;\r\n @Input() itemsPerPage: number;\r\n @Input() updateTime: number;\r\n @Input() maxPages: number;\r\n @Input() directionLinks: boolean;\r\n @Input() boundaryLinks: boolean;\r\n @Input() orderBy: string;\r\n @Input() orderDescending: boolean;\r\n\r\n tableId: string;\r\n templates: ITableTemplates;\r\n filter: string;\r\n orders: ITableColumns;\r\n cols: string[];\r\n\r\n get items(): any[] {\r\n return !this.pagination ? [] : this.pagination.items;\r\n }\r\n\r\n @ContentChild(\"rowTemplate\", {static: true})\r\n rowTemplate: TemplateRef<any>;\r\n\r\n @ContentChild(\"wrapperTemplate\", {static: true})\r\n wrapperTemplate: TemplateRef<any>;\r\n\r\n @ContentChild(\"filterTemplate\", {static: true})\r\n filterTemplate: TemplateRef<any>;\r\n\r\n @ViewChild(\"columnsTemplate\", {static: true})\r\n columnsTemplate: TemplateRef<any>;\r\n\r\n @ViewChild(\"defaultRowTemplate\", {static: true})\r\n defaultRowTemplate: TemplateRef<any>;\r\n\r\n @ViewChild(\"defaultWrapperTemplate\", {static: true})\r\n defaultWrapperTemplate: TemplateRef<any>;\r\n\r\n @ViewChild(\"defaultFilterTemplate\", {static: true})\r\n defaultFilterTemplate: TemplateRef<any>;\r\n\r\n @ViewChild(\"pagination\")\r\n private pagination: PaginationDirective;\r\n\r\n @ContentChildren(DynamicTableTemplateDirective)\r\n private templateDirectives: QueryList<DynamicTableTemplateDirective>;\r\n\r\n private static compare(orderBy: string, a: PaginationItemContext, b: PaginationItemContext): number {\r\n a = a.item ? a.item[orderBy] : null;\r\n b = b.item ? b.item[orderBy] : null;\r\n return ObjectUtils.compare(a, b);\r\n }\r\n\r\n constructor() {\r\n this.dataLoader = this.loadLocalData;\r\n this.placeholder = \"\";\r\n this.tableId = UniqueUtils.uuid();\r\n this.templates = {};\r\n this.filter = \"\";\r\n this.orders = {};\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.templates = this.templateDirectives.reduce((result, directive) => {\r\n if (ObjectUtils.isArray(directive.column)) {\r\n directive.column.forEach(column => {\r\n result[column] = directive;\r\n });\r\n return result;\r\n }\r\n if (!ObjectUtils.isString(directive.column) || directive.column.length == 0) return result;\r\n result[directive.column] = directive;\r\n return result;\r\n }, {});\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.rowTemplate = this.rowTemplate || this.defaultRowTemplate;\r\n this.filterTemplate = this.filterTemplate || this.defaultFilterTemplate;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.columns) {\r\n const columns = changes.columns.currentValue || [];\r\n this.orders = ObjectUtils.isArray(columns) ? columns.reduce((result, column) => {\r\n result[column] = column;\r\n return result;\r\n }, {}) : columns;\r\n this.cols = Object.keys(this.orders);\r\n this.orderBy = this.orderBy in this.orders ? this.orderBy : this.columns[0];\r\n }\r\n if (changes.orderBy && this.orders) {\r\n this.orderBy = this.orderBy in this.orders ? this.orderBy : this.columns[0];\r\n }\r\n if (!changes.data && !changes.parallelData && !changes.itemsPerPage && !changes.orderBy && !changes.orderDescending) return;\r\n this.refresh();\r\n }\r\n\r\n refresh(): void {\r\n if (!this.pagination) return;\r\n this.pagination.refresh();\r\n }\r\n\r\n setFilter(filter: string): void {\r\n this.filter = filter;\r\n this.refresh();\r\n }\r\n\r\n setOrder(column: string): void {\r\n this.orderDescending = column == this.orderBy && !this.orderDescending;\r\n this.orderBy = column;\r\n this.refresh();\r\n }\r\n\r\n loadData = (page: number, itemsPerPage: number): Promise<IPaginationData> => {\r\n const orderBy = this.orders[this.orderBy];\r\n return this.dataLoader(page, itemsPerPage, orderBy, this.orderDescending, this.filter);\r\n };\r\n\r\n private loadLocalData(page: number, rowsPerPage: number, orderBy: string, orderDescending: boolean, filter: string): Promise<IPaginationData> {\r\n if (!this.data) {\r\n return Promise.resolve({\r\n total: 0,\r\n items: []\r\n });\r\n }\r\n const compare: (a: any, b: any) => number = orderDescending\r\n ? (a, b) => DynamicTableComponent.compare(orderBy, b, a)\r\n : (a, b) => DynamicTableComponent.compare(orderBy, a, b);\r\n const from = (page - 1) * rowsPerPage;\r\n const dataLength = this.data.length;\r\n const length = Math.min(rowsPerPage, dataLength - from);\r\n const parallelData = this.parallelData || [];\r\n let data = this.data.map((item, ix) => {\r\n return new PaginationItemContext(item, parallelData[ix] || {}, dataLength, ix, ix);\r\n });\r\n if (ObjectUtils.isString(filter) && filter.length > 0) {\r\n const filterRx = new RegExp(filter, \"gi\");\r\n data = data.filter(c => c.filter(filterRx));\r\n }\r\n const items = orderBy ? data.sort(compare).splice(from, length) : data.splice(from, length);\r\n items.forEach((context, ix) => {\r\n context.index = from + ix;\r\n });\r\n return Promise.resolve({\r\n total: dataLength,\r\n items: items\r\n });\r\n }\r\n}\r\n","import {Component, Inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges} from \"@angular/core\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {ObjectUtils} from \"../../utils/object.utils\";\r\nimport {StateService} from \"../../services/state.service\";\r\nimport {PaginationDirective} from \"../../directives/pagination.directive\";\r\nimport {ICON_SERVICE, IIconService} from \"../../common-types\";\r\n\r\n@Component({\r\n selector: \"pagination-menu\",\r\n templateUrl: \"./pagination-menu.component.html\"\r\n})\r\nexport class PaginationMenuComponent implements OnInit, OnDestroy, OnChanges {\r\n\r\n @Input() maxSize: number;\r\n @Input() urlParam: string;\r\n @Input() directionLinks: boolean;\r\n @Input() boundaryLinks: boolean;\r\n\r\n pages: number[];\r\n firstLabel: string;\r\n prevLabel: string;\r\n nextLabel: string;\r\n lastLabel: string;\r\n\r\n get hasPrev(): boolean {\r\n return this.pagination.page > 1;\r\n }\r\n\r\n get hasNext(): boolean {\r\n return this.pagination.page < this.pagination.maxPage\r\n }\r\n\r\n private onRefresh: Subscription;\r\n\r\n constructor(public state: StateService, public pagination: PaginationDirective, @Inject(ICON_SERVICE) public icons: IIconService) {\r\n this.maxSize = 5;\r\n this.directionLinks = true;\r\n this.boundaryLinks = true;\r\n this.firstLabel = `<<`;\r\n this.prevLabel = `<`;\r\n this.nextLabel = `>`;\r\n this.lastLabel = `>>`;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.onRefresh = this.pagination.onRefresh.subscribe(() => this.setPages());\r\n this.setIcon(\"firstLabel\", \"first-page\");\r\n this.setIcon(\"prevLabel\", \"prev-page\");\r\n this.setIcon(\"nextLabel\", \"next-page\");\r\n this.setIcon(\"lastLabel\", \"last-page\");\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (!this.onRefresh) return;\r\n this.onRefresh.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.maxSize = isNaN(this.maxSize) || this.maxSize <= 0 ? 5 : this.maxSize;\r\n this.directionLinks = ObjectUtils.isBoolean(this.directionLinks) ? this.directionLinks : true;\r\n this.boundaryLinks = ObjectUtils.isBoolean(this.boundaryLinks) ? this.boundaryLinks : true;\r\n this.setPages();\r\n }\r\n\r\n paginate(page: number): void {\r\n if (this.pagination.page == page || this.pagination.maxPage < page || page < 1) return;\r\n if (!this.urlParam) {\r\n this.pagination.paginate(page);\r\n return;\r\n }\r\n const params = Object.assign({}, this.state.params);\r\n params[this.urlParam] = page.toString();\r\n const path = StateService.toPath(this.state.route, params);\r\n this.state.navigateByUrl(path);\r\n }\r\n\r\n protected setIcon(labelName: string, icon: string): void {\r\n this.icons.getIcon(icon, icon, false).then(i => {\r\n if (i == icon) return;\r\n this[labelName] = i;\r\n });\r\n }\r\n\r\n protected setPages(): number {\r\n if (!this.pagination) return;\r\n const totalPages = this.pagination.maxPage;\r\n let startPage = Math.max(this.pagination.page - Math.floor(this.maxSize / 2), 1);\r\n let endPage = startPage + this.maxSize - 1;\r\n if (endPage > totalPages) {\r\n endPage = totalPages;\r\n startPage = Math.max(endPage - this.maxSize + 1, 1);\r\n }\r\n const pages: number[] = [];\r\n for (let num = startPage; num <= endPage; num++) {\r\n pages.push(num);\r\n }\r\n this.pages = pages;\r\n }\r\n}\r\n","import {Directive, ElementRef, Input, OnDestroy, OnInit, Renderer2} from \"@angular/core\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {EventsService} from \"../services/events.service\";\r\n\r\n@Directive({\r\n selector: \"[stickyClass]\"\r\n})\r\nexport class StickyClassDirective implements OnInit, OnDestroy {\r\n\r\n @Input() stickyClass: string;\r\n\r\n private stickyUpdated: Subscription;\r\n\r\n constructor(private events: EventsService, private element: ElementRef, private renderer: Renderer2) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.stickyUpdated = this.events.stickyUpdated.subscribe(() => {\r\n if (this.events.isSticky) {\r\n this.renderer.addClass(this.element.nativeElement, this.stickyClass || \"sticky-sibling\");\r\n return;\r\n }\r\n this.renderer.removeClass(this.element.nativeElement, this.stickyClass || \"sticky-sibling\");\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stickyUpdated.unsubscribe();\r\n }\r\n}\r\n","import {APP_INITIALIZER, ErrorHandler, Inject, Injector, ModuleWithProviders, NgModule} from \"@angular/core\";\r\nimport {EVENT_MANAGER_PLUGINS} from \"@angular/platform-browser\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {UrlSerializer} from \"@angular/router\";\r\nimport {DeviceDetectorService} from \"ngx-device-detector\";\r\n\r\nimport {\r\n API_SERVICE,\r\n AUTH_SERVICE,\r\n CONFIG_SERVICE,\r\n ICON_SERVICE,\r\n IConfigService,\r\n IModuleConfig,\r\n LANGUAGE_SERVICE,\r\n PROMISE_SERVICE, ROOT_ELEMENT,\r\n TOASTER_SERVICE\r\n} from \"./common-types\";\r\n\r\nimport {AuthGuard} from \"./utils/auth.guard\";\r\nimport {AclService} from \"./services/acl.service\";\r\nimport {ApiService} from \"./services/api.service\";\r\nimport {StaticAuthService} from \"./services/auth.service\";\r\nimport {BaseHttpClient} from \"./services/base-http.client\";\r\nimport {BaseHttpService} from \"./services/base-http.service\";\r\nimport {ConfigService} from \"./services/config.service\";\r\nimport {ErrorHandlerService} from \"./services/error-handler.service\";\r\nimport {EventsService} from \"./services/events.service\";\r\nimport {FormatterService} from \"./services/formatter.service\";\r\nimport {GlobalTemplateService} from \"./services/global-template.service\";\r\nimport {IconService} from \"./services/icon.service\";\r\nimport {LanguageService} from \"./services/language.service\";\r\nimport {PromiseService} from \"./services/promise.service\";\r\nimport {OpenApiService} from \"./services/open-api.service\";\r\nimport {StateService} from \"./services/state.service\";\r\nimport {StaticLanguageService} from \"./services/static-language.service\";\r\nimport {StorageService} from \"./services/storage.service\";\r\nimport {ConsoleToasterService} from \"./services/toaster.service\";\r\nimport {TranslatedUrlSerializer} from \"./services/translated-url.serializer\";\r\nimport {UniversalService} from \"./services/universal.service\";\r\nimport {ResizeEventPlugin} from \"./plugins/resize-event.plugin\";\r\nimport {ScrollEventPlugin} from \"./plugins/scroll-event.plugin\";\r\nimport {AsyncMethodDirective} from \"./directives/async-method.directive\";\r\nimport {BackgroundDirective} from \"./directives/background.directive\";\r\nimport {DynamicTableTemplateDirective} from \"./directives/dynamic-table-template.directive\";\r\nimport {GlobalTemplateDirective} from \"./directives/global-template.directive\";\r\nimport {IconDirective} from \"./directives/icon.directive\";\r\nimport {NgxTemplateOutletDirective} from \"./directives/ngx-template-outlet.directive\";\r\nimport {PaginationDirective} from \"./directives/pagination.directive\";\r\nimport {PaginationItemDirective} from \"./directives/pagination-item.directive\";\r\nimport {ResourceIfDirective} from \"./directives/resource-if.directive\";\r\nimport {StickyDirective} from \"./directives/sticky.directive\";\r\nimport {StickyClassDirective} from \"./directives/sticky-class.directive\";\r\nimport {UnorderedListItemDirective} from \"./directives/unordered-list-item.directive\";\r\nimport {UnorderedListTemplateDirective} from \"./directives/unordered-list-template.directive\";\r\n\r\nimport {ChunkPipe} from \"./pipes/chunk.pipe\";\r\nimport {EntriesPipe} from \"./pipes/entries.pipe\";\r\nimport {ExtraItemPropertiesPipe} from \"./pipes/extra-item-properties.pipe\";\r\nimport {FilterPipe} from \"./pipes/filter.pipe\";\r\nimport {FindPipe} from \"./pipes/find.pipe\";\r\nimport {FormatNumberPipe} from \"./pipes/format-number.pipe\";\r\nimport {GetOffsetPipe} from \"./pipes/get-offset.pipe\";\r\nimport {GetTypePipe} from \"./pipes/get-type.pipe\";\r\nimport {GlobalTemplatePipe} from \"./pipes/global-template.pipe\";\r\nimport {GroupByPipe} from \"./pipes/group-by.pipe\";\r\nimport {IsTypePipe} from \"./pipes/is-type.pipe\";\r\nimport {JoinPipe} from \"./pipes/join.pipe\";\r\nimport {KeysPipe} from \"./pipes/keys.pipe\";\r\nimport {MapPipe} from \"./pipes/map.pipe\";\r\nimport {MaxPipe} from \"./pipes/max.pipe\";\r\nimport {MinPipe} from \"./pipes/min.pipe\";\r\nimport {ReducePipe} from \"./pipes/reduce.pipe\";\r\nimport {RemapPipe} from \"./pipes/remap.pipe\";\r\nimport {ReplacePipe} from \"./pipes/replace.pipe\";\r\nimport {ReversePipe} from \"./pipes/reverse.pipe\";\r\nimport {RoundPipe} from \"./pipes/round.pipe\";\r\nimport {SafeHtmlPipe} from \"./pipes/safe-html.pipe\";\r\nimport {TranslatePipe} from \"./pipes/translate.pipe\";\r\nimport {ValuesPipe} from \"./pipes/values.pipe\";\r\n\r\nimport {DynamicTableComponent} from \"./components/dynamic-table/dynamic-table.component\";\r\nimport {PaginationMenuComponent} from \"./components/pagination-menu/pagination-menu.component\";\r\nimport {UnorderedListComponent} from \"./components/unordered-list/unordered-list.component\";\r\n\r\n// --- Pipes ---\r\nexport const pipes = [\r\n ChunkPipe,\r\n EntriesPipe,\r\n ExtraItemPropertiesPipe,\r\n FilterPipe,\r\n FindPipe,\r\n FormatNumberPipe,\r\n GetOffsetPipe,\r\n GetTypePipe,\r\n GlobalTemplatePipe,\r\n GroupByPipe,\r\n IsTypePipe,\r\n JoinPipe,\r\n KeysPipe,\r\n MapPipe,\r\n MaxPipe,\r\n MinPipe,\r\n ReducePipe,\r\n RemapPipe,\r\n ReplacePipe,\r\n ReversePipe,\r\n RoundPipe,\r\n SafeHtmlPipe,\r\n TranslatePipe,\r\n ValuesPipe\r\n];\r\n\r\n// --- Directives ---\r\nexport const directives = [\r\n AsyncMethodDirective,\r\n BackgroundDirective,\r\n DynamicTableTemplateDirective,\r\n GlobalTemplateDirective,\r\n IconDirective,\r\n NgxTemplateOutletDirective,\r\n PaginationDirective,\r\n PaginationItemDirective,\r\n ResourceIfDirective,\r\n StickyDirective,\r\n StickyClassDirective,\r\n UnorderedListItemDirective,\r\n UnorderedListTemplateDirective\r\n];\r\n\r\n// --- Components ---\r\nexport const components = [\r\n DynamicTableComponent,\r\n PaginationMenuComponent,\r\n UnorderedListComponent\r\n];\r\n\r\nexport const providers = [\r\n ...pipes,\r\n BaseHttpClient,\r\n BaseHttpService,\r\n AuthGuard,\r\n AclService,\r\n ApiService,\r\n StaticAuthService,\r\n ConfigService,\r\n ErrorHandlerService,\r\n EventsService,\r\n FormatterService,\r\n GlobalTemplateService,\r\n IconService,\r\n LanguageService,\r\n OpenApiService,\r\n PromiseService,\r\n StateService,\r\n StaticLanguageService,\r\n StorageService,\r\n ConsoleToasterService,\r\n TranslatedUrlSerializer,\r\n UniversalService,\r\n DeviceDetectorService,\r\n {\r\n provide: EVENT_MANAGER_PLUGINS,\r\n useClass: ResizeEventPlugin,\r\n multi: true\r\n },\r\n {\r\n provide: EVENT_MANAGER_PLUGINS,\r\n useClass: ScrollEventPlugin,\r\n multi: true\r\n },\r\n {\r\n provide: UrlSerializer,\r\n useExisting: TranslatedUrlSerializer\r\n },\r\n {\r\n provide: ErrorHandler,\r\n useExisting: ErrorHandlerService\r\n }\r\n\r\n];\r\n\r\nexport function loadConfig(config: IConfigService): any {\r\n return config.load;\r\n}\r\n\r\n@NgModule({\r\n declarations: [\r\n ...pipes,\r\n ...directives,\r\n ...components\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule\r\n ],\r\n exports: [\r\n ...pipes,\r\n ...directives,\r\n ...components,\r\n FormsModule\r\n ],\r\n providers: pipes\r\n})\r\nexport class NgxUtilsModule {\r\n static forRoot(config?: IModuleConfig): ModuleWithProviders<NgxUtilsModule> {\r\n return {\r\n ngModule: NgxUtilsModule,\r\n providers: [\r\n ...providers,\r\n {\r\n provide: API_SERVICE,\r\n useExisting: (!config ? null : config.apiService) || ApiService\r\n },\r\n {\r\n provide: AUTH_SERVICE,\r\n useExisting: (!config ? null : config.authService) || StaticAuthService\r\n },\r\n {\r\n provide: ICON_SERVICE,\r\n useExisting: (!config ? null : config.iconService) || IconService\r\n },\r\n {\r\n provide: LANGUAGE_SERVICE,\r\n useExisting: (!config ? null : config.languageService) || StaticLanguageService\r\n },\r\n {\r\n provide: TOASTER_SERVICE,\r\n useExisting: (!config ? null : config.toasterService) || ConsoleToasterService\r\n },\r\n {\r\n provide: PROMISE_SERVICE,\r\n useExisting: (!config ? null : config.promiseService) || PromiseService\r\n },\r\n {\r\n provide: CONFIG_SERVICE,\r\n useExisting: (!config ? null : config.configService) || ConfigService\r\n },\r\n {\r\n provide: ROOT_ELEMENT,\r\n useValue: null\r\n },\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: (!config ? null : config.initializeApp) || loadConfig,\r\n multi: true,\r\n deps: [(!config ? null : config.initializeApp) ? Injector : CONFIG_SERVICE]\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n"]}
|