ngx-techlify-core 11.3.2 → 11.3.3

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.model.ts","../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.component.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.component.ts","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.model.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/document-viewer.component.ts","../../../projects/ngx-techlify-core/src/lib/core/logger.service.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/viewer-config.model.ts","../../../projects/ngx-techlify-core/src/lib/core/techlify-config.model.ts","../../../projects/ngx-techlify-core/src/lib/core/config.service.ts","../../../projects/ngx-techlify-core/src/lib/core/snack/snack.component.ts","../../../projects/ngx-techlify-core/src/lib/core/alert.service.ts","../../../projects/ngx-techlify-core/src/lib/core/error-handler.service.ts","../../../projects/ngx-techlify-core/src/lib/core/error-handler.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/http-cache.service.ts","../../../projects/ngx-techlify-core/src/lib/core/cache.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/api-prefix.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/credentials.service.ts","../../../projects/ngx-techlify-core/src/lib/core/token.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/header.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/http.service.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-file.service.ts","../../../projects/ngx-techlify-core/src/lib/core/form-validator.service.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-file-form/entity-file-form.component.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-files-view-all.component.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.component.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.model.ts","../../../projects/ngx-techlify-core/src/lib/note/note.service.ts","../../../projects/ngx-techlify-core/src/lib/note/note-form/note-form.component.ts","../../../projects/ngx-techlify-core/src/lib/note/note-list/note-list.component.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/searchable-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/mat-select-infinite-scroll.directive.ts","../../../projects/ngx-techlify-core/src/lib/utility/num-items-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/utility/date-utils.service.ts","../../../projects/ngx-techlify-core/src/lib/utility/number-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/calculate-timeline.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline.model.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/loader/loader.component.ts","../../../projects/ngx-techlify-core/src/lib/core/snack/snack.module.ts","../../../projects/ngx-techlify-core/src/lib/core/authentication.guard.ts","../../../projects/ngx-techlify-core/src/lib/core/authentication.service.ts","../../../projects/ngx-techlify-core/src/lib/core/route-reusable-strategy.ts","../../../projects/ngx-techlify-core/src/lib/core/storage.service.ts","../../../projects/ngx-techlify-core/src/lib/core/dataManager.service.ts","../../../projects/ngx-techlify-core/src/lib/material.module.ts","../../../projects/ngx-techlify-core/src/lib/core/core.module.ts","../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.module.ts","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.module.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/document-viewer.module.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.module.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-files-view-all.module.ts","../../../projects/ngx-techlify-core/src/lib/note/note.module.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/searchable-selector.module.ts","../../../projects/ngx-techlify-core/src/lib/utility/utility.module.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/loader/loader.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/read-more/read-more.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/read-more/read-more.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update.service.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-form/techlify-update-form.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-form/techlify-update-form.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-view/update-view.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-view/update-view.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier.module.ts","../../../projects/ngx-techlify-core/src/lib/export-excel/export-excel-button/export-excel-button.component.ts","../../../projects/ngx-techlify-core/src/lib/export-excel/export-excel.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/date-validator.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-items/import-items-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-items/import-items.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-items/import-items.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/failed-items/failed-items-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/failed-items/failed-items.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/failed-items/failed-items.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-config.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.component.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.module.ts"],"names":["ActionPopupComponent","dialogRef","data","this","prototype","ngOnInit","closeDialog","close","confirm","Component","args","selector","template","MatDialogRef","ActionPopup","decorators","type","Inject","MAT_DIALOG_DATA","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__extends","TypeError","String","__","constructor","create","__decorate","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","pop","push","__read","o","m","ar","error","__spread","concat","DataTableComponent","DataTableComponent_1","dataSource","MatTableDataSource","action","EventEmitter","selctionChange","rowClick","tableScroll","sortChanged","elementId","nextId","ngAfterViewInit","_this","selection","changed","pipe","subscribe","change","selected","emit","sort","sortChange","untilDestroyed","isAllSelected","masterToggle","clearSelection","forEach","row","select","clear","ngOnChanges","changes","initializeConfig","isFirstChange","currentValue","config","page","lastPage","perPage","onScroll","editClicked","event","element","stopPropagation","viewClicked","deactivateClicked","downloadClicked","printClicked","rowClicked","actionMenuClick","menuValue","trigger","closeMenu","actionMenuTriggerClick","checkEdit","ele","editDisableFunction","checkView","viewDisableFunction","checkPrint","printDisableFunction","checkActions","actionsMenuFunction","checkActionButton","actionsMenuButtonFunction","getValue","keyString","keyList","replace","split","ngOnDestroy","Input","Output","ViewChild","MatSort","static","UntilDestroy","DocumentViewerComponent","remove","initData","removeFile","file","ext","getFileExtension","viewerType","nameArray","LogLevel","Logger","source","enableProductionMode","level","Warning","debug","objects","_i","log","console","Debug","info","Info","warn","Error","func","outputs","output","TechlifyConfig","projectKey","environment","authClientSecret","authGrantType","apiUrl","loadFromMap","storage","rawConfigs","ConfigService","getConfigsRaw","getProjectKey","getApiUrl","getAuthClientSecret","getStorage","localStorage","getAuthGrantType","getCredentialsKey","BASE_CREDENTIALS","Injectable","providedIn","MAT_SNACK_BAR_DATA","AlertService","snackBar","addAlert","message","alertType","duration","openFromComponent","SuccessSnackComponent","ErrorSnackComponent","MatSnackBar","ErrorHandlerService","alerter","handleError","errorResponse","msg","errors","_a","property","_b","_c","_d","errMessage","ErrorHandlerInterceptor","configService","errorHandler","intercept","request","handle","catchError","ErrorEvent","throwError","HttpCacheService","cachedData","cachePersistenceKey","loadCacheData","setCacheData","url","lastUpdated","Date","saveCacheData","getCacheData","cacheEntry","getHttpCacheEntry","clearCache","cleanCache","expirationDate","keys","setPersistence","persistence","sessionStorage","JSON","stringify","parse","CacheInterceptor","httpCacheService","forceUpdate","configure","options","instance","update","method","Observable","subscriber","urlWithParams","HttpResponse","complete","ApiPrefixInterceptor","test","clone","CredentialsService","_credentials","credentials","getItem","setCredentials","remember","setItem","getAccessToken","expiration","token","expires_in","access_token","now","parseInt","getExpiration","getRefreshToken","refresh_token","refresh","TokenInterceptor","setHeaders","Authorization","HeaderInterceptor","Content-Type","headers","get","HttpInterceptorHandler","interceptor","HTTP_DYNAMIC_INTERCEPTORS","InjectionToken","HttpService","httpHandler","injector","interceptors","_super","cache","cacheInterceptor","addInterceptor","skipErrorHandler","removeInterceptor","skipApiPrefix","skipToken","skipHeader","handler","reduceRight","HttpClient","interceptorType","filter","HttpHandler","Injector","Optional","EntityFileService","http","getEntityFiles","filters","params","toPromise","createEntityFile","model","post","updateEntityFile","put","id","deleteEntityFile","delete","uploadEntityFile","formData","FormData","append","name","FormValidatorService","isFieldValid","field","formGroup","firstAttempt","valid","touched","untouched","getErrorMessage","errorMessages","errorField","required","EntityFileFormComponent","formValidatorService","fb","entityFileService","alertService","fileList","createForm","entityFileGroup","group","title","details","entity_type","entity_id","Validators","entity","setValue","updateMode","patchValue","hideTitleAndDetails","fileConfig","fileId","containerId","styles","height","multiple","acceptFile","maxSize","acceptFileText","viewerConfig","viewerStyle","width","submit","assignmentFileFirstAttempt","item","fileChanged","FormBuilder","EntityFilesViewAllComponent","location","dialog","viewOnly","entityFiles","displayedColumns","isWorking","search","FormControl","imageStyle","hideRemove","x","entityType","entityId","valueChanges","debounceTime","distinctUntilChanged","reload","fetchEntityFilesDetails","last_page","addEntityFile","open","autoFocus","restoreFocus","afterClosed","files","editEntityFile","resetFieldValue","Location","MatDialog","FileDropperComponent","fileArray","border","isSingleMode","Boolean","dragEnter","style","background","dragColor","preventDefault","dragOver","dragLeave","dropEvent","droppedFiles","dataTransfer","from","addFiles","onFileChange","document","getElementById","fileSizeAllowed","sortFiles","a","nameA","toUpperCase","nameB","size","clickEvent","click","NoteService","getNotes","filterModel","addNote","note","editNote","deleteNote","NoteFormComponent","noteService","noteFormGroup","compose","model_type","related_model_id","noteFormFirstAttempt","labelText","cancel","NoteListComponent","readonly","notes","sort_by","relatedModelId","modelType","loadData","assign","current_page","resetScroll","SearchableSelectorComponent","SearchableSelectorComponent_1","formBuilder","_focusMonitor","_elementRef","ngControl","valueField","titleField","selectedValueChange","enableSearch","add","edit","items","selectionChange","itemsChange","isLoading","onChange","onTouched","stateChanges","Subject","focused","controlType","describedBy","_required","_disabled","selectorForm","select_value","monitor","origin","valueAccessor","empty","setValidators","coerceBooleanProperty","disable","enable","openedChange","dataItems","selectedValue","findIndex","sortBy","fetchItemList","of","startWith","switchMap","finalize","setDescribedByIds","ids","join","onContainerClick","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","disabled","getPropertyValue","_handleInput","map","find","invalid","dirty","reloadData","searchField","addItem","itemComponent","addConfig","editItem","editConfig","stopMonitoring","providers","provide","MatFormFieldControl","useExisting","FocusMonitor","ElementRef","NgControl","Self","MatSelectInfiniteScrollDirective","matSelect","ngZone","threshold","infiniteScroll","thrPx","thrPc","singleOptionHeight","SELECT_ITEM_HEIGHT_EM","destroyed$","evaluateThreshold","takeUntil","opened","panel","nativeElement","getSelectItemHeightPx","registerScrollListener","lastIndexOf","parseFloat","fromEvent","tap","handleScrollEvent","runOutsideAngular","countOfRenderedOptions","infiniteScrollDistance","clientHeight","scrollTop","run","getComputedStyle","fontSize","Directive","MatSelect","NgZone","NumItemsSelector","numItemsChange","numItemsChanged","numItems","DateUtils","getYYYYMMDDString","inputDate","getFullYear","getMonth","getDate","getYYYY","getMM","getDateTime","toLocaleTimeString","NumberSelector","numChanged","start_value","end_value","calculateTimeline","date","date_from","date_to","show_custom_field","yesterday","setDate","first","getDay","last","to","setTime","getTime","setHours","quarter","Math","floor","startFullQuarter","endFullQuarter","Timeline","CUSTOM","TODAY","YESTERDAY","THIS_WEEK","LAST_WEEK","THIS_MONTH","LAST_MONTH","THIS_QUARTER","LAST_QUARTER","THIS_YEAR","LAST_YEAR","ALL","TimelineFilterComponent","timelineValue","timelines","viewValue","dateFrom","dateTo","appearance","showClearbutton","showCustomDateFields","changeTimeline","form","getFieldValue","setFieldValue","timeline","LoaderComponent","NgModule","declarations","imports","CommonModule","MatSnackBarModule","MatIconModule","exports","AuthenticationGuard","router","credentialsService","canActivate","route","state","isUserAuthenticated","canLoad","isAuthenticated","navigate","queryParams","redirect","replaceUrl","Router","AuthenticationService","login","context","concatMap","tokenInfo","user","userInfo","logout","RouteReusableStrategy","shouldDetach","store","detachedTree","shouldAttach","retrieve","shouldReuseRoute","future","curr","routeConfig","component","RouteReuseStrategy","StorageService","storageSub","watch","asObservable","removeItem","DataManager","GET","urlq","POST","object","blank","POSTRAW","PUT","PATCH","patch","DELETE","MatButtonModule","MatCheckboxModule","MatCommonModule","MatDialogModule","MatFormFieldModule","MatInputModule","MatLineModule","MatMenuModule","MatNativeDateModule","MatOptionModule","MatProgressSpinnerModule","MatPseudoCheckboxModule","MatRippleModule","MatSelectModule","MatSortModule","MatTableModule","MatCardModule","MatDividerModule","MatChipsModule","MatDatepickerModule","MatListModule","MatTooltipModule","parentModule","HttpClientModule","RouterModule","SnackModule","useClass","CoreModule","SkipSelf","FlexLayoutModule","MaterialModule","entryComponents","InfiniteScrollModule","NgxDocViewerModule","FormsModule","ReactiveFormsModule","FileDropperModule","DocumentViewerModule","ActionPopupModule","forChild","TimelineFilterRoutingModule","EmailSubscriptionRoutingModule","EmailSubscriptionUserRoutingModule","user_id","email_type_id","EmailSubscriptionUserFormComponent","esUserFormGroup","esUser","selectedType","email_type","selectedUser","markAllAsTouched","esUserFormFirstAttempt","isSubmitLoading","SearchableSelectorModule","EmailSubscriptionUserFormRoutingModule","LoaderModule","EmailSubscriptionUserListComponent","esUserList","pageEvent","displayColumns","availableDisplayColumns","order","initializeData","changeSort","col","some","columnsChange","selectedColumns","filterChange","addEmailSubscriptionUser","editEmailSubscriptionUser","deleteEmailSubscriptionUser","direction","active","esulr","permissions","only","redirectTo","routes","path","EmailSubscriptionUserListFilterComponent","valueChange","esUserFilterForm","EmailSubscriptionUserListFilterRoutingModule","EmailSubscriptionUserListRoutingModule","EmailSubscriptionUserFormModule","EmailSubscriptionUserListFilterModule","EmailSubscriptionTypeRoutingModule","code","frequency_id","EmailSubscriptionTypeFormComponent","emailSubscriptionTypeFormGroup","description","emailSubscriptionType","selectedFrequency","frequency","emailSubscriptionTypeFormFirstAttempt","EmailSubscriptionTypeFormRoutingModule","EmailSubscriptionTypeListComponent","emailSubscriptionTypeList","isLoadRelations","relations","addEmailSubscriptionType","editEmailSubscriptionType","deleteEmailSubscriptionType","estlr","EmailSubscriptionTypeFormModule","EmailSubscriptionTypeListRoutingModule","EmailSubscriptionForUserComponent","subscriptions","fetchSubscriptions","sub","current_user_subscription","unsubscribe","esfur","EmailSubscriptionForUserRoutingModule","ReadMoreComponent","maxLength","hideToggle","isCollapsed","determineView","toggleView","text","currentText","substring","TechlifyUpdateService","getTechlifyUpdates","createTechlifyUpdate","techlifyUpdate","updateTechlifyUpdate","deleteTechlifyUpdate","techlifyUpdateId","getTechlifyUpdate","getNewUpdateForCurrentUser","createUpdateViewRecord","techlifyUpdateView","updateCurrentUserUpdates","released_on","version","learn_more_link","pattern","TechlifyUpdateFormComponent","techlifyUpdateService","onSave","isUpdateMode","toolbar","techlifyUpdateForm","techlifyUpdateDetails","editor","Editor","NgxEditorModule","TechlifyUpdatesListComponent","techlifyUpdates","filterFormGroup","listenChanges","modifyTechlifyUpdate","sortColumn","toString","assignFilter","column","pathMatch","TechlifyUpdateRoutingModule","TechlifyUpdateFormModule","ReadMoreModule","UpdateViewComponent","rootNavUrl","openUpdateHistory","TechlifyUpdateHistoryComponent","openUpdateView","isFromHistory","TechlifyUpdateHistoryRoutingModule","UpdateNotifierSnackComponent","snackBarRef","maxDescriptionLength","descriptionText","determineDescription","dismiss","update_id","MatSnackBarRef","UpdateNotifierComponent","setTimeout","getNewUpdate","showUpdate","horizontalPosition","verticalPosition","panelClass","UpdateViewModule","ExportExcelButtonComponent","exportExcel","fileName","ws","XLSX.utils","json_to_sheet","wb","book_new","book_append_sheet","XLSX.writeFile","AuditLogViewModelComponent","showDeltaChanges","changeList","model_id","modelId","logInfo","getTransformedChanges","displayAttribute","charAt","slice","attribute","newValue","oldValue","pre_object","AuditLogsViewModelComponent","events","NavigationEnd","AuditLogForModelComponent","logView","getLogView","getLogsView","maxWidth","AuditLogViewModelRoutingModule","AuditLogListComponent","dataManager","sanitizer","auditLogList","showFilter","showExportButtons","Type","object_type","Action","Data","Pre-Object","Created At","created_at","toDateString","Created By","email","logClicked","objectType","objectId","object_id","userId","value_1","DomSanitizer","DateValidator","control","val","invalidDate","AuditLogListFilterComponent","auditLogFilterForm","toISOString","AuditLogListFilterRoutingModule","AuditLogListRoutingModule","ExportExcelModule","AuditLogListFilterModule","AuditLogsViewModelRoutingModule","AuditLogListModule","AuditLogViewModelModule","AuditLogsViewModelModule","AuditLogForModelRoutingModule","AuditLogViewComponent","paramMap","fetchLogDetail","back","logId","_e","patchDelta","delta","jsondiffpatch.diff","innerHTML","jsondiffpatch.formatters","html","format","ActivatedRoute","AuditLogViewRoutingModule","AuditLogRoutingModule","AuditLogViewModule","ImportCsvComponent","filesList","fileData","failedItems","selectedFields","filesConfig","reset","jsonData","reader","FileReader","onload","selectedFile","XLSX.read","cellDates","SheetNames","reduce","initial","sheet","Sheets","sheet_to_json","readAsBinaryString","mappingProcessed","fields","tempFileData","propertyType","isValidDate","save","importConfig","postUrl","failed_items","isNaN","unavailable","ImportItemsComponent","changeDetectorRef","firstDataArray","properties","createImportMappingForm","mapOutDataColumns","importMappingForm","array","createField","dataValue","mainIndex","toLowerCase","includes","fieldsArray","detectChanges","updatePropertyType","index","controls","uniqueValidator","propertyData","setErrors","removeField","removeAt","ChangeDetectorRef","ImportItemsRoutingModule","FailedItemsComponent","FailedItemsRoutingModule","ImportCsvRoutingModule","ImportItemsModule","FailedItemsModule","LoginHistoryForUserComponent","loginHistoryList","historyFilterForm","LoginHistoryForUserRoutingModule","TimelineFilterModule"],"mappings":"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","sourcesContent":["export class ActionPopup {\n name: string;\n title: string;\n message: string;\n}","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ActionPopup } from './action-popup.model';\n\n@Component({\n selector: 'app-action-popup',\n templateUrl: './action-popup.component.html',\n styleUrls: ['./action-popup.component.scss']\n})\nexport class ActionPopupComponent implements OnInit {\n\n constructor(\n public dialogRef: MatDialogRef<ActionPopupComponent>,\n @Inject(MAT_DIALOG_DATA) public data: ActionPopup,\n ) { }\n\n ngOnInit() {\n }\n\n /**Method to close dialog box */\n closeDialog() {\n this.dialogRef.close();\n }\n\n /**Method to close dialog box with the data given from parent component\n */\n confirm() {\n this.dialogRef.close(this.data);\n }\n\n}\n","/*! *****************************************************************************\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 if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\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","import {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n AfterViewInit,\n ViewChild\n} from \"@angular/core\";\n\nimport { SelectionModel } from \"@angular/cdk/collections\";\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatSort } from '@angular/material/sort';\nimport { DataTable } from './data-table.model';\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\n\n@UntilDestroy()\n@Component({\n selector: \"app-data-table\",\n templateUrl: \"./data-table.component.html\",\n styleUrls: [\"./data-table.component.scss\"]\n})\nexport class DataTableComponent implements OnInit, OnChanges, AfterViewInit {\n\n trigger: MatMenuTrigger;\n\n @Input() data: any;\n\n @Input() config: DataTable;\n\n dataSource: MatTableDataSource<any> = new MatTableDataSource([]);\n\n @Input() selection: SelectionModel<any>;\n\n @Output() action = new EventEmitter();\n @Output() selctionChange = new EventEmitter();\n @Output() rowClick = new EventEmitter();\n @Output() tableScroll = new EventEmitter();\n @Output() sortChanged = new EventEmitter();\n\n page: number;\n lastPage: number;\n perPage: number;\n\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n static nextId = 0;\n @Input() elementId: string = `data-table-${DataTableComponent.nextId++}`;\n\n constructor() { }\n\n ngOnInit() { }\n\n /**Life cycle hook method */\n ngAfterViewInit() {\n // Assign the data to the data source for the table to render\n this.dataSource = new MatTableDataSource(this.data);\n\n // Emit change in selection\n if (this.selection) {\n this.selection.changed.pipe().subscribe((change: any) => {\n if (this.selection.selected) {\n this.selctionChange.emit(this.selection.selected);\n }\n });\n }\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.sortChanged.emit(value);\n })\n }\n }\n\n /** Whether the number of selected elements matches the total number of rows. */\n isAllSelected() {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\n }\n\n /** Selects all rows if they are not all selected; otherwise clear selection. */\n masterToggle() {\n this.isAllSelected()\n ? this.clearSelection()\n : this.dataSource.data.forEach(row => this.selection.select(row));\n }\n\n /**clear selection*/\n clearSelection() {\n this.selection.clear();\n this.selctionChange.emit(this.selection.selected);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.initializeConfig(changes);\n if (changes.data && !changes.data.isFirstChange() && this.dataSource) {\n // If not first change\n this.dataSource.data = changes.data.currentValue;\n }\n }\n\n initializeConfig(changes: SimpleChanges) {\n if (changes.config && !changes.config.isFirstChange()) {\n this.config = changes.config.currentValue;\n }\n this.page = this.config.page || 1;\n this.lastPage = this.config.lastPage || this.page;\n this.perPage = this.config.perPage || 20;\n }\n\n onScroll() {\n if (this.page < this.lastPage) {\n this.page += 1;\n this.tableScroll.emit({ page: this.page, lastPage: this.lastPage, perPage: this.perPage });\n }\n }\n\n /**Method invokes when edit action icon is clickes */\n editClicked(event: any, element: any) {\n this.action.emit({ action: \"edit\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when view action icon is clickes */\n viewClicked(event: any, element: any) {\n this.action.emit({ action: \"view\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when edit action icon is clickes */\n deactivateClicked(event: any, element: any) {\n this.action.emit({ action: \"deactivate\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when download action icon is clickes */\n downloadClicked(event: any, element: any) {\n this.action.emit({ action: \"download\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when print action icon is clickes */\n printClicked(event: any, element: any) {\n\n this.action.emit({ action: 'print', value: element });\n event.stopPropagation();\n\n }\n\n /**Method invokes when a row is clicked */\n rowClicked(event: any, element: any) {\n this.rowClick.emit(element);\n event.stopPropagation();\n }\n\n /**Method invokes when menu action icon is hovered */\n actionMenuClick(event: any, element: any, menuValue: string) {\n this.action.emit({ action: menuValue, value: element });\n this.trigger.closeMenu();\n event.stopPropagation();\n }\n\n /**Method invokes when menu action icon is hovered and selects for particular action*/\n actionMenuTriggerClick(event: any, trigger: MatMenuTrigger) {\n this.trigger = trigger;\n event.stopPropagation();\n }\n\n checkEdit(ele: any) {\n if (this.config.editDisableFunction) {\n return this.config.editDisableFunction(ele);\n }\n\n return true;\n }\n\n checkView(ele: any) {\n if (this.config.viewDisableFunction) {\n return this.config.viewDisableFunction(ele);\n }\n\n return true;\n }\n\n checkPrint(ele: any) {\n if (this.config.printDisableFunction) {\n return this.config.printDisableFunction(ele);\n }\n\n return true;\n }\n\n checkActions(ele: any) {\n if (this.config.actionsMenuFunction) {\n return this.config.actionsMenuFunction(ele);\n }\n\n return true;\n }\n\n checkActionButton(ele: any, value: any) {\n if (this.config.actionsMenuButtonFunction) {\n return this.config.actionsMenuButtonFunction(ele, value);\n }\n return true;\n }\n\n getValue(ele: any, keyString: string) {\n keyString = keyString.replace(/\\[(\\w+)\\]/g, \".$1\"); // convert indexes to properties\n keyString = keyString.replace(/^\\./, \"\"); // strip a leading dot\n const keyList = keyString.split(\".\");\n for (let i = 0, n = keyList.length; i < n; ++i) {\n const key = keyList[i];\n if (ele && key in ele) {\n ele = ele[key];\n } else {\n return;\n }\n }\n return ele;\n }\n\n ngOnDestroy() {\n //Until Destroy uses it.\n }\n}\n","export class DataTable {\n displayedColumns: string[];\n columnsConfig: ColumnConfig[];\n actionsConfig?: ActionConfig;\n enableRowClick?: boolean;\n disableElevation?: boolean;\n downloadLink?: string;\n actionsMenuFunction?: any;\n actionsMenuButtonFunction?: any;\n editDisableFunction?: any;\n viewDisableFunction?: any;\n printDisableFunction?: any;\n customActionLabel?: string;\n stickyHeader?: boolean;\n page?: number;\n lastPage?: number;\n perPage?: number;\n pageSizeOptions?: number[];\n style?: any;\n}\n\nclass ColumnConfig {\n title: string;\n value: string;\n sort?: boolean;\n dateField?: boolean;\n currencyField?: boolean;\n format?: string;\n}\n\nclass ActionConfig {\n edit?: boolean;\n view?: boolean;\n download?: boolean;\n print?: boolean;\n deactivate?: boolean;\n actionsMenu?: ActionsMenu[];\n}\n\nclass ActionsMenu {\n name: string;\n value: string;\n}\n\nexport class PageEvent {\n page: number;\n lastPage?: number;\n perPage: number;\n}\n","import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';\nimport { ViewerConfig } from './viewer-config.model';\n\n@Component({\n selector: 'app-document-viewer',\n templateUrl: './document-viewer.component.html',\n styleUrls: ['./document-viewer.component.css']\n})\nexport class DocumentViewerComponent implements OnInit {\n\n\n @Input() config!: ViewerConfig;\n\n @Input() file!: any;\n\n @Input() fileUrl!: any;\n\n @Input() disableEdit: boolean;\n\n @Output() remove = new EventEmitter();\n viewerType: any;\n\n constructor() { }\n\n ngOnInit(): void {\n this.initData();\n }\n\n removeFile() {\n this.remove.emit();\n }\n\n initData() {\n if (this.file) {\n var ext = this.getFileExtension(this.file);\n if (ext === 'ppt' || ext === 'pptx' || ext === 'doc' || ext === 'docx' || ext === 'xls' || ext === 'xlsx') {\n this.viewerType = \"office\";\n }\n else if (ext === 'jpg' || ext === 'jpeg' || ext === 'png' || ext === 'gif') {\n this.viewerType = \"image\";\n }\n else if (ext === 'pdf') {\n this.viewerType = \"pdf\";\n }\n else {\n this.viewerType = null;\n }\n }\n }\n\n get fileName() {\n if (this.file) {\n let nameArray = this.file.split('/');\n if (nameArray.length === 2) {\n return nameArray[1];\n }\n return nameArray[0];\n }\n return '';\n }\n\n getFileExtension(file: any) {\n return file.split('.').pop();\n }\n\n}\n","/**\n * Simple logger system with the possibility of registering custom outputs.\n *\n * 4 different log levels are provided, with corresponding methods:\n * - debug : for debug information\n * - info : for informative status of the application (success, ...)\n * - warning : for non-critical errors that do not prevent normal application behavior\n * - error : for critical errors that prevent normal application behavior\n *\n * Example usage:\n * ```\n * import { Logger } from 'app/core/logger.service';\n *\n * const log = new Logger('myFile');\n * ...\n * log.debug('something happened');\n * ```\n *\n * To disable debug and info logs in production, add this snippet to your root component:\n * ```\n * export class AppComponent implements OnInit {\n * ngOnInit() {\n * if (environment.production) {\n * Logger.enableProductionMode();\n * }\n * ...\n * }\n * }\n *\n * If you want to process logs through other outputs than console, you can add LogOutput functions to Logger.outputs.\n */\n\n/**\n * The possible log levels.\n * LogLevel.Off is never emitted and only used with Logger.level property to disable logs.\n */\nexport enum LogLevel {\n Off = 0,\n Error,\n Warning,\n Info,\n Debug\n}\n\n/**\n * Log output handler function.\n */\nexport type LogOutput = (source: string | undefined, level: LogLevel, ...objects: any[]) => void;\n\nexport class Logger {\n\n /**\n * Current logging level.\n * Set it to LogLevel.Off to disable logs completely.\n */\n static level = LogLevel.Debug;\n\n /**\n * Additional log outputs.\n */\n static outputs: LogOutput[] = [];\n\n /**\n * Enables production mode.\n * Sets logging level to LogLevel.Warning.\n */\n static enableProductionMode() {\n Logger.level = LogLevel.Warning;\n }\n\n constructor(private source?: string) { }\n\n /**\n * Logs messages or objects with the debug level.\n * Works the same as console.log().\n */\n debug(...objects: any[]) {\n this.log(console.log, LogLevel.Debug, objects);\n }\n\n /**\n * Logs messages or objects with the info level.\n * Works the same as console.log().\n */\n info(...objects: any[]) {\n this.log(console.info, LogLevel.Info, objects);\n }\n\n /**\n * Logs messages or objects with the warning level.\n * Works the same as console.log().\n */\n warn(...objects: any[]) {\n this.log(console.warn, LogLevel.Warning, objects);\n }\n\n /**\n * Logs messages or objects with the error level.\n * Works the same as console.log().\n */\n error(...objects: any[]) {\n this.log(console.error, LogLevel.Error, objects);\n }\n\n private log(func: (...args: any[]) => void, level: LogLevel, objects: any[]) {\n if (level <= Logger.level) {\n const log = this.source ? ['[' + this.source + ']'].concat(objects) : objects;\n func.apply(console, log);\n Logger.outputs.forEach(output => output.apply(output, [this.source, level, ...objects]));\n }\n }\n\n}\n","export class ViewerConfig {\n imageStyle?: any;\n viewerStyle?: any;\n hideRemove?: boolean;\n}\n","/**\n * Class that stores the configuration data\n *\n * @author Joshua Kissoon\n * @since 20180724\n */\nexport class TechlifyConfig {\n projectKey: string = '';\n environment: string = '';\n authClientSecret: string = '';\n authGrantType: string = '';\n apiUrl: string = '';\n rawConfigs: any;\n storage: Storage;\n\n constructor(data: any) {\n this.loadFromMap(data);\n }\n\n loadFromMap(data: any) {\n this.projectKey = data.projectKey;\n this.environment = data.environment;\n this.authClientSecret = data.authClientSecret;\n this.authGrantType = data.authGrantType;\n this.apiUrl = data.apiUrl;\n this.storage = data?.storage;\n this.rawConfigs = data;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { TechlifyConfig } from \"./techlify-config.model\";\n\n/**\n * Service that provides settings for all other services\n *\n * @author Joshua Kissoon\n * @since 20170709\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService {\n\n public static BASE_CREDENTIALS = \"credentials\";\n\n private config: TechlifyConfig;\n\n constructor(config: TechlifyConfig) {\n this.config = config;\n }\n\n getConfigsRaw() {\n return this.config.rawConfigs;\n }\n\n getProjectKey() {\n return this.config.projectKey;\n }\n\n getApiUrl() {\n return this.config.apiUrl;\n }\n\n getAuthClientSecret() {\n return this.config.authClientSecret;\n }\n\n getStorage() {\n return this.config.storage ? this.config.storage : localStorage;\n }\n\n getAuthGrantType() {\n return this.config.authGrantType;\n }\n\n getCredentialsKey() {\n return this.config.projectKey + \"_\" + ConfigService.BASE_CREDENTIALS;\n }\n\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'snack-bar-component-example-snack',\n templateUrl: 'success-snack.html',\n styleUrls: ['./snack.scss'],\n})\nexport class SuccessSnackComponent {\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) { }\n}\n@Component({\n selector: 'snack-bar-component-example-snack',\n templateUrl: 'error-snack.html',\n styleUrls: ['./snack.scss'],\n})\nexport class ErrorSnackComponent {\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) { }\n}\n","import { Injectable } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { ErrorSnackComponent, SuccessSnackComponent } from './snack/snack.component';\r\n\r\n/**\r\n * Service used to manage alerts in the entire system frontend\r\n * \r\n * @author Gokula Prasanna\r\n * @since 20210131\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlertService {\r\n\r\n constructor(public snackBar: MatSnackBar) { }\r\n\r\n addAlert(message: string, alertType: string, duration = 3) {\r\n if (alertType == \"success\") {\r\n this.snackBar.openFromComponent(SuccessSnackComponent, {\r\n duration: 1000 * duration,\r\n data: message\r\n });\r\n }\r\n else {\r\n this.snackBar.openFromComponent(ErrorSnackComponent, {\r\n duration: 1000 * duration,\r\n data: message\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { AlertService } from \"./alert.service\";\r\n\r\n\r\n/**\r\n * Service used to handle errors from the request\r\n *\r\n * @author Joshua Kissoon\r\n * @since 20171202\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorHandlerService {\r\n\r\n constructor(private alerter: AlertService) {\r\n }\r\n\r\n handleError(errorResponse: any, msg: string = '') {\r\n // 1 - Create empty array to store errors\r\n const errors = [];\r\n\r\n // 2 - check if the error object is present in the response\r\n if (errorResponse?.error) {\r\n\r\n // 3 - Check for Laravel form validation error messages object\r\n if (errorResponse?.error?.errors) {\r\n\r\n // 4 - For each error property (which is a form field)\r\n for (const property in errorResponse.error.errors) {\r\n\r\n if (errorResponse.error.errors?.hasOwnProperty(property)) {\r\n\r\n // 5 - Extract it's array of errors\r\n const propertyErrors: Array<string> = errorResponse?.error?.errors[property];\r\n\r\n // 6 - Push all errors in the array to the errors array\r\n propertyErrors.forEach(error => errors.push(error));\r\n }\r\n\r\n }\r\n }\r\n\r\n if (errors.length === 0) {\r\n // 7 - Push the main error message to the array of errors if there is no validation error\r\n errors.push(errorResponse.error.message ? errorResponse.error.message : errorResponse.error?.error);\r\n }\r\n }\r\n var errMessage = errors.length ? errors[0] : msg;\r\n this.alerter.addAlert(\"Error: \" + errMessage, \"warning\");\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpErrorResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { Logger } from './logger.service';\nimport { ConfigService } from './config.service';\nimport { ErrorHandlerService } from './error-handler.service';\n\nconst log = new Logger('ErrorHandlerInterceptor');\n\n/**\n * Adds a default error handler to all requests.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ErrorHandlerInterceptor implements HttpInterceptor {\n\n constructor(private configService: ConfigService, private errorHandler: ErrorHandlerService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n return next.handle(request).pipe(catchError(error => this.handleError(error)));\n }\n\n // Customize the default error handler here if needed\n private handleError(error: HttpErrorResponse): Observable<HttpEvent<any>> {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // client-side error\n errorMessage = `Client Error: ${this.configService?.getProjectKey()}: ${error.error.message}`;\n } else {\n // server-side error\n errorMessage = `Server Error: ${this.configService?.getProjectKey()}`;\n try {\n this.errorHandler.handleError(error, 'Unexpected Server Error, try later or contact service team');\n } catch (e) {\n console.log(\"Unable to handle server error\", e);\n }\n }\n return throwError(error);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpResponse } from '@angular/common/http';\nimport { ConfigService } from './config.service';\nimport { Logger } from './logger.service';\n\nconst log = new Logger('HttpCacheService');\n\n\nexport interface HttpCacheEntry {\n lastUpdated: Date;\n data: HttpResponse<any>;\n}\n\n/**\n * Provides a cache facility for HTTP requests with configurable persistence policy.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpCacheService {\n\n private cachedData: { [key: string]: HttpCacheEntry; } = {};\n private storage: Storage | any | null;\n private cachePersistenceKey: String | any;\n\n constructor(private configService: ConfigService) {\n this.storage = this.configService.getStorage();\n this.cachePersistenceKey = this.configService.getProjectKey() + '_HTTP_CACHE';\n this.loadCacheData();\n }\n\n /**\n * Sets the cache data for the specified request.\n * @param {!string} url The request URL.\n * @param {ResponseOptions} data The received data.\n * @param {Date=} lastUpdated The cache last update, current date is used if not specified.\n */\n setCacheData(url: string, data: HttpResponse<any>, lastUpdated?: Date) {\n this.cachedData[url] = {\n lastUpdated: lastUpdated || new Date(),\n data: data\n };\n log.debug(`Cache set for key: \"${url}\"`);\n this.saveCacheData();\n }\n\n /**\n * Gets the cached data for the specified request.\n * @param {!string} url The request URL.\n * @return {?ResponseOptions} The cached data or null if no cached data exists for this request.\n */\n getCacheData(url: string): HttpResponse<any> | null {\n const cacheEntry = this.cachedData[url];\n\n if (cacheEntry) {\n log.debug(`Cache hit for key: \"${url}\"`);\n return cacheEntry.data;\n }\n\n return null;\n }\n\n /**\n * Gets the cached entry for the specified request.\n * @param {!string} url The request URL.\n * @return {?HttpCacheEntry} The cache entry or null if no cache entry exists for this request.\n */\n getHttpCacheEntry(url: string): HttpCacheEntry | null {\n return this.cachedData[url] || null;\n }\n\n /**\n * Clears the cached entry (if exists) for the specified request.\n * @param {!string} url The request URL.\n */\n clearCache(url: string): void {\n delete this.cachedData[url];\n log.debug(`Cache cleared for key: \"${url}\"`);\n this.saveCacheData();\n }\n\n /**\n * Cleans cache entries older than the specified date.\n * @param {date=} expirationDate The cache expiration date. If no date is specified, all cache is cleared.\n */\n cleanCache(expirationDate?: Date) {\n if (expirationDate) {\n Object(this.cachedData).keys.forEach((key: string) => {\n if (expirationDate >= this.cachedData[key]?.lastUpdated) {\n delete this.cachedData[key];\n }\n });\n } else {\n this.cachedData = {};\n }\n this.saveCacheData();\n }\n\n /**\n * Sets the cache persistence policy.\n * Note that changing the cache persistence will also clear the cache from its previous storage.\n * @param {'local'|'session'=} persistence How the cache should be persisted, it can be either local or session\n * storage, or if no value is provided it will be only in-memory (default).\n */\n setPersistence(persistence?: 'local' | 'session') {\n this.cleanCache();\n this.storage = persistence === 'local' ? localStorage : persistence === 'session' ? sessionStorage : null;\n this.loadCacheData();\n }\n\n private saveCacheData() {\n if (this.storage) {\n this.storage[this.cachePersistenceKey] = JSON.stringify(this.cachedData);\n }\n }\n\n private loadCacheData() {\n const data = this.storage ? this.storage[this.cachePersistenceKey] : null;\n this.cachedData = data ? JSON.parse(data) : {};\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { HttpCacheService } from './http-cache.service';\nimport { Observable, Subscriber } from 'rxjs';\n\n/**\n * Caches HTTP requests.\n * Use ExtendedHttpClient fluent API to configure caching for each request.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CacheInterceptor implements HttpInterceptor {\n\n private forceUpdate = false;\n\n constructor(private httpCacheService: HttpCacheService) { }\n\n /**\n * Configures interceptor options\n * @param {{update: boolean}} options If update option is enabled, forces request to be made and updates cache entry.\n * @return {CacheInterceptor} The configured instance.\n */\n configure(options?: { update?: boolean } | null): CacheInterceptor {\n const instance = new CacheInterceptor(this.httpCacheService);\n if (options && options.update) {\n instance.forceUpdate = true;\n }\n return instance;\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.method !== 'GET') {\n return next.handle(request);\n }\n\n return new Observable((subscriber: Subscriber<HttpEvent<any>>) => {\n const cachedData = this.forceUpdate ? null : this.httpCacheService.getCacheData(request.urlWithParams);\n if (cachedData !== null) {\n // Create new response to avoid side-effects\n subscriber.next(new HttpResponse(cachedData as Object));\n subscriber.complete();\n } else {\n next.handle(request)\n .subscribe(\n event => {\n if (event instanceof HttpResponse) {\n this.httpCacheService.setCacheData(request.urlWithParams, event);\n }\n subscriber.next(event);\n },\n error => subscriber.error(error),\n () => subscriber.complete()\n );\n }\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { ConfigService } from './config.service';\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiPrefixInterceptor implements HttpInterceptor {\n\n constructor(private configService: ConfigService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!/^(http|https):/i.test(request.url)) {\n request = request.clone({ url: this.configService.getApiUrl() + request.url });\n }\n return next.handle(request);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ConfigService } from './config.service';\n\nexport interface Credentials {\n // Customize received credentials here\n user: any;\n token: any;\n}\n\n/**\n * Provides storage for authentication credentials.\n * The Credentials interface should be replaced with proper implementation.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CredentialsService {\n\n private _credentials: Credentials | null = null;\n\n constructor(private configService: ConfigService) {\n }\n\n /**\n * Checks is the user is authenticated.\n * @return True if the user is authenticated.\n */\n get isAuthenticated(): boolean {\n return !!this.credentials;\n }\n\n /**\n * Gets the user credentials.\n * @return The user credentials or null if the user is not authenticated.\n */\n get credentials(): Credentials | null {\n if (!this._credentials) {\n this._credentials = JSON.parse(sessionStorage.getItem(this.configService.getCredentialsKey()) || localStorage.getItem(this.configService.getCredentialsKey()));\n }\n return this._credentials;\n }\n\n /**\n * Sets the user credentials.\n * The credentials may be persisted across sessions by setting the `remember` parameter to true.\n * Otherwise, the credentials are only persisted for the current session.\n * @param credentials The user credentials.\n * @param remember True to remember credentials across sessions.\n */\n setCredentials(credentials?: Credentials, remember?: boolean) {\n this._credentials = credentials || null;\n\n if (credentials) {\n (remember ? localStorage : sessionStorage).setItem(this.configService.getCredentialsKey(), JSON.stringify(credentials));\n } else {\n sessionStorage.clear();\n localStorage.clear();\n this._credentials = null;\n }\n }\n\n getAccessToken(): string | null {\n const expiration = this.credentials?.token?.expires_in || '';\n const token = this.credentials?.token?.access_token || '';\n\n if (!token || !expiration) {\n return null;\n }\n\n if (Date.now() > parseInt(expiration)) {\n this.setCredentials();\n return null;\n }\n\n return token;\n }\n\n getExpiration(): string {\n return this.credentials?.token?.expires_in || '';\n }\n\n getRefreshToken(): string {\n return this.credentials?.token?.refresh_token || '';\n }\n\n refresh(): CredentialsService {\n this._credentials = null;\n return this;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { CredentialsService } from './credentials.service';\n\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenInterceptor implements HttpInterceptor {\n\n constructor(private credentials: CredentialsService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n request = request.clone({\n setHeaders: {\n Authorization: `Bearer ${this.credentials.getAccessToken() || ''}`\n }\n });\n return next.handle(request);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HeaderInterceptor implements HttpInterceptor {\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n request = request.clone({\n setHeaders: {\n 'Content-Type': request.headers.get('Content-Type') || 'application/json',\n }\n });\n return next.handle(request);\n }\n}\n","import { Inject, Injectable, InjectionToken, Injector, Optional } from '@angular/core';\nimport { HttpClient, HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { ErrorHandlerInterceptor } from './error-handler.interceptor';\nimport { CacheInterceptor } from './cache.interceptor';\nimport { ApiPrefixInterceptor } from './api-prefix.interceptor';\nimport { TokenInterceptor } from './token.interceptor';\nimport { HeaderInterceptor } from './header.interceptor';\n\n\n// Augment HttpClient with the added configuration methods from HttpService, to allow in-place replacement of\n// HttpClient with HttpService using dependency injection\nexport interface HttpCustomClient {\n\n /**\n * Enables caching for this request.\n * @param {boolean} forceUpdate Forces request to be made and updates cache entry.\n * @return {HttpCustomClient} The new instance.\n */\n cache(forceUpdate?: boolean): HttpCustomClient;\n\n /**\n * Skips default error handler for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipErrorHandler(): HttpCustomClient;\n\n /**\n * Skips default API Prefix for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipApiPrefix(): HttpCustomClient;\n\n\n /**\n * Skips default Token Interceptor for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipToken(): HttpCustomClient;\n\n /**\n* Skips default Header Interceptor for this request.\n* @return {HttpCustomClient} The new instance.\n*/\n skipHeader(): HttpCustomClient;\n\n}\n\n\n// From @angular/common/http/src/interceptor: allows to chain interceptors\nclass HttpInterceptorHandler implements HttpHandler {\n\n constructor(private next: HttpHandler, private interceptor: HttpInterceptor) { }\n\n handle(request: HttpRequest<any>): Observable<HttpEvent<any>> {\n return this.interceptor.intercept(request, this.next);\n }\n\n}\n\n/**\n * Allows to override default dynamic interceptors that can be disabled with the HttpService extension.\n * Except for very specific needs, you should better configure these interceptors directly in the constructor below\n * for better readability.\n *\n * For static interceptors that should always be enabled (like ApiPrefixInterceptor), use the standard\n * HTTP_INTERCEPTORS token.\n */\nexport const HTTP_DYNAMIC_INTERCEPTORS = new InjectionToken<HttpInterceptor>('HTTP_DYNAMIC_INTERCEPTORS');\n\n/**\n * Extends HttpClient with per request configuration using dynamic interceptors.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpService extends HttpClient implements HttpCustomClient {\n\n constructor(private httpHandler: HttpHandler,\n private injector: Injector,\n @Optional() @Inject(HTTP_DYNAMIC_INTERCEPTORS) private interceptors: HttpInterceptor[] = []) {\n super(httpHandler);\n\n if (!this.interceptors) {\n // Configure default interceptors that can be disabled here\n this.interceptors = [this.injector.get(ApiPrefixInterceptor), this.injector.get(HeaderInterceptor), this.injector.get(TokenInterceptor), this.injector.get(ErrorHandlerInterceptor)];\n }\n }\n\n cache(forceUpdate?: boolean): HttpService {\n const cacheInterceptor = this.injector.get(CacheInterceptor).configure({ update: forceUpdate });\n return this.addInterceptor(cacheInterceptor);\n }\n\n skipErrorHandler(): HttpService {\n return this.removeInterceptor(ErrorHandlerInterceptor);\n }\n\n skipApiPrefix(): HttpService {\n return this.removeInterceptor(ApiPrefixInterceptor);\n }\n\n skipToken(): HttpService {\n return this.removeInterceptor(TokenInterceptor);\n }\n\n skipHeader(): HttpService {\n return this.removeInterceptor(HeaderInterceptor);\n }\n\n // Override the original method to wire interceptors when triggering the request.\n request(method?: any, url?: any, options?: any): any {\n const handler = this.interceptors.reduceRight(\n (next, interceptor) => new HttpInterceptorHandler(next, interceptor),\n this.httpHandler\n );\n return new HttpClient(handler).request(method, url, options);\n }\n\n private removeInterceptor(interceptorType: Function): HttpService {\n return new HttpService(\n this.httpHandler,\n this.injector,\n this.interceptors.filter(i => !(i instanceof interceptorType))\n );\n }\n\n private addInterceptor(interceptor: HttpInterceptor): HttpService {\n return new HttpService(\n this.httpHandler,\n this.injector,\n this.interceptors.concat([interceptor])\n );\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from '../core/http.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EntityFileService {\n\n constructor(private http: HttpService) { }\n\n getEntityFiles(filters: any) {\n return this.http.get(`api/entity-files`, { params: filters }).toPromise();\n }\n\n createEntityFile(model: any) {\n return this.http.post(\"api/entity-files\", model).toPromise();\n }\n\n updateEntityFile(model: any) {\n return this.http.put(`api/entity-files/${model.id}`, model).toPromise();\n }\n\n deleteEntityFile(model: any) {\n return this.http.delete(`api/entity-files/${model.id}`).toPromise();\n }\n\n uploadEntityFile(file: File) {\n const formData: FormData = new FormData();\n formData.append(\"fileData\", file, file.name);\n return this.http\n .skipHeader()\n .post(\n \"api/entity-files-upload\",\n formData,\n ).toPromise();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormValidatorService {\n\n constructor() { }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string, formGroup: FormGroup | any, firstAttempt?: boolean) {\n return (!formGroup.get(field).valid && formGroup.get(field).touched) ||\n (!formGroup.get(field).valid && formGroup.get(field).untouched && firstAttempt);\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string, formGroup: FormGroup | any, errorMessages: any, errorField?: string) {\n const error = Object.keys(formGroup.get(field).errors);\n return (error.length > 0) ? (errorMessages[errorField || field][error[0]] ? errorMessages[errorField || field][error[0]] : '') : '';\n }\n\n}\n","import { Component, OnInit, Inject } from \"@angular/core\";\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\nimport { FormGroup, FormBuilder, Validators } from \"@angular/forms\";\nimport { EntityFileService } from '../entity-file.service';\nimport { FileDropperConfig } from '../../file-dropper/file-dropper.model';\nimport { ViewerConfig } from '../../document-viewer/viewer-config.model';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { AlertService } from \"../../core/alert.service\";\n\nconst errorMessages: any = {\n url: {\n required: \"File is required\"\n },\n};\n\n@Component({\n selector: 'entity-file-form',\n templateUrl: './entity-file-form.component.html',\n styleUrls: ['./entity-file-form.component.css']\n})\nexport class EntityFileFormComponent implements OnInit {\n\n entityFileGroup: FormGroup;\n assignmentFileFirstAttempt: boolean;\n updateMode: boolean;\n fileConfig: FileDropperConfig;\n fileList: any[] = [];\n viewerConfig: ViewerConfig;\n hideTitleAndDetails: boolean;\n\n constructor(\n public dialogRef: MatDialogRef<EntityFileFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private formValidatorService: FormValidatorService,\n private fb: FormBuilder,\n private entityFileService: EntityFileService,\n private alertService: AlertService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n //TODO: Finialize and add more validations.\n this.entityFileGroup = this.fb.group({\n id: [''],\n title: [''],\n details: [''],\n entity_type: [''],\n entity_id: [],\n file: ['', Validators.required],\n url: ['', Validators.required]\n });\n }\n\n ngOnInit(): void {\n if (this.data.entity) {\n this.entityFileGroup.get('entity_type').setValue(this.data.entity.entity_type);\n this.entityFileGroup.get('entity_id').setValue(this.data.entity.entity_id);\n }\n if (this.data.file) {\n this.updateMode = true;\n this.entityFileGroup.patchValue(this.data.file);\n }\n\n if (this.data?.hideTitleAndDetails) {\n this.hideTitleAndDetails = this.data?.hideTitleAndDetails;\n }\n\n //File dropper config\n this.fileConfig = {\n fileId: \"subjectFile\",\n containerId: \"subjectFileContainer\",\n styles: {\n height: \"200px\"\n },\n multiple: false,\n acceptFile: \"*\",\n maxSize: 10,\n acceptFileText: \"All Files\"\n };\n\n this.viewerConfig = {\n viewerStyle: {\n height: '200px',\n width: '100%'\n }\n }\n }\n\n\n //Method to trigger submit\n async submit() {\n this.assignmentFileFirstAttempt = true;\n if (!this.entityFileGroup.valid) {\n return;\n }\n const model = this.entityFileGroup.value;\n\n if (this.hideTitleAndDetails) {\n model.title = model.file;\n }\n\n const result: any = this.updateMode\n ? await this.entityFileService.updateEntityFile(model)\n : await this.entityFileService.createEntityFile(model);\n this.dialogRef.close(result.item);\n this.alertService.addAlert(\n \"File submitted successfully\",\n \"success\"\n );\n\n }\n\n async fileChanged(event: any) {\n this.fileList = event;\n\n if (this.fileList.length > 0) {\n\n const result: any = await this.entityFileService.uploadEntityFile(\n this.fileList[0]\n );\n this.entityFileGroup\n .get(\"file\")\n .setValue(result.item.file);\n this.entityFileGroup\n .get(\"url\")\n .setValue(result.item.url);\n this.fileList = [];\n }\n }\n\n\n async removeFile() {\n if (this.entityFileGroup.value.file) {\n try {\n this.entityFileGroup.patchValue({\n file: \"\",\n url: \"\"\n });\n } catch (error) {\n this.alertService.addAlert(\"Unable to remove file, try later\", \"warn\");\n }\n }\n }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(\n field,\n this.entityFileGroup,\n this.assignmentFileFirstAttempt\n );\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(\n field,\n this.entityFileGroup,\n errorMessages\n );\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { MatDialog } from '@angular/material/dialog';\nimport { EntityFileFormComponent } from './entity-file-form/entity-file-form.component';\nimport { EntityFileService } from './entity-file.service';\nimport { ActionPopup } from '../action-popup/action-popup.model';\nimport { FormControl } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { AlertService } from '../core/alert.service';\nimport { ActionPopupComponent } from '../action-popup/action-popup.component';\nimport { ViewerConfig } from '../document-viewer/viewer-config.model';\n\n@UntilDestroy()\n@Component({\n selector: 'app-entity-files-view-all',\n templateUrl: './entity-files-view-all.component.html',\n styleUrls: ['./entity-files-view-all.component.css']\n})\nexport class EntityFilesViewAllComponent implements OnInit {\n @Input() entityId: number;\n @Input() entityType: string;\n @Input() viewOnly: boolean = false;\n @Input() removeSearch: boolean;\n @Input() hideTitleAndDetails: boolean;\n @Input() displayMode: boolean;\n viewerConfig: ViewerConfig;\n\n filters: any = {};\n entityFiles: any[] = [];\n displayedColumns = ['index', 'title', 'details', 'file',];\n isWorking: boolean = false;\n search: FormControl = new FormControl('');\n page: number = 1;\n perPage: number = 25;\n lastPage: number = 0;\n\n constructor(\n private entityFileService: EntityFileService,\n public location: Location,\n private alertService: AlertService,\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n\n\n this.viewerConfig = {\n imageStyle: {\n height: '200px',\n width: '200px'\n },\n viewerStyle: {\n height: ' 160px',\n width: '200px'\n },\n hideRemove: true\n };\n\n if (this.hideTitleAndDetails) {\n this.displayedColumns = this.displayedColumns.filter(x => (x !== 'details') && (x !== 'title'));\n }\n\n this.filters = {\n entity_type: this.entityType,\n entity_id: this.entityId,\n title: \"\"\n };\n this.search.valueChanges.pipe(debounceTime(500), distinctUntilChanged(), untilDestroyed(this)).subscribe(value => {\n this.filters.title = value;\n this.reload();\n })\n this.fetchEntityFilesDetails();\n if (!this.viewOnly) {\n this.displayedColumns.push('actions');\n }\n }\n\n async fetchEntityFilesDetails() {\n this.filters.page = this.page;\n this.isWorking = true;\n const result: any = await this.entityFileService.getEntityFiles(this.filters);\n this.lastPage = result.last_page || this.page;\n this.entityFiles = this.entityFiles.concat(result.data);\n this.isWorking = false;\n }\n\n addEntityFile() {\n const dialogRef = this.dialog.open(EntityFileFormComponent, {\n width: \"700px\",\n data: {\n entity: this.filters,\n hideTitleAndDetails: this.hideTitleAndDetails\n },\n autoFocus: false,\n restoreFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n const files = [...this.entityFiles];\n files.push(result);\n this.entityFiles = files;\n }\n });\n }\n\n editEntityFile(file: any) {\n const dialogRef = this.dialog.open(EntityFileFormComponent, {\n width: \"700px\",\n autoFocus: false,\n data: {\n file: file,\n hideTitleAndDetails: this.hideTitleAndDetails\n } // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.reload();\n }\n });\n }\n\n deleteEntityFile(file: any) {\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: \"400px\",\n data: <ActionPopup>{\n title: \"Delete File\",\n message: `Are you sure to proceed delete the file ${file.title}?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n //Action confirmed\n const result = await this.entityFileService.deleteEntityFile(\n file\n );\n this.alertService.addAlert(\n \"File successfully deleted\",\n \"success\"\n );\n this.reload();\n\n }\n });\n }\n\n onScroll() {\n if (this.page < this.lastPage && !this.isWorking) {\n this.page += 1;\n this.fetchEntityFilesDetails();\n }\n }\n\n reload() {\n this.entityFiles = [];\n this.page = 1;\n if (!this.isWorking) {\n this.fetchEntityFilesDetails();\n }\n }\n\n ngOnDestroy() { }\n\n resetFieldValue() {\n this.search.setValue(\"\");\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from \"@angular/core\";\nimport { AlertService } from \"../core/alert.service\";\nimport { FileDropperConfig } from './file-dropper.model';\n\n\n@Component({\n selector: \"app-file-dropper\",\n templateUrl: \"./file-dropper.component.html\",\n styleUrls: [\"./file-dropper.component.scss\"]\n})\nexport class FileDropperComponent implements OnInit {\n @Input() fileArray: any[] = [];\n\n @Input() config: FileDropperConfig;\n\n @Output() fileChanged: any = new EventEmitter();\n\n border = \"1px dashed #989898\";\n\n @Input() styles: any;\n\n isSingleMode: boolean;\n\n constructor(private alertService: AlertService) { }\n\n /**Life cycle hook method */\n ngOnInit() {\n this.isSingleMode = !Boolean(this.config.multiple);\n }\n\n /**Method for dragging event */\n dragEnter(event: any) {\n event.target.style.background = this.config.dragColor || \"#c0c0c0\";\n\n event.target.style.border = \"1px dashed black\";\n\n event.preventDefault();\n }\n\n /**Method for drag over event */\n dragOver(event: any) {\n event.preventDefault();\n }\n\n /**Method for drag leave event */\n dragLeave(event: any) {\n event.target.style.background = \"\";\n event.target.style.border = this.border;\n\n event.preventDefault();\n }\n\n /**Method for drop event */\n dropEvent(event: any) {\n event.target.style.background = \"\";\n event.target.style.border = this.border;\n const droppedFiles: FileList = event.dataTransfer.files;\n if (droppedFiles.length > 0) {\n const fileArray = Array.from(droppedFiles);\n this.addFiles(fileArray);\n }\n event.preventDefault();\n }\n\n /**Method to list files selected */\n onFileChange(event: any) {\n if (event.target.files && event.target.files.length) {\n const fileArray = Array.from(event.target.files);\n this.addFiles(fileArray);\n const fileInput = document.getElementById(\n this.config.fileId\n ) as HTMLInputElement;\n fileInput.value = \"\";\n }\n }\n\n /**Method to add files in the array */\n addFiles(fileArray: any) {\n if (!this.isSingleMode) {\n fileArray.forEach((file: any) => {\n this.fileArray = this.fileArray.filter(\n (item: any) => item.name !== file.name\n );\n if (this.fileSizeAllowed(file)) {\n this.fileArray.push(file);\n }\n });\n\n this.fileArray.sort(this.sortFiles);\n this.fileChanged.emit(this.fileArray);\n } else {\n // Single Mode\n if (this.fileArray.length === 0) {\n if (this.fileSizeAllowed(fileArray[0])) {\n this.fileArray.push(fileArray[0]);\n this.fileArray.sort(this.sortFiles);\n this.fileChanged.emit(this.fileArray);\n }\n }\n }\n }\n\n /**Method to sort the files in asc */\n sortFiles(a: any, b: any) {\n const nameA = a.name.toUpperCase();\n const nameB = b.name.toUpperCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n\n return 0;\n }\n\n /**Method tp validate the file size */\n fileSizeAllowed(file: any): boolean {\n if (!Boolean(this.config.maxSize)) {\n return true;\n } else if (file.size / (1024 * 1024) < this.config.maxSize) {\n return true;\n } else {\n this.alertService.addAlert(\n `The size of the file exceeds the limit ${this.config.maxSize} MB, kindly upload a file with size ${this.config.maxSize} MB or below`,\n \"warn\"\n );\n return false;\n }\n }\n\n /**Method invokes when the drop box is clicked to upload the file */\n clickEvent(event: any) {\n if (!(this.isSingleMode && this.fileArray.length > 0)) {\n document.getElementById(this.config.fileId).click();\n }\n event.preventDefault();\n }\n}\n","export class FileDropperConfig {\n containerId: string;\n fileId: string;\n styles?: any;\n multiple?: boolean;\n dragColor?: boolean;\n acceptFile: string; // use '*' to accept all file types.\n maxSize?: number; // size in MB\n acceptFileText?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from '../core/http.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NoteService {\n\n constructor(private http: HttpService) { }\n\n getNotes(filterModel: any) {\n return this.http.get('api/notes', { params: filterModel }).toPromise();\n }\n\n addNote(note: any) {\n return this.http.post('api/notes', note).toPromise();\n }\n\n editNote(note: any) {\n return this.http.put(`api/notes/${note.id}`, note).toPromise();\n }\n\n deleteNote(note: any) {\n return this.http.delete(`api/notes/${note.id}`).toPromise();\n }\n}\n","import { Component, OnInit, Inject } from \"@angular/core\";\nimport { FormGroup, FormBuilder, Validators } from \"@angular/forms\";\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\nimport { NoteService } from \"../note.service\";\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { AlertService } from \"../../core/alert.service\";\n\nconst errorMessages: any = {\n note: {\n required: \"Note is required\"\n }\n};\n\n@Component({\n selector: 'app-note-form',\n templateUrl: './note-form.component.html',\n styleUrls: ['./note-form.component.css']\n})\nexport class NoteFormComponent implements OnInit {\n\n updateMode: boolean;\n noteFormGroup: FormGroup;\n noteFormFirstAttempt: boolean;\n\n constructor(\n public dialogRef: MatDialogRef<NoteFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n private noteService: NoteService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n //TODO: Finialize and add more validations.\n this.noteFormGroup = this.fb.group({\n id: [\"\"],\n note: [\"\", Validators.compose([Validators.required])],\n model_type: [\"\"],\n related_model_id: [\"\"],\n });\n }\n\n ngOnInit() {\n if (this.data.update) {\n this.updateMode = true;\n }\n this.noteFormGroup.patchValue(this.data.note);\n }\n\n //Method to trigger login\n async submit() {\n this.noteFormFirstAttempt = true;\n if (this.noteFormGroup.valid) {\n const model = this.noteFormGroup.value;\n const result = this.updateMode\n ? await this.noteService.editNote(model)\n : await this.noteService.addNote(model);\n\n this.alertService.addAlert(\n `${this.data?.labelText} saved successfully`,\n \"success\"\n );\n this.dialogRef.close(result);\n }\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(\n field,\n this.noteFormGroup,\n this.noteFormFirstAttempt\n );\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(\n field,\n this.noteFormGroup,\n errorMessages\n );\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { NoteService } from '../note.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NoteFormComponent } from '../note-form/note-form.component';\nimport { ActionPopupComponent } from '../../action-popup/action-popup.component';\nimport { ActionPopup } from '../../action-popup/action-popup.model';\n\n@Component({\n selector: 'app-note-list',\n templateUrl: './note-list.component.html',\n styleUrls: ['./note-list.component.css']\n})\nexport class NoteListComponent implements OnInit {\n\n @Input() relatedModelId !: any;\n @Input() modelType !: any;\n @Input() readonly: boolean = false;\n @Input() labelText: string = 'Note';\n\n notes: any[] = [];\n filters: any;\n displayedColumns = [\n 'index',\n 'note',\n 'actions'\n ];\n\n page = 1;\n lastPage = 1;\n\n constructor(private noteService: NoteService,\n private dialog: MatDialog\n ) {\n this.filters = {};\n this.filters.sort_by = \"created_at|DESC\";\n }\n\n ngOnInit() {\n if (this.readonly) {\n this.displayedColumns = this.displayedColumns.filter(x => x !== 'actions');\n }\n this.filters.related_model_id = this.relatedModelId;\n this.filters.model_type = this.modelType;\n this.loadData();\n }\n\n async loadData() {\n\n const result: any = await this.noteService.getNotes({ ...this.filters, page: this.page });\n this.notes = this.notes.concat(result.data);\n this.page = result.current_page;\n this.lastPage = result.last_page;\n }\n\n addNote() {\n const dialogRef = this.dialog.open(NoteFormComponent, {\n width: \"400px\",\n data: {\n note: { related_model_id: this.relatedModelId, model_type: this.modelType },\n labelText: this.labelText,\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.resetScroll();\n this.loadData();\n }\n });\n }\n\n editNote(note: any) {\n const dialogRef = this.dialog.open(NoteFormComponent, {\n width: \"400px\",\n data: {\n note: note,\n update: true,\n labelText: this.labelText\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.resetScroll();\n this.loadData();\n }\n });\n }\n\n async deleteNote(note: any) {\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: \"400px\",\n data: <ActionPopup>{\n title: `Delete ${this.labelText}`,\n message: `Are you sure to delete?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n //Action confirmed\n\n const result = await this.noteService.deleteNote(note);\n this.notes = this.notes.filter((item: any) => item.id !== note.id);\n\n }\n });\n }\n\n resetScroll() {\n this.page = 1;\n this.lastPage = 1;\n this.notes = [];\n }\n\n onScroll() {\n if (this.page < this.lastPage) {\n this.page += 1;\n this.loadData();\n }\n }\n\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ElementRef, Input, OnDestroy, OnInit, Optional, Self, Output, EventEmitter, TemplateRef } from '@angular/core';\nimport { FormBuilder, FormGroup, ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Subject, of, from } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, startWith, switchMap, finalize } from 'rxjs/operators';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { HttpService } from '../core/http.service';\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\n\n@UntilDestroy()\n@Component({\n selector: 'app-searchable-selector',\n templateUrl: './searchable-selector.component.html',\n styleUrls: ['./searchable-selector.component.scss'],\n providers: [\n {\n provide: MatFormFieldControl,\n useExisting: SearchableSelectorComponent\n }\n ]\n})\nexport class SearchableSelectorComponent implements ControlValueAccessor, OnInit, OnDestroy {\n\n @Input() valueField: string = 'id';\n @Input() titleField: string = 'title';\n @Input() apiUrl!: string;\n @Input() multiple: boolean = false;\n @Input() selectedValue: any;\n @Output() selectedValueChange = new EventEmitter();\n @Input() enableSearch: boolean = true;\n @Input() add: boolean = false;\n @Input() addConfig: any;\n @Input() edit: boolean = false;\n @Input() editConfig: any;\n @Input() sort: boolean = true;\n @Input() sortBy: string;\n @Input() searchField: string;\n @Input() itemComponent: ComponentType<unknown> | TemplateRef<unknown>;\n @Input() items: any[] = [];\n @Output() selectionChange = new EventEmitter();\n @Output() itemsChange = new EventEmitter();\n\n\n isLoading: boolean = false;\n onChange: any = () => { };\n onTouched: any = () => { };\n static nextId = 0;\n selectorForm: FormGroup;\n stateChanges = new Subject<void>();\n focused = false;\n controlType = 'searchable-selctor';\n id = `searchable-selctor-${SearchableSelectorComponent.nextId++}`;\n describedBy = '';\n filters: any;\n\n\n get empty() {\n const { value: { select_value } } = this.selectorForm;\n return !select_value;\n }\n\n get shouldLabelFloat() { return this.focused || !this.empty; }\n\n\n @Input()\n get required(): boolean { return this._required; }\n set required(value: boolean) {\n this.selectorForm.get('select_value').setValidators(Validators.required);\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n @Input()\n get disabled(): boolean { return this._disabled; }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled ? this.selectorForm.disable() : this.selectorForm.enable();\n this.stateChanges.next();\n }\n private _disabled = false;\n\n @Input()\n get value(): any {\n if (this.selectorForm.valid) {\n return this.selectorForm.value.select_value;\n }\n return '';\n }\n set value(data: any) {\n this.selectorForm.patchValue({ select_value: data || '' });\n this.stateChanges.next();\n }\n\n constructor(\n formBuilder: FormBuilder,\n private _focusMonitor: FocusMonitor,\n private http: HttpService,\n private _elementRef: ElementRef<HTMLElement>,\n private dialog: MatDialog,\n @Optional() @Self() public ngControl: NgControl) {\n\n this.selectorForm = formBuilder.group({\n select_value: [null],\n search: ''\n });\n\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\n if (this.focused && !origin) {\n this.onTouched();\n }\n this.focused = !!origin;\n this.stateChanges.next();\n });\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n openedChange(event: any) {\n if (this.dataItems.length === 0 && this.selectorForm.get('search').value) {\n this.selectorForm.get('search').setValue('');\n }\n }\n\n get dataItems(): any[] {\n let items: any[] = [];\n if (this.multiple && this.selectedValue && (this.selectedValue.length > 0))\n items = [...this.selectedValue, ...this.items];\n else if ((!this.multiple) && this.selectedValue)\n items = [this.selectedValue, ...this.items];\n else\n items = this.items;\n items = items.filter((v, i, a) => a.findIndex(v => v[this.valueField] === a[i][this.valueField]) === i);\n //Emit the items to any child component\n this.itemsChange.emit(items);\n return items;\n }\n\n ngOnInit() {\n this.selectorForm.get('search').valueChanges\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => {\n if (this.enableSearch)\n this.search(value);\n });\n\n this.filters = {\n perPage: 25,\n search: '',\n page: 1,\n lastPage: 1\n }\n if (this.sort) {\n this.filters.sort_by = this.sortBy || `${this.titleField}|asc`;\n }\n\n //Fetch Items only if it is not present, can be used in places where we load many entries.\n if (this.items.length === 0) {\n this.fetchItemList();\n }\n }\n\n fetchItemList() {\n this.isLoading = true;\n of().pipe(\n startWith(true),\n switchMap((_) => from(this.http.get(this.apiUrl, { params: this.filters }))),\n finalize(() => this.isLoading = false),\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.items = this.items.concat(result.data);\n this.filters.page = result.current_page;\n this.filters.lastPage = result.last_page;\n });\n }\n\n\n setDescribedByIds(ids: string[]) {\n this.describedBy = ids.join(' ');\n }\n\n onContainerClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n writeValue(data: any): void {\n this.value = data;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n getPropertyValue(ele: any, keyString: string) {\n keyString = keyString.replace(/\\[(\\w+)\\]/g, \".$1\"); // convert indexes to properties\n keyString = keyString.replace(/^\\./, \"\"); // strip a leading dot\n const keyList = keyString.split(\".\");\n for (let i = 0, n = keyList.length; i < n; ++i) {\n const key = keyList[i];\n if (ele && key in ele) {\n ele = ele[key];\n } else {\n return;\n }\n }\n return ele;\n }\n\n _handleInput(): void {\n this.onChange(this.value);\n if (this.multiple)\n this.selectedValue = (this.value as []).map(x => this.dataItems.find(y => y[this.valueField] === x));\n else\n this.selectedValue = this.dataItems.find(x => x[this.valueField] === this.value);\n this.selectedValueChange.emit(this.selectedValue);\n this.selectionChange.emit(this.value);\n }\n\n get errorState(): boolean {\n return (this.ngControl && this.ngControl.invalid && (this.ngControl.touched || this.ngControl.dirty));\n }\n\n static ngAcceptInputType_disabled: boolean | string | null | undefined;\n static ngAcceptInputType_required: boolean | string | null | undefined;\n\n onScroll() {\n if (this.filters.lastPage > this.filters.page) {\n this.filters.page += 1;\n this.fetchItemList();\n }\n }\n\n reloadData() {\n this.items = [];\n this.filters.page = 1;\n this.filters.lastPage = 1;\n this.fetchItemList();\n }\n\n search(event: any) {\n if (this.searchField) {\n this.filters[this.searchField] = event;\n } else {\n this.filters.search = event;\n }\n this.reloadData();\n }\n\n addItem(event: any) {\n const dialogRef = this.dialog.open(this.itemComponent, {\n width: '400px',\n autoFocus: false,\n data: {},\n ...this.addConfig\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.items.push(result.item);\n this.selectorForm.get('select_value').setValue(result.item[this.valueField]);\n this._handleInput();\n }\n });\n event.stopPropagation();\n }\n\n editItem(event: any) {\n const dialogRef = this.dialog.open(this.itemComponent, {\n width: '400px',\n autoFocus: false,\n data: {\n item: this.selectedValue\n },\n ...this.editConfig\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.items = this.items.filter(x => x[this.valueField] !== this.selectedValue[this.valueField]);\n this.items.push(result.item);\n this.selectedValue = null;\n this.selectorForm.get('select_value').setValue(result.item[this.valueField]);\n this._handleInput();\n }\n });\n event.stopPropagation();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n}\n","import { AfterViewInit, Directive, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output } from '@angular/core';\nimport { MatSelect, SELECT_ITEM_HEIGHT_EM } from '@angular/material/select';\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\nimport { fromEvent, Subject } from 'rxjs';\n\n@Directive({\n selector: '[msInfiniteScroll]'\n})\nexport class MatSelectInfiniteScrollDirective implements OnInit, OnDestroy, AfterViewInit {\n\n @Input() threshold = '15%';\n @Input() debounceTime = 150;\n @Input() complete: boolean;\n @Output() infiniteScroll = new EventEmitter<void>();\n\n private panel: Element;\n private thrPx = 0;\n private thrPc = 0;\n private singleOptionHeight = SELECT_ITEM_HEIGHT_EM;\n\n private destroyed$ = new Subject<boolean>();\n\n constructor(private matSelect: MatSelect, private ngZone: NgZone) {\n }\n\n ngOnInit() {\n this.evaluateThreshold();\n }\n\n ngAfterViewInit() {\n this.matSelect.openedChange.pipe(\n takeUntil(this.destroyed$)\n ).subscribe((opened) => {\n if (opened) {\n this.panel = this.matSelect.panel.nativeElement;\n this.singleOptionHeight = this.getSelectItemHeightPx();\n this.registerScrollListener();\n }\n });\n }\n\n ngOnDestroy() {\n this.destroyed$.next(true);\n this.destroyed$.complete();\n }\n\n evaluateThreshold() {\n if (this.threshold.lastIndexOf('%') > -1) {\n this.thrPx = 0;\n this.thrPc = (parseFloat(this.threshold) / 100);\n\n } else {\n this.thrPx = parseFloat(this.threshold);\n this.thrPc = 0;\n }\n }\n\n registerScrollListener() {\n fromEvent(this.panel, 'scroll').pipe(\n takeUntil(this.destroyed$),\n debounceTime(this.debounceTime),\n tap((event) => {\n this.handleScrollEvent(event);\n })\n ).subscribe();\n }\n\n handleScrollEvent(event) {\n this.ngZone.runOutsideAngular(() => {\n if (this.complete) {\n return;\n }\n const countOfRenderedOptions = this.matSelect.options.length;\n const infiniteScrollDistance = this.singleOptionHeight * countOfRenderedOptions;\n const threshold = this.thrPc !== 0 ? (infiniteScrollDistance * this.thrPc) : this.thrPx;\n\n const scrolledDistance = this.panel.clientHeight + event.target.scrollTop;\n\n if ((scrolledDistance + threshold) >= infiniteScrollDistance) {\n this.ngZone.run(() => this.infiniteScroll.emit());\n }\n });\n }\n\n getSelectItemHeightPx(): number {\n return parseFloat(getComputedStyle(this.panel).fontSize) * SELECT_ITEM_HEIGHT_EM;\n }\n\n}","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\r\n\r\n/**\r\n * Component to generate a num items selector\r\n * \r\n * @author Floyd Kissoon\r\n * @since 20170817\r\n */\r\n@Component({\r\n selector: \"num-items-selector\",\r\n templateUrl: \"./num-items-selector.html\"\r\n})\r\nexport class NumItemsSelector {\r\n @Input() numItems: number;\r\n @Output() numItemsChange: EventEmitter<number>;\r\n\r\n constructor() {\r\n this.numItemsChange = new EventEmitter<number>();\r\n }\r\n\r\n /**\r\n * Called when an item has been selected\r\n */\r\n numItemsChanged() {\r\n this.numItemsChange.emit(this.numItems);\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\n\n/**\n * Service that provides utility functions for dates\n * \n * @author Joshua Kissoon\n * @since 20170726\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DateUtils {\n\n /**\n * Takes in a date object and outputs the string value\n */\n getYYYYMMDDString(inputDate: Date): string {\n var year = inputDate.getFullYear();\n var month = (inputDate.getMonth() + 1) < 10 ? (\"0\" + (inputDate.getMonth() + 1)) : (inputDate.getMonth() + 1);\n var date = inputDate.getDate() < 10 ? (\"0\" + inputDate.getDate()) : inputDate.getDate();\n\n return year + \"-\" + month + \"-\" + date;\n }\n\n /**\n * Takes in a date object and outputs the year\n */\n getYYYY(inputDate: Date): number {\n var year = inputDate.getFullYear();\n return year;\n }\n\n /**\n * Takes in a date object and outputs the Month\n */\n getMM(inputDate: Date): number {\n var month = inputDate.getMonth() + 1;\n return month;\n }\n // var n = this.rfidCardUseManualEntry.manual_date.toLocaleTimeString();\n\n getDateTime(inputDate: Date): string {\n var year = inputDate.getFullYear();\n var month = (inputDate.getMonth() + 1) < 10 ? (\"0\" + (inputDate.getMonth() + 1)) : (inputDate.getMonth() + 1);\n var date = inputDate.getDate() < 10 ? (\"0\" + inputDate.getDate()) : inputDate.getDate();\n var time = inputDate.toLocaleTimeString();\n\n return year + \"-\" + month + \"-\" + date + \" \" + time;\n }\n\n}","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\n\n/**\n * Component to generate a number selector\n * \n * @author Floyd Kissoon\n * @since 20180628\n */\n@Component({\n selector: \"number-selector\",\n templateUrl: \"./number-selector.html\"\n})\nexport class NumberSelector implements OnInit {\n @Input() start_value: number;\n @Input() end_value: number\n @Output() selectedValueChange: EventEmitter<number>;\n @Input() selectedValue: number;\n\n items = new Array();\n\n constructor() {\n this.selectedValueChange = new EventEmitter<number>();\n }\n\n /**\n * Called when an item has been selected\n */\n numChanged() {\n this.selectedValueChange.emit(this.selectedValue);\n }\n\n\n ngOnInit() {\n for (var i = this.start_value; i < this.end_value + 1; i++) {\n this.items.push(i);\n }\n }\n}\n","export function calculateTimeline(value: any) {\n const date = new Date();\n const data: any = {\n 'date_from': date,\n 'date_to': date,\n 'show_custom_field': false\n };\n switch (value) {\n case 1: { //Custom\n data.show_custom_field = true;\n break;\n }\n case 2: { // Today\n data.date_from = date;\n data.date_to = date;\n break;\n }\n case 3: { // Yesterday\n const yesterday = new Date(date)\n yesterday.setDate(yesterday.getDate() - 1)\n data.date_from = yesterday;\n data.date_to = yesterday;\n break;\n }\n case 4: { // This Week\n var first = date.getDate() - date.getDay() + 1; // First day is the day of the month - the day of the week\n var last = first + 6; // last day is the first day + 6 \n data.date_from = new Date(date.setDate(first));\n data.date_to = new Date(date.setDate(last));\n break;\n }\n case 5: { // Last Week\n var d = new Date();\n var to = d.setTime(d.getTime() - (d.getDay() ? d.getDay() : 7) * 24 * 60 * 60 * 1000);\n var from = d.setTime(d.getTime() - 6 * 24 * 60 * 60 * 1000);\n data.date_from = new Date(from);\n data.date_to = new Date(to);\n break;\n }\n case 6: { //This Month\n data.date_from = new Date(date.getFullYear(), date.getMonth(), 1);\n data.date_to = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n break;\n }\n case 7: { // Last Month\n var d = new Date(); // current date\n d.setDate(1); // going to 1st of the month\n d.setHours(-1);\n data.date_from = new Date(date.getFullYear(), date.getMonth() - 1, 1);\n data.date_to = d;\n break;\n }\n case 8: { // This Quarter\n const quarter = Math.floor((date.getMonth() / 3));\n const startFullQuarter = new Date(date.getFullYear(), quarter * 3, 1);\n const endFullQuarter = new Date(startFullQuarter.getFullYear(), startFullQuarter.getMonth() + 3, 0);\n data.date_from = startFullQuarter;\n data.date_to = endFullQuarter;\n break;\n }\n case 9: { // Last Quarter\n const quarter = Math.floor((date.getMonth() / 3));\n const startFullQuarter = new Date(date.getFullYear(), quarter * 3 - 3, 1);\n const endFullQuarter = new Date(startFullQuarter.getFullYear(), startFullQuarter.getMonth() + 3, 0)\n data.date_from = startFullQuarter;\n data.date_to = endFullQuarter;\n break;\n }\n case 10: { // This Year\n data.date_from = new Date(\"1/1/\" + (new Date()).getFullYear());;\n data.date_to = new Date(\"12/31/\" + (new Date()).getFullYear());\n break;\n }\n case 11: { // Last Year\n data.date_from = new Date(\"1/1/\" + (new Date().getFullYear() - 1));;\n data.date_to = new Date(\"12/31/\" + (new Date().getFullYear() - 1));\n break;\n break;\n }\n default: { // All\n data.date_from = '';\n data.date_to = '';\n break;\n }\n\n }\n return data;\n}","export class Timeline {\n public static CUSTOM: number = 1;\n public static TODAY: number = 2;\n public static YESTERDAY: number = 3;\n public static THIS_WEEK: number = 4;\n public static LAST_WEEK: number = 5;\n public static THIS_MONTH: number = 6;\n public static LAST_MONTH: number = 7;\n public static THIS_QUARTER: number = 8;\n public static LAST_QUARTER: number = 9;\n public static THIS_YEAR: number = 10;\n public static LAST_YEAR: number = 11;\n public static ALL: number = 12;\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { calculateTimeline } from './calculate-timeline';\n\n@UntilDestroy()\n@Component({\n selector: 'app-timeline-filter',\n templateUrl: './timeline-filter.component.html',\n styleUrls: ['./timeline-filter.component.scss']\n})\nexport class TimelineFilterComponent implements OnInit {\n\n @Input() timelineValue: FormControl = new FormControl('');\n @Input() timelines: any[] = [\n { value: 1, viewValue: 'Custom' },\n { value: 2, viewValue: 'Today' },\n { value: 3, viewValue: 'Yesterday' },\n { value: 4, viewValue: 'This Week' },\n { value: 5, viewValue: 'Last Week' },\n { value: 6, viewValue: 'This Month' },\n { value: 7, viewValue: 'Last Month' },\n { value: 8, viewValue: 'This Quarter' },\n { value: 9, viewValue: 'Last Quarter' },\n { value: 10, viewValue: 'This Year' },\n { value: 11, viewValue: 'Last Year' },\n { value: 12, viewValue: 'All dates' },\n ];\n\n @Input() labelText: string = 'Select Timeline';\n @Input() dateFrom: string = 'date_from';\n @Input() dateTo: string = 'date_to';\n @Input() appearance: any = \"legacy\"\n @Input() showClearbutton: boolean = false;\n @Input() form: FormGroup;\n\n @Input() set defaultValue(value: any) {\n this.timelineValue.setValue(value);\n this.changeTimeline(value);\n }\n\n showCustomDateFields: boolean = false;\n\n constructor() { }\n\n ngOnInit(): void {\n this.timelineValue.valueChanges.\n pipe(\n debounceTime(100),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => this.changeTimeline(value));\n }\n\n resetFieldValue(field: string) {\n this.form.get(field).setValue('');\n }\n\n\n getFieldValue(field: string) {\n return this.form.get(field).value;\n }\n\n setFieldValue(field: string, value: any) {\n this.form.get(field).setValue(value);\n }\n\n changeTimeline(value: any) {\n const timeline = calculateTimeline(value);\n if (timeline) {\n this.setFieldValue(this.dateFrom, timeline.date_from)\n this.setFieldValue(this.dateTo, timeline.date_to)\n this.showCustomDateFields = timeline.show_custom_field;\n }\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'app-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent implements OnInit {\n\n @Input() isLoading = false;\n @Input() size = 0.6;\n @Input() message: string | undefined;\n\n constructor() { }\n\n ngOnInit() { }\n\n}\n","import { NgModule } from '@angular/core';\nimport { SuccessSnackComponent, ErrorSnackComponent } from './snack.component';\nimport { CommonModule } from '@angular/common';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n declarations: [\n SuccessSnackComponent,\n ErrorSnackComponent\n ],\n imports: [\n CommonModule,\n MatSnackBarModule,\n MatIconModule\n ],\n exports: [\n SuccessSnackComponent,\n ErrorSnackComponent,\n ]\n})\nexport class SnackModule { }\n","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { CredentialsService } from './credentials.service';\nimport { Logger } from './logger.service';\n\nconst log = new Logger('AuthenticationGuard');\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationGuard implements CanActivate {\n\n constructor(private router: Router,\n private credentialsService: CredentialsService) { }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n return this.isUserAuthenticated(route, state);\n }\n\n canLoad(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n return this.isUserAuthenticated(route, state);\n }\n\n isUserAuthenticated(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n if (this.credentialsService.isAuthenticated) {\n return true;\n }\n\n log.debug('Not authenticated, redirecting and adding redirect url...');\n this.router.navigate(['/login'], { queryParams: { redirect: state.url }, replaceUrl: true });\n return false;\n }\n\n}\n","\nimport { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { concatMap, map } from 'rxjs/operators';\nimport { Credentials, CredentialsService } from './credentials.service';\nimport { HttpService } from './http.service';\n\n/**\n * Provides a base for authentication workflow.\n * The login/logout methods should be replaced with proper implementation.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationService {\n\n constructor(private credentialsService: CredentialsService, private http: HttpService) { }\n\n /**\n * Authenticates the user.\n * @param context The login parameters.\n * @return The user credentials.\n */\n login(context: any): Observable<Credentials> {\n const data = <Credentials>{};\n return this.http\n .skipToken()\n .post('oauth/token', context)\n .pipe(\n concatMap(async (tokenInfo: any) => {\n tokenInfo.expires_in = Date.now() + (tokenInfo.expires_in * 1000);\n data.token = tokenInfo;\n data.user = {};\n this.credentialsService.setCredentials(data, context.remember);\n const userInfo: any = await this.http.get('api/user/current').toPromise();\n data.user = userInfo?.user;\n this.credentialsService.setCredentials(data, context.remember);\n return data;\n })\n )\n }\n\n /**\n * Logs out the user and clear credentials.\n * @return True if the user was logged out successfully.\n */\n logout(): Observable<boolean> {\n\n this.credentialsService.setCredentials();\n return of(true);\n }\n\n}\n","import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';\nimport { Injectable } from '@angular/core';\n\n/**\n * A route strategy allowing for explicit route reuse.\n * Used as a workaround for https://github.com/angular/angular/issues/18374\n * To reuse a given route, add `data: { reuse: true }` to the route definition.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RouteReusableStrategy extends RouteReuseStrategy {\n\n public shouldDetach(route: ActivatedRouteSnapshot): boolean {\n return false;\n }\n\n public store(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle | null): void { }\n\n public shouldAttach(route: ActivatedRouteSnapshot): boolean {\n return false;\n }\n\n public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n return null;\n }\n\n public shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n // Reuse the route if the RouteConfig is the same, or if both routes use the\n // same component, because the latter can have different RouteConfigs.\n return future.routeConfig === curr.routeConfig ||\n Boolean(future.routeConfig?.component &&\n future.routeConfig?.component === curr.routeConfig?.component);\n }\n\n}\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject, Observable } from 'rxjs';\r\n\r\n/**\r\n * Service used to manage Local Storage\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20190623\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StorageService {\r\n private storageSub = new Subject<any>();\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n watch(): Observable<any> {\r\n return this.storageSub.asObservable();\r\n }\r\n\r\n setItem(key: string, data: any) {\r\n localStorage.setItem(key, data);\r\n this.storageSub.next({ key: key, value: data });\r\n }\r\n\r\n getItem(key: string) {\r\n return localStorage.getItem(key);\r\n }\r\n\r\n removeItem(key: string) {\r\n const data = this.getItem(key);\r\n localStorage.removeItem(key);\r\n this.storageSub.next({ key: key, value: data });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpService } from './http.service';\r\n\r\n/**\r\n * Service that provides a wrapper for retrieving data from the server\r\n * @deprecated use HttpService Instead\r\n * @author Joshua Kissoon\r\n * @since 20170709\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DataManager {\r\n\r\n constructor(private http: HttpService) { }\r\n\r\n /**\r\n * Callback wrapper for the HTTP GET Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n * @updated 20170711 to add parameters\r\n */\r\n GET(urlq: string, params = {}): any {\r\n return this.http\r\n .get(urlq, { params: params })\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP POST Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the POST data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n POST(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .post(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP POST Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the POST data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n POSTRAW(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .skipHeader()\r\n .post(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n\r\n /**\r\n * Callback wrapper for the HTTP PUT Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the PUT data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n PUT(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .put(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP PATCH Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the PUT data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20161107\r\n */\r\n PATCH(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .patch(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP DELETE Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n DELETE(urlq: string): any {\r\n return this.http\r\n .delete(urlq)\r\n .toPromise();\r\n }\r\n\r\n}","import { MatTooltipModule } from '@angular/material/tooltip';\n/*\n * This module imports and re-exports all Angular Material modules for convenience,\n * so only 1 module import is needed in your feature modules.\n * See https://material.angular.io/guide/getting-started#step-3-import-the-component-modules.\n *\n * To optimize your production builds, you should only import the components used in your app.\n */\n\nimport { NgModule } from \"@angular/core\";\nimport {\n MatCommonModule,\n MatLineModule,\n MatNativeDateModule,\n MatOptionModule,\n MatPseudoCheckboxModule,\n MatRippleModule\n} from \"@angular/material/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { MatSelectModule } from \"@angular/material/select\";\nimport { MatSortModule } from \"@angular/material/sort\";\nimport { MatTableModule } from \"@angular/material/table\";\nimport { MatCardModule } from \"@angular/material/card\";\nimport { MatDividerModule } from \"@angular/material/divider\";\nimport { MatChipsModule } from \"@angular/material/chips\";\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatListModule } from '@angular/material/list'\n\n\n@NgModule({\n exports: [\n MatButtonModule,\n MatCheckboxModule,\n MatCommonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatLineModule,\n MatMenuModule,\n MatNativeDateModule,\n MatOptionModule,\n MatProgressSpinnerModule,\n MatPseudoCheckboxModule,\n MatRippleModule,\n MatSelectModule,\n MatSortModule,\n MatTableModule,\n MatCardModule,\n MatDividerModule,\n MatChipsModule,\n MatDatepickerModule,\n MatListModule,\n MatTooltipModule\n ]\n})\nexport class MaterialModule { }\n","import { NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS, HttpClientModule, HttpClient } from '@angular/common/http';\nimport { RouteReuseStrategy, RouterModule } from '@angular/router';\n\nimport { RouteReusableStrategy } from './route-reusable-strategy';\nimport { ApiPrefixInterceptor } from './api-prefix.interceptor';\nimport { ErrorHandlerInterceptor } from './error-handler.interceptor';\nimport { HttpService } from './http.service';\nimport { TokenInterceptor } from './token.interceptor';\nimport { CacheInterceptor } from './cache.interceptor';\nimport { SnackModule } from './snack/snack.module';\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n RouterModule,\n SnackModule\n ],\n providers: [\n {\n provide: HttpClient,\n useClass: HttpService\n },\n {\n provide: RouteReuseStrategy,\n useClass: RouteReusableStrategy\n }\n ],\n exports: [\n SnackModule\n ]\n})\nexport class CoreModule {\n\n constructor(@Optional() @SkipSelf() parentModule: CoreModule) {\n // Import guard\n if (parentModule) {\n throw new Error(`${parentModule} has already been loaded. Import Core module in the root module only.`);\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupComponent } from './action-popup.component';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n FlexLayoutModule,\n CommonModule,\n MaterialModule\n ],\n declarations: [\n ActionPopupComponent\n ],\n exports: [\n ActionPopupComponent\n ],\n entryComponents: [\n ActionPopupComponent\n ]\n})\nexport class ActionPopupModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { DataTableComponent } from './data-table.component';\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { MaterialModule } from '../material.module';\n\n\n@NgModule({\n imports: [\n FlexLayoutModule,\n CommonModule,\n InfiniteScrollModule,\n MaterialModule\n ],\n declarations: [\n DataTableComponent\n ],\n exports: [\n DataTableComponent\n ]\n})\nexport class DataTableModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { DocumentViewerComponent } from './document-viewer.component';\nimport { NgxDocViewerModule } from 'ngx-doc-viewer';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FlexLayoutModule,\n NgxDocViewerModule,\n MaterialModule\n ],\n declarations: [\n DocumentViewerComponent\n ],\n exports: [\n DocumentViewerComponent\n ]\n})\nexport class DocumentViewerModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FileDropperComponent } from './file-dropper.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FlexLayoutModule,\n MaterialModule\n ],\n declarations: [\n FileDropperComponent\n ],\n exports: [FileDropperComponent]\n})\nexport class FileDropperModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EntityFileFormComponent } from './entity-file-form/entity-file-form.component';\nimport { EntityFilesViewAllComponent } from './entity-files-view-all.component';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FileDropperModule } from '../file-dropper/file-dropper.module';\nimport { DocumentViewerModule } from '../document-viewer/document-viewer.module';\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\nimport { MaterialModule } from '../material.module';\n\n\n@NgModule({\n declarations: [EntityFileFormComponent, EntityFilesViewAllComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n FlexLayoutModule,\n FileDropperModule,\n DocumentViewerModule,\n InfiniteScrollModule,\n ActionPopupModule,\n MaterialModule\n ],\n exports: [\n EntityFilesViewAllComponent\n ],\n entryComponents: [EntityFileFormComponent]\n})\nexport class EntityFilesViewAllModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NoteListComponent } from './note-list/note-list.component';\nimport { NoteFormComponent } from './note-form/note-form.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n declarations: [\n NoteListComponent,\n NoteFormComponent\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n FlexLayoutModule,\n ActionPopupModule,\n MaterialModule\n ],\n exports: [\n NoteListComponent\n ],\n entryComponents: [NoteFormComponent]\n})\nexport class NoteModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SearchableSelectorComponent } from './searchable-selector.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatSelectInfiniteScrollDirective } from './mat-select-infinite-scroll.directive';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FlexLayoutModule,\n MaterialModule\n ],\n declarations: [\n SearchableSelectorComponent,\n MatSelectInfiniteScrollDirective\n ],\n exports: [\n SearchableSelectorComponent,\n MatSelectInfiniteScrollDirective\n ]\n})\nexport class SearchableSelectorModule { }\n","import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/* Selectors */\r\nimport { NumItemsSelector } from './num-items-selector.component';\r\nimport { NumberSelector } from './number-selector.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ],\r\n declarations: [\r\n NumItemsSelector, NumberSelector,\r\n ],\r\n exports: [NumItemsSelector, NumberSelector]\r\n})\r\nexport class UtilityModule { }\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class TimelineFilterRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { TimelineFilterRoutingModule } from './timeline-filter-routing.module';\nimport { TimelineFilterComponent } from './timeline-filter.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../material.module';\n\n\n@NgModule({\n declarations: [TimelineFilterComponent],\n imports: [\n CommonModule,\n TimelineFilterRoutingModule,\n FlexLayoutModule,\n MaterialModule,\n ReactiveFormsModule\n ],\n exports: [TimelineFilterComponent]\n})\nexport class TimelineFilterModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LoaderComponent } from './loader.component';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\n@NgModule({\n declarations: [\n LoaderComponent\n ],\n imports: [\n CommonModule,\n MatProgressSpinnerModule\n ],\n exports: [\n LoaderComponent\n ]\n})\nexport class LoaderModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionRoutingModule } from './email-subscription-routing.module';\n\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EmailSubscriptionRoutingModule\n ]\n})\nexport class EmailSubscriptionModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserRoutingModule } from './email-subscription-user-routing.module';\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EmailSubscriptionUserRoutingModule\n ]\n})\nexport class EmailSubscriptionUserModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserFormRoutingModule { }\n","\nimport { Component, Inject, OnInit, TemplateRef } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { finalize } from 'rxjs/operators';\nimport { AlertService } from '../../../core/alert.service';\nimport { FormValidatorService } from '../../../core/form-validator.service';\nimport { HttpService } from '../../../core/http.service';\nimport { Logger } from '../../../core/logger.service';\n\nconst log = new Logger('EmailSubscriptionUser Form');\n\nconst errorMessages: any = {\n user_id: {\n required: \"User is required\"\n },\n email_type_id: {\n required: \"Email Type is required\"\n },\n};\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-user-form',\n templateUrl: './email-subscription-user-form.component.html',\n styleUrls: ['./email-subscription-user-form.component.scss']\n})\nexport class EmailSubscriptionUserFormComponent implements OnInit {\n\n updateMode: boolean;\n esUserFormGroup: FormGroup;\n esUserFormFirstAttempt: boolean;\n esUser: any;\n isSubmitLoading: boolean;\n selectedUser: any;\n selectedType: any;\n\n constructor(private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n public dialogRef: MatDialogRef<EmailSubscriptionUserFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private http: HttpService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.esUserFormGroup = this.fb.group({\n id: [''],\n user_id: ['', Validators.required],\n email_type_id: ['', Validators.required],\n });\n }\n\n\n ngOnInit() {\n if (this.data?.esUser?.id) {\n this.esUser = this.data.esUser;\n this.updateMode = true;\n this.selectedType = this.esUser?.email_type;\n this.selectedUser = this.esUser?.user;\n this.esUserFormGroup.patchValue(this.esUser);\n }\n\n }\n\n //Method to trigger login\n submit() {\n this.esUserFormGroup.markAllAsTouched();\n this.esUserFormFirstAttempt = true;\n if (this.esUserFormGroup.valid) {\n this.isSubmitLoading = true;\n const model = this.esUserFormGroup.value;\n (\n this.updateMode ?\n this.http.put(`api/email-subscription-users/${model?.id}`, model) :\n this.http.post(`api/email-subscription-users`, model)\n )\n .pipe(\n finalize(() => this.isSubmitLoading = false),\n untilDestroyed(this)\n ).subscribe(result => {\n this.alertService.addAlert(\"Subscription saved successfully\", \"success\");\n this.dialogRef.close(result);\n });\n }\n }\n\n\n cancel() {\n this.dialogRef.close();\n }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.esUserFormGroup, this.esUserFormFirstAttempt);\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(field, this.esUserFormGroup, errorMessages);\n }\n\n ngOnDestroy() {\n // Needed for automatic unsubscribe with untilDestroyed\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserFormRoutingModule } from './email-subscription-user-form-routing.module';\nimport { EmailSubscriptionUserFormComponent } from './email-subscription-user-form.component';\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../../material.module';\nimport { LoaderModule } from '../../../loader/loader.module';\n\n\n@NgModule({\n declarations: [EmailSubscriptionUserFormComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n EmailSubscriptionUserFormRoutingModule,\n LoaderModule\n ],\n entryComponents: [EmailSubscriptionUserFormComponent]\n})\nexport class EmailSubscriptionUserFormModule { }\n","import { Component, OnInit, ViewChild } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\nimport { FormControl } from '@angular/forms';\nimport { MatSort } from '@angular/material/sort';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { EmailSubscriptionUserFormComponent } from '../email-subscription-user-form/email-subscription-user-form.component';\nimport { Router } from '@angular/router';\nimport { Logger } from '../../../core/logger.service';\nimport { PageEvent } from '../../../data-table/data-table.model';\nimport { HttpService } from '../../../core/http.service';\nimport { ActionPopupComponent } from '../../../action-popup/action-popup.component';\nimport { ActionPopup } from '../../../action-popup/action-popup.model';\n\nconst log = new Logger('EmailSubscriptionUser list');\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-user-list',\n templateUrl: './email-subscription-user-list.component.html',\n styleUrls: ['./email-subscription-user-list.component.scss']\n})\nexport class EmailSubscriptionUserListComponent implements OnInit {\n\n esUserList: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n };\n\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n displayColumns: FormControl = new FormControl(['index', 'user.name', 'email_type.title', 'creator.name', 'created_at', 'actions']);\n displayedColumns: any[] = [];\n availableDisplayColumns: any[] = [\n { order: 1, value: 'index', name: 'Index' },\n { order: 2, value: 'user.name', name: 'User' },\n { order: 3, value: 'email_type.title', name: 'Email Type' },\n { order: 4, value: 'creator.name', name: 'Creator' },\n { order: 5, value: 'actions', name: 'Actions' }\n ];\n\n constructor(\n private dialog: MatDialog,\n private http: HttpService,\n private router: Router,\n ) { }\n\n ngOnInit() {\n this.displayedColumns = this.displayColumns.value;\n this.initializeData();\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.changeSort(value);\n })\n }\n }\n\n get selectedColumns(): string[] {\n return this.availableDisplayColumns\n .filter(col => (this.displayColumns.value as any).some((x: any) => x === col.value))\n .sort((a, b) => (a.order > b.order) ? 1 : ((b.order > a.order) ? -1 : 0))\n .map(col => col.value);\n }\n\n columnsChange() {\n this.displayedColumns = this.selectedColumns;\n }\n\n\n initializeData() {\n this.http.get(`api/email-subscription-users`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.esUserList = this.esUserList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n filterChange(event: any) {\n this.filters = {\n ...this.filters,\n ...event\n };\n this.reload();\n }\n\n addEmailSubscriptionUser() {\n const dialogRef = this.dialog.open(EmailSubscriptionUserFormComponent, {\n width: '800px',\n autoFocus: false,\n data: {} // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n log.debug(result);\n this.reload();\n }\n });\n }\n\n\n editEmailSubscriptionUser(event: any, esUser: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(EmailSubscriptionUserFormComponent, {\n width: '800px',\n autoFocus: false,\n data: {\n esUser: esUser\n } // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n log.debug(result);\n this.reload();\n }\n });\n }\n\n deleteEmailSubscriptionUser(event: any, esUser: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: '400px',\n data: <ActionPopup>{\n title: 'Delete Subscription',\n message: `Are you sure to proceed delete the esUser ${esUser.name}?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n //Action confirmed\n this.http.delete(`api/email-subscription-users/${esUser?.id}`)\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.esUserList = this.esUserList.filter(x => x.id !== esUser.id);\n });\n }\n });\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n changeSort(event: any) {\n if (event.direction) {\n this.filters.sort_by = `${event.active}|${event.direction}`;\n this.reload();\n }\n }\n\n reload() {\n this.esUserList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../../../core/authentication.guard';\nimport { EmailSubscriptionUserListComponent } from './email-subscription-user-list.component';\n\nexport const esulr = {\n title: 'Email Subscription Users',\n permissions: {\n only: ['app_admin'],\n redirectTo: '/'\n }\n};\n\nconst routes: Routes = [\n {\n path: '',\n component: EmailSubscriptionUserListComponent,\n canActivate: [AuthenticationGuard],\n data: esulr\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserListRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserListFilterRoutingModule { }\n","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-user-list-filter',\n templateUrl: './email-subscription-user-list-filter.component.html',\n styleUrls: ['./email-subscription-user-list-filter.component.scss']\n})\nexport class EmailSubscriptionUserListFilterComponent implements OnInit {\n\n esUserFilterForm: FormGroup;\n\n @Output() valueChange = new EventEmitter();\n\n constructor(private fb: FormBuilder) {\n this.createForm();\n }\n\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.esUserFilterForm = this.fb.group({\n user_id: [''],\n email_type_id: [''],\n });\n }\n\n ngOnInit(): void {\n\n this.esUserFilterForm.valueChanges.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => {\n this.valueChange.emit(value);\n })\n }\n\n\n resetFieldValue(field: string) {\n this.esUserFilterForm.get(field).setValue('');\n }\n\n getFieldValue(field: string) {\n return this.esUserFilterForm.get(field).value;\n }\n\n\n ngOnDestroy() {\n\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserListFilterRoutingModule } from './email-subscription-user-list-filter-routing.module';\nimport { EmailSubscriptionUserListFilterComponent } from './email-subscription-user-list-filter.component';\nimport { MaterialModule } from '../../../material.module';\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [EmailSubscriptionUserListFilterComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n EmailSubscriptionUserListFilterRoutingModule\n ],\n exports: [EmailSubscriptionUserListFilterComponent]\n})\nexport class EmailSubscriptionUserListFilterModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserListRoutingModule } from './email-subscription-user-list-routing.module';\nimport { EmailSubscriptionUserListComponent } from './email-subscription-user-list.component';\nimport { EmailSubscriptionUserListFilterModule } from '../email-subscription-user-list-filter/email-subscription-user-list-filter.module';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { EmailSubscriptionUserFormModule } from '../email-subscription-user-form/email-subscription-user-form.module';\nimport { MaterialModule } from '../../../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [EmailSubscriptionUserListComponent],\n imports: [\n CommonModule,\n InfiniteScrollModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n EmailSubscriptionUserListRoutingModule,\n EmailSubscriptionUserFormModule,\n EmailSubscriptionUserListFilterModule\n ],\n exports: [EmailSubscriptionUserListComponent]\n})\nexport class EmailSubscriptionUserListModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\n\nexport class EmailSubscriptionTypeRoutingModule { }","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionTypeRoutingModule } from './email-subscription-type-routing.module';\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EmailSubscriptionTypeRoutingModule\n ]\n})\nexport class EmailSubscriptionTypeModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionTypeFormRoutingModule { }\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { finalize } from 'rxjs/operators';\nimport { AlertService } from '../../../core/alert.service';\nimport { FormValidatorService } from '../../../core/form-validator.service';\nimport { HttpService } from '../../../core/http.service';\n\nconst errorMessages: any = {\n title: {\n required: \"Title is required\"\n },\n code: {\n required: \"Code is required\"\n },\n frequency_id: {\n required: \"Frequency is required\"\n },\n};\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-type-form',\n templateUrl: './email-subscription-type-form.component.html',\n styleUrls: ['./email-subscription-type-form.component.scss']\n})\nexport class EmailSubscriptionTypeFormComponent implements OnInit {\n\n updateMode: boolean;\n emailSubscriptionTypeFormGroup: FormGroup;\n emailSubscriptionTypeFormFirstAttempt: boolean;\n emailSubscriptionType: any;\n selectedFrequency: any;\n isLoading: boolean;\n isSubmitLoading: boolean;\n\n constructor(private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n public dialogRef: MatDialogRef<EmailSubscriptionTypeFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private http: HttpService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.emailSubscriptionTypeFormGroup = this.fb.group({\n id: [''],\n title: ['', Validators.compose([Validators.required])],\n code: ['', Validators.compose([Validators.required])],\n frequency_id: ['', Validators.required],\n description: [''],\n });\n }\n\n ngOnInit() {\n if (this.data.emailSubscriptionType?.id) {\n this.isLoading = true;\n this.emailSubscriptionType = this.data?.emailSubscriptionType;\n this.updateMode = true;\n this.selectedFrequency = this.emailSubscriptionType?.frequency || {};\n this.emailSubscriptionTypeFormGroup.patchValue(this.emailSubscriptionType);\n }\n }\n\n //Method to trigger login\n submit() {\n this.emailSubscriptionTypeFormGroup.markAllAsTouched();\n this.emailSubscriptionTypeFormFirstAttempt = true;\n if (this.emailSubscriptionTypeFormGroup.valid) {\n this.isSubmitLoading = true;\n const model = this.emailSubscriptionTypeFormGroup.value;\n (\n this.updateMode ?\n this.http.put(`api/email-subscription-types/${model?.id}`, model) :\n this.http.post(`api/email-subscription-types`, model)\n )\n .pipe(\n finalize(() => this.isSubmitLoading = false),\n untilDestroyed(this)\n ).subscribe(result => {\n this.alertService.addAlert(\"Email Type saved successfully\", \"success\");\n this.dialogRef.close(result);\n });\n }\n }\n\n\n cancel() {\n this.dialogRef.close();\n }\n\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.emailSubscriptionTypeFormGroup, this.emailSubscriptionTypeFormFirstAttempt);\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(field, this.emailSubscriptionTypeFormGroup, errorMessages);\n }\n\n ngOnDestroy() {\n // Needed for automatic unsubscribe with untilDestroyed\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionTypeFormRoutingModule } from './email-subscription-type-form-routing.module';\nimport { EmailSubscriptionTypeFormComponent } from './email-subscription-type-form.component';\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../../material.module';\nimport { LoaderModule } from '../../../loader/loader.module';\n\n\n\n@NgModule({\n declarations: [EmailSubscriptionTypeFormComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n EmailSubscriptionTypeFormRoutingModule,\n LoaderModule\n ],\n exports: [EmailSubscriptionTypeFormComponent],\n entryComponents: [EmailSubscriptionTypeFormComponent]\n})\nexport class EmailSubscriptionTypeFormModule { }\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FormControl } from '@angular/forms';\nimport { distinctUntilChanged, debounceTime } from 'rxjs/operators';\nimport { MatSort } from '@angular/material/sort';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { EmailSubscriptionTypeFormComponent } from '../email-subscription-type-form/email-subscription-type-form.component';\nimport { PageEvent } from '../../../data-table/data-table.model';\nimport { HttpService } from '../../../core/http.service';\nimport { ActionPopupComponent } from '../../../action-popup/action-popup.component';\nimport { ActionPopup } from '../../../action-popup/action-popup.model';\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-type-list',\n templateUrl: './email-subscription-type-list.component.html',\n styleUrls: ['./email-subscription-type-list.component.scss']\n})\nexport class EmailSubscriptionTypeListComponent implements OnInit {\n\n emailSubscriptionTypeList: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n isLoadRelations: true,\n relations: ['frequency']\n };\n search: FormControl = new FormControl('');\n\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n displayColumns: FormControl = new FormControl(['index', 'title', 'frequency.title', 'description', 'actions']);\n displayedColumns: any[] = [];\n availableDisplayColumns: any[] = [\n { order: 1, value: 'index', name: 'Index' },\n { order: 2, value: 'title', name: 'Title' },\n { order: 3, value: 'code', name: 'Code' },\n { order: 4, value: 'frequency.title', name: 'Frequency' },\n { order: 5, value: 'description', name: 'Description' },\n { order: 6, value: 'actions', name: 'Actions' }\n ];\n\n constructor(\n private dialog: MatDialog,\n private http: HttpService,\n ) { }\n\n ngOnInit() {\n this.displayedColumns = this.displayColumns.value;\n this.initializeData();\n this.search.valueChanges.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => {\n this.filters.search = value;\n this.reload();\n });\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.changeSort(value);\n })\n }\n }\n\n get selectedColumns(): string[] {\n return this.availableDisplayColumns\n .filter(col => (this.displayColumns.value as any).some((x: any) => x === col.value))\n .sort((a, b) => (a.order > b.order) ? 1 : ((b.order > a.order) ? -1 : 0))\n .map(col => col.value);\n }\n\n columnsChange() {\n this.displayedColumns = this.selectedColumns;\n }\n\n\n initializeData() {\n this.http.get(`api/email-subscription-types`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.emailSubscriptionTypeList = this.emailSubscriptionTypeList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n addEmailSubscriptionType() {\n const dialogRef = this.dialog.open(EmailSubscriptionTypeFormComponent, {\n width: '400px',\n autoFocus: false,\n data: {} // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.reload();\n }\n });\n }\n\n\n editEmailSubscriptionType(event: any, emailSubscriptionType: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(EmailSubscriptionTypeFormComponent, {\n width: '400px',\n autoFocus: false,\n data: {\n emailSubscriptionType: emailSubscriptionType\n } // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.reload();\n }\n });\n }\n\n deleteEmailSubscriptionType(event: any, emailSubscriptionType: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: '400px',\n data: <ActionPopup>{\n title: 'Delete Email Type',\n message: `Are you sure to proceed delete the Email Type ${emailSubscriptionType.title}?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n //Action confirmed\n this.http.delete(`api/email-subscription-types/${emailSubscriptionType?.id}`)\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.emailSubscriptionTypeList = this.emailSubscriptionTypeList.filter(x => x.id !== emailSubscriptionType.id);\n });\n }\n });\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n changeSort(event: any) {\n if (event.direction) {\n this.filters.sort_by = `${event.active}|${event.direction}`;\n this.reload();\n }\n }\n\n reload() {\n this.emailSubscriptionTypeList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../../../core/authentication.guard';\n\nimport { EmailSubscriptionTypeListComponent } from './email-subscription-type-list.component';\n\nexport const estlr = {\n title: 'Email Subscription Type',\n permissions: {\n only: ['client_admin'],\n redirectTo: '/'\n }\n};\n\n\nconst routes: Routes = [\n {\n path: '',\n component: EmailSubscriptionTypeListComponent,\n canActivate: [AuthenticationGuard],\n data: estlr\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionTypeListRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionTypeListRoutingModule } from './email-subscription-type-list-routing.module';\nimport { EmailSubscriptionTypeListComponent } from './email-subscription-type-list.component';\nimport { EmailSubscriptionTypeFormModule } from '../email-subscription-type-form/email-subscription-type-form.module';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../../material.module';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [EmailSubscriptionTypeListComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n EmailSubscriptionTypeFormModule,\n EmailSubscriptionTypeListRoutingModule\n ],\n exports: [EmailSubscriptionTypeListComponent]\n})\nexport class EmailSubscriptionTypeListModule { }\n","import { Component, OnInit } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { HttpService } from '../../core/http.service';\nimport { PageEvent } from '../../data-table/data-table.model';\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-for-user',\n templateUrl: './email-subscription-for-user.component.html',\n styleUrls: ['./email-subscription-for-user.component.scss']\n})\nexport class EmailSubscriptionForUserComponent implements OnInit {\n\n subscriptions: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n isLoadRelations: true,\n relations: 'frequency,currentUserSubscription'\n };\n\n constructor(\n private http: HttpService\n ) { }\n\n ngOnInit(): void {\n this.fetchSubscriptions();\n }\n\n fetchSubscriptions() {\n this.http.get(`api/email-subscription-types`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.subscriptions = this.subscriptions.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.fetchSubscriptions();\n }\n }\n\n subscribe(sub: any) {\n this.http.post(`api/email-subscription-for-user`, { email_type_id: sub?.id })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n sub.current_user_subscription = result?.item;\n });\n }\n\n unsubscribe(sub: any) {\n this.http.delete(`api/email-subscription-users/${sub?.current_user_subscription?.id}`)\n .pipe(untilDestroyed(this))\n .subscribe((_: any) => {\n sub.current_user_subscription = null;\n });\n }\n\n\n reload() {\n this.subscriptions = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.fetchSubscriptions();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../../core/authentication.guard';\nimport { EmailSubscriptionForUserComponent } from './email-subscription-for-user.component';\n\nexport const esfur = {\n permissions: {\n only: ['client_admin']\n }\n};\n\nconst routes: Routes = [\n {\n path: '',\n component: EmailSubscriptionForUserComponent,\n canActivate: [AuthenticationGuard],\n data: esfur\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionForUserRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionForUserRoutingModule } from './email-subscription-for-user-routing.module';\nimport { EmailSubscriptionForUserComponent } from './email-subscription-for-user.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [EmailSubscriptionForUserComponent],\n imports: [\n CommonModule,\n InfiniteScrollModule,\n MaterialModule,\n FlexLayoutModule,\n EmailSubscriptionForUserRoutingModule\n ],\n exports: [EmailSubscriptionForUserComponent]\n})\nexport class EmailSubscriptionForUserModule { }\n","import { Component, OnInit, Input } from \"@angular/core\";\n\n@Component({\n selector: \"app-read-more\",\n templateUrl: \"./read-more.component.html\",\n styleUrls: [\"./read-more.component.scss\"]\n})\nexport class ReadMoreComponent implements OnInit {\n @Input() text: string;\n @Input() maxLength: number = 100;\n currentText: string;\n hideToggle: boolean = true;\n\n isCollapsed: boolean = true;\n\n constructor() {}\n\n ngOnInit() {\n this.determineView();\n }\n\n toggleView() {\n this.isCollapsed = !this.isCollapsed;\n this.determineView();\n }\n\n determineView() {\n if (!this.text || this.text.length <= this.maxLength) {\n this.currentText = this.text;\n this.isCollapsed = false;\n this.hideToggle = true;\n return;\n }\n this.hideToggle = false;\n if (this.isCollapsed == true) {\n this.currentText = this.text.substring(0, this.maxLength) + \"...\";\n } else if (this.isCollapsed == false) {\n this.currentText = this.text;\n }\n }\n}\n","import { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from './../../material.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReadMoreComponent } from './read-more.component';\n\n@NgModule({\n declarations: [ReadMoreComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule\n ],\n exports: [\n ReadMoreComponent\n ]\n})\nexport class ReadMoreModule { }\n","import { HttpService } from '../core/http.service';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TechlifyUpdateService {\n\n constructor(private http: HttpService) { }\n\n getTechlifyUpdates(filters: any) {\n return this.http.get(`api/techlify-updates`, { params: filters }).toPromise();\n }\n\n createTechlifyUpdate(techlifyUpdate: any) {\n return this.http.post(`api/techlify-updates`, techlifyUpdate).toPromise();\n }\n\n updateTechlifyUpdate(techlifyUpdate: any) {\n return this.http.put(`api/techlify-updates/${techlifyUpdate.id}`, techlifyUpdate).toPromise();\n }\n\n deleteTechlifyUpdate(techlifyUpdateId: any) {\n return this.http.delete(`api/techlify-updates/${techlifyUpdateId}`).toPromise();\n }\n\n getTechlifyUpdate(techlifyUpdateId: any) {\n return this.http.get(`api/techlify-updates/${techlifyUpdateId}`).toPromise();\n }\n\n getNewUpdateForCurrentUser() {\n return this.http.get(`api/current-user-techlify-updates`).toPromise();\n }\n\n createUpdateViewRecord(techlifyUpdateView: any) {\n return this.http.post(`api/techlify-update-views`, techlifyUpdateView).toPromise();\n }\n\n updateCurrentUserUpdates() {\n return this.http.get(`api/techlify-updates/update-view`).toPromise();\n }\n}\n","import { AlertService } from \"../../core/alert.service\";\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { FormControl, Validators } from '@angular/forms';\nimport { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Editor, Toolbar } from 'ngx-editor';\n\nconst errorMessages: any = {\n title: {\n required: \"Title is required\",\n },\n released_on: {\n required: \"Released On is required\",\n },\n version: {\n required: \"Version is required\",\n },\n description: {\n required: \"Description is required\",\n },\n learn_more_link: {\n pattern: \"Please enter valid link\",\n }\n}\n\n@Component({\n selector: 'app-techlify-update-form',\n templateUrl: './techlify-update-form.component.html',\n styleUrls: ['./techlify-update-form.component.scss']\n})\nexport class TechlifyUpdateFormComponent implements OnInit {\n\n @Output() onSave = new EventEmitter<any>();\n techlifyUpdateForm: FormGroup;\n isUpdateMode: boolean = false;\n editor: Editor;\n toolbar: Toolbar = [\n ['bold', 'italic'],\n ['bullet_list'],\n ];\n\n constructor(\n public dialogRef: MatDialogRef<TechlifyUpdateFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n private techlifyUpdateService: TechlifyUpdateService\n ) {\n this.createForm();\n }\n\n private createForm() {\n this.techlifyUpdateForm = this.fb.group({\n id: new FormControl(''),\n title: new FormControl('', Validators.required),\n description: new FormControl('', Validators.required),\n version: new FormControl('', Validators.required),\n released_on: new FormControl('', Validators.required),\n learn_more_link: new FormControl('', Validators.compose([Validators.pattern('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?')])),\n });\n if (this.data.techlifyUpdateDetails) {\n this.isUpdateMode = true;\n this.techlifyUpdateForm.patchValue(this.data.techlifyUpdateDetails);\n }\n }\n\n ngOnInit() {\n this.editor = new Editor();\n }\n\n async submit() {\n if (this.techlifyUpdateForm.valid) {\n let result;\n const model = this.techlifyUpdateForm.value;\n\n try {\n result = this.isUpdateMode ? await this.techlifyUpdateService.updateTechlifyUpdate(model)\n : await this.techlifyUpdateService.createTechlifyUpdate(model);\n this.alertService.addAlert(\n \"Techlify app update saved successfully\",\n \"success\"\n );\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n } finally {\n if (result) {\n this.dialogRef.close(result);\n }\n }\n }\n }\n\n resetFieldValue(field: string) {\n this.techlifyUpdateForm.get(field).setValue('');\n }\n\n getFieldValue(field: string) {\n return this.techlifyUpdateForm.get(field).value;\n }\n\n /** Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.techlifyUpdateForm, true);\n }\n /** Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(field, this.techlifyUpdateForm, errorMessages);\n }\n\n}\n","import { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from './../../material.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyUpdateFormComponent } from './techlify-update-form.component';\nimport { NgxEditorModule } from 'ngx-editor';\n\n@NgModule({\n declarations: [TechlifyUpdateFormComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MaterialModule,\n FlexLayoutModule,\n NgxEditorModule,\n ],\n exports: [\n TechlifyUpdateFormComponent\n ],\n entryComponents: [\n TechlifyUpdateFormComponent\n ]\n})\nexport class TechlifyUpdateFormModule { }\n","import { UntilDestroy } from '@ngneat/until-destroy';\nimport { untilDestroyed } from '@ngneat/until-destroy';\nimport { ActionPopup } from './../../action-popup/action-popup.model';\nimport { ActionPopupComponent } from './../../action-popup/action-popup.component';\nimport { TechlifyUpdateFormComponent } from './../techlify-update-form/techlify-update-form.component';\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { FormControl, FormBuilder } from '@angular/forms';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AlertService } from '../../core/alert.service';\nimport { Component, OnInit } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\n@UntilDestroy()\n@Component({\n selector: 'app-techlify-updates-list',\n templateUrl: './techlify-updates-list.component.html',\n styleUrls: ['./techlify-updates-list.component.scss']\n})\nexport class TechlifyUpdatesListComponent implements OnInit {\n techlifyUpdates: any[] = [];\n displayedColumns: string[] = [\n 'index',\n 'title',\n 'version',\n 'released_on',\n 'learn_more_link',\n 'description',\n 'creator',\n 'actions'\n ];\n page: number = 1;\n lastPage: number;\n perPage: number = 25;\n isWorking: boolean = false;\n filterFormGroup: FormGroup;\n\n constructor(\n private dialog: MatDialog,\n private alertService: AlertService,\n private techlifyUpdateService: TechlifyUpdateService,\n private fb: FormBuilder,\n ) {\n this.filterFormGroup = this.fb.group({\n search: new FormControl(''),\n version: new FormControl(''),\n sort_by: new FormControl('released_on|DESC'),\n });\n }\n\n ngOnInit() {\n this.loadData();\n this.listenChanges();\n }\n\n listenChanges() {\n this.filterFormGroup.valueChanges.pipe(debounceTime(500), untilDestroyed(this))\n .subscribe(changes => {\n this.reload();\n });\n }\n\n ngOnDestroy() { }\n\n async loadData() {\n try {\n this.isWorking = true;\n var filters: any = this.filterFormGroup.value;\n filters.perPage = this.perPage;\n filters.page = this.page;\n let result: any = await this.techlifyUpdateService.getTechlifyUpdates(\n filters\n );\n this.lastPage = result.last_page || this.page;\n this.techlifyUpdates = this.techlifyUpdates.concat(result.data);\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n finally {\n this.isWorking = false;\n }\n }\n\n reload() {\n this.techlifyUpdates = [];\n this.page = 1;\n if (!this.isWorking) {\n this.loadData();\n }\n }\n\n onScroll() {\n if (!this.isWorking && this.page < this.lastPage) {\n this.page += 1;\n this.loadData();\n }\n }\n\n modifyTechlifyUpdate(model?: any) {\n const dialogRef = this.dialog.open(TechlifyUpdateFormComponent, {\n width: \"600px\",\n data: {\n techlifyUpdateDetails: model,\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.reload();\n }\n });\n }\n\n async deleteTechlifyUpdate(model: any) {\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: \"400px\",\n data: <ActionPopup>{\n title: \"Delete Update\",\n message: `Are you sure to delete this update?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n //Action confirmed\n try {\n await this.techlifyUpdateService.deleteTechlifyUpdate(model.id);\n this.alertService.addAlert(\n \"Successfully deleted the update\",\n \"success\"\n );\n this.reload();\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n }\n });\n }\n\n resetFieldValue(field: string) {\n this.filterFormGroup.get(field).setValue(\"\");\n }\n\n sortColumn(event) {\n var direction = event.direction.toString().toUpperCase();\n this.assignFilter(event.active, direction);\n }\n\n assignFilter(column, direction) {\n switch (column) {\n case 'title': {\n return this.filterFormGroup.get('sort_by').setValue(\"title|\" + direction);\n }\n case 'released_on': {\n return this.filterFormGroup.get('sort_by').setValue(\"released_on|\" + direction);\n }\n case 'version': {\n return this.filterFormGroup.get('sort_by').setValue(\"version|\" + direction);\n }\n default: {\n return this.filterFormGroup.get('sort_by').setValue(\"created_at|DESC\");\n }\n };\n }\n\n}\n","import { TechlifyUpdatesListComponent } from './techlify-updates-list/techlify-updates-list.component';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nconst routes: Routes = [\n { path: '', redirectTo: 'all', pathMatch: 'full' },\n { path: 'all', component: TechlifyUpdatesListComponent },\n\n //fallback\n {\n path: '**',\n redirectTo: 'all',\n pathMatch: 'full'\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class TechlifyUpdateRoutingModule { }\n","import { ReadMoreModule } from './read-more/read-more.module';\nimport { TechlifyUpdateFormModule } from './techlify-update-form/techlify-update-form.module';\nimport { TechlifyUpdateRoutingModule } from './techlify-update-routing.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyUpdatesListComponent } from './techlify-updates-list/techlify-updates-list.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\n\n@NgModule({\n declarations: [TechlifyUpdatesListComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n FlexLayoutModule,\n MaterialModule,\n ActionPopupModule,\n TechlifyUpdateRoutingModule,\n TechlifyUpdateFormModule,\n ReadMoreModule,\n ]\n})\nexport class TechlifyUpdateModule { }\n","import { Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-update-view',\n templateUrl: './update-view.component.html',\n styleUrls: ['./update-view.component.scss']\n})\nexport class UpdateViewComponent implements OnInit {\n techlifyUpdate: any;\n rootNavUrl: any;\n\n constructor(\n public dialogRef: MatDialogRef<UpdateViewComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private router: Router\n ) { }\n\n ngOnInit(): void {\n this.techlifyUpdate = this.data.techlifyUpdate;\n this.rootNavUrl = this.data.rootNavUrl;\n }\n\n close() {\n this.dialogRef.close();\n }\n\n openUpdateHistory(): void {\n this.close();\n this.router.navigate([this.rootNavUrl + \"/update-history\"]);\n }\n\n}\n","import { UntilDestroy } from '@ngneat/until-destroy';\nimport { untilDestroyed } from '@ngneat/until-destroy';\nimport { AlertService } from './../../core/alert.service';\nimport { UpdateViewComponent } from './../update-view/update-view.component';\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { FormControl, FormBuilder } from '@angular/forms';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Component, OnInit } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\n@UntilDestroy()\n@Component({\n selector: 'app-techlify-update-history',\n templateUrl: './techlify-update-history.component.html',\n styleUrls: ['./techlify-update-history.component.scss']\n})\nexport class TechlifyUpdateHistoryComponent implements OnInit {\n techlifyUpdates: any[] = [];\n displayedColumns: string[] = [\n 'index',\n 'title',\n 'version',\n 'released_on',\n 'learn_more_link',\n 'description',\n 'creator',\n 'actions'\n ];\n page: number = 1;\n lastPage: number;\n perPage: number = 25;\n isWorking: boolean = false;\n filterFormGroup: FormGroup;\n\n constructor(\n private dialog: MatDialog,\n private techlifyUpdateService: TechlifyUpdateService,\n private fb: FormBuilder,\n private alertService: AlertService\n ) {\n this.filterFormGroup = this.fb.group({\n search: new FormControl(''),\n version: new FormControl(''),\n sort_by: new FormControl('released_on|DESC'),\n });\n }\n\n ngOnInit() {\n this.loadData();\n this.listenChanges();\n this.updateCurrentUserUpdates();\n }\n\n listenChanges() {\n this.filterFormGroup.valueChanges.pipe(debounceTime(500), untilDestroyed(this))\n .subscribe(changes => {\n this.reload();\n });\n }\n\n ngOnDestroy() { }\n\n async loadData() {\n try {\n this.isWorking = true;\n var filters: any = this.filterFormGroup.value;\n filters.perPage = this.perPage;\n filters.page = this.page;\n let result: any = await this.techlifyUpdateService.getTechlifyUpdates(\n filters\n );\n this.lastPage = result.last_page || this.page;\n this.techlifyUpdates = this.techlifyUpdates.concat(result.data);\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n finally {\n this.isWorking = false;\n }\n }\n\n reload() {\n this.techlifyUpdates = [];\n this.page = 1;\n if (!this.isWorking) {\n this.loadData();\n }\n }\n\n onScroll() {\n if (!this.isWorking && this.page < this.lastPage) {\n this.page += 1;\n this.loadData();\n }\n }\n\n resetFieldValue(field: string) {\n this.filterFormGroup.get(field).setValue(\"\");\n }\n\n sortColumn(event) {\n var direction = event.direction.toString().toUpperCase();\n this.assignFilter(event.active, direction);\n }\n\n assignFilter(column, direction) {\n switch (column) {\n case 'title': {\n return this.filterFormGroup.get('sort_by').setValue(\"title|\" + direction);\n }\n case 'released_on': {\n return this.filterFormGroup.get('sort_by').setValue(\"released_on|\" + direction);\n }\n case 'version': {\n return this.filterFormGroup.get('sort_by').setValue(\"version|\" + direction);\n }\n default: {\n return this.filterFormGroup.get('sort_by').setValue(\"created_at|DESC\");\n }\n };\n }\n\n openUpdateView(techlifyUpdate: any): void {\n const dialogRef = this.dialog.open(UpdateViewComponent, {\n width: \"800px\",\n autoFocus: false,\n data: {\n techlifyUpdate: techlifyUpdate,\n isFromHistory: true,\n } // Any data passed here will be injected into the model\n });\n }\n\n async updateCurrentUserUpdates() {\n try {\n await this.techlifyUpdateService.updateCurrentUserUpdates();\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n }\n}\n","import { TechlifyUpdateHistoryComponent } from './techlify-update-history.component';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nconst routes: Routes = [\n { path: '', redirectTo: 'update-history', pathMatch: 'full' },\n { path: 'update-history', component: TechlifyUpdateHistoryComponent },\n\n //fallback\n {\n path: '**',\n redirectTo: 'all',\n pathMatch: 'full'\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class TechlifyUpdateHistoryRoutingModule { }\n","import { ReactiveFormsModule } from '@angular/forms';\nimport { TechlifyUpdateHistoryRoutingModule } from './techlify-update-history-routing.module';\nimport { ReadMoreModule } from './../read-more/read-more.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyUpdateHistoryComponent } from './techlify-update-history.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { MaterialModule } from '../../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupModule } from '../../action-popup/action-popup.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n FlexLayoutModule,\n MaterialModule,\n ActionPopupModule,\n ReadMoreModule,\n TechlifyUpdateHistoryRoutingModule\n ],\n declarations: [TechlifyUpdateHistoryComponent]\n})\nexport class TechlifyUpdateHistoryModule { }\n","import { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from './../../material.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdateViewComponent } from './update-view.component';\n\n\n\n@NgModule({\n declarations: [UpdateViewComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule\n ],\n exports: [\n UpdateViewComponent\n ],\n entryComponents: [\n UpdateViewComponent\n ]\n})\nexport class UpdateViewModule { }\n","import { AlertService } from './../../../core/alert.service';\nimport { TechlifyUpdateService } from './../../techlify-update.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Component, EmbeddedViewRef, Inject, OnInit } from '@angular/core';\nimport { MatSnackBarRef, MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\nimport { UpdateViewComponent } from '../../update-view/update-view.component';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-update-notifier-snack',\n templateUrl: './update-notifier-snack.component.html',\n styleUrls: ['./update-notifier-snack.component.scss']\n})\nexport class UpdateNotifierSnackComponent implements OnInit {\n maxDescriptionLength: any = 70;\n descriptionText: any = '';\n techlifyUpdate: any;\n rootNavUrl: any;\n\n constructor(\n @Inject(MAT_SNACK_BAR_DATA) public data: any,\n private snackBarRef: MatSnackBarRef<EmbeddedViewRef<any>>,\n private dialog: MatDialog,\n private router: Router,\n private techlifyUpdateService: TechlifyUpdateService,\n private alertService: AlertService\n ) { }\n\n ngOnInit(): void {\n this.techlifyUpdate = this.data.techlifyUpdate;\n this.rootNavUrl = this.data.rootNavUrl;\n this.determineDescription(this.techlifyUpdate?.description)\n }\n\n close(): void {\n this.createUpdateViewRecord();\n this.snackBarRef.dismiss();\n }\n\n determineDescription(description: any) {\n if (!description || description.length <= this.maxDescriptionLength) {\n this.descriptionText = description;\n return;\n }\n this.descriptionText = description.substring(0, this.maxDescriptionLength) + \"...\";\n }\n\n openUpdateView(): void {\n this.close();\n const dialogRef = this.dialog.open(UpdateViewComponent, {\n width: \"800px\",\n autoFocus: false,\n data: {\n techlifyUpdate: this.techlifyUpdate,\n rootNavUrl: this.data.rootNavUrl\n } // Any data passed here will be injected into the model\n });\n }\n\n openUpdateHistory(): void {\n this.close();\n this.router.navigate([this.rootNavUrl + \"/update-history\"]);\n }\n\n async createUpdateViewRecord() {\n try {\n var techlifyUpdateView = {\n update_id: this.techlifyUpdate?.id\n };\n let result: any = await this.techlifyUpdateService.createUpdateViewRecord(techlifyUpdateView);\n }\n catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n }\n}\n","import { UpdateNotifierSnackComponent } from './update-notifier-snack/update-notifier-snack.component';\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { AlertService } from '../../core/alert.service';\n\n@Component({\n selector: 'app-update-notifier',\n templateUrl: './update-notifier.component.html',\n styleUrls: ['./update-notifier.component.scss']\n})\nexport class UpdateNotifierComponent implements OnInit {\n techlifyUpdate: any;\n @Input() rootNavUrl: string = '/techlify-updates';\n\n constructor(\n private snackBar: MatSnackBar,\n private techlifyUpdateService: TechlifyUpdateService,\n private alertService: AlertService\n ) { }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit(): void {\n setTimeout(x => {\n this.getNewUpdate();\n }, 5000);\n }\n\n async getNewUpdate() {\n try {\n let result: any = await this.techlifyUpdateService.getNewUpdateForCurrentUser();\n this.techlifyUpdate = result.item;\n if (this.techlifyUpdate) {\n this.showUpdate();\n }\n }\n catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n }\n\n showUpdate() {\n this.snackBar.openFromComponent(UpdateNotifierSnackComponent, {\n data: {\n techlifyUpdate: this.techlifyUpdate,\n rootNavUrl: this.rootNavUrl\n },\n horizontalPosition: 'right',\n verticalPosition: 'top',\n panelClass: ['white-bg']\n });\n }\n\n}\n","import { ActionPopupModule } from './../../action-popup/action-popup.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from './../../material.module';\nimport { UpdateViewModule } from './../update-view/update-view.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdateNotifierComponent } from './update-notifier.component';\nimport { UpdateNotifierSnackComponent } from './update-notifier-snack/update-notifier-snack.component';\n\n\n@NgModule({\n declarations: [UpdateNotifierComponent, UpdateNotifierSnackComponent],\n imports: [\n CommonModule,\n MaterialModule,\n UpdateViewModule,\n FlexLayoutModule,\n ActionPopupModule\n ],\n exports: [\n UpdateNotifierComponent,\n ],\n entryComponents: [\n UpdateNotifierSnackComponent\n ]\n})\nexport class UpdateNotifierModule { }\n","import { Component, OnInit, Input } from '@angular/core';\nimport * as XLSX from 'xlsx';\n\n@Component({\n selector: 'app-export-excel-button',\n templateUrl: './export-excel-button.component.html',\n styleUrls: ['./export-excel-button.component.scss']\n})\nexport class ExportExcelButtonComponent implements OnInit {\n\n @Input() name: string = 'Export_Data';\n @Input() data: any[] = [];\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n exportExcel() {\n const fileName = `${this.name}_${new Date().getTime()}.xlsx`;\n const ws = XLSX.utils.json_to_sheet(this.data);\n /* generate workbook and add the worksheet */\n const wb: XLSX.WorkBook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');\n\n /* save to file */\n XLSX.writeFile(wb, fileName);\n }\n\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ExportExcelButtonComponent } from './export-excel-button/export-excel-button.component';\nimport { MaterialModule } from '../material.module';\n\n\n\n@NgModule({\n declarations: [ExportExcelButtonComponent],\n imports: [\n CommonModule,\n MaterialModule\n ],\n exports: [ExportExcelButtonComponent]\n})\nexport class ExportExcelModule { }\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { HttpService } from '../../core/http.service';\n\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-log-view',\n templateUrl: './audit-log-view-model.component.html',\n styleUrls: ['./audit-log-view-model.component.scss']\n})\nexport class AuditLogViewModelComponent implements OnInit {\n\n logInfo: any;\n showDeltaChanges: boolean = false;\n changeList: any[] = [];\n\n constructor(\n public dialogRef: MatDialogRef<AuditLogViewModelComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private http: HttpService\n ) { }\n\n ngOnInit(): void {\n if (this.data) {\n this.http.get(`api/recent-log-for-model`, {\n params: {\n model_type: this.data?.modelType,\n model_id: this.data?.modelId\n }\n }).pipe(\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.logInfo = result?.item;\n this.getTransformedChanges();\n });\n }\n }\n\n getTransformedChanges() {\n if (this.logInfo?.data?.changes) {\n const changes = Object.keys(this.logInfo?.data?.changes) || [];\n changes.forEach((key: any) => {\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\n this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: this.logInfo?.object[key] ?? '', oldValue: this.logInfo?.pre_object[key] ?? '' });\n });\n }\n }\n\n close() {\n this.dialogRef.close();\n }\n\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { filter } from 'rxjs/operators';\nimport { AuditLogViewModelComponent } from '../audit-log-view-model/audit-log-view-model.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-logs-view-model',\n templateUrl: './audit-logs-view-model.component.html',\n styleUrls: ['./audit-logs-view-model.component.scss']\n})\nexport class AuditLogsViewModelComponent implements OnInit {\n\n constructor(\n public dialogRef: MatDialogRef<AuditLogViewModelComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private router: Router\n ) { }\n\n ngOnInit(): void {\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd), untilDestroyed(this))\n .subscribe(_ => this.dialogRef.close());\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AuditLogViewModelComponent } from '../audit-log-view-model/audit-log-view-model.component';\nimport { AuditLogsViewModelComponent } from '../audit-logs-view-model/audit-logs-view-model.component';\n\n\n@Component({\n selector: 'app-audit-log-for-model',\n templateUrl: './audit-log-for-model.component.html',\n styleUrls: ['./audit-log-for-model.component.scss']\n})\nexport class AuditLogForModelComponent implements OnInit {\n\n @Input() modelType: string;\n @Input() modelId: any;\n @Input() logView: 'recent' | 'all' = 'recent';\n\n constructor(\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n\n }\n\n getLogView() {\n const dialogRef = this.dialog.open(AuditLogViewModelComponent, {\n width: '800px',\n autoFocus: false,\n data: {\n modelType: this.modelType,\n modelId: this.modelId\n } // Any data passed here will be injected into the model\n });\n }\n\n getLogsView() {\n const dialogRef = this.dialog.open(AuditLogsViewModelComponent, {\n width: '95%',\n maxWidth: 'unset',\n autoFocus: false,\n data: {\n modelType: this.modelType,\n modelId: this.modelId\n } // Any data passed here will be injected into the model\n });\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogForModelRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogViewModelRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogViewModelRoutingModule } from './audit-log-view-model-routing.module';\nimport { AuditLogViewModelComponent } from './audit-log-view-model.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogViewModelComponent],\n imports: [\n CommonModule,\n AuditLogViewModelRoutingModule,\n FlexLayoutModule,\n MaterialModule\n ],\n exports: [AuditLogViewModelComponent]\n})\nexport class AuditLogViewModelModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogsViewModelRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogListRoutingModule { }\n","import { Component, OnInit, OnDestroy, Input, ViewChild } from '@angular/core';\n\n\nimport { Router } from '@angular/router';\nimport { MatSort } from '@angular/material/sort';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { PageEvent } from '../../data-table/data-table.model';\nimport { DataManager } from '../../core/dataManager.service';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-log-list',\n templateUrl: './audit-log-list.component.html',\n styleUrls: ['./audit-log-list.component.scss'],\n})\nexport class AuditLogListComponent implements OnInit, OnDestroy {\n\n auditLogList: any[] = [];\n @Input() objectId: any;\n @Input() objectType: any;\n @Input() showFilter: boolean = true;\n @Input() showExportButtons: boolean = true;\n @Input() userId: any;\n\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = { sort_by: 'created_at|desc' };\n displayedColumns: any[] = ['index', 'id', 'object_type', 'object_id', 'action', 'changes', 'created_at', 'user.email'];\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n constructor(\n private dataManager: DataManager,\n private router: Router,\n public sanitizer: DomSanitizer\n ) { }\n\n ngOnInit() {\n\n this.initializeData();\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.changeSort(value);\n })\n }\n\n }\n\n get excelData(): any[] {\n if (this.auditLogList.length > 0) {\n return this.auditLogList.map(item => {\n return {\n 'Type': item?.object_type,\n 'Action': item?.action,\n 'Data': JSON.stringify(item?.data || {}),\n 'Object': JSON.stringify(item?.object || {}),\n 'Pre-Object': JSON.stringify(item?.pre_object || {}),\n 'Created At': new Date(item?.created_at).toDateString(),\n 'Created By': item?.user?.email\n };\n });\n }\n return [];\n }\n\n changeSort(event: any) {\n if (event.direction) {\n this.filters.sort_by = `${event.active}|${event.direction}`;\n this.reload();\n }\n }\n\n logClicked(log: any) {\n this.router.navigate(['/system/audit-logs/log-view', log.id]);\n }\n\n\n async initializeData() {\n if (this.objectType) {\n this.filters = { ...this.filters, object_type: this.objectType }\n }\n if (this.objectId) {\n this.filters = { ...this.filters, object_id: this.objectId }\n }\n if (this.userId) {\n this.filters = { ...this.filters, user_id: this.userId }\n }\n const result = await this.dataManager.GET(`api/audit-logs`, { ...this.filters, ...this.pageEvent });\n this.auditLogList = this.auditLogList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n }\n\n filterChange(event: any) {\n if (this.showFilter) {\n this.filters = {\n ...this.filters,\n ...event,\n object_type: this.objectType || event?.object_type || '',\n object_id: this.objectId || '',\n };\n this.reload();\n }\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n reload() {\n this.auditLogList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n getTransformedChanges(log: any) {\n if (log?.data?.changes) {\n const changes = Object.keys(log?.data?.changes) || [];\n let value = '<div>';\n changes.forEach((key: any) => {\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\n value = `${value} <div><b>${displayAttribute}:</b> <span id=\"old-value\">${log?.pre_object[key] ?? ''}</span><span id=\"new-value\">${log?.object[key] ?? ''}</span></div>`;\n });\n value = `${value} </div>`;\n return value;\n }\n return '';\n }\n\n ngOnDestroy() {\n // Needed for automatic unsubscribe with untilDestroyed\n }\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogListFilterRoutingModule { }\n","import { FormControl } from \"@angular/forms\";\n\nexport function DateValidator(): any {\n return (control: FormControl): { [key: string]: any } => {\n\n const val: any = new Date(control.value);\n if (!!control.value && val == 'Invalid Date') {\n return { invalidDate: true };\n }\n return null;\n };\n}","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { DateValidator } from '../../date-validator';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-log-list-filter',\n templateUrl: './audit-log-list-filter.component.html',\n styleUrls: ['./audit-log-list-filter.component.scss']\n})\nexport class AuditLogListFilterComponent implements OnInit {\n\n auditLogFilterForm: FormGroup;\n\n @Input() objectId: any;\n @Input() objectType: any;\n\n @Output() valueChange = new EventEmitter();\n\n constructor(private fb: FormBuilder, private formValidatorService: FormValidatorService) {\n this.createForm();\n }\n\n get showObjectFilter() {\n return !(this.objectId || this.objectType);\n }\n\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.auditLogFilterForm = this.fb.group({\n object_type: [''],\n action: [''],\n data: [''],\n date_to: ['', DateValidator()],\n date_from: ['', DateValidator()]\n });\n }\n\n ngOnInit(): void {\n\n this.auditLogFilterForm.valueChanges.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe((value: any) => {\n value.date_from = value.date_from ? (value.date_from as Date).toISOString() : '';\n value.date_to = value.date_to ? (value.date_to as Date).toISOString() : '';\n this.valueChange.emit(value);\n })\n }\n\n\n resetFieldValue(field: string) {\n this.auditLogFilterForm.get(field).setValue('');\n }\n\n getFieldValue(field: string) {\n return this.auditLogFilterForm.get(field).value;\n }\n\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.auditLogFilterForm, true);\n }\n\n\n ngOnDestroy() {\n\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogListFilterRoutingModule } from './audit-log-list-filter-routing.module';\nimport { AuditLogListFilterComponent } from './audit-log-list-filter.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../../material.module';\nimport { SearchableSelectorModule } from '../../searchable-selector/searchable-selector.module';\n\n\n@NgModule({\n declarations: [AuditLogListFilterComponent],\n imports: [\n CommonModule,\n AuditLogListFilterRoutingModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n MaterialModule,\n SearchableSelectorModule,\n ],\n exports: [AuditLogListFilterComponent]\n})\nexport class AuditLogListFilterModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogListRoutingModule } from './audit-log-list-routing.module';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { AuditLogListComponent } from './audit-log-list.component';\nimport { AuditLogListFilterModule } from '../audit-log-list-filter/audit-log-list-filter.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ExportExcelModule } from '../../export-excel/export-excel.module';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogListComponent],\n imports: [\n CommonModule,\n AuditLogListRoutingModule,\n ExportExcelModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n MaterialModule,\n InfiniteScrollModule,\n AuditLogListFilterModule\n ],\n exports: [AuditLogListComponent]\n})\nexport class AuditLogListModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogsViewModelRoutingModule } from './audit-logs-view-model-routing.module';\nimport { AuditLogsViewModelComponent } from './audit-logs-view-model.component';\nimport { AuditLogListModule } from '../audit-log-list/audit-log-list.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\n\n\n@NgModule({\n declarations: [AuditLogsViewModelComponent],\n imports: [\n CommonModule,\n AuditLogsViewModelRoutingModule,\n FlexLayoutModule,\n AuditLogListModule\n ],\n exports: [AuditLogsViewModelComponent]\n})\nexport class AuditLogsViewModelModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogForModelRoutingModule } from './audit-log-for-model-routing.module';\nimport { AuditLogForModelComponent } from './audit-log-for-model.component';\nimport { AuditLogViewModelModule } from '../audit-log-view-model/audit-log-view-model.module';\nimport { AuditLogsViewModelModule } from '../audit-logs-view-model/audit-logs-view-model.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogForModelComponent],\n imports: [\n AuditLogViewModelModule,\n AuditLogsViewModelModule,\n CommonModule,\n AuditLogForModelRoutingModule,\n FlexLayoutModule,\n MaterialModule,\n ],\n exports: [AuditLogForModelComponent]\n})\nexport class AuditLogForModelModule { }\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Location } from '@angular/common';\nimport * as jsondiffpatch from \"jsondiffpatch\"\nimport { DataManager } from '../../core/dataManager.service';\n\n@Component({\n selector: 'app-audit-log-view',\n templateUrl: './audit-log-view.component.html',\n styleUrls: ['./audit-log-view.component.scss']\n})\nexport class AuditLogViewComponent implements OnInit {\n\n logInfo: any;\n showDeltaChanges: boolean = false;\n changeList: any[] = [];\n\n constructor(\n private dataManager: DataManager,\n private route: ActivatedRoute,\n private location: Location\n ) { }\n\n ngOnInit(): void {\n this.route.paramMap.subscribe(params => {\n if (params.get('id')) {\n this.fetchLogDetail(params.get('id'));\n } else {\n this.location.back();\n }\n });\n }\n\n getTransformedChanges() {\n if (this.logInfo?.data?.changes) {\n const changes = Object.keys(this.logInfo?.data?.changes) || [];\n changes.forEach((key: any) => {\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\n this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: this.logInfo?.object[key] ?? '', oldValue: this.logInfo?.pre_object[key] ?? '' });\n });\n }\n }\n\n async fetchLogDetail(logId: any) {\n const result = await this.dataManager.GET(`api/audit-logs/${logId}`);\n this.logInfo = result.item;\n this.getTransformedChanges();\n this.patchDelta();\n }\n\n patchDelta() {\n const delta = jsondiffpatch.diff(this.logInfo?.pre_object, this.logInfo?.object);\n document.getElementById('jsondiff').innerHTML = jsondiffpatch.formatters.html.format(delta, this.logInfo?.pre_object);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogViewRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogViewRoutingModule } from './audit-log-view-routing.module';\nimport { AuditLogViewComponent } from './audit-log-view.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogViewComponent],\n imports: [\n CommonModule,\n AuditLogViewRoutingModule,\n FlexLayoutModule,\n MaterialModule\n ],\n exports: [AuditLogViewComponent]\n})\nexport class AuditLogViewModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../core/authentication.guard';\nimport { AuditLogListComponent } from './audit-log-list/audit-log-list.component';\nimport { AuditLogViewComponent } from './audit-log-view/audit-log-view.component';\n\n\nconst routes: Routes = [\n { path: 'log-list', component: AuditLogListComponent, canActivate: [AuthenticationGuard] },\n { path: 'log-view/:id', component: AuditLogViewComponent, canActivate: [AuthenticationGuard] },\n { path: '**', redirectTo: 'log-list', pathMatch: 'full' }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogRoutingModule } from './audit-log-routing.module';\nimport { AuditLogListModule } from './audit-log-list/audit-log-list.module';\nimport { AuditLogViewModule } from './audit-log-view/audit-log-view.module';\n\n\n@NgModule({\n declarations: [\n ],\n imports: [\n CommonModule,\n AuditLogRoutingModule,\n AuditLogListModule,\n AuditLogViewModule\n ],\n exports: []\n})\nexport class AuditLogModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class ImportCsvRoutingModule { }\n","import { Component, Input, OnInit } from '@angular/core';\nimport * as XLSX from 'xlsx';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { ImportConfig } from './import-config';\nimport { Location } from '@angular/common';\nimport { FileDropperConfig } from '../file-dropper/file-dropper.model';\nimport { ViewerConfig } from '../document-viewer/viewer-config.model';\nimport { AlertService } from '../core/alert.service';\nimport { HttpService } from '../core/http.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-import-csv',\n templateUrl: './import-csv.component.html',\n styleUrls: ['./import-csv.component.scss']\n})\nexport class ImportCsvComponent implements OnInit {\n\n @Input() importConfig: ImportConfig;\n\n filesConfig: FileDropperConfig;\n filesList: any[] = [];\n viewerConfig: ViewerConfig;\n fileData: any[] = [];\n failedItems: any[] = [];\n selectedFields: any[] = [];\n\n constructor(\n private alertService: AlertService,\n private http: HttpService,\n private location: Location\n ) {\n this.filesConfig = {\n fileId: \"file\",\n containerId: \"fileContainer\",\n styles: {\n height: \"600px\"\n },\n acceptFile: '.csv',\n multiple: false,\n maxSize: 100,\n acceptFileText: \".csv\"\n };\n\n }\n\n ngOnInit() {\n }\n\n reset() {\n this.filesList = [];\n this.failedItems = [];\n this.selectedFields = [];\n this.fileData = [];\n }\n\n fileChanged(event: any) {\n this.filesList = event;\n\n let jsonData = null;\n const reader = new FileReader();\n const file = this.filesList[0];\n reader.onload = (event) => {\n const data = reader.result;\n const selectedFile = XLSX.read(data, { type: 'binary', cellDates: true });\n jsonData = selectedFile.SheetNames.reduce((initial, name) => {\n const sheet = selectedFile.Sheets[name];\n initial = XLSX.utils.sheet_to_json(sheet);\n return initial;\n }, []);\n this.fileData = jsonData;\n }\n reader.readAsBinaryString(file);\n return;\n }\n\n mappingProcessed(event: any) {\n this.selectedFields = event.fields;\n const tempFileData = JSON.parse(JSON.stringify(this.fileData));\n tempFileData.forEach((data: any) => {\n for (var key in data) {\n var field = event.fields.find((field: any) => field.label == key);\n if (field) {\n if ((field.propertyType == 'date' || field.propertyType == 'dateTime') && this.isValidDate(new Date(data[field.label]))) {\n data[field.property] = (new Date(data[field.label]) as Date).toISOString();\n }\n else {\n data[field.property] = data[field.label];\n }\n delete data[key];\n }\n else {\n delete data[key];\n }\n }\n });\n this.save(tempFileData);\n }\n\n save(tempFileData: any) {\n this.http.post(this.importConfig?.postUrl, { data: tempFileData })\n .pipe(\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.failedItems = result?.failed_items || [];\n if (this.failedItems.length === 0) {\n this.alertService.addAlert(\"File Import Success\", \"success\");\n this.location.back();\n }\n });\n }\n\n isValidDate(d: any) {\n return d instanceof Date && !isNaN(d.getTime());\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class ImportItemsRoutingModule { }\n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { ImportConfig } from '../import-config';\n\nconst errorMessages: any = {\n property: {\n required: \"Property is required\",\n unavailable: \"Duplicate entry\"\n },\n};\n\n@Component({\n selector: 'app-import-items',\n templateUrl: './import-items.component.html',\n styleUrls: ['./import-items.component.scss']\n})\nexport class ImportItemsComponent implements OnInit {\n importMappingForm: FormGroup;\n @Input() data: any[];\n @Input() importConfig: ImportConfig;\n firstDataArray: any[] = [];\n properties: any[] = [];\n @Output() onSave = new EventEmitter();\n\n constructor(\n private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.createImportMappingForm();\n }\n\n ngOnInit() {\n this.properties = this.importConfig.properties;\n this.mapOutDataColumns(this.data[0]);\n }\n\n createImportMappingForm() {\n this.importMappingForm = this.fb.group({\n fields: this.fb.array([]),\n });\n }\n\n get fieldsArray(): FormArray {\n return this.importMappingForm.get('fields') as FormArray;\n }\n\n createField(field: any): FormGroup {\n var fieldForm: FormGroup = this.fb.group({\n id: new FormControl(field.id),\n label: new FormControl(field.label),\n value: new FormControl(field.value),\n property: new FormControl(field.property,\n Validators.compose(\n [\n Validators.required\n ]\n )\n ),\n propertyType: new FormControl(field.propertyType)\n });\n return fieldForm;\n }\n\n mapOutDataColumns(data: any[]) {\n for (var key in data) {\n if (data.hasOwnProperty(key)) {\n var dataValue = {\n id: '',\n label: key,\n value: data[key],\n property: '',\n propertyType: ''\n };\n this.firstDataArray.push(dataValue);\n }\n }\n this.firstDataArray.forEach((element: any, mainIndex: any) => {\n element.id = mainIndex;\n this.properties.find((property: any) => {\n if (property.label.toLowerCase().includes(element.label.toLowerCase())) {\n element.property = property.value;\n element.propertyType = property.type;\n return element;\n }\n });\n });\n }\n\n submit() {\n this.importMappingForm.markAllAsTouched();\n if (!this.importMappingForm.valid) {\n return;\n }\n this.onSave.emit(this.importMappingForm.value);\n }\n\n /** Method to evaluate form fields*/\n isFieldValid(field: string, form: any) {\n return this.formValidatorService.isFieldValid(field, form);\n }\n\n /** Method to find error in form fields*/\n getErrorMessage(field: string, form: any) {\n return this.formValidatorService.getErrorMessage(field, form, errorMessages);\n }\n\n ngAfterViewInit(): void {\n //Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.\n //Add 'implements AfterViewInit' to the class.\n setTimeout((_: any) => {\n this.firstDataArray.forEach((element: any) => {\n this.fieldsArray.push(this.createField(element));\n });\n this.changeDetectorRef.detectChanges();\n }, 500);\n }\n\n updatePropertyType(event: any, index: any): void {\n var field = this.properties.find((field: any) => field.value == event.value);\n if (field) {\n this.fieldsArray.controls[index].get('propertyType').setValue(field.type);\n this.uniqueValidator();\n }\n }\n\n uniqueValidator() {\n this.fieldsArray.value.forEach((field: any, index: any) => {\n var control = this.fieldsArray.controls[index].get('property');\n const isNameUnique = this.fieldsArray.value.find((propertyData: any) =>\n propertyData.property === control.value\n && propertyData.id != this.fieldsArray.controls[index].get('id').value\n )\n ? false\n : true;\n if (!isNameUnique) {\n control.setErrors({ unavailable: true });\n }\n else {\n control.setErrors(null);\n }\n });\n }\n\n removeField(index: number) {\n if (index == -1) {\n return;\n }\n this.fieldsArray.removeAt(index);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ImportItemsRoutingModule } from './import-items-routing.module';\nimport { ImportItemsComponent } from './import-items.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [ImportItemsComponent],\n imports: [\n CommonModule,\n FlexLayoutModule,\n MaterialModule,\n ReactiveFormsModule,\n ImportItemsRoutingModule\n ],\n exports: [ImportItemsComponent]\n})\nexport class ImportItemsModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class FailedItemsRoutingModule { }\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-failed-items',\n templateUrl: './failed-items.component.html',\n styleUrls: ['./failed-items.component.scss']\n})\nexport class FailedItemsComponent implements OnInit {\n\n @Input() failedItems: any[];\n @Input() selectedFields: any[];\n constructor() { }\n\n ngOnInit() {\n }\n\n isValidDate(d: any): boolean {\n var date = new Date(d);\n return date instanceof Date && !isNaN(date.getTime());\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FailedItemsRoutingModule } from './failed-items-routing.module';\nimport { FailedItemsComponent } from './failed-items.component';\nimport { MaterialModule } from '../../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\n\n\n@NgModule({\n declarations: [FailedItemsComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n FailedItemsRoutingModule\n ],\n exports: [FailedItemsComponent]\n})\nexport class FailedItemsModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ImportCsvRoutingModule } from './import-csv-routing.module';\nimport { ImportCsvComponent } from './import-csv.component';\nimport { ImportItemsModule } from './import-items/import-items.module';\nimport { FailedItemsModule } from './failed-items/failed-items.module';\nimport { MaterialModule } from '../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FileDropperModule } from '../file-dropper/file-dropper.module';\n\n\n@NgModule({\n declarations: [ImportCsvComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n FileDropperModule,\n ImportCsvRoutingModule,\n ImportItemsModule,\n FailedItemsModule\n ],\n exports: [ImportCsvComponent]\n})\nexport class ImportCsvModule { }\n","export class ImportConfig {\n postUrl: string;\n properties: any[];\n importType: string;\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { PageEvent } from '../data-table/data-table.model';\nimport { HttpService } from '../core/http.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-login-history-for-user',\n templateUrl: './login-history-for-user.component.html',\n styleUrls: ['./login-history-for-user.component.scss']\n})\nexport class LoginHistoryForUserComponent implements OnInit {\n\n loginHistoryList: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n };\n historyFilterForm: FormGroup;\n displayedColumns: any[] = ['index', 'created_at'];\n @Input() userId: any;\n\n constructor(\n private http: HttpService,\n private fb: FormBuilder,\n ) {\n this.historyFilterForm = this.fb.group({\n 'date_from': [''],\n 'date_to': ['']\n });\n }\n\n ngOnInit() {\n this.filters.user_id = this.userId;\n this.historyFilterForm.valueChanges\n .pipe(debounceTime(500), distinctUntilChanged(), untilDestroyed(this))\n .subscribe((value: any) => {\n value.date_from = value.date_from ? (value.date_from as Date).toISOString() : '';\n value.date_to = value.date_to ? (value.date_to as Date).toISOString() : '';\n this.filterChange(value);\n });\n this.initializeData();\n }\n\n initializeData() {\n this.http.get(`api/user-login-history`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.loginHistoryList = this.loginHistoryList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n filterChange(event: any) {\n this.filters = {\n ...this.filters,\n ...event\n };\n this.reload();\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n\n reload() {\n this.loginHistoryList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../core/authentication.guard';\nimport { LoginHistoryForUserComponent } from './login-history-for-user.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: LoginHistoryForUserComponent,\n canActivate: [AuthenticationGuard]\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class LoginHistoryForUserRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { LoginHistoryForUserRoutingModule } from './login-history-for-user-routing.module';\nimport { LoginHistoryForUserComponent } from './login-history-for-user.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../material.module';\nimport { TimelineFilterModule } from '../timeline-filter/timeline-filter.module';\n\n\n@NgModule({\n declarations: [LoginHistoryForUserComponent],\n imports: [\n CommonModule,\n LoginHistoryForUserRoutingModule,\n InfiniteScrollModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n TimelineFilterModule\n ],\n exports: [LoginHistoryForUserComponent]\n})\nexport class LoginHistoryForUserModule { }\n"]}
1
+ {"version":3,"sources":["../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.model.ts","../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.component.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.component.ts","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.model.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/document-viewer.component.ts","../../../projects/ngx-techlify-core/src/lib/core/logger.service.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/viewer-config.model.ts","../../../projects/ngx-techlify-core/src/lib/core/techlify-config.model.ts","../../../projects/ngx-techlify-core/src/lib/core/config.service.ts","../../../projects/ngx-techlify-core/src/lib/core/snack/snack.component.ts","../../../projects/ngx-techlify-core/src/lib/core/alert.service.ts","../../../projects/ngx-techlify-core/src/lib/core/error-handler.service.ts","../../../projects/ngx-techlify-core/src/lib/core/error-handler.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/http-cache.service.ts","../../../projects/ngx-techlify-core/src/lib/core/cache.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/api-prefix.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/credentials.service.ts","../../../projects/ngx-techlify-core/src/lib/core/token.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/header.interceptor.ts","../../../projects/ngx-techlify-core/src/lib/core/http.service.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-file.service.ts","../../../projects/ngx-techlify-core/src/lib/core/form-validator.service.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-file-form/entity-file-form.component.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-files-view-all.component.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.component.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.model.ts","../../../projects/ngx-techlify-core/src/lib/note/note.service.ts","../../../projects/ngx-techlify-core/src/lib/note/note-form/note-form.component.ts","../../../projects/ngx-techlify-core/src/lib/note/note-list/note-list.component.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/searchable-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/mat-select-infinite-scroll.directive.ts","../../../projects/ngx-techlify-core/src/lib/utility/num-items-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/utility/date-utils.service.ts","../../../projects/ngx-techlify-core/src/lib/utility/number-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/calculate-timeline.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline.model.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/loader/loader.component.ts","../../../projects/ngx-techlify-core/src/lib/core/snack/snack.module.ts","../../../projects/ngx-techlify-core/src/lib/core/authentication.guard.ts","../../../projects/ngx-techlify-core/src/lib/core/authentication.service.ts","../../../projects/ngx-techlify-core/src/lib/core/route-reusable-strategy.ts","../../../projects/ngx-techlify-core/src/lib/core/storage.service.ts","../../../projects/ngx-techlify-core/src/lib/core/dataManager.service.ts","../../../projects/ngx-techlify-core/src/lib/material.module.ts","../../../projects/ngx-techlify-core/src/lib/core/core.module.ts","../../../projects/ngx-techlify-core/src/lib/action-popup/action-popup.module.ts","../../../projects/ngx-techlify-core/src/lib/data-table/data-table.module.ts","../../../projects/ngx-techlify-core/src/lib/document-viewer/document-viewer.module.ts","../../../projects/ngx-techlify-core/src/lib/file-dropper/file-dropper.module.ts","../../../projects/ngx-techlify-core/src/lib/entity-files/entity-files-view-all.module.ts","../../../projects/ngx-techlify-core/src/lib/note/note.module.ts","../../../projects/ngx-techlify-core/src/lib/searchable-selector/searchable-selector.module.ts","../../../projects/ngx-techlify-core/src/lib/utility/utility.module.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/timeline-filter/timeline-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/loader/loader.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-form/email-subscription-user-form.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-user/email-subscription-user-list/email-subscription-user-list.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-form/email-subscription-type-form.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.component.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/email-subscription/email-subscription-for-user/email-subscription-for-user.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/read-more/read-more.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/read-more/read-more.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update.service.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-form/techlify-update-form.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-form/techlify-update-form.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-updates-list/techlify-updates-list.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-view/update-view.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/techlify-update-history/techlify-update-history.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-view/update-view.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier-snack/update-notifier-snack.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-update/update-notifier/update-notifier.module.ts","../../../projects/ngx-techlify-core/src/lib/export-excel/export-excel-button/export-excel-button.component.ts","../../../projects/ngx-techlify-core/src/lib/export-excel/export-excel.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view-model/audit-log-view-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/date-validator.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list-filter/audit-log-list-filter.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-list/audit-log-list.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-logs-view-model/audit-logs-view-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-for-model/audit-log-for-model.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view.component.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-view/audit-log-view.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/audit-log/audit-log.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-items/import-items-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-items/import-items.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-items/import-items.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/failed-items/failed-items-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/failed-items/failed-items.component.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/failed-items/failed-items.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-csv.module.ts","../../../projects/ngx-techlify-core/src/lib/import-csv/import-config.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.component.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user-routing.module.ts","../../../projects/ngx-techlify-core/src/lib/login-history-for-user/login-history-for-user.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.module.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.component.ts","../../../projects/ngx-techlify-core/src/lib/techlify-tagger-tag-selector/techlify-tagger-tag-selector.module.ts"],"names":["ActionPopupComponent","dialogRef","data","this","prototype","ngOnInit","closeDialog","close","confirm","Component","args","selector","template","MatDialogRef","ActionPopup","decorators","type","Inject","MAT_DIALOG_DATA","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__extends","TypeError","String","__","constructor","create","__decorate","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","pop","push","__read","o","m","ar","error","__spread","concat","DataTableComponent","DataTableComponent_1","dataSource","MatTableDataSource","action","EventEmitter","selctionChange","rowClick","tableScroll","sortChanged","elementId","nextId","ngAfterViewInit","_this","selection","changed","pipe","subscribe","change","selected","emit","sort","sortChange","untilDestroyed","isAllSelected","masterToggle","clearSelection","forEach","row","select","clear","ngOnChanges","changes","initializeConfig","isFirstChange","currentValue","config","page","lastPage","perPage","onScroll","editClicked","event","element","stopPropagation","viewClicked","deactivateClicked","downloadClicked","printClicked","rowClicked","actionMenuClick","menuValue","trigger","closeMenu","actionMenuTriggerClick","checkEdit","ele","editDisableFunction","checkView","viewDisableFunction","checkPrint","printDisableFunction","checkActions","actionsMenuFunction","checkActionButton","actionsMenuButtonFunction","getValue","keyString","keyList","replace","split","ngOnDestroy","Input","Output","ViewChild","MatSort","static","UntilDestroy","DocumentViewerComponent","remove","initData","removeFile","file","ext","getFileExtension","viewerType","nameArray","LogLevel","Logger","source","enableProductionMode","level","Warning","debug","objects","_i","log","console","Debug","info","Info","warn","Error","func","outputs","output","TechlifyConfig","projectKey","environment","authClientSecret","authGrantType","apiUrl","loadFromMap","storage","rawConfigs","ConfigService","getConfigsRaw","getProjectKey","getApiUrl","getAuthClientSecret","getStorage","localStorage","getAuthGrantType","getCredentialsKey","BASE_CREDENTIALS","Injectable","providedIn","MAT_SNACK_BAR_DATA","AlertService","snackBar","addAlert","message","alertType","duration","openFromComponent","SuccessSnackComponent","ErrorSnackComponent","MatSnackBar","ErrorHandlerService","alerter","handleError","errorResponse","msg","errors","_a","property","_b","_c","_d","errMessage","ErrorHandlerInterceptor","configService","errorHandler","intercept","request","handle","catchError","ErrorEvent","throwError","HttpCacheService","cachedData","cachePersistenceKey","loadCacheData","setCacheData","url","lastUpdated","Date","saveCacheData","getCacheData","cacheEntry","getHttpCacheEntry","clearCache","cleanCache","expirationDate","keys","setPersistence","persistence","sessionStorage","JSON","stringify","parse","CacheInterceptor","httpCacheService","forceUpdate","configure","options","instance","update","method","Observable","subscriber","urlWithParams","HttpResponse","complete","ApiPrefixInterceptor","test","clone","CredentialsService","_credentials","credentials","getItem","setCredentials","remember","setItem","getAccessToken","expiration","token","expires_in","access_token","now","parseInt","getExpiration","getRefreshToken","refresh_token","refresh","TokenInterceptor","setHeaders","Authorization","HeaderInterceptor","Content-Type","headers","get","HttpInterceptorHandler","interceptor","HTTP_DYNAMIC_INTERCEPTORS","InjectionToken","HttpService","httpHandler","injector","interceptors","_super","cache","cacheInterceptor","addInterceptor","skipErrorHandler","removeInterceptor","skipApiPrefix","skipToken","skipHeader","handler","reduceRight","HttpClient","interceptorType","filter","HttpHandler","Injector","Optional","EntityFileService","http","getEntityFiles","filters","params","toPromise","createEntityFile","model","post","updateEntityFile","put","id","deleteEntityFile","delete","uploadEntityFile","formData","FormData","append","name","FormValidatorService","isFieldValid","field","formGroup","firstAttempt","valid","touched","untouched","getErrorMessage","errorMessages","errorField","required","EntityFileFormComponent","formValidatorService","fb","entityFileService","alertService","fileList","createForm","entityFileGroup","group","title","details","entity_type","entity_id","Validators","entity","setValue","updateMode","patchValue","hideTitleAndDetails","fileConfig","fileId","containerId","styles","height","multiple","acceptFile","maxSize","acceptFileText","viewerConfig","viewerStyle","width","submit","assignmentFileFirstAttempt","item","fileChanged","FormBuilder","EntityFilesViewAllComponent","location","dialog","viewOnly","entityFiles","displayedColumns","isWorking","search","FormControl","imageStyle","hideRemove","x","entityType","entityId","valueChanges","debounceTime","distinctUntilChanged","reload","fetchEntityFilesDetails","last_page","addEntityFile","open","autoFocus","restoreFocus","afterClosed","files","editEntityFile","resetFieldValue","Location","MatDialog","FileDropperComponent","fileArray","border","isSingleMode","Boolean","dragEnter","style","background","dragColor","preventDefault","dragOver","dragLeave","dropEvent","droppedFiles","dataTransfer","from","addFiles","onFileChange","document","getElementById","fileSizeAllowed","sortFiles","a","nameA","toUpperCase","nameB","size","clickEvent","click","NoteService","getNotes","filterModel","addNote","note","editNote","deleteNote","NoteFormComponent","noteService","noteFormGroup","compose","model_type","related_model_id","noteFormFirstAttempt","labelText","cancel","NoteListComponent","readonly","notes","sort_by","relatedModelId","modelType","loadData","assign","current_page","resetScroll","SearchableSelectorComponent","SearchableSelectorComponent_1","formBuilder","_focusMonitor","_elementRef","ngControl","valueField","titleField","selectedValueChange","enableSearch","add","edit","items","selectionChange","itemsChange","isLoading","onChange","onTouched","stateChanges","Subject","focused","controlType","describedBy","_required","_disabled","selectorForm","select_value","monitor","origin","valueAccessor","empty","setValidators","coerceBooleanProperty","disable","enable","openedChange","dataItems","selectedValue","findIndex","sortBy","fetchItemList","of","startWith","switchMap","finalize","setDescribedByIds","ids","join","onContainerClick","writeValue","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","disabled","getPropertyValue","_handleInput","map","find","invalid","dirty","reloadData","searchField","addItem","itemComponent","addConfig","editItem","editConfig","stopMonitoring","providers","provide","MatFormFieldControl","useExisting","FocusMonitor","ElementRef","NgControl","Self","MatSelectInfiniteScrollDirective","matSelect","ngZone","threshold","infiniteScroll","thrPx","thrPc","singleOptionHeight","SELECT_ITEM_HEIGHT_EM","destroyed$","evaluateThreshold","takeUntil","opened","panel","nativeElement","getSelectItemHeightPx","registerScrollListener","lastIndexOf","parseFloat","fromEvent","tap","handleScrollEvent","runOutsideAngular","countOfRenderedOptions","infiniteScrollDistance","clientHeight","scrollTop","run","getComputedStyle","fontSize","Directive","MatSelect","NgZone","NumItemsSelector","numItemsChange","numItemsChanged","numItems","DateUtils","getYYYYMMDDString","inputDate","getFullYear","getMonth","getDate","getYYYY","getMM","getDateTime","toLocaleTimeString","NumberSelector","numChanged","start_value","end_value","calculateTimeline","date","date_from","date_to","show_custom_field","yesterday","setDate","first","getDay","last","to","setTime","getTime","setHours","quarter","Math","floor","startFullQuarter","endFullQuarter","Timeline","CUSTOM","TODAY","YESTERDAY","THIS_WEEK","LAST_WEEK","THIS_MONTH","LAST_MONTH","THIS_QUARTER","LAST_QUARTER","THIS_YEAR","LAST_YEAR","ALL","TimelineFilterComponent","timelineValue","timelines","viewValue","dateFrom","dateTo","appearance","showClearbutton","showCustomDateFields","changeTimeline","form","getFieldValue","setFieldValue","timeline","LoaderComponent","NgModule","declarations","imports","CommonModule","MatSnackBarModule","MatIconModule","exports","AuthenticationGuard","router","credentialsService","canActivate","route","state","isUserAuthenticated","canLoad","isAuthenticated","navigate","queryParams","redirect","replaceUrl","Router","AuthenticationService","login","context","concatMap","tokenInfo","user","userInfo","logout","RouteReusableStrategy","shouldDetach","store","detachedTree","shouldAttach","retrieve","shouldReuseRoute","future","curr","routeConfig","component","RouteReuseStrategy","StorageService","storageSub","watch","asObservable","removeItem","DataManager","GET","urlq","POST","object","blank","POSTRAW","PUT","PATCH","patch","DELETE","MatButtonModule","MatCheckboxModule","MatCommonModule","MatDialogModule","MatFormFieldModule","MatInputModule","MatLineModule","MatMenuModule","MatNativeDateModule","MatOptionModule","MatProgressSpinnerModule","MatPseudoCheckboxModule","MatRippleModule","MatSelectModule","MatSortModule","MatTableModule","MatCardModule","MatDividerModule","MatChipsModule","MatDatepickerModule","MatListModule","MatTooltipModule","parentModule","HttpClientModule","RouterModule","SnackModule","useClass","CoreModule","SkipSelf","FlexLayoutModule","MaterialModule","entryComponents","InfiniteScrollModule","NgxDocViewerModule","FormsModule","ReactiveFormsModule","FileDropperModule","DocumentViewerModule","ActionPopupModule","forChild","TimelineFilterRoutingModule","EmailSubscriptionRoutingModule","EmailSubscriptionUserRoutingModule","user_id","email_type_id","EmailSubscriptionUserFormComponent","esUserFormGroup","esUser","selectedType","email_type","selectedUser","markAllAsTouched","esUserFormFirstAttempt","isSubmitLoading","SearchableSelectorModule","EmailSubscriptionUserFormRoutingModule","LoaderModule","EmailSubscriptionUserListComponent","esUserList","pageEvent","displayColumns","availableDisplayColumns","order","initializeData","changeSort","col","some","columnsChange","selectedColumns","filterChange","addEmailSubscriptionUser","editEmailSubscriptionUser","deleteEmailSubscriptionUser","direction","active","esulr","permissions","only","redirectTo","routes","path","EmailSubscriptionUserListFilterComponent","valueChange","esUserFilterForm","EmailSubscriptionUserListFilterRoutingModule","EmailSubscriptionUserListRoutingModule","EmailSubscriptionUserFormModule","EmailSubscriptionUserListFilterModule","EmailSubscriptionTypeRoutingModule","code","frequency_id","EmailSubscriptionTypeFormComponent","emailSubscriptionTypeFormGroup","description","emailSubscriptionType","selectedFrequency","frequency","emailSubscriptionTypeFormFirstAttempt","EmailSubscriptionTypeFormRoutingModule","EmailSubscriptionTypeListComponent","emailSubscriptionTypeList","isLoadRelations","relations","addEmailSubscriptionType","editEmailSubscriptionType","deleteEmailSubscriptionType","estlr","EmailSubscriptionTypeFormModule","EmailSubscriptionTypeListRoutingModule","EmailSubscriptionForUserComponent","subscriptions","fetchSubscriptions","sub","current_user_subscription","unsubscribe","esfur","EmailSubscriptionForUserRoutingModule","ReadMoreComponent","maxLength","hideToggle","isCollapsed","determineView","toggleView","text","currentText","substring","TechlifyUpdateService","getTechlifyUpdates","createTechlifyUpdate","techlifyUpdate","updateTechlifyUpdate","deleteTechlifyUpdate","techlifyUpdateId","getTechlifyUpdate","getNewUpdateForCurrentUser","createUpdateViewRecord","techlifyUpdateView","updateCurrentUserUpdates","released_on","version","learn_more_link","pattern","TechlifyUpdateFormComponent","techlifyUpdateService","onSave","isUpdateMode","toolbar","techlifyUpdateForm","techlifyUpdateDetails","editor","Editor","NgxEditorModule","TechlifyUpdatesListComponent","techlifyUpdates","filterFormGroup","listenChanges","modifyTechlifyUpdate","sortColumn","toString","assignFilter","column","pathMatch","TechlifyUpdateRoutingModule","TechlifyUpdateFormModule","ReadMoreModule","UpdateViewComponent","rootNavUrl","openUpdateHistory","TechlifyUpdateHistoryComponent","openUpdateView","isFromHistory","TechlifyUpdateHistoryRoutingModule","UpdateNotifierSnackComponent","snackBarRef","maxDescriptionLength","descriptionText","determineDescription","dismiss","update_id","MatSnackBarRef","UpdateNotifierComponent","setTimeout","getNewUpdate","showUpdate","horizontalPosition","verticalPosition","panelClass","UpdateViewModule","ExportExcelButtonComponent","exportExcel","fileName","ws","XLSX.utils","json_to_sheet","wb","book_new","book_append_sheet","XLSX.writeFile","AuditLogViewModelComponent","showDeltaChanges","changeList","model_id","modelId","logInfo","getTransformedChanges","displayAttribute","charAt","slice","attribute","newValue","oldValue","pre_object","AuditLogsViewModelComponent","events","NavigationEnd","AuditLogForModelComponent","logView","getLogView","getLogsView","maxWidth","AuditLogViewModelRoutingModule","AuditLogListComponent","dataManager","sanitizer","auditLogList","showFilter","showExportButtons","Type","object_type","Action","Data","Pre-Object","Created At","created_at","toDateString","Created By","email","logClicked","objectType","objectId","object_id","userId","value_1","DomSanitizer","DateValidator","control","val","invalidDate","AuditLogListFilterComponent","auditLogFilterForm","toISOString","AuditLogListFilterRoutingModule","AuditLogListRoutingModule","ExportExcelModule","AuditLogListFilterModule","AuditLogsViewModelRoutingModule","AuditLogListModule","AuditLogViewModelModule","AuditLogsViewModelModule","AuditLogForModelRoutingModule","AuditLogViewComponent","paramMap","fetchLogDetail","back","logId","_e","patchDelta","delta","jsondiffpatch.diff","innerHTML","jsondiffpatch.formatters","html","format","ActivatedRoute","AuditLogViewRoutingModule","AuditLogRoutingModule","AuditLogViewModule","ImportCsvComponent","filesList","fileData","failedItems","selectedFields","filesConfig","reset","jsonData","reader","FileReader","onload","selectedFile","XLSX.read","cellDates","SheetNames","reduce","initial","sheet","Sheets","sheet_to_json","readAsBinaryString","mappingProcessed","fields","tempFileData","propertyType","isValidDate","save","importConfig","postUrl","failed_items","isNaN","unavailable","ImportItemsComponent","changeDetectorRef","firstDataArray","properties","createImportMappingForm","mapOutDataColumns","importMappingForm","array","createField","dataValue","mainIndex","toLowerCase","includes","fieldsArray","detectChanges","updatePropertyType","index","controls","uniqueValidator","propertyData","setErrors","removeField","removeAt","ChangeDetectorRef","ImportItemsRoutingModule","FailedItemsComponent","FailedItemsRoutingModule","ImportCsvRoutingModule","ImportItemsModule","FailedItemsModule","LoginHistoryForUserComponent","loginHistoryList","historyFilterForm","LoginHistoryForUserRoutingModule","TimelineFilterModule","selectable","removable","separatorKeysCodes","ENTER","COMMA","placeholder","createApiUrl","isCreateable","isCacheTags","isSingle","TechlifyTaggerTagFormFieldComponent","TechlifyTaggerTagFormFieldComponent_1","httpService","_formField","tagInputCtrl","TechlifyTaggerTagFormConfigModel","_allTags","categories","_value","filterValue","filterString","allTags","tagIds","_placeholder","init","_filter","trim","tags","tag","category_title","defaultCreateCategory","input","option","tagInput","availableTags","MatFormField","MAT_FORM_FIELD","MatAutocompleteModule","TechlifyTaggerTagSelectorComponent","TechlifyTaggerTagSelectorComponent_1","tagSelectorCtrl","showAllTags","useSelectButtonStyle","res","MatButtonToggleModule"],"mappings":"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","sourcesContent":["export class ActionPopup {\n name: string;\n title: string;\n message: string;\n}","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ActionPopup } from './action-popup.model';\n\n@Component({\n selector: 'app-action-popup',\n templateUrl: './action-popup.component.html',\n styleUrls: ['./action-popup.component.scss']\n})\nexport class ActionPopupComponent implements OnInit {\n\n constructor(\n public dialogRef: MatDialogRef<ActionPopupComponent>,\n @Inject(MAT_DIALOG_DATA) public data: ActionPopup,\n ) { }\n\n ngOnInit() {\n }\n\n /**Method to close dialog box */\n closeDialog() {\n this.dialogRef.close();\n }\n\n /**Method to close dialog box with the data given from parent component\n */\n confirm() {\n this.dialogRef.close(this.data);\n }\n\n}\n","/*! *****************************************************************************\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 if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\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\n/** @deprecated */\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\n/** @deprecated */\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 __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\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","import {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n AfterViewInit,\n ViewChild\n} from \"@angular/core\";\n\nimport { SelectionModel } from \"@angular/cdk/collections\";\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatSort } from '@angular/material/sort';\nimport { DataTable } from './data-table.model';\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\n\n@UntilDestroy()\n@Component({\n selector: \"app-data-table\",\n templateUrl: \"./data-table.component.html\",\n styleUrls: [\"./data-table.component.scss\"]\n})\nexport class DataTableComponent implements OnInit, OnChanges, AfterViewInit {\n\n trigger: MatMenuTrigger;\n\n @Input() data: any;\n\n @Input() config: DataTable;\n\n dataSource: MatTableDataSource<any> = new MatTableDataSource([]);\n\n @Input() selection: SelectionModel<any>;\n\n @Output() action = new EventEmitter();\n @Output() selctionChange = new EventEmitter();\n @Output() rowClick = new EventEmitter();\n @Output() tableScroll = new EventEmitter();\n @Output() sortChanged = new EventEmitter();\n\n page: number;\n lastPage: number;\n perPage: number;\n\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n static nextId = 0;\n @Input() elementId: string = `data-table-${DataTableComponent.nextId++}`;\n\n constructor() { }\n\n ngOnInit() { }\n\n /**Life cycle hook method */\n ngAfterViewInit() {\n // Assign the data to the data source for the table to render\n this.dataSource = new MatTableDataSource(this.data);\n\n // Emit change in selection\n if (this.selection) {\n this.selection.changed.pipe().subscribe((change: any) => {\n if (this.selection.selected) {\n this.selctionChange.emit(this.selection.selected);\n }\n });\n }\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.sortChanged.emit(value);\n })\n }\n }\n\n /** Whether the number of selected elements matches the total number of rows. */\n isAllSelected() {\n const numSelected = this.selection.selected.length;\n const numRows = this.dataSource.data.length;\n return numSelected === numRows;\n }\n\n /** Selects all rows if they are not all selected; otherwise clear selection. */\n masterToggle() {\n this.isAllSelected()\n ? this.clearSelection()\n : this.dataSource.data.forEach(row => this.selection.select(row));\n }\n\n /**clear selection*/\n clearSelection() {\n this.selection.clear();\n this.selctionChange.emit(this.selection.selected);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.initializeConfig(changes);\n if (changes.data && !changes.data.isFirstChange() && this.dataSource) {\n // If not first change\n this.dataSource.data = changes.data.currentValue;\n }\n }\n\n initializeConfig(changes: SimpleChanges) {\n if (changes.config && !changes.config.isFirstChange()) {\n this.config = changes.config.currentValue;\n }\n this.page = this.config.page || 1;\n this.lastPage = this.config.lastPage || this.page;\n this.perPage = this.config.perPage || 20;\n }\n\n onScroll() {\n if (this.page < this.lastPage) {\n this.page += 1;\n this.tableScroll.emit({ page: this.page, lastPage: this.lastPage, perPage: this.perPage });\n }\n }\n\n /**Method invokes when edit action icon is clickes */\n editClicked(event: any, element: any) {\n this.action.emit({ action: \"edit\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when view action icon is clickes */\n viewClicked(event: any, element: any) {\n this.action.emit({ action: \"view\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when edit action icon is clickes */\n deactivateClicked(event: any, element: any) {\n this.action.emit({ action: \"deactivate\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when download action icon is clickes */\n downloadClicked(event: any, element: any) {\n this.action.emit({ action: \"download\", value: element });\n event.stopPropagation();\n }\n\n /**Method invokes when print action icon is clickes */\n printClicked(event: any, element: any) {\n\n this.action.emit({ action: 'print', value: element });\n event.stopPropagation();\n\n }\n\n /**Method invokes when a row is clicked */\n rowClicked(event: any, element: any) {\n this.rowClick.emit(element);\n event.stopPropagation();\n }\n\n /**Method invokes when menu action icon is hovered */\n actionMenuClick(event: any, element: any, menuValue: string) {\n this.action.emit({ action: menuValue, value: element });\n this.trigger.closeMenu();\n event.stopPropagation();\n }\n\n /**Method invokes when menu action icon is hovered and selects for particular action*/\n actionMenuTriggerClick(event: any, trigger: MatMenuTrigger) {\n this.trigger = trigger;\n event.stopPropagation();\n }\n\n checkEdit(ele: any) {\n if (this.config.editDisableFunction) {\n return this.config.editDisableFunction(ele);\n }\n\n return true;\n }\n\n checkView(ele: any) {\n if (this.config.viewDisableFunction) {\n return this.config.viewDisableFunction(ele);\n }\n\n return true;\n }\n\n checkPrint(ele: any) {\n if (this.config.printDisableFunction) {\n return this.config.printDisableFunction(ele);\n }\n\n return true;\n }\n\n checkActions(ele: any) {\n if (this.config.actionsMenuFunction) {\n return this.config.actionsMenuFunction(ele);\n }\n\n return true;\n }\n\n checkActionButton(ele: any, value: any) {\n if (this.config.actionsMenuButtonFunction) {\n return this.config.actionsMenuButtonFunction(ele, value);\n }\n return true;\n }\n\n getValue(ele: any, keyString: string) {\n keyString = keyString.replace(/\\[(\\w+)\\]/g, \".$1\"); // convert indexes to properties\n keyString = keyString.replace(/^\\./, \"\"); // strip a leading dot\n const keyList = keyString.split(\".\");\n for (let i = 0, n = keyList.length; i < n; ++i) {\n const key = keyList[i];\n if (ele && key in ele) {\n ele = ele[key];\n } else {\n return;\n }\n }\n return ele;\n }\n\n ngOnDestroy() {\n //Until Destroy uses it.\n }\n}\n","export class DataTable {\n displayedColumns: string[];\n columnsConfig: ColumnConfig[];\n actionsConfig?: ActionConfig;\n enableRowClick?: boolean;\n disableElevation?: boolean;\n downloadLink?: string;\n actionsMenuFunction?: any;\n actionsMenuButtonFunction?: any;\n editDisableFunction?: any;\n viewDisableFunction?: any;\n printDisableFunction?: any;\n customActionLabel?: string;\n stickyHeader?: boolean;\n page?: number;\n lastPage?: number;\n perPage?: number;\n pageSizeOptions?: number[];\n style?: any;\n}\n\nclass ColumnConfig {\n title: string;\n value: string;\n sort?: boolean;\n dateField?: boolean;\n currencyField?: boolean;\n format?: string;\n}\n\nclass ActionConfig {\n edit?: boolean;\n view?: boolean;\n download?: boolean;\n print?: boolean;\n deactivate?: boolean;\n actionsMenu?: ActionsMenu[];\n}\n\nclass ActionsMenu {\n name: string;\n value: string;\n}\n\nexport class PageEvent {\n page: number;\n lastPage?: number;\n perPage: number;\n}\n","import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';\nimport { ViewerConfig } from './viewer-config.model';\n\n@Component({\n selector: 'app-document-viewer',\n templateUrl: './document-viewer.component.html',\n styleUrls: ['./document-viewer.component.css']\n})\nexport class DocumentViewerComponent implements OnInit {\n\n\n @Input() config!: ViewerConfig;\n\n @Input() file!: any;\n\n @Input() fileUrl!: any;\n\n @Input() disableEdit: boolean;\n\n @Output() remove = new EventEmitter();\n viewerType: any;\n\n constructor() { }\n\n ngOnInit(): void {\n this.initData();\n }\n\n removeFile() {\n this.remove.emit();\n }\n\n initData() {\n if (this.file) {\n var ext = this.getFileExtension(this.file);\n if (ext === 'ppt' || ext === 'pptx' || ext === 'doc' || ext === 'docx' || ext === 'xls' || ext === 'xlsx') {\n this.viewerType = \"office\";\n }\n else if (ext === 'jpg' || ext === 'jpeg' || ext === 'png' || ext === 'gif') {\n this.viewerType = \"image\";\n }\n else if (ext === 'pdf') {\n this.viewerType = \"pdf\";\n }\n else {\n this.viewerType = null;\n }\n }\n }\n\n get fileName() {\n if (this.file) {\n let nameArray = this.file.split('/');\n if (nameArray.length === 2) {\n return nameArray[1];\n }\n return nameArray[0];\n }\n return '';\n }\n\n getFileExtension(file: any) {\n return file.split('.').pop();\n }\n\n}\n","/**\n * Simple logger system with the possibility of registering custom outputs.\n *\n * 4 different log levels are provided, with corresponding methods:\n * - debug : for debug information\n * - info : for informative status of the application (success, ...)\n * - warning : for non-critical errors that do not prevent normal application behavior\n * - error : for critical errors that prevent normal application behavior\n *\n * Example usage:\n * ```\n * import { Logger } from 'app/core/logger.service';\n *\n * const log = new Logger('myFile');\n * ...\n * log.debug('something happened');\n * ```\n *\n * To disable debug and info logs in production, add this snippet to your root component:\n * ```\n * export class AppComponent implements OnInit {\n * ngOnInit() {\n * if (environment.production) {\n * Logger.enableProductionMode();\n * }\n * ...\n * }\n * }\n *\n * If you want to process logs through other outputs than console, you can add LogOutput functions to Logger.outputs.\n */\n\n/**\n * The possible log levels.\n * LogLevel.Off is never emitted and only used with Logger.level property to disable logs.\n */\nexport enum LogLevel {\n Off = 0,\n Error,\n Warning,\n Info,\n Debug\n}\n\n/**\n * Log output handler function.\n */\nexport type LogOutput = (source: string | undefined, level: LogLevel, ...objects: any[]) => void;\n\nexport class Logger {\n\n /**\n * Current logging level.\n * Set it to LogLevel.Off to disable logs completely.\n */\n static level = LogLevel.Debug;\n\n /**\n * Additional log outputs.\n */\n static outputs: LogOutput[] = [];\n\n /**\n * Enables production mode.\n * Sets logging level to LogLevel.Warning.\n */\n static enableProductionMode() {\n Logger.level = LogLevel.Warning;\n }\n\n constructor(private source?: string) { }\n\n /**\n * Logs messages or objects with the debug level.\n * Works the same as console.log().\n */\n debug(...objects: any[]) {\n this.log(console.log, LogLevel.Debug, objects);\n }\n\n /**\n * Logs messages or objects with the info level.\n * Works the same as console.log().\n */\n info(...objects: any[]) {\n this.log(console.info, LogLevel.Info, objects);\n }\n\n /**\n * Logs messages or objects with the warning level.\n * Works the same as console.log().\n */\n warn(...objects: any[]) {\n this.log(console.warn, LogLevel.Warning, objects);\n }\n\n /**\n * Logs messages or objects with the error level.\n * Works the same as console.log().\n */\n error(...objects: any[]) {\n this.log(console.error, LogLevel.Error, objects);\n }\n\n private log(func: (...args: any[]) => void, level: LogLevel, objects: any[]) {\n if (level <= Logger.level) {\n const log = this.source ? ['[' + this.source + ']'].concat(objects) : objects;\n func.apply(console, log);\n Logger.outputs.forEach(output => output.apply(output, [this.source, level, ...objects]));\n }\n }\n\n}\n","export class ViewerConfig {\n imageStyle?: any;\n viewerStyle?: any;\n hideRemove?: boolean;\n}\n","/**\n * Class that stores the configuration data\n *\n * @author Joshua Kissoon\n * @since 20180724\n */\nexport class TechlifyConfig {\n projectKey: string = '';\n environment: string = '';\n authClientSecret: string = '';\n authGrantType: string = '';\n apiUrl: string = '';\n rawConfigs: any;\n storage: Storage;\n\n constructor(data: any) {\n this.loadFromMap(data);\n }\n\n loadFromMap(data: any) {\n this.projectKey = data.projectKey;\n this.environment = data.environment;\n this.authClientSecret = data.authClientSecret;\n this.authGrantType = data.authGrantType;\n this.apiUrl = data.apiUrl;\n this.storage = data?.storage;\n this.rawConfigs = data;\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { TechlifyConfig } from \"./techlify-config.model\";\n\n/**\n * Service that provides settings for all other services\n *\n * @author Joshua Kissoon\n * @since 20170709\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigService {\n\n public static BASE_CREDENTIALS = \"credentials\";\n\n private config: TechlifyConfig;\n\n constructor(config: TechlifyConfig) {\n this.config = config;\n }\n\n getConfigsRaw() {\n return this.config.rawConfigs;\n }\n\n getProjectKey() {\n return this.config.projectKey;\n }\n\n getApiUrl() {\n return this.config.apiUrl;\n }\n\n getAuthClientSecret() {\n return this.config.authClientSecret;\n }\n\n getStorage() {\n return this.config.storage ? this.config.storage : localStorage;\n }\n\n getAuthGrantType() {\n return this.config.authGrantType;\n }\n\n getCredentialsKey() {\n return this.config.projectKey + \"_\" + ConfigService.BASE_CREDENTIALS;\n }\n\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'snack-bar-component-example-snack',\n templateUrl: 'success-snack.html',\n styleUrls: ['./snack.scss'],\n})\nexport class SuccessSnackComponent {\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) { }\n}\n@Component({\n selector: 'snack-bar-component-example-snack',\n templateUrl: 'error-snack.html',\n styleUrls: ['./snack.scss'],\n})\nexport class ErrorSnackComponent {\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) { }\n}\n","import { Injectable } from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { ErrorSnackComponent, SuccessSnackComponent } from './snack/snack.component';\r\n\r\n/**\r\n * Service used to manage alerts in the entire system frontend\r\n * \r\n * @author Gokula Prasanna\r\n * @since 20210131\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AlertService {\r\n\r\n constructor(public snackBar: MatSnackBar) { }\r\n\r\n addAlert(message: string, alertType: string, duration = 3) {\r\n if (alertType == \"success\") {\r\n this.snackBar.openFromComponent(SuccessSnackComponent, {\r\n duration: 1000 * duration,\r\n data: message\r\n });\r\n }\r\n else {\r\n this.snackBar.openFromComponent(ErrorSnackComponent, {\r\n duration: 1000 * duration,\r\n data: message\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { AlertService } from \"./alert.service\";\r\n\r\n\r\n/**\r\n * Service used to handle errors from the request\r\n *\r\n * @author Joshua Kissoon\r\n * @since 20171202\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorHandlerService {\r\n\r\n constructor(private alerter: AlertService) {\r\n }\r\n\r\n handleError(errorResponse: any, msg: string = '') {\r\n // 1 - Create empty array to store errors\r\n const errors = [];\r\n\r\n // 2 - check if the error object is present in the response\r\n if (errorResponse?.error) {\r\n\r\n // 3 - Check for Laravel form validation error messages object\r\n if (errorResponse?.error?.errors) {\r\n\r\n // 4 - For each error property (which is a form field)\r\n for (const property in errorResponse.error.errors) {\r\n\r\n if (errorResponse.error.errors?.hasOwnProperty(property)) {\r\n\r\n // 5 - Extract it's array of errors\r\n const propertyErrors: Array<string> = errorResponse?.error?.errors[property];\r\n\r\n // 6 - Push all errors in the array to the errors array\r\n propertyErrors.forEach(error => errors.push(error));\r\n }\r\n\r\n }\r\n }\r\n\r\n if (errors.length === 0) {\r\n // 7 - Push the main error message to the array of errors if there is no validation error\r\n errors.push(errorResponse.error.message ? errorResponse.error.message : errorResponse.error?.error);\r\n }\r\n }\r\n var errMessage = errors.length ? errors[0] : msg;\r\n this.alerter.addAlert(\"Error: \" + errMessage, \"warning\");\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpErrorResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { Logger } from './logger.service';\nimport { ConfigService } from './config.service';\nimport { ErrorHandlerService } from './error-handler.service';\n\nconst log = new Logger('ErrorHandlerInterceptor');\n\n/**\n * Adds a default error handler to all requests.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ErrorHandlerInterceptor implements HttpInterceptor {\n\n constructor(private configService: ConfigService, private errorHandler: ErrorHandlerService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n return next.handle(request).pipe(catchError(error => this.handleError(error)));\n }\n\n // Customize the default error handler here if needed\n private handleError(error: HttpErrorResponse): Observable<HttpEvent<any>> {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // client-side error\n errorMessage = `Client Error: ${this.configService?.getProjectKey()}: ${error.error.message}`;\n } else {\n // server-side error\n errorMessage = `Server Error: ${this.configService?.getProjectKey()}`;\n try {\n this.errorHandler.handleError(error, 'Unexpected Server Error, try later or contact service team');\n } catch (e) {\n console.log(\"Unable to handle server error\", e);\n }\n }\n return throwError(error);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpResponse } from '@angular/common/http';\nimport { ConfigService } from './config.service';\nimport { Logger } from './logger.service';\n\nconst log = new Logger('HttpCacheService');\n\n\nexport interface HttpCacheEntry {\n lastUpdated: Date;\n data: HttpResponse<any>;\n}\n\n/**\n * Provides a cache facility for HTTP requests with configurable persistence policy.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpCacheService {\n\n private cachedData: { [key: string]: HttpCacheEntry; } = {};\n private storage: Storage | any | null;\n private cachePersistenceKey: String | any;\n\n constructor(private configService: ConfigService) {\n this.storage = this.configService.getStorage();\n this.cachePersistenceKey = this.configService.getProjectKey() + '_HTTP_CACHE';\n this.loadCacheData();\n }\n\n /**\n * Sets the cache data for the specified request.\n * @param {!string} url The request URL.\n * @param {ResponseOptions} data The received data.\n * @param {Date=} lastUpdated The cache last update, current date is used if not specified.\n */\n setCacheData(url: string, data: HttpResponse<any>, lastUpdated?: Date) {\n this.cachedData[url] = {\n lastUpdated: lastUpdated || new Date(),\n data: data\n };\n log.debug(`Cache set for key: \"${url}\"`);\n this.saveCacheData();\n }\n\n /**\n * Gets the cached data for the specified request.\n * @param {!string} url The request URL.\n * @return {?ResponseOptions} The cached data or null if no cached data exists for this request.\n */\n getCacheData(url: string): HttpResponse<any> | null {\n const cacheEntry = this.cachedData[url];\n\n if (cacheEntry) {\n log.debug(`Cache hit for key: \"${url}\"`);\n return cacheEntry.data;\n }\n\n return null;\n }\n\n /**\n * Gets the cached entry for the specified request.\n * @param {!string} url The request URL.\n * @return {?HttpCacheEntry} The cache entry or null if no cache entry exists for this request.\n */\n getHttpCacheEntry(url: string): HttpCacheEntry | null {\n return this.cachedData[url] || null;\n }\n\n /**\n * Clears the cached entry (if exists) for the specified request.\n * @param {!string} url The request URL.\n */\n clearCache(url: string): void {\n delete this.cachedData[url];\n log.debug(`Cache cleared for key: \"${url}\"`);\n this.saveCacheData();\n }\n\n /**\n * Cleans cache entries older than the specified date.\n * @param {date=} expirationDate The cache expiration date. If no date is specified, all cache is cleared.\n */\n cleanCache(expirationDate?: Date) {\n if (expirationDate) {\n Object(this.cachedData).keys.forEach((key: string) => {\n if (expirationDate >= this.cachedData[key]?.lastUpdated) {\n delete this.cachedData[key];\n }\n });\n } else {\n this.cachedData = {};\n }\n this.saveCacheData();\n }\n\n /**\n * Sets the cache persistence policy.\n * Note that changing the cache persistence will also clear the cache from its previous storage.\n * @param {'local'|'session'=} persistence How the cache should be persisted, it can be either local or session\n * storage, or if no value is provided it will be only in-memory (default).\n */\n setPersistence(persistence?: 'local' | 'session') {\n this.cleanCache();\n this.storage = persistence === 'local' ? localStorage : persistence === 'session' ? sessionStorage : null;\n this.loadCacheData();\n }\n\n private saveCacheData() {\n if (this.storage) {\n this.storage[this.cachePersistenceKey] = JSON.stringify(this.cachedData);\n }\n }\n\n private loadCacheData() {\n const data = this.storage ? this.storage[this.cachePersistenceKey] : null;\n this.cachedData = data ? JSON.parse(data) : {};\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { HttpCacheService } from './http-cache.service';\nimport { Observable, Subscriber } from 'rxjs';\n\n/**\n * Caches HTTP requests.\n * Use ExtendedHttpClient fluent API to configure caching for each request.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CacheInterceptor implements HttpInterceptor {\n\n private forceUpdate = false;\n\n constructor(private httpCacheService: HttpCacheService) { }\n\n /**\n * Configures interceptor options\n * @param {{update: boolean}} options If update option is enabled, forces request to be made and updates cache entry.\n * @return {CacheInterceptor} The configured instance.\n */\n configure(options?: { update?: boolean } | null): CacheInterceptor {\n const instance = new CacheInterceptor(this.httpCacheService);\n if (options && options.update) {\n instance.forceUpdate = true;\n }\n return instance;\n }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (request.method !== 'GET') {\n return next.handle(request);\n }\n\n return new Observable((subscriber: Subscriber<HttpEvent<any>>) => {\n const cachedData = this.forceUpdate ? null : this.httpCacheService.getCacheData(request.urlWithParams);\n if (cachedData !== null) {\n // Create new response to avoid side-effects\n subscriber.next(new HttpResponse(cachedData as Object));\n subscriber.complete();\n } else {\n next.handle(request)\n .subscribe(\n event => {\n if (event instanceof HttpResponse) {\n this.httpCacheService.setCacheData(request.urlWithParams, event);\n }\n subscriber.next(event);\n },\n error => subscriber.error(error),\n () => subscriber.complete()\n );\n }\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { ConfigService } from './config.service';\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiPrefixInterceptor implements HttpInterceptor {\n\n constructor(private configService: ConfigService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n if (!/^(http|https):/i.test(request.url)) {\n request = request.clone({ url: this.configService.getApiUrl() + request.url });\n }\n return next.handle(request);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ConfigService } from './config.service';\n\nexport interface Credentials {\n // Customize received credentials here\n user: any;\n token: any;\n}\n\n/**\n * Provides storage for authentication credentials.\n * The Credentials interface should be replaced with proper implementation.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class CredentialsService {\n\n private _credentials: Credentials | null = null;\n\n constructor(private configService: ConfigService) {\n }\n\n /**\n * Checks is the user is authenticated.\n * @return True if the user is authenticated.\n */\n get isAuthenticated(): boolean {\n return !!this.credentials;\n }\n\n /**\n * Gets the user credentials.\n * @return The user credentials or null if the user is not authenticated.\n */\n get credentials(): Credentials | null {\n if (!this._credentials) {\n this._credentials = JSON.parse(sessionStorage.getItem(this.configService.getCredentialsKey()) || localStorage.getItem(this.configService.getCredentialsKey()));\n }\n return this._credentials;\n }\n\n /**\n * Sets the user credentials.\n * The credentials may be persisted across sessions by setting the `remember` parameter to true.\n * Otherwise, the credentials are only persisted for the current session.\n * @param credentials The user credentials.\n * @param remember True to remember credentials across sessions.\n */\n setCredentials(credentials?: Credentials, remember?: boolean) {\n this._credentials = credentials || null;\n\n if (credentials) {\n (remember ? localStorage : sessionStorage).setItem(this.configService.getCredentialsKey(), JSON.stringify(credentials));\n } else {\n sessionStorage.clear();\n localStorage.clear();\n this._credentials = null;\n }\n }\n\n getAccessToken(): string | null {\n const expiration = this.credentials?.token?.expires_in || '';\n const token = this.credentials?.token?.access_token || '';\n\n if (!token || !expiration) {\n return null;\n }\n\n if (Date.now() > parseInt(expiration)) {\n this.setCredentials();\n return null;\n }\n\n return token;\n }\n\n getExpiration(): string {\n return this.credentials?.token?.expires_in || '';\n }\n\n getRefreshToken(): string {\n return this.credentials?.token?.refresh_token || '';\n }\n\n refresh(): CredentialsService {\n this._credentials = null;\n return this;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { CredentialsService } from './credentials.service';\n\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class TokenInterceptor implements HttpInterceptor {\n\n constructor(private credentials: CredentialsService) { }\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n request = request.clone({\n setHeaders: {\n Authorization: `Bearer ${this.credentials.getAccessToken() || ''}`\n }\n });\n return next.handle(request);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n\n/**\n * Prefixes all requests not starting with `http[s]` with `environment.serverUrl`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HeaderInterceptor implements HttpInterceptor {\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n request = request.clone({\n setHeaders: {\n 'Content-Type': request.headers.get('Content-Type') || 'application/json',\n }\n });\n return next.handle(request);\n }\n}\n","import { Inject, Injectable, InjectionToken, Injector, Optional } from '@angular/core';\nimport { HttpClient, HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { ErrorHandlerInterceptor } from './error-handler.interceptor';\nimport { CacheInterceptor } from './cache.interceptor';\nimport { ApiPrefixInterceptor } from './api-prefix.interceptor';\nimport { TokenInterceptor } from './token.interceptor';\nimport { HeaderInterceptor } from './header.interceptor';\n\n\n// Augment HttpClient with the added configuration methods from HttpService, to allow in-place replacement of\n// HttpClient with HttpService using dependency injection\nexport interface HttpCustomClient {\n\n /**\n * Enables caching for this request.\n * @param {boolean} forceUpdate Forces request to be made and updates cache entry.\n * @return {HttpCustomClient} The new instance.\n */\n cache(forceUpdate?: boolean): HttpCustomClient;\n\n /**\n * Skips default error handler for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipErrorHandler(): HttpCustomClient;\n\n /**\n * Skips default API Prefix for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipApiPrefix(): HttpCustomClient;\n\n\n /**\n * Skips default Token Interceptor for this request.\n * @return {HttpCustomClient} The new instance.\n */\n skipToken(): HttpCustomClient;\n\n /**\n* Skips default Header Interceptor for this request.\n* @return {HttpCustomClient} The new instance.\n*/\n skipHeader(): HttpCustomClient;\n\n}\n\n\n// From @angular/common/http/src/interceptor: allows to chain interceptors\nclass HttpInterceptorHandler implements HttpHandler {\n\n constructor(private next: HttpHandler, private interceptor: HttpInterceptor) { }\n\n handle(request: HttpRequest<any>): Observable<HttpEvent<any>> {\n return this.interceptor.intercept(request, this.next);\n }\n\n}\n\n/**\n * Allows to override default dynamic interceptors that can be disabled with the HttpService extension.\n * Except for very specific needs, you should better configure these interceptors directly in the constructor below\n * for better readability.\n *\n * For static interceptors that should always be enabled (like ApiPrefixInterceptor), use the standard\n * HTTP_INTERCEPTORS token.\n */\nexport const HTTP_DYNAMIC_INTERCEPTORS = new InjectionToken<HttpInterceptor>('HTTP_DYNAMIC_INTERCEPTORS');\n\n/**\n * Extends HttpClient with per request configuration using dynamic interceptors.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpService extends HttpClient implements HttpCustomClient {\n\n constructor(private httpHandler: HttpHandler,\n private injector: Injector,\n @Optional() @Inject(HTTP_DYNAMIC_INTERCEPTORS) private interceptors: HttpInterceptor[] = []) {\n super(httpHandler);\n\n if (!this.interceptors) {\n // Configure default interceptors that can be disabled here\n this.interceptors = [this.injector.get(ApiPrefixInterceptor), this.injector.get(HeaderInterceptor), this.injector.get(TokenInterceptor), this.injector.get(ErrorHandlerInterceptor)];\n }\n }\n\n cache(forceUpdate?: boolean): HttpService {\n const cacheInterceptor = this.injector.get(CacheInterceptor).configure({ update: forceUpdate });\n return this.addInterceptor(cacheInterceptor);\n }\n\n skipErrorHandler(): HttpService {\n return this.removeInterceptor(ErrorHandlerInterceptor);\n }\n\n skipApiPrefix(): HttpService {\n return this.removeInterceptor(ApiPrefixInterceptor);\n }\n\n skipToken(): HttpService {\n return this.removeInterceptor(TokenInterceptor);\n }\n\n skipHeader(): HttpService {\n return this.removeInterceptor(HeaderInterceptor);\n }\n\n // Override the original method to wire interceptors when triggering the request.\n request(method?: any, url?: any, options?: any): any {\n const handler = this.interceptors.reduceRight(\n (next, interceptor) => new HttpInterceptorHandler(next, interceptor),\n this.httpHandler\n );\n return new HttpClient(handler).request(method, url, options);\n }\n\n private removeInterceptor(interceptorType: Function): HttpService {\n return new HttpService(\n this.httpHandler,\n this.injector,\n this.interceptors.filter(i => !(i instanceof interceptorType))\n );\n }\n\n private addInterceptor(interceptor: HttpInterceptor): HttpService {\n return new HttpService(\n this.httpHandler,\n this.injector,\n this.interceptors.concat([interceptor])\n );\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from '../core/http.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EntityFileService {\n\n constructor(private http: HttpService) { }\n\n getEntityFiles(filters: any) {\n return this.http.get(`api/entity-files`, { params: filters }).toPromise();\n }\n\n createEntityFile(model: any) {\n return this.http.post(\"api/entity-files\", model).toPromise();\n }\n\n updateEntityFile(model: any) {\n return this.http.put(`api/entity-files/${model.id}`, model).toPromise();\n }\n\n deleteEntityFile(model: any) {\n return this.http.delete(`api/entity-files/${model.id}`).toPromise();\n }\n\n uploadEntityFile(file: File) {\n const formData: FormData = new FormData();\n formData.append(\"fileData\", file, file.name);\n return this.http\n .skipHeader()\n .post(\n \"api/entity-files-upload\",\n formData,\n ).toPromise();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormValidatorService {\n\n constructor() { }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string, formGroup: FormGroup | any, firstAttempt?: boolean) {\n return (!formGroup.get(field).valid && formGroup.get(field).touched) ||\n (!formGroup.get(field).valid && formGroup.get(field).untouched && firstAttempt);\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string, formGroup: FormGroup | any, errorMessages: any, errorField?: string) {\n const error = Object.keys(formGroup.get(field).errors);\n return (error.length > 0) ? (errorMessages[errorField || field][error[0]] ? errorMessages[errorField || field][error[0]] : '') : '';\n }\n\n}\n","import { Component, OnInit, Inject } from \"@angular/core\";\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\nimport { FormGroup, FormBuilder, Validators } from \"@angular/forms\";\nimport { EntityFileService } from '../entity-file.service';\nimport { FileDropperConfig } from '../../file-dropper/file-dropper.model';\nimport { ViewerConfig } from '../../document-viewer/viewer-config.model';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { AlertService } from \"../../core/alert.service\";\n\nconst errorMessages: any = {\n url: {\n required: \"File is required\"\n },\n};\n\n@Component({\n selector: 'entity-file-form',\n templateUrl: './entity-file-form.component.html',\n styleUrls: ['./entity-file-form.component.css']\n})\nexport class EntityFileFormComponent implements OnInit {\n\n entityFileGroup: FormGroup;\n assignmentFileFirstAttempt: boolean;\n updateMode: boolean;\n fileConfig: FileDropperConfig;\n fileList: any[] = [];\n viewerConfig: ViewerConfig;\n hideTitleAndDetails: boolean;\n\n constructor(\n public dialogRef: MatDialogRef<EntityFileFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private formValidatorService: FormValidatorService,\n private fb: FormBuilder,\n private entityFileService: EntityFileService,\n private alertService: AlertService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n //TODO: Finialize and add more validations.\n this.entityFileGroup = this.fb.group({\n id: [''],\n title: [''],\n details: [''],\n entity_type: [''],\n entity_id: [],\n file: ['', Validators.required],\n url: ['', Validators.required]\n });\n }\n\n ngOnInit(): void {\n if (this.data.entity) {\n this.entityFileGroup.get('entity_type').setValue(this.data.entity.entity_type);\n this.entityFileGroup.get('entity_id').setValue(this.data.entity.entity_id);\n }\n if (this.data.file) {\n this.updateMode = true;\n this.entityFileGroup.patchValue(this.data.file);\n }\n\n if (this.data?.hideTitleAndDetails) {\n this.hideTitleAndDetails = this.data?.hideTitleAndDetails;\n }\n\n //File dropper config\n this.fileConfig = {\n fileId: \"subjectFile\",\n containerId: \"subjectFileContainer\",\n styles: {\n height: \"200px\"\n },\n multiple: false,\n acceptFile: \"*\",\n maxSize: 10,\n acceptFileText: \"All Files\"\n };\n\n this.viewerConfig = {\n viewerStyle: {\n height: '200px',\n width: '100%'\n }\n }\n }\n\n\n //Method to trigger submit\n async submit() {\n this.assignmentFileFirstAttempt = true;\n if (!this.entityFileGroup.valid) {\n return;\n }\n const model = this.entityFileGroup.value;\n\n if (this.hideTitleAndDetails) {\n model.title = model.file;\n }\n\n const result: any = this.updateMode\n ? await this.entityFileService.updateEntityFile(model)\n : await this.entityFileService.createEntityFile(model);\n this.dialogRef.close(result.item);\n this.alertService.addAlert(\n \"File submitted successfully\",\n \"success\"\n );\n\n }\n\n async fileChanged(event: any) {\n this.fileList = event;\n\n if (this.fileList.length > 0) {\n\n const result: any = await this.entityFileService.uploadEntityFile(\n this.fileList[0]\n );\n this.entityFileGroup\n .get(\"file\")\n .setValue(result.item.file);\n this.entityFileGroup\n .get(\"url\")\n .setValue(result.item.url);\n this.fileList = [];\n }\n }\n\n\n async removeFile() {\n if (this.entityFileGroup.value.file) {\n try {\n this.entityFileGroup.patchValue({\n file: \"\",\n url: \"\"\n });\n } catch (error) {\n this.alertService.addAlert(\"Unable to remove file, try later\", \"warn\");\n }\n }\n }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(\n field,\n this.entityFileGroup,\n this.assignmentFileFirstAttempt\n );\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(\n field,\n this.entityFileGroup,\n errorMessages\n );\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { MatDialog } from '@angular/material/dialog';\nimport { EntityFileFormComponent } from './entity-file-form/entity-file-form.component';\nimport { EntityFileService } from './entity-file.service';\nimport { ActionPopup } from '../action-popup/action-popup.model';\nimport { FormControl } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { AlertService } from '../core/alert.service';\nimport { ActionPopupComponent } from '../action-popup/action-popup.component';\nimport { ViewerConfig } from '../document-viewer/viewer-config.model';\n\n@UntilDestroy()\n@Component({\n selector: 'app-entity-files-view-all',\n templateUrl: './entity-files-view-all.component.html',\n styleUrls: ['./entity-files-view-all.component.css']\n})\nexport class EntityFilesViewAllComponent implements OnInit {\n @Input() entityId: number;\n @Input() entityType: string;\n @Input() viewOnly: boolean = false;\n @Input() removeSearch: boolean;\n @Input() hideTitleAndDetails: boolean;\n @Input() displayMode: boolean;\n viewerConfig: ViewerConfig;\n\n filters: any = {};\n entityFiles: any[] = [];\n displayedColumns = ['index', 'title', 'details', 'file',];\n isWorking: boolean = false;\n search: FormControl = new FormControl('');\n page: number = 1;\n perPage: number = 25;\n lastPage: number = 0;\n\n constructor(\n private entityFileService: EntityFileService,\n public location: Location,\n private alertService: AlertService,\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n\n\n this.viewerConfig = {\n imageStyle: {\n height: '200px',\n width: '200px'\n },\n viewerStyle: {\n height: ' 160px',\n width: '200px'\n },\n hideRemove: true\n };\n\n if (this.hideTitleAndDetails) {\n this.displayedColumns = this.displayedColumns.filter(x => (x !== 'details') && (x !== 'title'));\n }\n\n this.filters = {\n entity_type: this.entityType,\n entity_id: this.entityId,\n title: \"\"\n };\n this.search.valueChanges.pipe(debounceTime(500), distinctUntilChanged(), untilDestroyed(this)).subscribe(value => {\n this.filters.title = value;\n this.reload();\n })\n this.fetchEntityFilesDetails();\n if (!this.viewOnly) {\n this.displayedColumns.push('actions');\n }\n }\n\n async fetchEntityFilesDetails() {\n this.filters.page = this.page;\n this.isWorking = true;\n const result: any = await this.entityFileService.getEntityFiles(this.filters);\n this.lastPage = result.last_page || this.page;\n this.entityFiles = this.entityFiles.concat(result.data);\n this.isWorking = false;\n }\n\n addEntityFile() {\n const dialogRef = this.dialog.open(EntityFileFormComponent, {\n width: \"700px\",\n data: {\n entity: this.filters,\n hideTitleAndDetails: this.hideTitleAndDetails\n },\n autoFocus: false,\n restoreFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n const files = [...this.entityFiles];\n files.push(result);\n this.entityFiles = files;\n }\n });\n }\n\n editEntityFile(file: any) {\n const dialogRef = this.dialog.open(EntityFileFormComponent, {\n width: \"700px\",\n autoFocus: false,\n data: {\n file: file,\n hideTitleAndDetails: this.hideTitleAndDetails\n } // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.reload();\n }\n });\n }\n\n deleteEntityFile(file: any) {\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: \"400px\",\n data: <ActionPopup>{\n title: \"Delete File\",\n message: `Are you sure to proceed delete the file ${file.title}?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n //Action confirmed\n const result = await this.entityFileService.deleteEntityFile(\n file\n );\n this.alertService.addAlert(\n \"File successfully deleted\",\n \"success\"\n );\n this.reload();\n\n }\n });\n }\n\n onScroll() {\n if (this.page < this.lastPage && !this.isWorking) {\n this.page += 1;\n this.fetchEntityFilesDetails();\n }\n }\n\n reload() {\n this.entityFiles = [];\n this.page = 1;\n if (!this.isWorking) {\n this.fetchEntityFilesDetails();\n }\n }\n\n ngOnDestroy() { }\n\n resetFieldValue() {\n this.search.setValue(\"\");\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from \"@angular/core\";\nimport { AlertService } from \"../core/alert.service\";\nimport { FileDropperConfig } from './file-dropper.model';\n\n\n@Component({\n selector: \"app-file-dropper\",\n templateUrl: \"./file-dropper.component.html\",\n styleUrls: [\"./file-dropper.component.scss\"]\n})\nexport class FileDropperComponent implements OnInit {\n @Input() fileArray: any[] = [];\n\n @Input() config: FileDropperConfig;\n\n @Output() fileChanged: any = new EventEmitter();\n\n border = \"1px dashed #989898\";\n\n @Input() styles: any;\n\n isSingleMode: boolean;\n\n constructor(private alertService: AlertService) { }\n\n /**Life cycle hook method */\n ngOnInit() {\n this.isSingleMode = !Boolean(this.config.multiple);\n }\n\n /**Method for dragging event */\n dragEnter(event: any) {\n event.target.style.background = this.config.dragColor || \"#c0c0c0\";\n\n event.target.style.border = \"1px dashed black\";\n\n event.preventDefault();\n }\n\n /**Method for drag over event */\n dragOver(event: any) {\n event.preventDefault();\n }\n\n /**Method for drag leave event */\n dragLeave(event: any) {\n event.target.style.background = \"\";\n event.target.style.border = this.border;\n\n event.preventDefault();\n }\n\n /**Method for drop event */\n dropEvent(event: any) {\n event.target.style.background = \"\";\n event.target.style.border = this.border;\n const droppedFiles: FileList = event.dataTransfer.files;\n if (droppedFiles.length > 0) {\n const fileArray = Array.from(droppedFiles);\n this.addFiles(fileArray);\n }\n event.preventDefault();\n }\n\n /**Method to list files selected */\n onFileChange(event: any) {\n if (event.target.files && event.target.files.length) {\n const fileArray = Array.from(event.target.files);\n this.addFiles(fileArray);\n const fileInput = document.getElementById(\n this.config.fileId\n ) as HTMLInputElement;\n fileInput.value = \"\";\n }\n }\n\n /**Method to add files in the array */\n addFiles(fileArray: any) {\n if (!this.isSingleMode) {\n fileArray.forEach((file: any) => {\n this.fileArray = this.fileArray.filter(\n (item: any) => item.name !== file.name\n );\n if (this.fileSizeAllowed(file)) {\n this.fileArray.push(file);\n }\n });\n\n this.fileArray.sort(this.sortFiles);\n this.fileChanged.emit(this.fileArray);\n } else {\n // Single Mode\n if (this.fileArray.length === 0) {\n if (this.fileSizeAllowed(fileArray[0])) {\n this.fileArray.push(fileArray[0]);\n this.fileArray.sort(this.sortFiles);\n this.fileChanged.emit(this.fileArray);\n }\n }\n }\n }\n\n /**Method to sort the files in asc */\n sortFiles(a: any, b: any) {\n const nameA = a.name.toUpperCase();\n const nameB = b.name.toUpperCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n\n return 0;\n }\n\n /**Method tp validate the file size */\n fileSizeAllowed(file: any): boolean {\n if (!Boolean(this.config.maxSize)) {\n return true;\n } else if (file.size / (1024 * 1024) < this.config.maxSize) {\n return true;\n } else {\n this.alertService.addAlert(\n `The size of the file exceeds the limit ${this.config.maxSize} MB, kindly upload a file with size ${this.config.maxSize} MB or below`,\n \"warn\"\n );\n return false;\n }\n }\n\n /**Method invokes when the drop box is clicked to upload the file */\n clickEvent(event: any) {\n if (!(this.isSingleMode && this.fileArray.length > 0)) {\n document.getElementById(this.config.fileId).click();\n }\n event.preventDefault();\n }\n}\n","export class FileDropperConfig {\n containerId: string;\n fileId: string;\n styles?: any;\n multiple?: boolean;\n dragColor?: boolean;\n acceptFile: string; // use '*' to accept all file types.\n maxSize?: number; // size in MB\n acceptFileText?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from '../core/http.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NoteService {\n\n constructor(private http: HttpService) { }\n\n getNotes(filterModel: any) {\n return this.http.get('api/notes', { params: filterModel }).toPromise();\n }\n\n addNote(note: any) {\n return this.http.post('api/notes', note).toPromise();\n }\n\n editNote(note: any) {\n return this.http.put(`api/notes/${note.id}`, note).toPromise();\n }\n\n deleteNote(note: any) {\n return this.http.delete(`api/notes/${note.id}`).toPromise();\n }\n}\n","import { Component, OnInit, Inject } from \"@angular/core\";\nimport { FormGroup, FormBuilder, Validators } from \"@angular/forms\";\nimport { MatDialogRef, MAT_DIALOG_DATA } from \"@angular/material/dialog\";\nimport { NoteService } from \"../note.service\";\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { AlertService } from \"../../core/alert.service\";\n\nconst errorMessages: any = {\n note: {\n required: \"Note is required\"\n }\n};\n\n@Component({\n selector: 'app-note-form',\n templateUrl: './note-form.component.html',\n styleUrls: ['./note-form.component.css']\n})\nexport class NoteFormComponent implements OnInit {\n\n updateMode: boolean;\n noteFormGroup: FormGroup;\n noteFormFirstAttempt: boolean;\n\n constructor(\n public dialogRef: MatDialogRef<NoteFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n private noteService: NoteService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n //TODO: Finialize and add more validations.\n this.noteFormGroup = this.fb.group({\n id: [\"\"],\n note: [\"\", Validators.compose([Validators.required])],\n model_type: [\"\"],\n related_model_id: [\"\"],\n });\n }\n\n ngOnInit() {\n if (this.data.update) {\n this.updateMode = true;\n }\n this.noteFormGroup.patchValue(this.data.note);\n }\n\n //Method to trigger login\n async submit() {\n this.noteFormFirstAttempt = true;\n if (this.noteFormGroup.valid) {\n const model = this.noteFormGroup.value;\n const result = this.updateMode\n ? await this.noteService.editNote(model)\n : await this.noteService.addNote(model);\n\n this.alertService.addAlert(\n `${this.data?.labelText} saved successfully`,\n \"success\"\n );\n this.dialogRef.close(result);\n }\n }\n\n cancel() {\n this.dialogRef.close();\n }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(\n field,\n this.noteFormGroup,\n this.noteFormFirstAttempt\n );\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(\n field,\n this.noteFormGroup,\n errorMessages\n );\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\nimport { NoteService } from '../note.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { NoteFormComponent } from '../note-form/note-form.component';\nimport { ActionPopupComponent } from '../../action-popup/action-popup.component';\nimport { ActionPopup } from '../../action-popup/action-popup.model';\n\n@Component({\n selector: 'app-note-list',\n templateUrl: './note-list.component.html',\n styleUrls: ['./note-list.component.css']\n})\nexport class NoteListComponent implements OnInit {\n\n @Input() relatedModelId !: any;\n @Input() modelType !: any;\n @Input() readonly: boolean = false;\n @Input() labelText: string = 'Note';\n\n notes: any[] = [];\n filters: any;\n displayedColumns = [\n 'index',\n 'note',\n 'actions'\n ];\n\n page = 1;\n lastPage = 1;\n\n constructor(private noteService: NoteService,\n private dialog: MatDialog\n ) {\n this.filters = {};\n this.filters.sort_by = \"created_at|DESC\";\n }\n\n ngOnInit() {\n if (this.readonly) {\n this.displayedColumns = this.displayedColumns.filter(x => x !== 'actions');\n }\n this.filters.related_model_id = this.relatedModelId;\n this.filters.model_type = this.modelType;\n this.loadData();\n }\n\n async loadData() {\n\n const result: any = await this.noteService.getNotes({ ...this.filters, page: this.page });\n this.notes = this.notes.concat(result.data);\n this.page = result.current_page;\n this.lastPage = result.last_page;\n }\n\n addNote() {\n const dialogRef = this.dialog.open(NoteFormComponent, {\n width: \"400px\",\n data: {\n note: { related_model_id: this.relatedModelId, model_type: this.modelType },\n labelText: this.labelText,\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.resetScroll();\n this.loadData();\n }\n });\n }\n\n editNote(note: any) {\n const dialogRef = this.dialog.open(NoteFormComponent, {\n width: \"400px\",\n data: {\n note: note,\n update: true,\n labelText: this.labelText\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.resetScroll();\n this.loadData();\n }\n });\n }\n\n async deleteNote(note: any) {\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: \"400px\",\n data: <ActionPopup>{\n title: `Delete ${this.labelText}`,\n message: `Are you sure to delete?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n //Action confirmed\n\n const result = await this.noteService.deleteNote(note);\n this.notes = this.notes.filter((item: any) => item.id !== note.id);\n\n }\n });\n }\n\n resetScroll() {\n this.page = 1;\n this.lastPage = 1;\n this.notes = [];\n }\n\n onScroll() {\n if (this.page < this.lastPage) {\n this.page += 1;\n this.loadData();\n }\n }\n\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ElementRef, Input, OnDestroy, OnInit, Optional, Self, Output, EventEmitter, TemplateRef } from '@angular/core';\nimport { FormBuilder, FormGroup, ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Subject, of, from } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, startWith, switchMap, finalize } from 'rxjs/operators';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { HttpService } from '../core/http.service';\nimport { UntilDestroy, untilDestroyed } from \"@ngneat/until-destroy\";\n\n@UntilDestroy()\n@Component({\n selector: 'app-searchable-selector',\n templateUrl: './searchable-selector.component.html',\n styleUrls: ['./searchable-selector.component.scss'],\n providers: [\n {\n provide: MatFormFieldControl,\n useExisting: SearchableSelectorComponent\n }\n ]\n})\nexport class SearchableSelectorComponent implements ControlValueAccessor, OnInit, OnDestroy {\n\n @Input() valueField: string = 'id';\n @Input() titleField: string = 'title';\n @Input() apiUrl!: string;\n @Input() multiple: boolean = false;\n @Input() selectedValue: any;\n @Output() selectedValueChange = new EventEmitter();\n @Input() enableSearch: boolean = true;\n @Input() add: boolean = false;\n @Input() addConfig: any;\n @Input() edit: boolean = false;\n @Input() editConfig: any;\n @Input() sort: boolean = true;\n @Input() sortBy: string;\n @Input() searchField: string;\n @Input() itemComponent: ComponentType<unknown> | TemplateRef<unknown>;\n @Input() items: any[] = [];\n @Output() selectionChange = new EventEmitter();\n @Output() itemsChange = new EventEmitter();\n\n\n isLoading: boolean = false;\n onChange: any = () => { };\n onTouched: any = () => { };\n static nextId = 0;\n selectorForm: FormGroup;\n stateChanges = new Subject<void>();\n focused = false;\n controlType = 'searchable-selctor';\n id = `searchable-selctor-${SearchableSelectorComponent.nextId++}`;\n describedBy = '';\n filters: any;\n\n\n get empty() {\n const { value: { select_value } } = this.selectorForm;\n return !select_value;\n }\n\n get shouldLabelFloat() { return this.focused || !this.empty; }\n\n\n @Input()\n get required(): boolean { return this._required; }\n set required(value: boolean) {\n this.selectorForm.get('select_value').setValidators(Validators.required);\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n @Input()\n get disabled(): boolean { return this._disabled; }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled ? this.selectorForm.disable() : this.selectorForm.enable();\n this.stateChanges.next();\n }\n private _disabled = false;\n\n @Input()\n get value(): any {\n if (this.selectorForm.valid) {\n return this.selectorForm.value.select_value;\n }\n return '';\n }\n set value(data: any) {\n this.selectorForm.patchValue({ select_value: data || '' });\n this.stateChanges.next();\n }\n\n constructor(\n formBuilder: FormBuilder,\n private _focusMonitor: FocusMonitor,\n private http: HttpService,\n private _elementRef: ElementRef<HTMLElement>,\n private dialog: MatDialog,\n @Optional() @Self() public ngControl: NgControl) {\n\n this.selectorForm = formBuilder.group({\n select_value: [null],\n search: ''\n });\n\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\n if (this.focused && !origin) {\n this.onTouched();\n }\n this.focused = !!origin;\n this.stateChanges.next();\n });\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n openedChange(event: any) {\n if (this.dataItems.length === 0 && this.selectorForm.get('search').value) {\n this.selectorForm.get('search').setValue('');\n }\n }\n\n get dataItems(): any[] {\n let items: any[] = [];\n if (this.multiple && this.selectedValue && (this.selectedValue.length > 0))\n items = [...this.selectedValue, ...this.items];\n else if ((!this.multiple) && this.selectedValue)\n items = [this.selectedValue, ...this.items];\n else\n items = this.items;\n items = items.filter((v, i, a) => a.findIndex(v => v[this.valueField] === a[i][this.valueField]) === i);\n //Emit the items to any child component\n this.itemsChange.emit(items);\n return items;\n }\n\n ngOnInit() {\n this.selectorForm.get('search').valueChanges\n .pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => {\n if (this.enableSearch)\n this.search(value);\n });\n\n this.filters = {\n perPage: 25,\n search: '',\n page: 1,\n lastPage: 1\n }\n if (this.sort) {\n this.filters.sort_by = this.sortBy || `${this.titleField}|asc`;\n }\n\n //Fetch Items only if it is not present, can be used in places where we load many entries.\n if (this.items.length === 0) {\n this.fetchItemList();\n }\n }\n\n fetchItemList() {\n this.isLoading = true;\n of().pipe(\n startWith(true),\n switchMap((_) => from(this.http.get(this.apiUrl, { params: this.filters }))),\n finalize(() => this.isLoading = false),\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.items = this.items.concat(result.data);\n this.filters.page = result.current_page;\n this.filters.lastPage = result.last_page;\n });\n }\n\n\n setDescribedByIds(ids: string[]) {\n this.describedBy = ids.join(' ');\n }\n\n onContainerClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n writeValue(data: any): void {\n this.value = data;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n getPropertyValue(ele: any, keyString: string) {\n keyString = keyString.replace(/\\[(\\w+)\\]/g, \".$1\"); // convert indexes to properties\n keyString = keyString.replace(/^\\./, \"\"); // strip a leading dot\n const keyList = keyString.split(\".\");\n for (let i = 0, n = keyList.length; i < n; ++i) {\n const key = keyList[i];\n if (ele && key in ele) {\n ele = ele[key];\n } else {\n return;\n }\n }\n return ele;\n }\n\n _handleInput(): void {\n this.onChange(this.value);\n if (this.multiple)\n this.selectedValue = (this.value as []).map(x => this.dataItems.find(y => y[this.valueField] === x));\n else\n this.selectedValue = this.dataItems.find(x => x[this.valueField] === this.value);\n this.selectedValueChange.emit(this.selectedValue);\n this.selectionChange.emit(this.value);\n }\n\n get errorState(): boolean {\n return (this.ngControl && this.ngControl.invalid && (this.ngControl.touched || this.ngControl.dirty));\n }\n\n static ngAcceptInputType_disabled: boolean | string | null | undefined;\n static ngAcceptInputType_required: boolean | string | null | undefined;\n\n onScroll() {\n if (this.filters.lastPage > this.filters.page) {\n this.filters.page += 1;\n this.fetchItemList();\n }\n }\n\n reloadData() {\n this.items = [];\n this.filters.page = 1;\n this.filters.lastPage = 1;\n this.fetchItemList();\n }\n\n search(event: any) {\n if (this.searchField) {\n this.filters[this.searchField] = event;\n } else {\n this.filters.search = event;\n }\n this.reloadData();\n }\n\n addItem(event: any) {\n const dialogRef = this.dialog.open(this.itemComponent, {\n width: '400px',\n autoFocus: false,\n data: {},\n ...this.addConfig\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.items.push(result.item);\n this.selectorForm.get('select_value').setValue(result.item[this.valueField]);\n this._handleInput();\n }\n });\n event.stopPropagation();\n }\n\n editItem(event: any) {\n const dialogRef = this.dialog.open(this.itemComponent, {\n width: '400px',\n autoFocus: false,\n data: {\n item: this.selectedValue\n },\n ...this.editConfig\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.items = this.items.filter(x => x[this.valueField] !== this.selectedValue[this.valueField]);\n this.items.push(result.item);\n this.selectedValue = null;\n this.selectorForm.get('select_value').setValue(result.item[this.valueField]);\n this._handleInput();\n }\n });\n event.stopPropagation();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n}\n","import { AfterViewInit, Directive, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output } from '@angular/core';\nimport { MatSelect, SELECT_ITEM_HEIGHT_EM } from '@angular/material/select';\nimport { debounceTime, takeUntil, tap } from 'rxjs/operators';\nimport { fromEvent, Subject } from 'rxjs';\n\n@Directive({\n selector: '[msInfiniteScroll]'\n})\nexport class MatSelectInfiniteScrollDirective implements OnInit, OnDestroy, AfterViewInit {\n\n @Input() threshold = '15%';\n @Input() debounceTime = 150;\n @Input() complete: boolean;\n @Output() infiniteScroll = new EventEmitter<void>();\n\n private panel: Element;\n private thrPx = 0;\n private thrPc = 0;\n private singleOptionHeight = SELECT_ITEM_HEIGHT_EM;\n\n private destroyed$ = new Subject<boolean>();\n\n constructor(private matSelect: MatSelect, private ngZone: NgZone) {\n }\n\n ngOnInit() {\n this.evaluateThreshold();\n }\n\n ngAfterViewInit() {\n this.matSelect.openedChange.pipe(\n takeUntil(this.destroyed$)\n ).subscribe((opened) => {\n if (opened) {\n this.panel = this.matSelect.panel.nativeElement;\n this.singleOptionHeight = this.getSelectItemHeightPx();\n this.registerScrollListener();\n }\n });\n }\n\n ngOnDestroy() {\n this.destroyed$.next(true);\n this.destroyed$.complete();\n }\n\n evaluateThreshold() {\n if (this.threshold.lastIndexOf('%') > -1) {\n this.thrPx = 0;\n this.thrPc = (parseFloat(this.threshold) / 100);\n\n } else {\n this.thrPx = parseFloat(this.threshold);\n this.thrPc = 0;\n }\n }\n\n registerScrollListener() {\n fromEvent(this.panel, 'scroll').pipe(\n takeUntil(this.destroyed$),\n debounceTime(this.debounceTime),\n tap((event) => {\n this.handleScrollEvent(event);\n })\n ).subscribe();\n }\n\n handleScrollEvent(event) {\n this.ngZone.runOutsideAngular(() => {\n if (this.complete) {\n return;\n }\n const countOfRenderedOptions = this.matSelect.options.length;\n const infiniteScrollDistance = this.singleOptionHeight * countOfRenderedOptions;\n const threshold = this.thrPc !== 0 ? (infiniteScrollDistance * this.thrPc) : this.thrPx;\n\n const scrolledDistance = this.panel.clientHeight + event.target.scrollTop;\n\n if ((scrolledDistance + threshold) >= infiniteScrollDistance) {\n this.ngZone.run(() => this.infiniteScroll.emit());\n }\n });\n }\n\n getSelectItemHeightPx(): number {\n return parseFloat(getComputedStyle(this.panel).fontSize) * SELECT_ITEM_HEIGHT_EM;\n }\n\n}","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\r\n\r\n/**\r\n * Component to generate a num items selector\r\n * \r\n * @author Floyd Kissoon\r\n * @since 20170817\r\n */\r\n@Component({\r\n selector: \"num-items-selector\",\r\n templateUrl: \"./num-items-selector.html\"\r\n})\r\nexport class NumItemsSelector {\r\n @Input() numItems: number;\r\n @Output() numItemsChange: EventEmitter<number>;\r\n\r\n constructor() {\r\n this.numItemsChange = new EventEmitter<number>();\r\n }\r\n\r\n /**\r\n * Called when an item has been selected\r\n */\r\n numItemsChanged() {\r\n this.numItemsChange.emit(this.numItems);\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\n\n/**\n * Service that provides utility functions for dates\n * \n * @author Joshua Kissoon\n * @since 20170726\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DateUtils {\n\n /**\n * Takes in a date object and outputs the string value\n */\n getYYYYMMDDString(inputDate: Date): string {\n var year = inputDate.getFullYear();\n var month = (inputDate.getMonth() + 1) < 10 ? (\"0\" + (inputDate.getMonth() + 1)) : (inputDate.getMonth() + 1);\n var date = inputDate.getDate() < 10 ? (\"0\" + inputDate.getDate()) : inputDate.getDate();\n\n return year + \"-\" + month + \"-\" + date;\n }\n\n /**\n * Takes in a date object and outputs the year\n */\n getYYYY(inputDate: Date): number {\n var year = inputDate.getFullYear();\n return year;\n }\n\n /**\n * Takes in a date object and outputs the Month\n */\n getMM(inputDate: Date): number {\n var month = inputDate.getMonth() + 1;\n return month;\n }\n // var n = this.rfidCardUseManualEntry.manual_date.toLocaleTimeString();\n\n getDateTime(inputDate: Date): string {\n var year = inputDate.getFullYear();\n var month = (inputDate.getMonth() + 1) < 10 ? (\"0\" + (inputDate.getMonth() + 1)) : (inputDate.getMonth() + 1);\n var date = inputDate.getDate() < 10 ? (\"0\" + inputDate.getDate()) : inputDate.getDate();\n var time = inputDate.toLocaleTimeString();\n\n return year + \"-\" + month + \"-\" + date + \" \" + time;\n }\n\n}","import { Component, Input, Output, EventEmitter, OnInit } from \"@angular/core\";\n\n/**\n * Component to generate a number selector\n * \n * @author Floyd Kissoon\n * @since 20180628\n */\n@Component({\n selector: \"number-selector\",\n templateUrl: \"./number-selector.html\"\n})\nexport class NumberSelector implements OnInit {\n @Input() start_value: number;\n @Input() end_value: number\n @Output() selectedValueChange: EventEmitter<number>;\n @Input() selectedValue: number;\n\n items = new Array();\n\n constructor() {\n this.selectedValueChange = new EventEmitter<number>();\n }\n\n /**\n * Called when an item has been selected\n */\n numChanged() {\n this.selectedValueChange.emit(this.selectedValue);\n }\n\n\n ngOnInit() {\n for (var i = this.start_value; i < this.end_value + 1; i++) {\n this.items.push(i);\n }\n }\n}\n","export function calculateTimeline(value: any) {\n const date = new Date();\n const data: any = {\n 'date_from': date,\n 'date_to': date,\n 'show_custom_field': false\n };\n switch (value) {\n case 1: { //Custom\n data.show_custom_field = true;\n break;\n }\n case 2: { // Today\n data.date_from = date;\n data.date_to = date;\n break;\n }\n case 3: { // Yesterday\n const yesterday = new Date(date)\n yesterday.setDate(yesterday.getDate() - 1)\n data.date_from = yesterday;\n data.date_to = yesterday;\n break;\n }\n case 4: { // This Week\n var first = date.getDate() - date.getDay() + 1; // First day is the day of the month - the day of the week\n var last = first + 6; // last day is the first day + 6 \n data.date_from = new Date(date.setDate(first));\n data.date_to = new Date(date.setDate(last));\n break;\n }\n case 5: { // Last Week\n var d = new Date();\n var to = d.setTime(d.getTime() - (d.getDay() ? d.getDay() : 7) * 24 * 60 * 60 * 1000);\n var from = d.setTime(d.getTime() - 6 * 24 * 60 * 60 * 1000);\n data.date_from = new Date(from);\n data.date_to = new Date(to);\n break;\n }\n case 6: { //This Month\n data.date_from = new Date(date.getFullYear(), date.getMonth(), 1);\n data.date_to = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n break;\n }\n case 7: { // Last Month\n var d = new Date(); // current date\n d.setDate(1); // going to 1st of the month\n d.setHours(-1);\n data.date_from = new Date(date.getFullYear(), date.getMonth() - 1, 1);\n data.date_to = d;\n break;\n }\n case 8: { // This Quarter\n const quarter = Math.floor((date.getMonth() / 3));\n const startFullQuarter = new Date(date.getFullYear(), quarter * 3, 1);\n const endFullQuarter = new Date(startFullQuarter.getFullYear(), startFullQuarter.getMonth() + 3, 0);\n data.date_from = startFullQuarter;\n data.date_to = endFullQuarter;\n break;\n }\n case 9: { // Last Quarter\n const quarter = Math.floor((date.getMonth() / 3));\n const startFullQuarter = new Date(date.getFullYear(), quarter * 3 - 3, 1);\n const endFullQuarter = new Date(startFullQuarter.getFullYear(), startFullQuarter.getMonth() + 3, 0)\n data.date_from = startFullQuarter;\n data.date_to = endFullQuarter;\n break;\n }\n case 10: { // This Year\n data.date_from = new Date(\"1/1/\" + (new Date()).getFullYear());;\n data.date_to = new Date(\"12/31/\" + (new Date()).getFullYear());\n break;\n }\n case 11: { // Last Year\n data.date_from = new Date(\"1/1/\" + (new Date().getFullYear() - 1));;\n data.date_to = new Date(\"12/31/\" + (new Date().getFullYear() - 1));\n break;\n break;\n }\n default: { // All\n data.date_from = '';\n data.date_to = '';\n break;\n }\n\n }\n return data;\n}","export class Timeline {\n public static CUSTOM: number = 1;\n public static TODAY: number = 2;\n public static YESTERDAY: number = 3;\n public static THIS_WEEK: number = 4;\n public static LAST_WEEK: number = 5;\n public static THIS_MONTH: number = 6;\n public static LAST_MONTH: number = 7;\n public static THIS_QUARTER: number = 8;\n public static LAST_QUARTER: number = 9;\n public static THIS_YEAR: number = 10;\n public static LAST_YEAR: number = 11;\n public static ALL: number = 12;\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { calculateTimeline } from './calculate-timeline';\n\n@UntilDestroy()\n@Component({\n selector: 'app-timeline-filter',\n templateUrl: './timeline-filter.component.html',\n styleUrls: ['./timeline-filter.component.scss']\n})\nexport class TimelineFilterComponent implements OnInit {\n\n @Input() timelineValue: FormControl = new FormControl('');\n @Input() timelines: any[] = [\n { value: 1, viewValue: 'Custom' },\n { value: 2, viewValue: 'Today' },\n { value: 3, viewValue: 'Yesterday' },\n { value: 4, viewValue: 'This Week' },\n { value: 5, viewValue: 'Last Week' },\n { value: 6, viewValue: 'This Month' },\n { value: 7, viewValue: 'Last Month' },\n { value: 8, viewValue: 'This Quarter' },\n { value: 9, viewValue: 'Last Quarter' },\n { value: 10, viewValue: 'This Year' },\n { value: 11, viewValue: 'Last Year' },\n { value: 12, viewValue: 'All dates' },\n ];\n\n @Input() labelText: string = 'Select Timeline';\n @Input() dateFrom: string = 'date_from';\n @Input() dateTo: string = 'date_to';\n @Input() appearance: any = \"legacy\"\n @Input() showClearbutton: boolean = false;\n @Input() form: FormGroup;\n\n @Input() set defaultValue(value: any) {\n this.timelineValue.setValue(value);\n this.changeTimeline(value);\n }\n\n showCustomDateFields: boolean = false;\n\n constructor() { }\n\n ngOnInit(): void {\n this.timelineValue.valueChanges.\n pipe(\n debounceTime(100),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => this.changeTimeline(value));\n }\n\n resetFieldValue(field: string) {\n this.form.get(field).setValue('');\n }\n\n\n getFieldValue(field: string) {\n return this.form.get(field).value;\n }\n\n setFieldValue(field: string, value: any) {\n this.form.get(field).setValue(value);\n }\n\n changeTimeline(value: any) {\n const timeline = calculateTimeline(value);\n if (timeline) {\n this.setFieldValue(this.dateFrom, timeline.date_from)\n this.setFieldValue(this.dateTo, timeline.date_to)\n this.showCustomDateFields = timeline.show_custom_field;\n }\n }\n\n}\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'app-loader',\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent implements OnInit {\n\n @Input() isLoading = false;\n @Input() size = 0.6;\n @Input() message: string | undefined;\n\n constructor() { }\n\n ngOnInit() { }\n\n}\n","import { NgModule } from '@angular/core';\nimport { SuccessSnackComponent, ErrorSnackComponent } from './snack.component';\nimport { CommonModule } from '@angular/common';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatIconModule } from '@angular/material/icon';\n\n@NgModule({\n declarations: [\n SuccessSnackComponent,\n ErrorSnackComponent\n ],\n imports: [\n CommonModule,\n MatSnackBarModule,\n MatIconModule\n ],\n exports: [\n SuccessSnackComponent,\n ErrorSnackComponent,\n ]\n})\nexport class SnackModule { }\n","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { CredentialsService } from './credentials.service';\nimport { Logger } from './logger.service';\n\nconst log = new Logger('AuthenticationGuard');\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationGuard implements CanActivate {\n\n constructor(private router: Router,\n private credentialsService: CredentialsService) { }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n return this.isUserAuthenticated(route, state);\n }\n\n canLoad(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n return this.isUserAuthenticated(route, state);\n }\n\n isUserAuthenticated(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n if (this.credentialsService.isAuthenticated) {\n return true;\n }\n\n log.debug('Not authenticated, redirecting and adding redirect url...');\n this.router.navigate(['/login'], { queryParams: { redirect: state.url }, replaceUrl: true });\n return false;\n }\n\n}\n","\nimport { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { concatMap, map } from 'rxjs/operators';\nimport { Credentials, CredentialsService } from './credentials.service';\nimport { HttpService } from './http.service';\n\n/**\n * Provides a base for authentication workflow.\n * The login/logout methods should be replaced with proper implementation.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class AuthenticationService {\n\n constructor(private credentialsService: CredentialsService, private http: HttpService) { }\n\n /**\n * Authenticates the user.\n * @param context The login parameters.\n * @return The user credentials.\n */\n login(context: any): Observable<Credentials> {\n const data = <Credentials>{};\n return this.http\n .skipToken()\n .post('oauth/token', context)\n .pipe(\n concatMap(async (tokenInfo: any) => {\n tokenInfo.expires_in = Date.now() + (tokenInfo.expires_in * 1000);\n data.token = tokenInfo;\n data.user = {};\n this.credentialsService.setCredentials(data, context.remember);\n const userInfo: any = await this.http.get('api/user/current').toPromise();\n data.user = userInfo?.user;\n this.credentialsService.setCredentials(data, context.remember);\n return data;\n })\n )\n }\n\n /**\n * Logs out the user and clear credentials.\n * @return True if the user was logged out successfully.\n */\n logout(): Observable<boolean> {\n\n this.credentialsService.setCredentials();\n return of(true);\n }\n\n}\n","import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';\nimport { Injectable } from '@angular/core';\n\n/**\n * A route strategy allowing for explicit route reuse.\n * Used as a workaround for https://github.com/angular/angular/issues/18374\n * To reuse a given route, add `data: { reuse: true }` to the route definition.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class RouteReusableStrategy extends RouteReuseStrategy {\n\n public shouldDetach(route: ActivatedRouteSnapshot): boolean {\n return false;\n }\n\n public store(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle | null): void { }\n\n public shouldAttach(route: ActivatedRouteSnapshot): boolean {\n return false;\n }\n\n public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n return null;\n }\n\n public shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n // Reuse the route if the RouteConfig is the same, or if both routes use the\n // same component, because the latter can have different RouteConfigs.\n return future.routeConfig === curr.routeConfig ||\n Boolean(future.routeConfig?.component &&\n future.routeConfig?.component === curr.routeConfig?.component);\n }\n\n}\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject, Observable } from 'rxjs';\r\n\r\n/**\r\n * Service used to manage Local Storage\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20190623\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StorageService {\r\n private storageSub = new Subject<any>();\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n watch(): Observable<any> {\r\n return this.storageSub.asObservable();\r\n }\r\n\r\n setItem(key: string, data: any) {\r\n localStorage.setItem(key, data);\r\n this.storageSub.next({ key: key, value: data });\r\n }\r\n\r\n getItem(key: string) {\r\n return localStorage.getItem(key);\r\n }\r\n\r\n removeItem(key: string) {\r\n const data = this.getItem(key);\r\n localStorage.removeItem(key);\r\n this.storageSub.next({ key: key, value: data });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpService } from './http.service';\r\n\r\n/**\r\n * Service that provides a wrapper for retrieving data from the server\r\n * @deprecated use HttpService Instead\r\n * @author Joshua Kissoon\r\n * @since 20170709\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DataManager {\r\n\r\n constructor(private http: HttpService) { }\r\n\r\n /**\r\n * Callback wrapper for the HTTP GET Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n * @updated 20170711 to add parameters\r\n */\r\n GET(urlq: string, params = {}): any {\r\n return this.http\r\n .get(urlq, { params: params })\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP POST Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the POST data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n POST(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .post(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP POST Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the POST data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n POSTRAW(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .skipHeader()\r\n .post(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n\r\n /**\r\n * Callback wrapper for the HTTP PUT Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the PUT data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n PUT(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .put(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP PATCH Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * @param object The object containing the PUT data to be sent\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20161107\r\n */\r\n PATCH(urlq: string, object: any): any {\r\n if (null == object) {\r\n object = { \"blank\": \"blank\" };\r\n }\r\n\r\n return this.http\r\n .patch(urlq, object)\r\n .toPromise();\r\n }\r\n\r\n /**\r\n * Callback wrapper for the HTTP DELETE Call\r\n * \r\n * @param urlq The query part of the URL to be sent to the server\r\n * \r\n * @author Joshua Kissoon\r\n * @since 20160826\r\n */\r\n DELETE(urlq: string): any {\r\n return this.http\r\n .delete(urlq)\r\n .toPromise();\r\n }\r\n\r\n}","import { MatTooltipModule } from '@angular/material/tooltip';\n/*\n * This module imports and re-exports all Angular Material modules for convenience,\n * so only 1 module import is needed in your feature modules.\n * See https://material.angular.io/guide/getting-started#step-3-import-the-component-modules.\n *\n * To optimize your production builds, you should only import the components used in your app.\n */\n\nimport { NgModule } from \"@angular/core\";\nimport {\n MatCommonModule,\n MatLineModule,\n MatNativeDateModule,\n MatOptionModule,\n MatPseudoCheckboxModule,\n MatRippleModule\n} from \"@angular/material/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { MatSelectModule } from \"@angular/material/select\";\nimport { MatSortModule } from \"@angular/material/sort\";\nimport { MatTableModule } from \"@angular/material/table\";\nimport { MatCardModule } from \"@angular/material/card\";\nimport { MatDividerModule } from \"@angular/material/divider\";\nimport { MatChipsModule } from \"@angular/material/chips\";\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatListModule } from '@angular/material/list'\n\n\n@NgModule({\n exports: [\n MatButtonModule,\n MatCheckboxModule,\n MatCommonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatLineModule,\n MatMenuModule,\n MatNativeDateModule,\n MatOptionModule,\n MatProgressSpinnerModule,\n MatPseudoCheckboxModule,\n MatRippleModule,\n MatSelectModule,\n MatSortModule,\n MatTableModule,\n MatCardModule,\n MatDividerModule,\n MatChipsModule,\n MatDatepickerModule,\n MatListModule,\n MatTooltipModule\n ]\n})\nexport class MaterialModule { }\n","import { NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS, HttpClientModule, HttpClient } from '@angular/common/http';\nimport { RouteReuseStrategy, RouterModule } from '@angular/router';\n\nimport { RouteReusableStrategy } from './route-reusable-strategy';\nimport { ApiPrefixInterceptor } from './api-prefix.interceptor';\nimport { ErrorHandlerInterceptor } from './error-handler.interceptor';\nimport { HttpService } from './http.service';\nimport { TokenInterceptor } from './token.interceptor';\nimport { CacheInterceptor } from './cache.interceptor';\nimport { SnackModule } from './snack/snack.module';\n\n@NgModule({\n imports: [\n CommonModule,\n HttpClientModule,\n RouterModule,\n SnackModule\n ],\n providers: [\n {\n provide: HttpClient,\n useClass: HttpService\n },\n {\n provide: RouteReuseStrategy,\n useClass: RouteReusableStrategy\n }\n ],\n exports: [\n SnackModule\n ]\n})\nexport class CoreModule {\n\n constructor(@Optional() @SkipSelf() parentModule: CoreModule) {\n // Import guard\n if (parentModule) {\n throw new Error(`${parentModule} has already been loaded. Import Core module in the root module only.`);\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupComponent } from './action-popup.component';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n FlexLayoutModule,\n CommonModule,\n MaterialModule\n ],\n declarations: [\n ActionPopupComponent\n ],\n exports: [\n ActionPopupComponent\n ],\n entryComponents: [\n ActionPopupComponent\n ]\n})\nexport class ActionPopupModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { DataTableComponent } from './data-table.component';\nimport { InfiniteScrollModule } from \"ngx-infinite-scroll\";\nimport { MaterialModule } from '../material.module';\n\n\n@NgModule({\n imports: [\n FlexLayoutModule,\n CommonModule,\n InfiniteScrollModule,\n MaterialModule\n ],\n declarations: [\n DataTableComponent\n ],\n exports: [\n DataTableComponent\n ]\n})\nexport class DataTableModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { DocumentViewerComponent } from './document-viewer.component';\nimport { NgxDocViewerModule } from 'ngx-doc-viewer';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FlexLayoutModule,\n NgxDocViewerModule,\n MaterialModule\n ],\n declarations: [\n DocumentViewerComponent\n ],\n exports: [\n DocumentViewerComponent\n ]\n})\nexport class DocumentViewerModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FileDropperComponent } from './file-dropper.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n FlexLayoutModule,\n MaterialModule\n ],\n declarations: [\n FileDropperComponent\n ],\n exports: [FileDropperComponent]\n})\nexport class FileDropperModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EntityFileFormComponent } from './entity-file-form/entity-file-form.component';\nimport { EntityFilesViewAllComponent } from './entity-files-view-all.component';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FileDropperModule } from '../file-dropper/file-dropper.module';\nimport { DocumentViewerModule } from '../document-viewer/document-viewer.module';\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\nimport { MaterialModule } from '../material.module';\n\n\n@NgModule({\n declarations: [EntityFileFormComponent, EntityFilesViewAllComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n FlexLayoutModule,\n FileDropperModule,\n DocumentViewerModule,\n InfiniteScrollModule,\n ActionPopupModule,\n MaterialModule\n ],\n exports: [\n EntityFilesViewAllComponent\n ],\n entryComponents: [EntityFileFormComponent]\n})\nexport class EntityFilesViewAllModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NoteListComponent } from './note-list/note-list.component';\nimport { NoteFormComponent } from './note-form/note-form.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n declarations: [\n NoteListComponent,\n NoteFormComponent\n ],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n FlexLayoutModule,\n ActionPopupModule,\n MaterialModule\n ],\n exports: [\n NoteListComponent\n ],\n entryComponents: [NoteFormComponent]\n})\nexport class NoteModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SearchableSelectorComponent } from './searchable-selector.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatSelectInfiniteScrollDirective } from './mat-select-infinite-scroll.directive';\nimport { MaterialModule } from '../material.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FlexLayoutModule,\n MaterialModule\n ],\n declarations: [\n SearchableSelectorComponent,\n MatSelectInfiniteScrollDirective\n ],\n exports: [\n SearchableSelectorComponent,\n MatSelectInfiniteScrollDirective\n ]\n})\nexport class SearchableSelectorModule { }\n","import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/* Selectors */\r\nimport { NumItemsSelector } from './num-items-selector.component';\r\nimport { NumberSelector } from './number-selector.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ],\r\n declarations: [\r\n NumItemsSelector, NumberSelector,\r\n ],\r\n exports: [NumItemsSelector, NumberSelector]\r\n})\r\nexport class UtilityModule { }\r\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class TimelineFilterRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { TimelineFilterRoutingModule } from './timeline-filter-routing.module';\nimport { TimelineFilterComponent } from './timeline-filter.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../material.module';\n\n\n@NgModule({\n declarations: [TimelineFilterComponent],\n imports: [\n CommonModule,\n TimelineFilterRoutingModule,\n FlexLayoutModule,\n MaterialModule,\n ReactiveFormsModule\n ],\n exports: [TimelineFilterComponent]\n})\nexport class TimelineFilterModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LoaderComponent } from './loader.component';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\n\n@NgModule({\n declarations: [\n LoaderComponent\n ],\n imports: [\n CommonModule,\n MatProgressSpinnerModule\n ],\n exports: [\n LoaderComponent\n ]\n})\nexport class LoaderModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionRoutingModule } from './email-subscription-routing.module';\n\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EmailSubscriptionRoutingModule\n ]\n})\nexport class EmailSubscriptionModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserRoutingModule } from './email-subscription-user-routing.module';\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EmailSubscriptionUserRoutingModule\n ]\n})\nexport class EmailSubscriptionUserModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserFormRoutingModule { }\n","\nimport { Component, Inject, OnInit, TemplateRef } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { finalize } from 'rxjs/operators';\nimport { AlertService } from '../../../core/alert.service';\nimport { FormValidatorService } from '../../../core/form-validator.service';\nimport { HttpService } from '../../../core/http.service';\nimport { Logger } from '../../../core/logger.service';\n\nconst log = new Logger('EmailSubscriptionUser Form');\n\nconst errorMessages: any = {\n user_id: {\n required: \"User is required\"\n },\n email_type_id: {\n required: \"Email Type is required\"\n },\n};\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-user-form',\n templateUrl: './email-subscription-user-form.component.html',\n styleUrls: ['./email-subscription-user-form.component.scss']\n})\nexport class EmailSubscriptionUserFormComponent implements OnInit {\n\n updateMode: boolean;\n esUserFormGroup: FormGroup;\n esUserFormFirstAttempt: boolean;\n esUser: any;\n isSubmitLoading: boolean;\n selectedUser: any;\n selectedType: any;\n\n constructor(private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n public dialogRef: MatDialogRef<EmailSubscriptionUserFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private http: HttpService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.esUserFormGroup = this.fb.group({\n id: [''],\n user_id: ['', Validators.required],\n email_type_id: ['', Validators.required],\n });\n }\n\n\n ngOnInit() {\n if (this.data?.esUser?.id) {\n this.esUser = this.data.esUser;\n this.updateMode = true;\n this.selectedType = this.esUser?.email_type;\n this.selectedUser = this.esUser?.user;\n this.esUserFormGroup.patchValue(this.esUser);\n }\n\n }\n\n //Method to trigger login\n submit() {\n this.esUserFormGroup.markAllAsTouched();\n this.esUserFormFirstAttempt = true;\n if (this.esUserFormGroup.valid) {\n this.isSubmitLoading = true;\n const model = this.esUserFormGroup.value;\n (\n this.updateMode ?\n this.http.put(`api/email-subscription-users/${model?.id}`, model) :\n this.http.post(`api/email-subscription-users`, model)\n )\n .pipe(\n finalize(() => this.isSubmitLoading = false),\n untilDestroyed(this)\n ).subscribe(result => {\n this.alertService.addAlert(\"Subscription saved successfully\", \"success\");\n this.dialogRef.close(result);\n });\n }\n }\n\n\n cancel() {\n this.dialogRef.close();\n }\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.esUserFormGroup, this.esUserFormFirstAttempt);\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(field, this.esUserFormGroup, errorMessages);\n }\n\n ngOnDestroy() {\n // Needed for automatic unsubscribe with untilDestroyed\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserFormRoutingModule } from './email-subscription-user-form-routing.module';\nimport { EmailSubscriptionUserFormComponent } from './email-subscription-user-form.component';\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../../material.module';\nimport { LoaderModule } from '../../../loader/loader.module';\n\n\n@NgModule({\n declarations: [EmailSubscriptionUserFormComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n EmailSubscriptionUserFormRoutingModule,\n LoaderModule\n ],\n entryComponents: [EmailSubscriptionUserFormComponent]\n})\nexport class EmailSubscriptionUserFormModule { }\n","import { Component, OnInit, ViewChild } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\nimport { FormControl } from '@angular/forms';\nimport { MatSort } from '@angular/material/sort';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { EmailSubscriptionUserFormComponent } from '../email-subscription-user-form/email-subscription-user-form.component';\nimport { Router } from '@angular/router';\nimport { Logger } from '../../../core/logger.service';\nimport { PageEvent } from '../../../data-table/data-table.model';\nimport { HttpService } from '../../../core/http.service';\nimport { ActionPopupComponent } from '../../../action-popup/action-popup.component';\nimport { ActionPopup } from '../../../action-popup/action-popup.model';\n\nconst log = new Logger('EmailSubscriptionUser list');\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-user-list',\n templateUrl: './email-subscription-user-list.component.html',\n styleUrls: ['./email-subscription-user-list.component.scss']\n})\nexport class EmailSubscriptionUserListComponent implements OnInit {\n\n esUserList: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n };\n\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n displayColumns: FormControl = new FormControl(['index', 'user.name', 'email_type.title', 'creator.name', 'created_at', 'actions']);\n displayedColumns: any[] = [];\n availableDisplayColumns: any[] = [\n { order: 1, value: 'index', name: 'Index' },\n { order: 2, value: 'user.name', name: 'User' },\n { order: 3, value: 'email_type.title', name: 'Email Type' },\n { order: 4, value: 'creator.name', name: 'Creator' },\n { order: 5, value: 'actions', name: 'Actions' }\n ];\n\n constructor(\n private dialog: MatDialog,\n private http: HttpService,\n private router: Router,\n ) { }\n\n ngOnInit() {\n this.displayedColumns = this.displayColumns.value;\n this.initializeData();\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.changeSort(value);\n })\n }\n }\n\n get selectedColumns(): string[] {\n return this.availableDisplayColumns\n .filter(col => (this.displayColumns.value as any).some((x: any) => x === col.value))\n .sort((a, b) => (a.order > b.order) ? 1 : ((b.order > a.order) ? -1 : 0))\n .map(col => col.value);\n }\n\n columnsChange() {\n this.displayedColumns = this.selectedColumns;\n }\n\n\n initializeData() {\n this.http.get(`api/email-subscription-users`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.esUserList = this.esUserList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n filterChange(event: any) {\n this.filters = {\n ...this.filters,\n ...event\n };\n this.reload();\n }\n\n addEmailSubscriptionUser() {\n const dialogRef = this.dialog.open(EmailSubscriptionUserFormComponent, {\n width: '800px',\n autoFocus: false,\n data: {} // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n log.debug(result);\n this.reload();\n }\n });\n }\n\n\n editEmailSubscriptionUser(event: any, esUser: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(EmailSubscriptionUserFormComponent, {\n width: '800px',\n autoFocus: false,\n data: {\n esUser: esUser\n } // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n log.debug(result);\n this.reload();\n }\n });\n }\n\n deleteEmailSubscriptionUser(event: any, esUser: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: '400px',\n data: <ActionPopup>{\n title: 'Delete Subscription',\n message: `Are you sure to proceed delete the esUser ${esUser.name}?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n //Action confirmed\n this.http.delete(`api/email-subscription-users/${esUser?.id}`)\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.esUserList = this.esUserList.filter(x => x.id !== esUser.id);\n });\n }\n });\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n changeSort(event: any) {\n if (event.direction) {\n this.filters.sort_by = `${event.active}|${event.direction}`;\n this.reload();\n }\n }\n\n reload() {\n this.esUserList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../../../core/authentication.guard';\nimport { EmailSubscriptionUserListComponent } from './email-subscription-user-list.component';\n\nexport const esulr = {\n title: 'Email Subscription Users',\n permissions: {\n only: ['app_admin'],\n redirectTo: '/'\n }\n};\n\nconst routes: Routes = [\n {\n path: '',\n component: EmailSubscriptionUserListComponent,\n canActivate: [AuthenticationGuard],\n data: esulr\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserListRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionUserListFilterRoutingModule { }\n","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-user-list-filter',\n templateUrl: './email-subscription-user-list-filter.component.html',\n styleUrls: ['./email-subscription-user-list-filter.component.scss']\n})\nexport class EmailSubscriptionUserListFilterComponent implements OnInit {\n\n esUserFilterForm: FormGroup;\n\n @Output() valueChange = new EventEmitter();\n\n constructor(private fb: FormBuilder) {\n this.createForm();\n }\n\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.esUserFilterForm = this.fb.group({\n user_id: [''],\n email_type_id: [''],\n });\n }\n\n ngOnInit(): void {\n\n this.esUserFilterForm.valueChanges.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => {\n this.valueChange.emit(value);\n })\n }\n\n\n resetFieldValue(field: string) {\n this.esUserFilterForm.get(field).setValue('');\n }\n\n getFieldValue(field: string) {\n return this.esUserFilterForm.get(field).value;\n }\n\n\n ngOnDestroy() {\n\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserListFilterRoutingModule } from './email-subscription-user-list-filter-routing.module';\nimport { EmailSubscriptionUserListFilterComponent } from './email-subscription-user-list-filter.component';\nimport { MaterialModule } from '../../../material.module';\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [EmailSubscriptionUserListFilterComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n EmailSubscriptionUserListFilterRoutingModule\n ],\n exports: [EmailSubscriptionUserListFilterComponent]\n})\nexport class EmailSubscriptionUserListFilterModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionUserListRoutingModule } from './email-subscription-user-list-routing.module';\nimport { EmailSubscriptionUserListComponent } from './email-subscription-user-list.component';\nimport { EmailSubscriptionUserListFilterModule } from '../email-subscription-user-list-filter/email-subscription-user-list-filter.module';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { EmailSubscriptionUserFormModule } from '../email-subscription-user-form/email-subscription-user-form.module';\nimport { MaterialModule } from '../../../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [EmailSubscriptionUserListComponent],\n imports: [\n CommonModule,\n InfiniteScrollModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n EmailSubscriptionUserListRoutingModule,\n EmailSubscriptionUserFormModule,\n EmailSubscriptionUserListFilterModule\n ],\n exports: [EmailSubscriptionUserListComponent]\n})\nexport class EmailSubscriptionUserListModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\n\nexport class EmailSubscriptionTypeRoutingModule { }","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionTypeRoutingModule } from './email-subscription-type-routing.module';\n\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n EmailSubscriptionTypeRoutingModule\n ]\n})\nexport class EmailSubscriptionTypeModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionTypeFormRoutingModule { }\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { finalize } from 'rxjs/operators';\nimport { AlertService } from '../../../core/alert.service';\nimport { FormValidatorService } from '../../../core/form-validator.service';\nimport { HttpService } from '../../../core/http.service';\n\nconst errorMessages: any = {\n title: {\n required: \"Title is required\"\n },\n code: {\n required: \"Code is required\"\n },\n frequency_id: {\n required: \"Frequency is required\"\n },\n};\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-type-form',\n templateUrl: './email-subscription-type-form.component.html',\n styleUrls: ['./email-subscription-type-form.component.scss']\n})\nexport class EmailSubscriptionTypeFormComponent implements OnInit {\n\n updateMode: boolean;\n emailSubscriptionTypeFormGroup: FormGroup;\n emailSubscriptionTypeFormFirstAttempt: boolean;\n emailSubscriptionType: any;\n selectedFrequency: any;\n isLoading: boolean;\n isSubmitLoading: boolean;\n\n constructor(private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n public dialogRef: MatDialogRef<EmailSubscriptionTypeFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private http: HttpService\n ) {\n this.createForm();\n }\n\n /** Method to create a form **/\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.emailSubscriptionTypeFormGroup = this.fb.group({\n id: [''],\n title: ['', Validators.compose([Validators.required])],\n code: ['', Validators.compose([Validators.required])],\n frequency_id: ['', Validators.required],\n description: [''],\n });\n }\n\n ngOnInit() {\n if (this.data.emailSubscriptionType?.id) {\n this.isLoading = true;\n this.emailSubscriptionType = this.data?.emailSubscriptionType;\n this.updateMode = true;\n this.selectedFrequency = this.emailSubscriptionType?.frequency || {};\n this.emailSubscriptionTypeFormGroup.patchValue(this.emailSubscriptionType);\n }\n }\n\n //Method to trigger login\n submit() {\n this.emailSubscriptionTypeFormGroup.markAllAsTouched();\n this.emailSubscriptionTypeFormFirstAttempt = true;\n if (this.emailSubscriptionTypeFormGroup.valid) {\n this.isSubmitLoading = true;\n const model = this.emailSubscriptionTypeFormGroup.value;\n (\n this.updateMode ?\n this.http.put(`api/email-subscription-types/${model?.id}`, model) :\n this.http.post(`api/email-subscription-types`, model)\n )\n .pipe(\n finalize(() => this.isSubmitLoading = false),\n untilDestroyed(this)\n ).subscribe(result => {\n this.alertService.addAlert(\"Email Type saved successfully\", \"success\");\n this.dialogRef.close(result);\n });\n }\n }\n\n\n cancel() {\n this.dialogRef.close();\n }\n\n\n /**Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.emailSubscriptionTypeFormGroup, this.emailSubscriptionTypeFormFirstAttempt);\n }\n\n /**Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(field, this.emailSubscriptionTypeFormGroup, errorMessages);\n }\n\n ngOnDestroy() {\n // Needed for automatic unsubscribe with untilDestroyed\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionTypeFormRoutingModule } from './email-subscription-type-form-routing.module';\nimport { EmailSubscriptionTypeFormComponent } from './email-subscription-type-form.component';\nimport { SearchableSelectorModule } from '../../../searchable-selector/searchable-selector.module';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../../material.module';\nimport { LoaderModule } from '../../../loader/loader.module';\n\n\n\n@NgModule({\n declarations: [EmailSubscriptionTypeFormComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n EmailSubscriptionTypeFormRoutingModule,\n LoaderModule\n ],\n exports: [EmailSubscriptionTypeFormComponent],\n entryComponents: [EmailSubscriptionTypeFormComponent]\n})\nexport class EmailSubscriptionTypeFormModule { }\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { FormControl } from '@angular/forms';\nimport { distinctUntilChanged, debounceTime } from 'rxjs/operators';\nimport { MatSort } from '@angular/material/sort';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { EmailSubscriptionTypeFormComponent } from '../email-subscription-type-form/email-subscription-type-form.component';\nimport { PageEvent } from '../../../data-table/data-table.model';\nimport { HttpService } from '../../../core/http.service';\nimport { ActionPopupComponent } from '../../../action-popup/action-popup.component';\nimport { ActionPopup } from '../../../action-popup/action-popup.model';\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-type-list',\n templateUrl: './email-subscription-type-list.component.html',\n styleUrls: ['./email-subscription-type-list.component.scss']\n})\nexport class EmailSubscriptionTypeListComponent implements OnInit {\n\n emailSubscriptionTypeList: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n isLoadRelations: true,\n relations: ['frequency']\n };\n search: FormControl = new FormControl('');\n\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n displayColumns: FormControl = new FormControl(['index', 'title', 'frequency.title', 'description', 'actions']);\n displayedColumns: any[] = [];\n availableDisplayColumns: any[] = [\n { order: 1, value: 'index', name: 'Index' },\n { order: 2, value: 'title', name: 'Title' },\n { order: 3, value: 'code', name: 'Code' },\n { order: 4, value: 'frequency.title', name: 'Frequency' },\n { order: 5, value: 'description', name: 'Description' },\n { order: 6, value: 'actions', name: 'Actions' }\n ];\n\n constructor(\n private dialog: MatDialog,\n private http: HttpService,\n ) { }\n\n ngOnInit() {\n this.displayedColumns = this.displayColumns.value;\n this.initializeData();\n this.search.valueChanges.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe(value => {\n this.filters.search = value;\n this.reload();\n });\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.changeSort(value);\n })\n }\n }\n\n get selectedColumns(): string[] {\n return this.availableDisplayColumns\n .filter(col => (this.displayColumns.value as any).some((x: any) => x === col.value))\n .sort((a, b) => (a.order > b.order) ? 1 : ((b.order > a.order) ? -1 : 0))\n .map(col => col.value);\n }\n\n columnsChange() {\n this.displayedColumns = this.selectedColumns;\n }\n\n\n initializeData() {\n this.http.get(`api/email-subscription-types`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.emailSubscriptionTypeList = this.emailSubscriptionTypeList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n addEmailSubscriptionType() {\n const dialogRef = this.dialog.open(EmailSubscriptionTypeFormComponent, {\n width: '400px',\n autoFocus: false,\n data: {} // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.reload();\n }\n });\n }\n\n\n editEmailSubscriptionType(event: any, emailSubscriptionType: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(EmailSubscriptionTypeFormComponent, {\n width: '400px',\n autoFocus: false,\n data: {\n emailSubscriptionType: emailSubscriptionType\n } // Any data passed here will be injected into the model\n });\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.reload();\n }\n });\n }\n\n deleteEmailSubscriptionType(event: any, emailSubscriptionType: any) {\n event.stopPropagation();\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: '400px',\n data: <ActionPopup>{\n title: 'Delete Email Type',\n message: `Are you sure to proceed delete the Email Type ${emailSubscriptionType.title}?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n //Action confirmed\n this.http.delete(`api/email-subscription-types/${emailSubscriptionType?.id}`)\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.emailSubscriptionTypeList = this.emailSubscriptionTypeList.filter(x => x.id !== emailSubscriptionType.id);\n });\n }\n });\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n changeSort(event: any) {\n if (event.direction) {\n this.filters.sort_by = `${event.active}|${event.direction}`;\n this.reload();\n }\n }\n\n reload() {\n this.emailSubscriptionTypeList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../../../core/authentication.guard';\n\nimport { EmailSubscriptionTypeListComponent } from './email-subscription-type-list.component';\n\nexport const estlr = {\n title: 'Email Subscription Type',\n permissions: {\n only: ['client_admin'],\n redirectTo: '/'\n }\n};\n\n\nconst routes: Routes = [\n {\n path: '',\n component: EmailSubscriptionTypeListComponent,\n canActivate: [AuthenticationGuard],\n data: estlr\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionTypeListRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionTypeListRoutingModule } from './email-subscription-type-list-routing.module';\nimport { EmailSubscriptionTypeListComponent } from './email-subscription-type-list.component';\nimport { EmailSubscriptionTypeFormModule } from '../email-subscription-type-form/email-subscription-type-form.module';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../../material.module';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [EmailSubscriptionTypeListComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n EmailSubscriptionTypeFormModule,\n EmailSubscriptionTypeListRoutingModule\n ],\n exports: [EmailSubscriptionTypeListComponent]\n})\nexport class EmailSubscriptionTypeListModule { }\n","import { Component, OnInit } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { HttpService } from '../../core/http.service';\nimport { PageEvent } from '../../data-table/data-table.model';\n\n@UntilDestroy()\n@Component({\n selector: 'app-email-subscription-for-user',\n templateUrl: './email-subscription-for-user.component.html',\n styleUrls: ['./email-subscription-for-user.component.scss']\n})\nexport class EmailSubscriptionForUserComponent implements OnInit {\n\n subscriptions: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n isLoadRelations: true,\n relations: 'frequency,currentUserSubscription'\n };\n\n constructor(\n private http: HttpService\n ) { }\n\n ngOnInit(): void {\n this.fetchSubscriptions();\n }\n\n fetchSubscriptions() {\n this.http.get(`api/email-subscription-types`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.subscriptions = this.subscriptions.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.fetchSubscriptions();\n }\n }\n\n subscribe(sub: any) {\n this.http.post(`api/email-subscription-for-user`, { email_type_id: sub?.id })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n sub.current_user_subscription = result?.item;\n });\n }\n\n unsubscribe(sub: any) {\n this.http.delete(`api/email-subscription-users/${sub?.current_user_subscription?.id}`)\n .pipe(untilDestroyed(this))\n .subscribe((_: any) => {\n sub.current_user_subscription = null;\n });\n }\n\n\n reload() {\n this.subscriptions = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.fetchSubscriptions();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../../core/authentication.guard';\nimport { EmailSubscriptionForUserComponent } from './email-subscription-for-user.component';\n\nexport const esfur = {\n permissions: {\n only: ['client_admin']\n }\n};\n\nconst routes: Routes = [\n {\n path: '',\n component: EmailSubscriptionForUserComponent,\n canActivate: [AuthenticationGuard],\n data: esfur\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class EmailSubscriptionForUserRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { EmailSubscriptionForUserRoutingModule } from './email-subscription-for-user-routing.module';\nimport { EmailSubscriptionForUserComponent } from './email-subscription-for-user.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [EmailSubscriptionForUserComponent],\n imports: [\n CommonModule,\n InfiniteScrollModule,\n MaterialModule,\n FlexLayoutModule,\n EmailSubscriptionForUserRoutingModule\n ],\n exports: [EmailSubscriptionForUserComponent]\n})\nexport class EmailSubscriptionForUserModule { }\n","import { Component, OnInit, Input } from \"@angular/core\";\n\n@Component({\n selector: \"app-read-more\",\n templateUrl: \"./read-more.component.html\",\n styleUrls: [\"./read-more.component.scss\"]\n})\nexport class ReadMoreComponent implements OnInit {\n @Input() text: string;\n @Input() maxLength: number = 100;\n currentText: string;\n hideToggle: boolean = true;\n\n isCollapsed: boolean = true;\n\n constructor() {}\n\n ngOnInit() {\n this.determineView();\n }\n\n toggleView() {\n this.isCollapsed = !this.isCollapsed;\n this.determineView();\n }\n\n determineView() {\n if (!this.text || this.text.length <= this.maxLength) {\n this.currentText = this.text;\n this.isCollapsed = false;\n this.hideToggle = true;\n return;\n }\n this.hideToggle = false;\n if (this.isCollapsed == true) {\n this.currentText = this.text.substring(0, this.maxLength) + \"...\";\n } else if (this.isCollapsed == false) {\n this.currentText = this.text;\n }\n }\n}\n","import { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from './../../material.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReadMoreComponent } from './read-more.component';\n\n@NgModule({\n declarations: [ReadMoreComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule\n ],\n exports: [\n ReadMoreComponent\n ]\n})\nexport class ReadMoreModule { }\n","import { HttpService } from '../core/http.service';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TechlifyUpdateService {\n\n constructor(private http: HttpService) { }\n\n getTechlifyUpdates(filters: any) {\n return this.http.get(`api/techlify-updates`, { params: filters }).toPromise();\n }\n\n createTechlifyUpdate(techlifyUpdate: any) {\n return this.http.post(`api/techlify-updates`, techlifyUpdate).toPromise();\n }\n\n updateTechlifyUpdate(techlifyUpdate: any) {\n return this.http.put(`api/techlify-updates/${techlifyUpdate.id}`, techlifyUpdate).toPromise();\n }\n\n deleteTechlifyUpdate(techlifyUpdateId: any) {\n return this.http.delete(`api/techlify-updates/${techlifyUpdateId}`).toPromise();\n }\n\n getTechlifyUpdate(techlifyUpdateId: any) {\n return this.http.get(`api/techlify-updates/${techlifyUpdateId}`).toPromise();\n }\n\n getNewUpdateForCurrentUser() {\n return this.http.get(`api/current-user-techlify-updates`).toPromise();\n }\n\n createUpdateViewRecord(techlifyUpdateView: any) {\n return this.http.post(`api/techlify-update-views`, techlifyUpdateView).toPromise();\n }\n\n updateCurrentUserUpdates() {\n return this.http.get(`api/techlify-updates/update-view`).toPromise();\n }\n}\n","import { AlertService } from \"../../core/alert.service\";\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { FormControl, Validators } from '@angular/forms';\nimport { Component, EventEmitter, Inject, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Editor, Toolbar } from 'ngx-editor';\n\nconst errorMessages: any = {\n title: {\n required: \"Title is required\",\n },\n released_on: {\n required: \"Released On is required\",\n },\n version: {\n required: \"Version is required\",\n },\n description: {\n required: \"Description is required\",\n },\n learn_more_link: {\n pattern: \"Please enter valid link\",\n }\n}\n\n@Component({\n selector: 'app-techlify-update-form',\n templateUrl: './techlify-update-form.component.html',\n styleUrls: ['./techlify-update-form.component.scss']\n})\nexport class TechlifyUpdateFormComponent implements OnInit {\n\n @Output() onSave = new EventEmitter<any>();\n techlifyUpdateForm: FormGroup;\n isUpdateMode: boolean = false;\n editor: Editor;\n toolbar: Toolbar = [\n ['bold', 'italic'],\n ['bullet_list'],\n ];\n\n constructor(\n public dialogRef: MatDialogRef<TechlifyUpdateFormComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private alertService: AlertService,\n private techlifyUpdateService: TechlifyUpdateService\n ) {\n this.createForm();\n }\n\n private createForm() {\n this.techlifyUpdateForm = this.fb.group({\n id: new FormControl(''),\n title: new FormControl('', Validators.required),\n description: new FormControl('', Validators.required),\n version: new FormControl('', Validators.required),\n released_on: new FormControl('', Validators.required),\n learn_more_link: new FormControl('', Validators.compose([Validators.pattern('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?')])),\n });\n if (this.data.techlifyUpdateDetails) {\n this.isUpdateMode = true;\n this.techlifyUpdateForm.patchValue(this.data.techlifyUpdateDetails);\n }\n }\n\n ngOnInit() {\n this.editor = new Editor();\n }\n\n async submit() {\n if (this.techlifyUpdateForm.valid) {\n let result;\n const model = this.techlifyUpdateForm.value;\n\n try {\n result = this.isUpdateMode ? await this.techlifyUpdateService.updateTechlifyUpdate(model)\n : await this.techlifyUpdateService.createTechlifyUpdate(model);\n this.alertService.addAlert(\n \"Techlify app update saved successfully\",\n \"success\"\n );\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n } finally {\n if (result) {\n this.dialogRef.close(result);\n }\n }\n }\n }\n\n resetFieldValue(field: string) {\n this.techlifyUpdateForm.get(field).setValue('');\n }\n\n getFieldValue(field: string) {\n return this.techlifyUpdateForm.get(field).value;\n }\n\n /** Method to evaluate form fields*/\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.techlifyUpdateForm, true);\n }\n /** Method to find error in form fields*/\n getErrorMessage(field: string) {\n return this.formValidatorService.getErrorMessage(field, this.techlifyUpdateForm, errorMessages);\n }\n\n}\n","import { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from './../../material.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyUpdateFormComponent } from './techlify-update-form.component';\nimport { NgxEditorModule } from 'ngx-editor';\n\n@NgModule({\n declarations: [TechlifyUpdateFormComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MaterialModule,\n FlexLayoutModule,\n NgxEditorModule,\n ],\n exports: [\n TechlifyUpdateFormComponent\n ],\n entryComponents: [\n TechlifyUpdateFormComponent\n ]\n})\nexport class TechlifyUpdateFormModule { }\n","import { UntilDestroy } from '@ngneat/until-destroy';\nimport { untilDestroyed } from '@ngneat/until-destroy';\nimport { ActionPopup } from './../../action-popup/action-popup.model';\nimport { ActionPopupComponent } from './../../action-popup/action-popup.component';\nimport { TechlifyUpdateFormComponent } from './../techlify-update-form/techlify-update-form.component';\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { FormControl, FormBuilder } from '@angular/forms';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AlertService } from '../../core/alert.service';\nimport { Component, OnInit } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\n@UntilDestroy()\n@Component({\n selector: 'app-techlify-updates-list',\n templateUrl: './techlify-updates-list.component.html',\n styleUrls: ['./techlify-updates-list.component.scss']\n})\nexport class TechlifyUpdatesListComponent implements OnInit {\n techlifyUpdates: any[] = [];\n displayedColumns: string[] = [\n 'index',\n 'title',\n 'version',\n 'released_on',\n 'learn_more_link',\n 'description',\n 'creator',\n 'actions'\n ];\n page: number = 1;\n lastPage: number;\n perPage: number = 25;\n isWorking: boolean = false;\n filterFormGroup: FormGroup;\n\n constructor(\n private dialog: MatDialog,\n private alertService: AlertService,\n private techlifyUpdateService: TechlifyUpdateService,\n private fb: FormBuilder,\n ) {\n this.filterFormGroup = this.fb.group({\n search: new FormControl(''),\n version: new FormControl(''),\n sort_by: new FormControl('released_on|DESC'),\n });\n }\n\n ngOnInit() {\n this.loadData();\n this.listenChanges();\n }\n\n listenChanges() {\n this.filterFormGroup.valueChanges.pipe(debounceTime(500), untilDestroyed(this))\n .subscribe(changes => {\n this.reload();\n });\n }\n\n ngOnDestroy() { }\n\n async loadData() {\n try {\n this.isWorking = true;\n var filters: any = this.filterFormGroup.value;\n filters.perPage = this.perPage;\n filters.page = this.page;\n let result: any = await this.techlifyUpdateService.getTechlifyUpdates(\n filters\n );\n this.lastPage = result.last_page || this.page;\n this.techlifyUpdates = this.techlifyUpdates.concat(result.data);\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n finally {\n this.isWorking = false;\n }\n }\n\n reload() {\n this.techlifyUpdates = [];\n this.page = 1;\n if (!this.isWorking) {\n this.loadData();\n }\n }\n\n onScroll() {\n if (!this.isWorking && this.page < this.lastPage) {\n this.page += 1;\n this.loadData();\n }\n }\n\n modifyTechlifyUpdate(model?: any) {\n const dialogRef = this.dialog.open(TechlifyUpdateFormComponent, {\n width: \"600px\",\n data: {\n techlifyUpdateDetails: model,\n }\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n this.reload();\n }\n });\n }\n\n async deleteTechlifyUpdate(model: any) {\n const dialogRef = this.dialog.open(ActionPopupComponent, {\n width: \"400px\",\n data: <ActionPopup>{\n title: \"Delete Update\",\n message: `Are you sure to delete this update?`\n },\n autoFocus: false\n });\n\n dialogRef.afterClosed().subscribe(async result => {\n if (result) {\n //Action confirmed\n try {\n await this.techlifyUpdateService.deleteTechlifyUpdate(model.id);\n this.alertService.addAlert(\n \"Successfully deleted the update\",\n \"success\"\n );\n this.reload();\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n }\n });\n }\n\n resetFieldValue(field: string) {\n this.filterFormGroup.get(field).setValue(\"\");\n }\n\n sortColumn(event) {\n var direction = event.direction.toString().toUpperCase();\n this.assignFilter(event.active, direction);\n }\n\n assignFilter(column, direction) {\n switch (column) {\n case 'title': {\n return this.filterFormGroup.get('sort_by').setValue(\"title|\" + direction);\n }\n case 'released_on': {\n return this.filterFormGroup.get('sort_by').setValue(\"released_on|\" + direction);\n }\n case 'version': {\n return this.filterFormGroup.get('sort_by').setValue(\"version|\" + direction);\n }\n default: {\n return this.filterFormGroup.get('sort_by').setValue(\"created_at|DESC\");\n }\n };\n }\n\n}\n","import { TechlifyUpdatesListComponent } from './techlify-updates-list/techlify-updates-list.component';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nconst routes: Routes = [\n { path: '', redirectTo: 'all', pathMatch: 'full' },\n { path: 'all', component: TechlifyUpdatesListComponent },\n\n //fallback\n {\n path: '**',\n redirectTo: 'all',\n pathMatch: 'full'\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class TechlifyUpdateRoutingModule { }\n","import { ReadMoreModule } from './read-more/read-more.module';\nimport { TechlifyUpdateFormModule } from './techlify-update-form/techlify-update-form.module';\nimport { TechlifyUpdateRoutingModule } from './techlify-update-routing.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyUpdatesListComponent } from './techlify-updates-list/techlify-updates-list.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupModule } from '../action-popup/action-popup.module';\n\n@NgModule({\n declarations: [TechlifyUpdatesListComponent],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n FlexLayoutModule,\n MaterialModule,\n ActionPopupModule,\n TechlifyUpdateRoutingModule,\n TechlifyUpdateFormModule,\n ReadMoreModule,\n ]\n})\nexport class TechlifyUpdateModule { }\n","import { Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-update-view',\n templateUrl: './update-view.component.html',\n styleUrls: ['./update-view.component.scss']\n})\nexport class UpdateViewComponent implements OnInit {\n techlifyUpdate: any;\n rootNavUrl: any;\n\n constructor(\n public dialogRef: MatDialogRef<UpdateViewComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private router: Router\n ) { }\n\n ngOnInit(): void {\n this.techlifyUpdate = this.data.techlifyUpdate;\n this.rootNavUrl = this.data.rootNavUrl;\n }\n\n close() {\n this.dialogRef.close();\n }\n\n openUpdateHistory(): void {\n this.close();\n this.router.navigate([this.rootNavUrl + \"/update-history\"]);\n }\n\n}\n","import { UntilDestroy } from '@ngneat/until-destroy';\nimport { untilDestroyed } from '@ngneat/until-destroy';\nimport { AlertService } from './../../core/alert.service';\nimport { UpdateViewComponent } from './../update-view/update-view.component';\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { FormControl, FormBuilder } from '@angular/forms';\nimport { FormGroup } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Component, OnInit } from '@angular/core';\nimport { debounceTime } from 'rxjs/operators';\n\n@UntilDestroy()\n@Component({\n selector: 'app-techlify-update-history',\n templateUrl: './techlify-update-history.component.html',\n styleUrls: ['./techlify-update-history.component.scss']\n})\nexport class TechlifyUpdateHistoryComponent implements OnInit {\n techlifyUpdates: any[] = [];\n displayedColumns: string[] = [\n 'index',\n 'title',\n 'version',\n 'released_on',\n 'learn_more_link',\n 'description',\n 'creator',\n 'actions'\n ];\n page: number = 1;\n lastPage: number;\n perPage: number = 25;\n isWorking: boolean = false;\n filterFormGroup: FormGroup;\n\n constructor(\n private dialog: MatDialog,\n private techlifyUpdateService: TechlifyUpdateService,\n private fb: FormBuilder,\n private alertService: AlertService\n ) {\n this.filterFormGroup = this.fb.group({\n search: new FormControl(''),\n version: new FormControl(''),\n sort_by: new FormControl('released_on|DESC'),\n });\n }\n\n ngOnInit() {\n this.loadData();\n this.listenChanges();\n this.updateCurrentUserUpdates();\n }\n\n listenChanges() {\n this.filterFormGroup.valueChanges.pipe(debounceTime(500), untilDestroyed(this))\n .subscribe(changes => {\n this.reload();\n });\n }\n\n ngOnDestroy() { }\n\n async loadData() {\n try {\n this.isWorking = true;\n var filters: any = this.filterFormGroup.value;\n filters.perPage = this.perPage;\n filters.page = this.page;\n let result: any = await this.techlifyUpdateService.getTechlifyUpdates(\n filters\n );\n this.lastPage = result.last_page || this.page;\n this.techlifyUpdates = this.techlifyUpdates.concat(result.data);\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n finally {\n this.isWorking = false;\n }\n }\n\n reload() {\n this.techlifyUpdates = [];\n this.page = 1;\n if (!this.isWorking) {\n this.loadData();\n }\n }\n\n onScroll() {\n if (!this.isWorking && this.page < this.lastPage) {\n this.page += 1;\n this.loadData();\n }\n }\n\n resetFieldValue(field: string) {\n this.filterFormGroup.get(field).setValue(\"\");\n }\n\n sortColumn(event) {\n var direction = event.direction.toString().toUpperCase();\n this.assignFilter(event.active, direction);\n }\n\n assignFilter(column, direction) {\n switch (column) {\n case 'title': {\n return this.filterFormGroup.get('sort_by').setValue(\"title|\" + direction);\n }\n case 'released_on': {\n return this.filterFormGroup.get('sort_by').setValue(\"released_on|\" + direction);\n }\n case 'version': {\n return this.filterFormGroup.get('sort_by').setValue(\"version|\" + direction);\n }\n default: {\n return this.filterFormGroup.get('sort_by').setValue(\"created_at|DESC\");\n }\n };\n }\n\n openUpdateView(techlifyUpdate: any): void {\n const dialogRef = this.dialog.open(UpdateViewComponent, {\n width: \"800px\",\n autoFocus: false,\n data: {\n techlifyUpdate: techlifyUpdate,\n isFromHistory: true,\n } // Any data passed here will be injected into the model\n });\n }\n\n async updateCurrentUserUpdates() {\n try {\n await this.techlifyUpdateService.updateCurrentUserUpdates();\n } catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n }\n}\n","import { TechlifyUpdateHistoryComponent } from './techlify-update-history.component';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nconst routes: Routes = [\n { path: '', redirectTo: 'update-history', pathMatch: 'full' },\n { path: 'update-history', component: TechlifyUpdateHistoryComponent },\n\n //fallback\n {\n path: '**',\n redirectTo: 'all',\n pathMatch: 'full'\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class TechlifyUpdateHistoryRoutingModule { }\n","import { ReactiveFormsModule } from '@angular/forms';\nimport { TechlifyUpdateHistoryRoutingModule } from './techlify-update-history-routing.module';\nimport { ReadMoreModule } from './../read-more/read-more.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyUpdateHistoryComponent } from './techlify-update-history.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { MaterialModule } from '../../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ActionPopupModule } from '../../action-popup/action-popup.module';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n InfiniteScrollModule,\n FlexLayoutModule,\n MaterialModule,\n ActionPopupModule,\n ReadMoreModule,\n TechlifyUpdateHistoryRoutingModule\n ],\n declarations: [TechlifyUpdateHistoryComponent]\n})\nexport class TechlifyUpdateHistoryModule { }\n","import { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from './../../material.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdateViewComponent } from './update-view.component';\n\n\n\n@NgModule({\n declarations: [UpdateViewComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule\n ],\n exports: [\n UpdateViewComponent\n ],\n entryComponents: [\n UpdateViewComponent\n ]\n})\nexport class UpdateViewModule { }\n","import { AlertService } from './../../../core/alert.service';\nimport { TechlifyUpdateService } from './../../techlify-update.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Component, EmbeddedViewRef, Inject, OnInit } from '@angular/core';\nimport { MatSnackBarRef, MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\nimport { UpdateViewComponent } from '../../update-view/update-view.component';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'app-update-notifier-snack',\n templateUrl: './update-notifier-snack.component.html',\n styleUrls: ['./update-notifier-snack.component.scss']\n})\nexport class UpdateNotifierSnackComponent implements OnInit {\n maxDescriptionLength: any = 70;\n descriptionText: any = '';\n techlifyUpdate: any;\n rootNavUrl: any;\n\n constructor(\n @Inject(MAT_SNACK_BAR_DATA) public data: any,\n private snackBarRef: MatSnackBarRef<EmbeddedViewRef<any>>,\n private dialog: MatDialog,\n private router: Router,\n private techlifyUpdateService: TechlifyUpdateService,\n private alertService: AlertService\n ) { }\n\n ngOnInit(): void {\n this.techlifyUpdate = this.data.techlifyUpdate;\n this.rootNavUrl = this.data.rootNavUrl;\n this.determineDescription(this.techlifyUpdate?.description)\n }\n\n close(): void {\n this.createUpdateViewRecord();\n this.snackBarRef.dismiss();\n }\n\n determineDescription(description: any) {\n if (!description || description.length <= this.maxDescriptionLength) {\n this.descriptionText = description;\n return;\n }\n this.descriptionText = description.substring(0, this.maxDescriptionLength) + \"...\";\n }\n\n openUpdateView(): void {\n this.close();\n const dialogRef = this.dialog.open(UpdateViewComponent, {\n width: \"800px\",\n autoFocus: false,\n data: {\n techlifyUpdate: this.techlifyUpdate,\n rootNavUrl: this.data.rootNavUrl\n } // Any data passed here will be injected into the model\n });\n }\n\n openUpdateHistory(): void {\n this.close();\n this.router.navigate([this.rootNavUrl + \"/update-history\"]);\n }\n\n async createUpdateViewRecord() {\n try {\n var techlifyUpdateView = {\n update_id: this.techlifyUpdate?.id\n };\n let result: any = await this.techlifyUpdateService.createUpdateViewRecord(techlifyUpdateView);\n }\n catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n }\n}\n","import { UpdateNotifierSnackComponent } from './update-notifier-snack/update-notifier-snack.component';\nimport { TechlifyUpdateService } from './../techlify-update.service';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { AlertService } from '../../core/alert.service';\n\n@Component({\n selector: 'app-update-notifier',\n templateUrl: './update-notifier.component.html',\n styleUrls: ['./update-notifier.component.scss']\n})\nexport class UpdateNotifierComponent implements OnInit {\n techlifyUpdate: any;\n @Input() rootNavUrl: string = '/techlify-updates';\n\n constructor(\n private snackBar: MatSnackBar,\n private techlifyUpdateService: TechlifyUpdateService,\n private alertService: AlertService\n ) { }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit(): void {\n setTimeout(x => {\n this.getNewUpdate();\n }, 5000);\n }\n\n async getNewUpdate() {\n try {\n let result: any = await this.techlifyUpdateService.getNewUpdateForCurrentUser();\n this.techlifyUpdate = result.item;\n if (this.techlifyUpdate) {\n this.showUpdate();\n }\n }\n catch (error) {\n this.alertService.addAlert(\"Unable to process, try later\", \"warn\");\n }\n }\n\n showUpdate() {\n this.snackBar.openFromComponent(UpdateNotifierSnackComponent, {\n data: {\n techlifyUpdate: this.techlifyUpdate,\n rootNavUrl: this.rootNavUrl\n },\n horizontalPosition: 'right',\n verticalPosition: 'top',\n panelClass: ['white-bg']\n });\n }\n\n}\n","import { ActionPopupModule } from './../../action-popup/action-popup.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from './../../material.module';\nimport { UpdateViewModule } from './../update-view/update-view.module';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UpdateNotifierComponent } from './update-notifier.component';\nimport { UpdateNotifierSnackComponent } from './update-notifier-snack/update-notifier-snack.component';\n\n\n@NgModule({\n declarations: [UpdateNotifierComponent, UpdateNotifierSnackComponent],\n imports: [\n CommonModule,\n MaterialModule,\n UpdateViewModule,\n FlexLayoutModule,\n ActionPopupModule\n ],\n exports: [\n UpdateNotifierComponent,\n ],\n entryComponents: [\n UpdateNotifierSnackComponent\n ]\n})\nexport class UpdateNotifierModule { }\n","import { Component, OnInit, Input } from '@angular/core';\nimport * as XLSX from 'xlsx';\n\n@Component({\n selector: 'app-export-excel-button',\n templateUrl: './export-excel-button.component.html',\n styleUrls: ['./export-excel-button.component.scss']\n})\nexport class ExportExcelButtonComponent implements OnInit {\n\n @Input() name: string = 'Export_Data';\n @Input() data: any[] = [];\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n exportExcel() {\n const fileName = `${this.name}_${new Date().getTime()}.xlsx`;\n const ws = XLSX.utils.json_to_sheet(this.data);\n /* generate workbook and add the worksheet */\n const wb: XLSX.WorkBook = XLSX.utils.book_new();\n XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');\n\n /* save to file */\n XLSX.writeFile(wb, fileName);\n }\n\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ExportExcelButtonComponent } from './export-excel-button/export-excel-button.component';\nimport { MaterialModule } from '../material.module';\n\n\n\n@NgModule({\n declarations: [ExportExcelButtonComponent],\n imports: [\n CommonModule,\n MaterialModule\n ],\n exports: [ExportExcelButtonComponent]\n})\nexport class ExportExcelModule { }\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { HttpService } from '../../core/http.service';\n\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-log-view',\n templateUrl: './audit-log-view-model.component.html',\n styleUrls: ['./audit-log-view-model.component.scss']\n})\nexport class AuditLogViewModelComponent implements OnInit {\n\n logInfo: any;\n showDeltaChanges: boolean = false;\n changeList: any[] = [];\n\n constructor(\n public dialogRef: MatDialogRef<AuditLogViewModelComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private http: HttpService\n ) { }\n\n ngOnInit(): void {\n if (this.data) {\n this.http.get(`api/recent-log-for-model`, {\n params: {\n model_type: this.data?.modelType,\n model_id: this.data?.modelId\n }\n }).pipe(\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.logInfo = result?.item;\n this.getTransformedChanges();\n });\n }\n }\n\n getTransformedChanges() {\n if (this.logInfo?.data?.changes) {\n const changes = Object.keys(this.logInfo?.data?.changes) || [];\n changes.forEach((key: any) => {\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\n this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: this.logInfo?.object[key] ?? '', oldValue: this.logInfo?.pre_object[key] ?? '' });\n });\n }\n }\n\n close() {\n this.dialogRef.close();\n }\n\n}\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { filter } from 'rxjs/operators';\nimport { AuditLogViewModelComponent } from '../audit-log-view-model/audit-log-view-model.component';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-logs-view-model',\n templateUrl: './audit-logs-view-model.component.html',\n styleUrls: ['./audit-logs-view-model.component.scss']\n})\nexport class AuditLogsViewModelComponent implements OnInit {\n\n constructor(\n public dialogRef: MatDialogRef<AuditLogViewModelComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private router: Router\n ) { }\n\n ngOnInit(): void {\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd), untilDestroyed(this))\n .subscribe(_ => this.dialogRef.close());\n }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AuditLogViewModelComponent } from '../audit-log-view-model/audit-log-view-model.component';\nimport { AuditLogsViewModelComponent } from '../audit-logs-view-model/audit-logs-view-model.component';\n\n\n@Component({\n selector: 'app-audit-log-for-model',\n templateUrl: './audit-log-for-model.component.html',\n styleUrls: ['./audit-log-for-model.component.scss']\n})\nexport class AuditLogForModelComponent implements OnInit {\n\n @Input() modelType: string;\n @Input() modelId: any;\n @Input() logView: 'recent' | 'all' = 'recent';\n\n constructor(\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n\n }\n\n getLogView() {\n const dialogRef = this.dialog.open(AuditLogViewModelComponent, {\n width: '800px',\n autoFocus: false,\n data: {\n modelType: this.modelType,\n modelId: this.modelId\n } // Any data passed here will be injected into the model\n });\n }\n\n getLogsView() {\n const dialogRef = this.dialog.open(AuditLogsViewModelComponent, {\n width: '95%',\n maxWidth: 'unset',\n autoFocus: false,\n data: {\n modelType: this.modelType,\n modelId: this.modelId\n } // Any data passed here will be injected into the model\n });\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogForModelRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogViewModelRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogViewModelRoutingModule } from './audit-log-view-model-routing.module';\nimport { AuditLogViewModelComponent } from './audit-log-view-model.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogViewModelComponent],\n imports: [\n CommonModule,\n AuditLogViewModelRoutingModule,\n FlexLayoutModule,\n MaterialModule\n ],\n exports: [AuditLogViewModelComponent]\n})\nexport class AuditLogViewModelModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogsViewModelRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogListRoutingModule { }\n","import { Component, OnInit, OnDestroy, Input, ViewChild } from '@angular/core';\n\n\nimport { Router } from '@angular/router';\nimport { MatSort } from '@angular/material/sort';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { PageEvent } from '../../data-table/data-table.model';\nimport { DataManager } from '../../core/dataManager.service';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-log-list',\n templateUrl: './audit-log-list.component.html',\n styleUrls: ['./audit-log-list.component.scss'],\n})\nexport class AuditLogListComponent implements OnInit, OnDestroy {\n\n auditLogList: any[] = [];\n @Input() objectId: any;\n @Input() objectType: any;\n @Input() showFilter: boolean = true;\n @Input() showExportButtons: boolean = true;\n @Input() userId: any;\n\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = { sort_by: 'created_at|desc' };\n displayedColumns: any[] = ['index', 'id', 'object_type', 'object_id', 'action', 'changes', 'created_at', 'user.email'];\n\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n constructor(\n private dataManager: DataManager,\n private router: Router,\n public sanitizer: DomSanitizer\n ) { }\n\n ngOnInit() {\n\n this.initializeData();\n\n if (this.sort) {\n this.sort.sortChange.pipe(untilDestroyed(this))\n .subscribe((value: any) => {\n this.changeSort(value);\n })\n }\n\n }\n\n get excelData(): any[] {\n if (this.auditLogList.length > 0) {\n return this.auditLogList.map(item => {\n return {\n 'Type': item?.object_type,\n 'Action': item?.action,\n 'Data': JSON.stringify(item?.data || {}),\n 'Object': JSON.stringify(item?.object || {}),\n 'Pre-Object': JSON.stringify(item?.pre_object || {}),\n 'Created At': new Date(item?.created_at).toDateString(),\n 'Created By': item?.user?.email\n };\n });\n }\n return [];\n }\n\n changeSort(event: any) {\n if (event.direction) {\n this.filters.sort_by = `${event.active}|${event.direction}`;\n this.reload();\n }\n }\n\n logClicked(log: any) {\n this.router.navigate(['/system/audit-logs/log-view', log.id]);\n }\n\n\n async initializeData() {\n if (this.objectType) {\n this.filters = { ...this.filters, object_type: this.objectType }\n }\n if (this.objectId) {\n this.filters = { ...this.filters, object_id: this.objectId }\n }\n if (this.userId) {\n this.filters = { ...this.filters, user_id: this.userId }\n }\n const result = await this.dataManager.GET(`api/audit-logs`, { ...this.filters, ...this.pageEvent });\n this.auditLogList = this.auditLogList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n }\n\n filterChange(event: any) {\n if (this.showFilter) {\n this.filters = {\n ...this.filters,\n ...event,\n object_type: this.objectType || event?.object_type || '',\n object_id: this.objectId || '',\n };\n this.reload();\n }\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n reload() {\n this.auditLogList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n getTransformedChanges(log: any) {\n if (log?.data?.changes) {\n const changes = Object.keys(log?.data?.changes) || [];\n let value = '<div>';\n changes.forEach((key: any) => {\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\n value = `${value} <div><b>${displayAttribute}:</b> <span id=\"old-value\">${log?.pre_object[key] ?? ''}</span><span id=\"new-value\">${log?.object[key] ?? ''}</span></div>`;\n });\n value = `${value} </div>`;\n return value;\n }\n return '';\n }\n\n ngOnDestroy() {\n // Needed for automatic unsubscribe with untilDestroyed\n }\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogListFilterRoutingModule { }\n","import { FormControl } from \"@angular/forms\";\n\nexport function DateValidator(): any {\n return (control: FormControl): { [key: string]: any } => {\n\n const val: any = new Date(control.value);\n if (!!control.value && val == 'Invalid Date') {\n return { invalidDate: true };\n }\n return null;\n };\n}","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { DateValidator } from '../../date-validator';\n\n@UntilDestroy()\n@Component({\n selector: 'app-audit-log-list-filter',\n templateUrl: './audit-log-list-filter.component.html',\n styleUrls: ['./audit-log-list-filter.component.scss']\n})\nexport class AuditLogListFilterComponent implements OnInit {\n\n auditLogFilterForm: FormGroup;\n\n @Input() objectId: any;\n @Input() objectType: any;\n\n @Output() valueChange = new EventEmitter();\n\n constructor(private fb: FormBuilder, private formValidatorService: FormValidatorService) {\n this.createForm();\n }\n\n get showObjectFilter() {\n return !(this.objectId || this.objectType);\n }\n\n private createForm() {\n\n //TODO: Finialize and add more validations.\n this.auditLogFilterForm = this.fb.group({\n object_type: [''],\n action: [''],\n data: [''],\n date_to: ['', DateValidator()],\n date_from: ['', DateValidator()]\n });\n }\n\n ngOnInit(): void {\n\n this.auditLogFilterForm.valueChanges.pipe(\n debounceTime(500),\n distinctUntilChanged(),\n untilDestroyed(this)\n ).subscribe((value: any) => {\n value.date_from = value.date_from ? (value.date_from as Date).toISOString() : '';\n value.date_to = value.date_to ? (value.date_to as Date).toISOString() : '';\n this.valueChange.emit(value);\n })\n }\n\n\n resetFieldValue(field: string) {\n this.auditLogFilterForm.get(field).setValue('');\n }\n\n getFieldValue(field: string) {\n return this.auditLogFilterForm.get(field).value;\n }\n\n isFieldValid(field: string) {\n return this.formValidatorService.isFieldValid(field, this.auditLogFilterForm, true);\n }\n\n\n ngOnDestroy() {\n\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogListFilterRoutingModule } from './audit-log-list-filter-routing.module';\nimport { AuditLogListFilterComponent } from './audit-log-list-filter.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../../material.module';\nimport { SearchableSelectorModule } from '../../searchable-selector/searchable-selector.module';\n\n\n@NgModule({\n declarations: [AuditLogListFilterComponent],\n imports: [\n CommonModule,\n AuditLogListFilterRoutingModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n MaterialModule,\n SearchableSelectorModule,\n ],\n exports: [AuditLogListFilterComponent]\n})\nexport class AuditLogListFilterModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogListRoutingModule } from './audit-log-list-routing.module';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { AuditLogListComponent } from './audit-log-list.component';\nimport { AuditLogListFilterModule } from '../audit-log-list-filter/audit-log-list-filter.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ExportExcelModule } from '../../export-excel/export-excel.module';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogListComponent],\n imports: [\n CommonModule,\n AuditLogListRoutingModule,\n ExportExcelModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n MaterialModule,\n InfiniteScrollModule,\n AuditLogListFilterModule\n ],\n exports: [AuditLogListComponent]\n})\nexport class AuditLogListModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogsViewModelRoutingModule } from './audit-logs-view-model-routing.module';\nimport { AuditLogsViewModelComponent } from './audit-logs-view-model.component';\nimport { AuditLogListModule } from '../audit-log-list/audit-log-list.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\n\n\n@NgModule({\n declarations: [AuditLogsViewModelComponent],\n imports: [\n CommonModule,\n AuditLogsViewModelRoutingModule,\n FlexLayoutModule,\n AuditLogListModule\n ],\n exports: [AuditLogsViewModelComponent]\n})\nexport class AuditLogsViewModelModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogForModelRoutingModule } from './audit-log-for-model-routing.module';\nimport { AuditLogForModelComponent } from './audit-log-for-model.component';\nimport { AuditLogViewModelModule } from '../audit-log-view-model/audit-log-view-model.module';\nimport { AuditLogsViewModelModule } from '../audit-logs-view-model/audit-logs-view-model.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogForModelComponent],\n imports: [\n AuditLogViewModelModule,\n AuditLogsViewModelModule,\n CommonModule,\n AuditLogForModelRoutingModule,\n FlexLayoutModule,\n MaterialModule,\n ],\n exports: [AuditLogForModelComponent]\n})\nexport class AuditLogForModelModule { }\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Location } from '@angular/common';\nimport * as jsondiffpatch from \"jsondiffpatch\"\nimport { DataManager } from '../../core/dataManager.service';\n\n@Component({\n selector: 'app-audit-log-view',\n templateUrl: './audit-log-view.component.html',\n styleUrls: ['./audit-log-view.component.scss']\n})\nexport class AuditLogViewComponent implements OnInit {\n\n logInfo: any;\n showDeltaChanges: boolean = false;\n changeList: any[] = [];\n\n constructor(\n private dataManager: DataManager,\n private route: ActivatedRoute,\n private location: Location\n ) { }\n\n ngOnInit(): void {\n this.route.paramMap.subscribe(params => {\n if (params.get('id')) {\n this.fetchLogDetail(params.get('id'));\n } else {\n this.location.back();\n }\n });\n }\n\n getTransformedChanges() {\n if (this.logInfo?.data?.changes) {\n const changes = Object.keys(this.logInfo?.data?.changes) || [];\n changes.forEach((key: any) => {\n const displayAttribute = (key as string).split('_').map(x => x.charAt(0).toUpperCase() + x.slice(1)).join(' ');\n this.changeList.push({ displayAttribute: displayAttribute, attribute: key, newValue: this.logInfo?.object[key] ?? '', oldValue: this.logInfo?.pre_object[key] ?? '' });\n });\n }\n }\n\n async fetchLogDetail(logId: any) {\n const result = await this.dataManager.GET(`api/audit-logs/${logId}`);\n this.logInfo = result.item;\n this.getTransformedChanges();\n this.patchDelta();\n }\n\n patchDelta() {\n const delta = jsondiffpatch.diff(this.logInfo?.pre_object, this.logInfo?.object);\n document.getElementById('jsondiff').innerHTML = jsondiffpatch.formatters.html.format(delta, this.logInfo?.pre_object);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogViewRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogViewRoutingModule } from './audit-log-view-routing.module';\nimport { AuditLogViewComponent } from './audit-log-view.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\n\n\n@NgModule({\n declarations: [AuditLogViewComponent],\n imports: [\n CommonModule,\n AuditLogViewRoutingModule,\n FlexLayoutModule,\n MaterialModule\n ],\n exports: [AuditLogViewComponent]\n})\nexport class AuditLogViewModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../core/authentication.guard';\nimport { AuditLogListComponent } from './audit-log-list/audit-log-list.component';\nimport { AuditLogViewComponent } from './audit-log-view/audit-log-view.component';\n\n\nconst routes: Routes = [\n { path: 'log-list', component: AuditLogListComponent, canActivate: [AuthenticationGuard] },\n { path: 'log-view/:id', component: AuditLogViewComponent, canActivate: [AuthenticationGuard] },\n { path: '**', redirectTo: 'log-list', pathMatch: 'full' }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class AuditLogRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AuditLogRoutingModule } from './audit-log-routing.module';\nimport { AuditLogListModule } from './audit-log-list/audit-log-list.module';\nimport { AuditLogViewModule } from './audit-log-view/audit-log-view.module';\n\n\n@NgModule({\n declarations: [\n ],\n imports: [\n CommonModule,\n AuditLogRoutingModule,\n AuditLogListModule,\n AuditLogViewModule\n ],\n exports: []\n})\nexport class AuditLogModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class ImportCsvRoutingModule { }\n","import { Component, Input, OnInit } from '@angular/core';\nimport * as XLSX from 'xlsx';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { ImportConfig } from './import-config';\nimport { Location } from '@angular/common';\nimport { FileDropperConfig } from '../file-dropper/file-dropper.model';\nimport { ViewerConfig } from '../document-viewer/viewer-config.model';\nimport { AlertService } from '../core/alert.service';\nimport { HttpService } from '../core/http.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-import-csv',\n templateUrl: './import-csv.component.html',\n styleUrls: ['./import-csv.component.scss']\n})\nexport class ImportCsvComponent implements OnInit {\n\n @Input() importConfig: ImportConfig;\n\n filesConfig: FileDropperConfig;\n filesList: any[] = [];\n viewerConfig: ViewerConfig;\n fileData: any[] = [];\n failedItems: any[] = [];\n selectedFields: any[] = [];\n\n constructor(\n private alertService: AlertService,\n private http: HttpService,\n private location: Location\n ) {\n this.filesConfig = {\n fileId: \"file\",\n containerId: \"fileContainer\",\n styles: {\n height: \"600px\"\n },\n acceptFile: '.csv',\n multiple: false,\n maxSize: 100,\n acceptFileText: \".csv\"\n };\n\n }\n\n ngOnInit() {\n }\n\n reset() {\n this.filesList = [];\n this.failedItems = [];\n this.selectedFields = [];\n this.fileData = [];\n }\n\n fileChanged(event: any) {\n this.filesList = event;\n\n let jsonData = null;\n const reader = new FileReader();\n const file = this.filesList[0];\n reader.onload = (event) => {\n const data = reader.result;\n const selectedFile = XLSX.read(data, { type: 'binary', cellDates: true });\n jsonData = selectedFile.SheetNames.reduce((initial, name) => {\n const sheet = selectedFile.Sheets[name];\n initial = XLSX.utils.sheet_to_json(sheet);\n return initial;\n }, []);\n this.fileData = jsonData;\n }\n reader.readAsBinaryString(file);\n return;\n }\n\n mappingProcessed(event: any) {\n this.selectedFields = event.fields;\n const tempFileData = JSON.parse(JSON.stringify(this.fileData));\n tempFileData.forEach((data: any) => {\n for (var key in data) {\n var field = event.fields.find((field: any) => field.label == key);\n if (field) {\n if ((field.propertyType == 'date' || field.propertyType == 'dateTime') && this.isValidDate(new Date(data[field.label]))) {\n data[field.property] = (new Date(data[field.label]) as Date).toISOString();\n }\n else {\n data[field.property] = data[field.label];\n }\n delete data[key];\n }\n else {\n delete data[key];\n }\n }\n });\n this.save(tempFileData);\n }\n\n save(tempFileData: any) {\n this.http.post(this.importConfig?.postUrl, { data: tempFileData })\n .pipe(\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.failedItems = result?.failed_items || [];\n if (this.failedItems.length === 0) {\n this.alertService.addAlert(\"File Import Success\", \"success\");\n this.location.back();\n }\n });\n }\n\n isValidDate(d: any) {\n return d instanceof Date && !isNaN(d.getTime());\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class ImportItemsRoutingModule { }\n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { FormValidatorService } from '../../core/form-validator.service';\nimport { ImportConfig } from '../import-config';\n\nconst errorMessages: any = {\n property: {\n required: \"Property is required\",\n unavailable: \"Duplicate entry\"\n },\n};\n\n@Component({\n selector: 'app-import-items',\n templateUrl: './import-items.component.html',\n styleUrls: ['./import-items.component.scss']\n})\nexport class ImportItemsComponent implements OnInit {\n importMappingForm: FormGroup;\n @Input() data: any[];\n @Input() importConfig: ImportConfig;\n firstDataArray: any[] = [];\n properties: any[] = [];\n @Output() onSave = new EventEmitter();\n\n constructor(\n private fb: FormBuilder,\n private formValidatorService: FormValidatorService,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.createImportMappingForm();\n }\n\n ngOnInit() {\n this.properties = this.importConfig.properties;\n this.mapOutDataColumns(this.data[0]);\n }\n\n createImportMappingForm() {\n this.importMappingForm = this.fb.group({\n fields: this.fb.array([]),\n });\n }\n\n get fieldsArray(): FormArray {\n return this.importMappingForm.get('fields') as FormArray;\n }\n\n createField(field: any): FormGroup {\n var fieldForm: FormGroup = this.fb.group({\n id: new FormControl(field.id),\n label: new FormControl(field.label),\n value: new FormControl(field.value),\n property: new FormControl(field.property,\n Validators.compose(\n [\n Validators.required\n ]\n )\n ),\n propertyType: new FormControl(field.propertyType)\n });\n return fieldForm;\n }\n\n mapOutDataColumns(data: any[]) {\n for (var key in data) {\n if (data.hasOwnProperty(key)) {\n var dataValue = {\n id: '',\n label: key,\n value: data[key],\n property: '',\n propertyType: ''\n };\n this.firstDataArray.push(dataValue);\n }\n }\n this.firstDataArray.forEach((element: any, mainIndex: any) => {\n element.id = mainIndex;\n this.properties.find((property: any) => {\n if (property.label.toLowerCase().includes(element.label.toLowerCase())) {\n element.property = property.value;\n element.propertyType = property.type;\n return element;\n }\n });\n });\n }\n\n submit() {\n this.importMappingForm.markAllAsTouched();\n if (!this.importMappingForm.valid) {\n return;\n }\n this.onSave.emit(this.importMappingForm.value);\n }\n\n /** Method to evaluate form fields*/\n isFieldValid(field: string, form: any) {\n return this.formValidatorService.isFieldValid(field, form);\n }\n\n /** Method to find error in form fields*/\n getErrorMessage(field: string, form: any) {\n return this.formValidatorService.getErrorMessage(field, form, errorMessages);\n }\n\n ngAfterViewInit(): void {\n //Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.\n //Add 'implements AfterViewInit' to the class.\n setTimeout((_: any) => {\n this.firstDataArray.forEach((element: any) => {\n this.fieldsArray.push(this.createField(element));\n });\n this.changeDetectorRef.detectChanges();\n }, 500);\n }\n\n updatePropertyType(event: any, index: any): void {\n var field = this.properties.find((field: any) => field.value == event.value);\n if (field) {\n this.fieldsArray.controls[index].get('propertyType').setValue(field.type);\n this.uniqueValidator();\n }\n }\n\n uniqueValidator() {\n this.fieldsArray.value.forEach((field: any, index: any) => {\n var control = this.fieldsArray.controls[index].get('property');\n const isNameUnique = this.fieldsArray.value.find((propertyData: any) =>\n propertyData.property === control.value\n && propertyData.id != this.fieldsArray.controls[index].get('id').value\n )\n ? false\n : true;\n if (!isNameUnique) {\n control.setErrors({ unavailable: true });\n }\n else {\n control.setErrors(null);\n }\n });\n }\n\n removeField(index: number) {\n if (index == -1) {\n return;\n }\n this.fieldsArray.removeAt(index);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ImportItemsRoutingModule } from './import-items-routing.module';\nimport { ImportItemsComponent } from './import-items.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MaterialModule } from '../../material.module';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n declarations: [ImportItemsComponent],\n imports: [\n CommonModule,\n FlexLayoutModule,\n MaterialModule,\n ReactiveFormsModule,\n ImportItemsRoutingModule\n ],\n exports: [ImportItemsComponent]\n})\nexport class ImportItemsModule { }\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nconst routes: Routes = [];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class FailedItemsRoutingModule { }\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-failed-items',\n templateUrl: './failed-items.component.html',\n styleUrls: ['./failed-items.component.scss']\n})\nexport class FailedItemsComponent implements OnInit {\n\n @Input() failedItems: any[];\n @Input() selectedFields: any[];\n constructor() { }\n\n ngOnInit() {\n }\n\n isValidDate(d: any): boolean {\n var date = new Date(d);\n return date instanceof Date && !isNaN(date.getTime());\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FailedItemsRoutingModule } from './failed-items-routing.module';\nimport { FailedItemsComponent } from './failed-items.component';\nimport { MaterialModule } from '../../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\n\n\n@NgModule({\n declarations: [FailedItemsComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n FailedItemsRoutingModule\n ],\n exports: [FailedItemsComponent]\n})\nexport class FailedItemsModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ImportCsvRoutingModule } from './import-csv-routing.module';\nimport { ImportCsvComponent } from './import-csv.component';\nimport { ImportItemsModule } from './import-items/import-items.module';\nimport { FailedItemsModule } from './failed-items/failed-items.module';\nimport { MaterialModule } from '../material.module';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { FileDropperModule } from '../file-dropper/file-dropper.module';\n\n\n@NgModule({\n declarations: [ImportCsvComponent],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n FileDropperModule,\n ImportCsvRoutingModule,\n ImportItemsModule,\n FailedItemsModule\n ],\n exports: [ImportCsvComponent]\n})\nexport class ImportCsvModule { }\n","export class ImportConfig {\n postUrl: string;\n properties: any[];\n importType: string;\n}","import { Component, Input, OnInit } from '@angular/core';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { PageEvent } from '../data-table/data-table.model';\nimport { HttpService } from '../core/http.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-login-history-for-user',\n templateUrl: './login-history-for-user.component.html',\n styleUrls: ['./login-history-for-user.component.scss']\n})\nexport class LoginHistoryForUserComponent implements OnInit {\n\n loginHistoryList: any[] = [];\n pageEvent: PageEvent = { page: 1, perPage: 25, lastPage: 1 };\n filters: any = {\n sort_by: 'created_at|desc',\n };\n historyFilterForm: FormGroup;\n displayedColumns: any[] = ['index', 'created_at'];\n @Input() userId: any;\n\n constructor(\n private http: HttpService,\n private fb: FormBuilder,\n ) {\n this.historyFilterForm = this.fb.group({\n 'date_from': [''],\n 'date_to': ['']\n });\n }\n\n ngOnInit() {\n this.filters.user_id = this.userId;\n this.historyFilterForm.valueChanges\n .pipe(debounceTime(500), distinctUntilChanged(), untilDestroyed(this))\n .subscribe((value: any) => {\n value.date_from = value.date_from ? (value.date_from as Date).toISOString() : '';\n value.date_to = value.date_to ? (value.date_to as Date).toISOString() : '';\n this.filterChange(value);\n });\n this.initializeData();\n }\n\n initializeData() {\n this.http.get(`api/user-login-history`, { params: { ...this.filters, ...this.pageEvent } })\n .pipe(untilDestroyed(this))\n .subscribe((result: any) => {\n this.loginHistoryList = this.loginHistoryList.concat(result.data);\n this.pageEvent.page = result.current_page;\n this.pageEvent.lastPage = result.last_page;\n });\n }\n\n filterChange(event: any) {\n this.filters = {\n ...this.filters,\n ...event\n };\n this.reload();\n }\n\n onScroll() {\n if (this.pageEvent.lastPage > this.pageEvent.page) {\n this.pageEvent.page += 1;\n this.initializeData();\n }\n }\n\n\n reload() {\n this.loginHistoryList = [];\n this.pageEvent = { page: 1, perPage: 25, lastPage: 1 };\n this.initializeData();\n }\n\n ngOnDestroy() {\n //Until destroyed uses it\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\nimport { AuthenticationGuard } from '../core/authentication.guard';\nimport { LoginHistoryForUserComponent } from './login-history-for-user.component';\n\nconst routes: Routes = [\n {\n path: '',\n component: LoginHistoryForUserComponent,\n canActivate: [AuthenticationGuard]\n },\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class LoginHistoryForUserRoutingModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { LoginHistoryForUserRoutingModule } from './login-history-for-user-routing.module';\nimport { LoginHistoryForUserComponent } from './login-history-for-user.component';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MaterialModule } from '../material.module';\nimport { TimelineFilterModule } from '../timeline-filter/timeline-filter.module';\n\n\n@NgModule({\n declarations: [LoginHistoryForUserComponent],\n imports: [\n CommonModule,\n LoginHistoryForUserRoutingModule,\n InfiniteScrollModule,\n MaterialModule,\n FlexLayoutModule,\n ReactiveFormsModule,\n TimelineFilterModule\n ],\n exports: [LoginHistoryForUserComponent]\n})\nexport class LoginHistoryForUserModule { }\n","import { COMMA, ENTER } from '@angular/cdk/keycodes';\n\nexport class TechlifyTaggerTagFormConfigModel {\n selectable: boolean;\n removable: boolean;\n separatorKeysCodes: number[];\n placeholder: string;\n apiUrl: string;\n isCreateable: boolean;\n createApiUrl: string;\n isCacheTags: boolean;\n isSingle: boolean;\n\n constructor() {\n this.selectable = true;\n this.removable = true;\n this.separatorKeysCodes = [ENTER, COMMA];\n this.placeholder = 'New Tag..';\n this.apiUrl = 'api/techlify-tagger-tags';\n this.createApiUrl = 'api/techlify-tagger-tags';\n this.isCreateable = true;\n this.isCacheTags = false;\n this.isSingle = false;\n }\n}","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ElementRef, ViewChild, OnInit, Input, OnDestroy, Inject, Optional, Self, OnChanges, SimpleChanges } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\nimport { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { HttpService } from '../core/http.service';\nimport { TechlifyTaggerTagFormConfigModel } from './techlify-tagger-tag-form-config.model';\n\n@UntilDestroy()\n@Component({\n selector: 'app-techlify-tagger-tag-form-field',\n templateUrl: './techlify-tagger-tag-form-field.component.html',\n styleUrls: ['./techlify-tagger-tag-form-field.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagFormFieldComponent }],\n})\nexport class TechlifyTaggerTagFormFieldComponent implements OnInit, ControlValueAccessor, MatFormFieldControl<any>, OnDestroy, OnChanges {\n\n static nextId = 0;\n stateChanges = new Subject<void>();\n focused = false;\n controlType = 'techlify-tagger-form-field';\n id = `techlify-tagger-form-field-${TechlifyTaggerTagFormFieldComponent.nextId++}`;\n\n onChange = (_: any) => { };\n onTouched = () => { };\n\n tagInputCtrl = new FormControl();\n filterString: any;\n @ViewChild('tagInput') tagInput: ElementRef<HTMLInputElement>;\n\n /**Pass the configuration for Techlify Tagger */\n @Input() config: TechlifyTaggerTagFormConfigModel = new TechlifyTaggerTagFormConfigModel();\n /**Pass the Model Type for Techlify Tagger, Required */\n @Input() modelType!: string;\n /**Pass the Model ID for Techlify Tagger */\n @Input() modelId: string;\n\n /**Pass the default list of tags */\n private _allTags: any[] = [];\n @Input()\n get allTags() {\n return this._allTags;\n }\n set allTags(value) {\n this._allTags = value;\n }\n\n /**Pass the Categories to filter for a model */\n @Input() categories: string[] = [];\n /**Pass default category to be used for assigning the tags, when we filter by more than one category */\n @Input() defaultCreateCategory: string;\n\n get tags() {\n return this.allTags.filter(x => this.value.some(y => y == x.id));\n }\n\n //Default Getter and Setters for a Form Field Implementation\n get empty() {\n return this.value.length == 0;\n }\n\n get shouldLabelFloat() {\n return this.focused || !this.empty || this.tagInputCtrl.value;\n }\n\n @Input()\n get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled ? this.tagInputCtrl.disable() : this.tagInputCtrl.enable();\n this.stateChanges.next();\n }\n private _disabled = false;\n\n\n private _value: any[] = [];\n @Input()\n get value(): any[] {\n return this._value;\n }\n set value(tagIds: any[]) {\n this._value = tagIds || [];\n this.stateChanges.next();\n }\n\n get errorState(): boolean {\n return this.tagInputCtrl.dirty && this.required && (this.value.length == 0);\n }\n\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n private _placeholder: string;\n\n\n ngOnInit(): void {\n\n }\n\n ngOnChanges(changes: SimpleChanges) {\n\n //API to load all tags for the model type\n if (this.allTags.length == 0) {\n this.httpService\n .cache(!this.config.isCacheTags)\n .get(this.config.apiUrl, {\n params: {\n categories: this.categories.join(','),\n perPage: '1000'\n }\n }).pipe(\n debounceTime(500),\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.allTags = result.data;\n });\n }\n\n //API to load only the selected tags for the model\n if (this.modelId && this.value.length == 0) {\n //Model Id is passed and no tags are present, so we query db for the avilable tags for the model ID.\n this.httpService\n .cache(!this.config.isCacheTags)\n .get(this.config.apiUrl, {\n params: {\n categories: this.categories.join(','),\n model_type: this.modelType,\n model_id: this.modelId,\n perPage: '1000'\n }\n }).pipe(\n debounceTime(500),\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.value = (result?.data || []).map((x: any) => x.id);\n this._handleInput();\n });\n }\n }\n\n init() {\n if (this.modelId && this.allTags.length == 0) {\n //Model Id is passed and no tags are passed, so we query db for the avilable tags for the model ID.\n this.httpService\n .cache(!this.config.isCacheTags)\n .get(this.config.apiUrl, {\n params: {\n categories: this.categories.join(','),\n model_type: this.modelType,\n model_id: this.modelId\n }\n }).pipe(\n untilDestroyed(this)\n ).subscribe((result: any) => {\n this.allTags = result.data;\n });\n }\n }\n\n get filteredTags(): any[] {\n return this._filter();\n }\n\n constructor(\n private _focusMonitor: FocusMonitor,\n private _elementRef: ElementRef<HTMLElement>,\n private httpService: HttpService,\n @Optional() @Inject(MAT_FORM_FIELD) public _formField: MatFormField,\n @Optional() @Self() public ngControl: NgControl) {\n\n this.tagInputCtrl.valueChanges\n .subscribe(filterValue => {\n this.filterString = filterValue;\n });\n\n //Set Focus Monitor\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\n if (this.focused && !origin) {\n this.onTouched();\n }\n this.focused = !!origin;\n this.stateChanges.next();\n });\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n setDescribedByIds(ids: string[]) {\n // Just a empty implementation for Mat Form Field Interface\n }\n\n onContainerClick() {\n // Just a empty implementation for Mat Form Field Interface\n }\n\n\n async add(event: MatChipInputEvent) {\n const value = (event.value || '').trim();\n // Add our tag\n // Validate for single mode\n if (!this.config.isSingle || (this.value.length === 0)) {\n if (value && this.config.isCreateable) {\n const tags = this.allTags;\n let tag = tags.find((item: any) => item.title.toLowerCase() == value.toLowerCase());\n if (!tag) {\n //No tag present in the list\n try {\n const result: any = await this.httpService.post(this.config.createApiUrl, {\n title: value,\n description: value,\n category_title: (this.categories.length > 0) ? (this.defaultCreateCategory ? this.defaultCreateCategory : this.categories[0]) : ''\n }).toPromise();\n tag = result.item;\n } catch (error) {\n return;\n }\n this.allTags.push(tag);\n } else {\n //Optionally clean the existing value, to avoid duplicate\n this.remove(tag);\n }\n this.value.push(tag.id);\n this._handleInput();\n }\n }\n\n // Clear the input value\n event.input.value = '';\n\n this.tagInputCtrl.setValue(null);\n }\n\n remove(tag: any): void {\n this.value = this.value.filter(x => x !== tag.id);\n this._handleInput();\n }\n\n selected(event: MatAutocompleteSelectedEvent): void {\n // Validate for single mode\n if (!this.config.isSingle || (this.value.length === 0)) {\n //Clean the existing value, to avoid duplicate\n this.remove({ id: event.option.value });\n this.value.push(event.option.value);\n this._handleInput();\n }\n this.tagInput.nativeElement.value = '';\n this.tagInputCtrl.setValue(null);\n }\n\n private _filter(): any[] {\n const filterValue = this.filterString ? this.filterString.toString().toLowerCase() : null;\n const availableTags = this.allTags.filter((tag: any) => !this.value.some((item: any) => item == tag.id));\n return filterValue ? availableTags.filter((tag: any) => tag.title.toLowerCase().includes(filterValue)) : availableTags;\n }\n\n writeValue(tagIds: any[]): void {\n this.value = tagIds || [];\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n _handleInput(): void {\n this.onChange(this.value);\n }\n\n static ngAcceptInputType_disabled: BooleanInput;\n static ngAcceptInputType_required: BooleanInput;\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyTaggerTagFormFieldComponent } from './techlify-tagger-tag-form-field.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MaterialModule } from '../material.module';\n\n\n\n@NgModule({\n declarations: [\n TechlifyTaggerTagFormFieldComponent\n ],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n MatAutocompleteModule,\n ReactiveFormsModule\n ],\n exports: [TechlifyTaggerTagFormFieldComponent]\n})\nexport class TechlifyTaggerTagFormFieldModule { }\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, ElementRef, OnInit, Input, OnDestroy, Inject, Optional, Self } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\nimport { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { HttpService } from '../core/http.service';\n\n@UntilDestroy()\n@Component({\n selector: 'app-techlify-tagger-tag-selector',\n templateUrl: './techlify-tagger-tag-selector.component.html',\n styleUrls: ['./techlify-tagger-tag-selector.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: TechlifyTaggerTagSelectorComponent }],\n})\nexport class TechlifyTaggerTagSelectorComponent implements OnInit, ControlValueAccessor, MatFormFieldControl<any>, OnDestroy {\n\n /**Pass the Categories to filter for a model */\n @Input() categories: string[] = [];\n @Input() multiple: boolean = false;\n @Input() enableSearch: boolean = true;\n tagSelectorCtrl = new FormControl();\n @Input() showAllTags: boolean = false;\n @Input() useSelectButtonStyle: boolean = false;\n\n tags: any[] = [];\n\n static nextId = 0;\n stateChanges = new Subject<void>();\n focused = false;\n controlType = 'techlify-tagger-selector';\n id = `techlify-tagger-selector-${TechlifyTaggerTagSelectorComponent.nextId++}`;\n\n onChange = (_: any) => { };\n onTouched = () => { };\n\n get apiUrl() {\n if (this.showAllTags) {\n return 'api/techlify-tagger-tags'\n }\n else if (this.categories?.length > 0) {\n return 'api/techlify-tagger-tags?categories=' + this.categories.join(',');\n }\n else {\n return '';\n }\n }\n\n //Default Getter and Setters for a Form Field Implementation\n get empty() {\n return this.value.length == 0;\n }\n\n get shouldLabelFloat() {\n return this.focused || !this.empty;\n }\n\n @Input()\n get required(): boolean {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _required = false;\n\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n this._disabled ? this.tagSelectorCtrl.disable() : this.tagSelectorCtrl.enable();\n this.stateChanges.next();\n }\n private _disabled = false;\n\n\n private _value: any;\n @Input()\n get value(): any {\n return this._value;\n }\n set value(val: any) {\n this._value = val;\n this.tagSelectorCtrl.setValue(val);\n this.stateChanges.next();\n }\n\n get errorState(): boolean {\n return this.tagSelectorCtrl.dirty && this.required && (this.value.length == 0);\n }\n\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n set placeholder(value: string) {\n this._placeholder = value;\n this.stateChanges.next();\n }\n private _placeholder: string;\n\n\n ngOnInit(): void {\n if (this.useSelectButtonStyle) {\n this.httpService.get(this.apiUrl)\n .pipe(untilDestroyed(this))\n .subscribe((res: any) => {\n this.tags = res.data;\n })\n }\n }\n\n selectionChange(value: any) {\n this.value = value;\n this._handleInput();\n }\n\n constructor(\n private _focusMonitor: FocusMonitor,\n private _elementRef: ElementRef<HTMLElement>,\n private httpService: HttpService,\n @Optional() @Inject(MAT_FORM_FIELD) public _formField: MatFormField,\n @Optional() @Self() public ngControl: NgControl) {\n\n //Set Focus Monitor\n _focusMonitor.monitor(_elementRef, true).subscribe(origin => {\n if (this.focused && !origin) {\n this.onTouched();\n }\n this.focused = !!origin;\n this.stateChanges.next();\n });\n\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n setDescribedByIds(ids: string[]) {\n // Just a empty implementation for Mat Form Field Interface\n }\n\n onContainerClick() {\n // Just a empty implementation for Mat Form Field Interface\n }\n\n writeValue(val: any): void {\n this.value = val;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n _handleInput(): void {\n this.onChange(this.value);\n }\n\n static ngAcceptInputType_disabled: BooleanInput;\n static ngAcceptInputType_required: BooleanInput;\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TechlifyTaggerTagSelectorComponent } from './techlify-tagger-tag-selector.component';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MaterialModule } from '../material.module';\nimport { SearchableSelectorModule } from '../searchable-selector/searchable-selector.module';\n\n\n\n@NgModule({\n declarations: [\n TechlifyTaggerTagSelectorComponent\n ],\n imports: [\n CommonModule,\n MaterialModule,\n FlexLayoutModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n SearchableSelectorModule,\n MatButtonToggleModule\n ],\n exports: [TechlifyTaggerTagSelectorComponent]\n})\nexport class TechlifyTaggerTagSelectorModule { }\n"]}