@indigina/kendo 1.0.134-beta → 1.0.149-beta

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.
Files changed (45) hide show
  1. package/bundles/indigina-kendo.umd.js +2848 -2589
  2. package/bundles/indigina-kendo.umd.js.map +1 -1
  3. package/bundles/indigina-kendo.umd.min.js +2 -2
  4. package/bundles/indigina-kendo.umd.min.js.map +1 -1
  5. package/esm2015/indigina-kendo.js +2 -1
  6. package/esm2015/lib/angular/indigina.module.js +24 -14
  7. package/esm2015/lib/angular/models/AppSettings.js +1 -1
  8. package/esm2015/lib/angular/services/http.service.js +7 -6
  9. package/esm2015/lib/angular/services/settings.service.js +8 -1
  10. package/esm2015/lib/components/azure-login-callback/azure-login-callback.component.js +35 -0
  11. package/esm2015/lib/config/msal-instance.factory.js +27 -0
  12. package/esm2015/lib/interceptors/auth-headers.interceptor.js +32 -0
  13. package/esm2015/lib/kendo.module.js +44 -24
  14. package/esm2015/lib/models/AuthProviders.js +6 -0
  15. package/esm2015/lib/models/AzureB2CSettings.js +2 -0
  16. package/esm2015/lib/models/SystemInfo.js +2 -0
  17. package/esm2015/lib/services/account.service.js +9 -9
  18. package/esm2015/lib/services/auth-provider.resolver.js +48 -0
  19. package/esm2015/lib/services/auth.providers/AuthProvider.js +3 -0
  20. package/esm2015/lib/services/auth.providers/azureb2c.provider.js +44 -0
  21. package/esm2015/lib/services/auth.providers/oauth.provider.js +40 -0
  22. package/esm2015/lib/services/base.account.service.js +67 -66
  23. package/esm2015/public-api.js +52 -47
  24. package/fesm2015/indigina-kendo.js +2513 -2275
  25. package/fesm2015/indigina-kendo.js.map +1 -1
  26. package/indigina-kendo.d.ts +1 -0
  27. package/indigina-kendo.metadata.json +1 -1
  28. package/lib/angular/indigina.module.d.ts +1 -1
  29. package/lib/angular/models/AppSettings.d.ts +4 -0
  30. package/lib/angular/services/http.service.d.ts +3 -3
  31. package/lib/angular/services/settings.service.d.ts +2 -0
  32. package/lib/components/azure-login-callback/azure-login-callback.component.d.ts +11 -0
  33. package/lib/config/msal-instance.factory.d.ts +3 -0
  34. package/lib/interceptors/auth-headers.interceptor.d.ts +8 -0
  35. package/lib/models/AuthProviders.d.ts +4 -0
  36. package/lib/models/AzureB2CSettings.d.ts +5 -0
  37. package/lib/models/SystemInfo.d.ts +3 -0
  38. package/lib/services/account.service.d.ts +5 -5
  39. package/lib/services/auth-provider.resolver.d.ts +12 -0
  40. package/lib/services/auth.providers/AuthProvider.d.ts +8 -0
  41. package/lib/services/auth.providers/azureb2c.provider.d.ts +14 -0
  42. package/lib/services/auth.providers/oauth.provider.d.ts +15 -0
  43. package/lib/services/base.account.service.d.ts +5 -5
  44. package/package.json +3 -1
  45. package/public-api.d.ts +68 -61
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../projects/kendo/src/lib/widgets/footer-bar/footer-bar.component.ts","../../../projects/kendo/src/lib/models/MemberTypes.ts","../../../projects/kendo/src/lib/models/PermissionTypes.ts","../../../projects/kendo/src/lib/models/FieldTypes.ts","../../../projects/kendo/src/lib/models/FilterTargets.ts","../../../projects/kendo/src/lib/models/Operators.ts","../../../projects/kendo/src/lib/widgets/top-bar/top-bar.component.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/kendo/src/lib/angular/models/AppSettings.ts","../../../projects/kendo/src/lib/angular/services/toastr.service.ts","../../../projects/kendo/src/lib/angular/services/settings.service.ts","../../../projects/kendo/src/lib/angular/models/HttpCodes.ts","../../../projects/kendo/src/lib/angular/services/http.service.ts","../../../projects/kendo/src/lib/services/endpoints.ts","../../../projects/kendo/src/lib/services/signalr/EventNames.ts","../../../projects/kendo/src/lib/services/signalr/signalr.service.ts","../../../projects/kendo/src/lib/services/base.account.service.ts","../../../projects/kendo/src/lib/services/account.service.ts","../../../projects/kendo/src/lib/services/entity.service.ts","../../../projects/kendo/src/lib/services/permissions.service.ts","../../../projects/kendo/src/lib/widgets/activity-filter/FilterConverter.ts","../../../projects/kendo/src/lib/widgets/entity-list/UrlSerializer.ts","../../../projects/kendo/src/lib/services/activity.filter.service.ts","../../../projects/kendo/src/lib/components/account-menu/account-menu.component.ts","../../../projects/kendo/src/lib/angular/services/locale-settings.service.ts","../../../projects/kendo/src/lib/components/language-selector/language-selector.component.ts","../../../projects/kendo/src/lib/widgets/multicheck-filter/multicheck-filter.component.ts","../../../projects/kendo/src/lib/widgets/entity-edit/entity-edit.component.ts","../../../projects/kendo/src/lib/angular/forms/extensions/FormGroupWithErrors.ts","../../../projects/kendo/src/lib/widgets/entity-edit/entity-edit-form.component.ts","../../../projects/kendo/src/lib/widgets/entity-edit/buttons-bar/buttons-bar.component.ts","../../../projects/kendo/src/lib/angular/forms/widgets/field/field.component.ts","../../../projects/kendo/src/lib/widgets/entity-edit/field-dropdown/field-dropdown.component.ts","../../../projects/kendo/src/lib/widgets/entity-edit/field-multiselect/field-multiselect.component.ts","../../../projects/kendo/src/lib/widgets/entity-list/entity-list.component.ts","../../../projects/kendo/src/lib/widgets/entity-list/field-dropdownlist/field-dropdownlist.component.ts","../../../projects/kendo/src/lib/widgets/confirm-dialog/confirm-dialog.component.ts","../../../projects/kendo/src/lib/widgets/excel-export-button/excel-export-button.component.ts","../../../projects/kendo/src/lib/widgets/activity-filter/activity-filter.component.ts","../../../projects/kendo/src/lib/widgets/current-timezone/current-timezone.component.ts","../../../projects/kendo/src/lib/widgets/modal-window/modal-window.component.ts","../../../projects/kendo/src/lib/directives/requirePermission.directive.ts","../../../projects/kendo/src/lib/angular/widgets/side-menu/side-menu.component.ts","../../../projects/kendo/src/lib/angular/widgets/side-menu/menu-item-group/menu-item-group.component.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/models/ContentTypesFormat.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/AbstractContentResolver.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/models/TreeViewNodeTypes.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/models/TreeViewPropTypes.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Converters/EnumTypeGetter.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Converters/JsonConverter.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Resolvers/JsonResolver.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Converters/TextConverter.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Resolvers/TextResolver.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Converters/XmlConverter.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Resolvers/XmlResolver.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/ContentResolver.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/tree-view.component.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/tree-view-node/tree-view-node.component.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/tree-view-node-prop/tree-view-node-prop.component.ts","../../../projects/kendo/src/lib/angular/forms/directives/debounce.directive.ts","../../../projects/kendo/src/lib/angular/forms/widgets/general-errors/general-errors.component.ts","../../../projects/kendo/src/lib/angular/forms/widgets/field/field-input/field-input.component.ts","../../../projects/kendo/src/lib/angular/models/IndiginaConfiguration.ts","../../../projects/kendo/src/lib/angular/forms/widgets/field/field-input/number-input.component.ts","../../../projects/kendo/src/lib/angular/indigina.module.ts","../../../projects/kendo/src/lib/angular/widgets/live-updates-control/live-updates-control.component.ts","../../../projects/kendo/src/lib/kendo.module.ts","../../../projects/kendo/src/lib/angular/extensions/ReEntrySubscription.ts","../../../projects/kendo/src/public-api.ts","../../../projects/kendo/src/lib/angular/models/HttpMethods.ts"],"names":["Component","args","selector","template","MemberTypes","PermissionTypes","FieldTypes","FilterTargets","Operators","TopMenuComponent","prototype","toggleButtonClick","document","body","classList","toggle","Input","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","pop","length","push","__values","o","s","m","i","__read","r","ar","error","__spread","arguments","concat","Injectable","providedIn","AppToastrService","toastr","appSettings","timeout","toastrTimeOut","showError","message","title","timeOut","showSuccess","success","ToastrService","AppSettings","HttpCodes","callbackPathKey","loginAsKey","SettingsService","putCurrentCallbackPath","putCallbackPath","window","location","pathname","hash","pathUri","getCallbackPath","localStorage","setItem","getItem","clearCallbackPath","removeItem","setLoginAsUser","id","getLoginAsUser","clearLoginAsUser","HttpService","appToastrService","httpClient","translate","router","settingsService","get","path","_this","createUrl","pipe","catchError","err","handleServerError","delete","tap","showSuccessMessage","post","data","successTranslateMessage","put","apiUrl","ErrorEvent","of","status","Unauthorized","instant","Forbidden","navigate","NotFound","setTimeout","href","InternalServerError","throwError","HttpClient","TranslateService","Router","endpoints","signalr","eventsHub","oidc","config","members","me","admins","assign","buildEntityEndpoints","roles","system","info","firstUser","partners","permissions","all","type","member","mine","users","apiTokens","guidFormat","name","query","state","toODataString","utcDates","replace","entityPath","EventNames","SignalRService","isConnectionEstablished","eventEmitters","createConnection","token","hubConnection","signalR","HubConnectionBuilder","withUrl","accessTokenFactory","configureLogging","_a","signalRLogLevel","LogLevel","None","build","onclose","undefined","startConnection","start","keys","forEach","eventName","on","model","emit","catch","console","warn","reconnect","stop","EventEmitter","adminUriPart","BaseAccountService","oauthService","httpService","signalRService","user","BehaviorSubject","userHasLoggedIn","hasValidAccessToken","subscribe","oidcResponse","authConfig","issuer","redirectUri","origin","clientId","scope","postLogoutRedirectUri","silentRefreshRedirectUri","configure","UserUpdated","getAccessToken","login","initLoginFlow","logout","logOut","getCurrentUser","getValue","map","tokenValidationHandler","JwksValidationHandler","setupAutomaticSilentRefresh","loadDiscoveryDocument","tryLoginImplicitFlow","isAdmin","startsWith","AccountService","_super","OAuthService","EntityService","getPage","save","PermissionsService","accountService","loaded","PermissionsUpdated","getPermissionsFromServer","getAll","memberType","getMine","FilterConverter","toGridState","filter","DateFilterFieldName","gridState","logic","filters","mainFilter","skip","take","group","sort","field","dir","dateFrom","operator","gte","dateTo","lte","customFilters","x","filterTarget","Grid","values","multiselectFilter_1","urlSerialize","object","serialized","key","serializedObject","isEmptyObject","JSON","stringify","slice","isDate","date","isNaN","Date","parse","urlDeserialize","params","deserialized","param","gridFilter","transformFilters","filterDescriptor","compositeFilterDescriptor","filterKey","ActivityFilterService","route","defaultFilter","switchToArchive","searchText","DateFilterStartFieldName","filterBehavior","gridStateBehavior","filter$","asObservable","gridState$","currentFilter","fragment","parsed","URLSearchParams","some","currentGridState","fillCurrentFilter","clearFilter","setTodayDates","reset","applyFilter","setFilter","stateNavigation","prepareFilterToSerialize","setToday","setGridState","_b","now","getFullYear","getMonth","getDate","relativeTo","Url","fillFromDescriptor","fillUrlFilter","val","index","findIndex","eq","setFieldFilter","ActivatedRoute","AccountMenuComponent","eref","expand","languageSelectorVisible","defineProperty","firstName","lastName","accountUrl","toogle","openLanguageSelector","event","stopPropagation","clickedOutside","nativeElement","contains","target","ElementRef","ViewChild","HostListener","languageKey","LocaleSettingsService","languages","code","init","addLangs","localeId","getLocale","setLocale","getLocales","locale","use","LanguageSelectorComponent","settings","visibleChange","currentLanguageCode","changeLanguage","close","visible","Output","MulticheckFilterComponent","valueChange","showFilter","valueField","ngAfterViewInit","currentData","traverseFilters","innerFilter","isItemSelected","item","ValueKey","onSelectionChange","selectedValue","filterService","onInput","distinct","dataItem","filterBy","EntityEditComponent","service","saved","form","getService","setForm","onSaved","FormGroupWithErrors","controls","validatorOrOpts","asyncValidator","generalErrors","getControl","addControl","FormControl","applyServerErrors","errors","ctrl","setErrors","serverErrorMsg","join","FormGroup","EntityEditFormComponent","saveInProgress","ngOnInit","formGroup","adapter","_c","finalize","FieldComponent","parent","defaultValue","disabled","disabledKey","setUp","fieldName","validators","attributes","attr","validator","setAttribute","control","setValidators","updateValueAndValidity","Validators","required","Directive","FormGroupDirective","FieldDropdownComponent","ngOnChanges","getData","setValue","find","viewProviders","provide","ControlContainer","useExisting","FieldMultiSelectComponent","nameField","EntityListComponent","filterChange","loadings","selected","gridFields","defaultFields","sortable","position","getAllData","bind","getRowClass","changes","firstChange","getFilteredData","fields","left","right","commands","restoreGridState","firstChild","removeHandler","dialog","open","remove","selectItem","onActivate","child","updateGrid","onDeactivate","unsubscribe","dataStateChange","onSearch","searchTerm","context","rowClass","getFilter","exists","page","indexOf","total","splice","preserveFragment","entity","onFilterChange","defaultGridState","defaultSort","static","FieldDropdownlistComponent","defaultItem","onLangChange","initialSelectedId","selectedItem","kendoDropDown","writeValue","onValueChange","initSelectedId","ConfirmDialogComponent","dialogService","cancel","callback","confirm","content","actions","dialogActions","DialogService","ActivityFilterComponent","showArchiveSwitcher","showSearhText","defaultNamedModel","customFilterElements","element","changeFilter","setTodayFilter","emitChangeEvents","setCustomFilters","fieldChange","change","fillFilter","fixMultiselectFilters","multiSelectFilters","fieldType","Multiselect","moment","momentModule","CurrentTimezoneComponent","timeZone","tz","guess","timeZoneAndOffset","format","ModalWindowComponent","opened","callbackPath","snapshot","hiddenClass","RequirePermissionDirective","elementRef","permissionsService","renderer","hide","category","permissionCategory","getRouteCategory","hasType","show","addClass","removeClass","types","isArray","permissionType","includes","routeData","permission","Renderer2","SideMenuComponent","logoClick","onLogoClick","collapse","itemComponent","activeItem","items","text","expanded","collapsed","ContentTypesFormat","MenuItemGroupComponent","isActive","url","exact","routerState","root","children","toString","routeConfig","split","setActualPath","events","NavigationEnd","setItemExpand","collapseChild","link","actualPath","TreeViewNodeTypes","TreeViewPropTypes","AbstractContentResolver","resolver","nextResolver","getPropTypeFromKey","objectBrackets","inside","outside","arrayBrackets","JsonConverter","convert","source","convertArray","convertObject","props","propType","propType_1","startTag","brackets","nodeType","nodes","getPrimitive","Primitive","JsonResolver","json","Json","TextConverter","TextResolver","Text","XmlConverter","childElementCount","childNodes","convertProp","tagName","textContent","endTag","childs","childs_1","childs_1_1","XmlResolver","oDOM","DOMParser","parseFromString","getElementsByTagName","Xml","ContentResolver","chain","TreeViewComponent","clipboardService","maxTextLength","maxRootItems","resolved","hasTextCollapse","hasNodeCollapse","rawView","contentResolver","allShow","hasCollapse","expandToggle","toggleExpandAll","treeViewNodes","collapseAll","expandAll","toggleRawView","copyToClipboard","copy","ClipboardService","ViewChildren","TreeViewNodeComponent","node","hasExpand","toggleExpand","treeViewProps","TreeViewNodePropComponent","isArrayValue","isObjectValue","prop","Number","DebounceDirective","debounceTime","debounceKeyup","keyUp","Subject","subscription","ngOnDestroy","keyUpEvent","preventDefault","GeneralErrorsComponent","_general_errors_","FieldInputComponent","maxLength","parseInt","NumberInputComponent","isPositive","ngAfterContentInit","valueChanges","cachedValue","defaultConfig","langs","getTranslation","IndiginaModule","forRoot","configuration","ngModule","providers","APP_INITIALIZER","useFactory","LocaleServiceSettingsFactory","multi","deps","IndiginaConfiguration","useValue","localeService","TranslateLoaderFactory","AppSettingsFactory","NgModule","declarations","imports","BrowserModule","HttpClientModule","TranslateModule","forChild","loader","TranslateLoader","LoadingBarHttpClientModule","CommonModule","RouterModule","ReactiveFormsModule","ToastrModule","BrowserAnimationsModule","ɵ0$1","TranslateStore","exports","ClipboardModule","LiveUpdatesControlComponent","resume","connected","pause","KendoModule","OAuthModuleConfig","resourceServer","allowedUrls","sendAccessToken","FooterBarComponent","EntityEditButtonsBarComponent","ExcelExportButtonComponent","OAuthModule","PopupModule","GridModule","ExcelModule","InputsModule","ButtonsModule","DialogsModule","FormsModule","WindowModule","DropDownsModule","TooltipModule","DateInputsModule","OAuthStorage","ɵ0","ReEntrySubscription","observable","action","closed","momentTimezone","search","uri","detailedActivity","partnerId"],"mappings":"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","sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'footer-bar',\n templateUrl: './footer-bar.component.html',\n styleUrls: ['./footer-bar.component.css'],\n})\nexport class FooterBarComponent {}\n","export enum MemberTypes {\n Admin = 'Admin',\n User = 'User'\n}\n","export enum PermissionTypes {\n Create = 'Create',\n Delete = 'Delete',\n Edit = 'Edit',\n View = 'View',\n Set = 'Set',\n}\n","export enum FieldTypes {\n Text,\n Checkbox,\n Dropdown,\n Multiselect,\n}\n","export enum FilterTargets {\n Url,\n Grid,\n}\n","export enum Operators {\n eq = 'eq',\n neq = 'neq',\n isnull = 'isnull',\n isnotnull = 'isnotnull',\n lt = 'lt',\n lte = 'lte',\n gt = 'gt',\n gte = 'gte',\n startswith = 'startswith',\n endswith = 'endswith',\n contains = 'contains',\n doesnotcontain = 'doesnotcontain',\n isempty = 'isempty',\n isnotempty = 'isnotempty',\n}\n","import { Component, Input } from '@angular/core';\nimport { Member } from '../../models/Member';\n\n@Component({\n selector: 'top-bar',\n templateUrl: './top-bar.component.html',\n styleUrls: ['./top-bar.component.css'],\n})\nexport class TopMenuComponent {\n @Input()\n currentUser: Member;\n\n public toggleButtonClick() {\n document.body.classList.toggle('mini-navbar');\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 { LogLevel } from '@microsoft/signalr';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport abstract class AppSettings {\n apiUrl: string;\n accountUrl: string;\n toastrTimeOut: number;\n signalRLogLevel?: LogLevel;\n}\n","import { Injectable } from '@angular/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { AppSettings } from '../models/AppSettings';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AppToastrService {\n constructor(\n private toastr: ToastrService,\n private appSettings: AppSettings\n ) {}\n\n private timeout = this.appSettings.toastrTimeOut;\n\n public showError(message: string, title: string = 'Error'): void {\n this.toastr.error(message, title, { timeOut: this.timeout });\n }\n\n public showSuccess(message: string, title: string = ''): void {\n this.toastr.success(message, title, { timeOut: this.timeout });\n }\n}\n","import { Injectable } from '@angular/core';\n\nconst callbackPathKey = 'callbackPath';\nconst homePath = '/home';\nconst loginAsKey = 'X-User-Id';\n\n@Injectable({ providedIn: 'root' })\nexport class SettingsService {\n public putCurrentCallbackPath() {\n this.putCallbackPath(window.location.pathname + window.location.hash);\n }\n\n public putCallbackPath(pathUri: string): void {\n if (!this.getCallbackPath() && pathUri !== homePath) {\n localStorage.setItem(callbackPathKey, pathUri);\n }\n }\n\n public getCallbackPath(): string {\n return localStorage.getItem(callbackPathKey);\n }\n\n public clearCallbackPath(): void {\n localStorage.removeItem(callbackPathKey);\n }\n\n public setLoginAsUser(id: string): void {\n localStorage.setItem(loginAsKey, id);\n }\n\n public getLoginAsUser(): string {\n return localStorage.getItem(loginAsKey);\n }\n\n public clearLoginAsUser(): void {\n localStorage.removeItem(loginAsKey);\n }\n}\n","export enum HttpCodes {\n BadRequest = 400,\n Forbidden = 403,\n InternalServerError = 500,\n NotFound = 404,\n OK = 200,\n Unauthorized = 401,\n}\n","import { HttpClient } from '@angular/common/http';\nimport { catchError, tap } from 'rxjs/operators';\nimport { of, Observable, throwError } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { AppToastrService } from './toastr.service';\nimport { Router } from '@angular/router';\nimport { SettingsService } from './settings.service';\nimport { CustomHttpErrorResponse } from '../models/CustomHttpErrorResponse';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AppSettings } from '../models/AppSettings';\nimport { HttpCodes } from '../models/HttpCodes';\n\n@Injectable({ providedIn: 'root' })\nexport class HttpService {\n constructor(\n private appToastrService: AppToastrService,\n private httpClient: HttpClient,\n private appSettings: AppSettings,\n private translate: TranslateService,\n private router: Router,\n private settingsService: SettingsService\n ) {}\n\n get<T>(path: string): Observable<T> {\n return this.httpClient\n .get<T>(this.createUrl(path))\n .pipe(\n catchError((err: CustomHttpErrorResponse) =>\n this.handleServerError(err)\n )\n );\n }\n\n delete(path: string): Observable<object> {\n return this.httpClient.delete(this.createUrl(path)).pipe(\n tap(() => this.showSuccessMessage('ToastrMessages.RemovedSuccessfully')),\n catchError((err: CustomHttpErrorResponse) => this.handleServerError(err))\n );\n }\n\n post<T>(\n path: string,\n data: T,\n successTranslateMessage: string = null\n ): Observable<T> {\n return this.httpClient.post<T>(this.createUrl(path), data).pipe(\n tap(() =>\n this.showSuccessMessage(\n successTranslateMessage ?? 'ToastrMessages.SavedSuccessfully'\n )\n ),\n catchError((err) => this.handleServerError(err))\n );\n }\n\n put<T>(\n path: string,\n data: T,\n successTranslateMessage: string = null\n ): Observable<T> {\n return this.httpClient.put<T>(this.createUrl(path), data).pipe(\n tap(() =>\n this.showSuccessMessage(\n successTranslateMessage ?? 'ToastrMessages.SavedSuccessfully'\n )\n ),\n catchError((err) => this.handleServerError(err))\n );\n }\n\n private createUrl(path: string): string {\n return this.appSettings.apiUrl + path;\n }\n\n private handleServerError(error: CustomHttpErrorResponse) {\n if (error.error instanceof ErrorEvent) {\n // A client-side or network error occurred. Handle it accordingly.\n this.appToastrService.showError(\n 'An error occurred: ' + error.error.message\n );\n\n return of(null);\n }\n\n if (error.status === HttpCodes.Unauthorized) {\n this.settingsService.putCurrentCallbackPath();\n this.appToastrService.showError(\n this.translate.instant('ToastrMessages.Unauthorized')\n );\n\n return of(null);\n }\n\n if (error.status === HttpCodes.Forbidden) {\n this.appToastrService.showError(\n this.translate.instant('ToastrMessages.Forbidden')\n );\n this.router.navigate(['forbidden']);\n\n return of(null);\n }\n\n if (error.status === HttpCodes.NotFound) {\n if (!!this.settingsService.getLoginAsUser()) {\n this.settingsService.clearLoginAsUser();\n this.appToastrService.showError(\n this.translate.instant('ToastrMessages.CanNotLoginAsUser')\n );\n setTimeout(() => {\n window.location.href = '/';\n }, 1000);\n }\n\n this.appToastrService.showError(\n this.translate.instant('ToastrMessages.NotFound')\n );\n\n return of(null);\n }\n\n if (error.status >= HttpCodes.InternalServerError) {\n this.appToastrService.showError(\n this.translate.instant('ToastrMessages.ServerError') + error.error.title\n );\n\n return of(null);\n }\n\n return throwError(error);\n }\n\n private showSuccessMessage(message: string) {\n this.appToastrService.showSuccess(this.translate.instant(message));\n }\n}\n","import { IEntityEndpoints } from './IEntityEndpoints';\nimport { State, toODataString } from '@progress/kendo-data-query';\nimport { MemberTypes } from '../models/MemberTypes';\nimport { IActivityEndpoints } from './IActivityEndpoints';\n\nexport const endpoints = {\n signalr: {\n eventsHub: 'EventsHub',\n },\n oidc: {\n config: 'oidc/config',\n },\n members: {\n me: 'members/me',\n },\n admins: {\n ...buildEntityEndpoints('admins'),\n roles: {\n ...buildEntityEndpoints('admins/roles'),\n },\n },\n system: {\n info: 'system/info',\n },\n firstUser: 'admins/first',\n partners: buildEntityEndpoints('partners'),\n permissions: {\n all: (type: MemberTypes) => `permissions/${type}s`,\n member: (id: string) => `permissions/${id}`,\n mine: 'permissions/me',\n },\n users: {\n ...buildEntityEndpoints('users'),\n roles: {\n ...buildEntityEndpoints('users/roles'),\n },\n },\n apiTokens: buildEntityEndpoints('apiTokens'),\n};\n\nconst guidFormat = /'((\\{){0,1}[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}(\\}){0,1})'/g;\nexport function buildEntityEndpoints(name: string): IEntityEndpoints {\n return {\n path: name,\n query: (state: State) =>\n `${name}?${toODataString(state, { utcDates: true }).replace(\n guidFormat,\n '$1'\n )}`,\n entityPath: (id: string) => `${name}/${id}`,\n };\n}\nexport function buildActivityEndpoints(name: string): IActivityEndpoints {\n return {\n query: (state: State) =>\n `activities/${name}?${toODataString(state, {\n utcDates: true,\n }).replace(guidFormat, '$1')}`,\n search: (state: State, searchTerm: string) => {\n let uri = `activities/${name}/search?${toODataString(state, {\n utcDates: true,\n })}`;\n if (searchTerm) {\n uri += `&searchTerm=${searchTerm}`;\n }\n\n return uri;\n },\n detailedActivity: (id: string, partnerId: string) =>\n partnerId\n ? `activities/${name}/${id}/${partnerId}`\n : `activities/${name}/${id}`,\n };\n}\n","export enum EventNames {\n UserUpdated = 'userUpdated',\n PermissionsUpdated = 'permissionsUpdated',\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport * as signalR from '@microsoft/signalr';\nimport { AppSettings } from '../../angular/models/AppSettings';\nimport { endpoints } from '../endpoints';\n\n@Injectable({ providedIn: 'root' })\nexport class SignalRService {\n protected isConnectionEstablished = false;\n protected hubConnection: signalR.HubConnection;\n private eventEmitters: { [eventName: string]: EventEmitter<any> } = {};\n\n constructor(private appSettings: AppSettings) {}\n\n private createConnection(token: string) {\n this.hubConnection = new signalR.HubConnectionBuilder()\n .withUrl(this.appSettings.apiUrl + endpoints.signalr.eventsHub, {\n accessTokenFactory: () => {\n return token;\n },\n })\n .configureLogging(\n this.appSettings.signalRLogLevel ?? signalR.LogLevel.None\n )\n .build();\n\n this.hubConnection.onclose((err?) => {\n if (err !== undefined) {\n this.isConnectionEstablished = false;\n this.startConnection(token);\n }\n });\n }\n\n public startConnection(token: string): void {\n if (!this.isConnectionEstablished) {\n this.createConnection(token);\n this.hubConnection\n .start()\n .then(() => {\n this.isConnectionEstablished = true;\n Object.keys(this.eventEmitters).forEach((eventName) => {\n this.hubConnection.on(eventName, (model) => {\n this.eventEmitters[eventName].emit(model);\n });\n });\n })\n .catch(() => {\n console.warn('Error while establishing connection, retrying...');\n setTimeout(() => this.startConnection(token), 5000);\n });\n }\n }\n\n public reconnect(token: string) {\n if (this.isConnectionEstablished) {\n this.hubConnection.stop().then(() => {\n this.isConnectionEstablished = false;\n this.startConnection(token);\n });\n }\n }\n\n public on<T>(eventName: string): EventEmitter<T> {\n if (!this.eventEmitters[eventName]) {\n this.eventEmitters[eventName] = new EventEmitter<T>();\n if (this.hubConnection) {\n this.hubConnection.on(eventName, (model) => {\n this.eventEmitters[eventName].emit(model);\n });\n }\n }\n\n return this.eventEmitters[eventName] as EventEmitter<T>;\n }\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { AuthConfig, OAuthService } from 'angular-oauth2-oidc';\nimport { OidcSettings } from '../models/OidcSettings';\nimport { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';\nimport { endpoints } from './endpoints';\nimport { HttpService } from '../angular/services/http.service';\nimport { SettingsService } from '../angular/services/settings.service';\nimport { SignalRService } from './signalr/signalr.service';\nimport { EventNames } from './signalr/EventNames';\nimport { map } from 'rxjs/operators';\n\nconst adminUriPart = '/admin/';\nconst homePath = '/home';\n\nexport abstract class BaseAccountService<T> {\n public user = new BehaviorSubject<T>(null);\n\n constructor(\n public oauthService: OAuthService,\n protected httpService: HttpService,\n protected settingsService: SettingsService,\n protected signalRService: SignalRService\n ) {\n this.httpService\n .get<OidcSettings>(endpoints.oidc.config)\n .subscribe((oidcResponse: OidcSettings) => {\n const authConfig: AuthConfig = {\n issuer: oidcResponse.issuer,\n redirectUri: window.location.origin + '/login/callback',\n clientId: oidcResponse.clientId,\n scope: 'openid profile offline_access',\n postLogoutRedirectUri: window.location.origin + homePath,\n silentRefreshRedirectUri:\n window.location.origin + '/silent-renew.html',\n };\n\n this.configure(authConfig);\n this.signalRService\n .on<T>(EventNames.UserUpdated)\n .subscribe(async () => {\n this.signalRService.reconnect(this.oauthService.getAccessToken());\n this.httpService\n .get<T>(endpoints.members.me)\n .subscribe((user) => this.user.next(user));\n });\n });\n }\n\n login() {\n this.oauthService.initLoginFlow();\n }\n\n logout() {\n this.settingsService.clearLoginAsUser();\n this.oauthService.logOut();\n }\n\n getCurrentUser(): Observable<T> {\n if (this.user.getValue() || !this.oauthService.hasValidAccessToken()) {\n return this.user;\n }\n\n return this.httpService.get(endpoints.members.me).pipe(\n map((user) => {\n this.user.next(user as T);\n\n return user as T;\n })\n );\n }\n\n private async configure(authConfig: AuthConfig) {\n this.oauthService.configure(authConfig);\n this.oauthService.tokenValidationHandler = new JwksValidationHandler();\n this.oauthService.setupAutomaticSilentRefresh();\n await this.oauthService.loadDiscoveryDocument(\n authConfig.issuer + '/identity/.well-known/openid-configuration'\n );\n this.oauthService.tryLoginImplicitFlow().then(async () => {\n if (!this.oauthService.hasValidAccessToken()) {\n return;\n }\n\n this.getCurrentUser().subscribe((user) => {\n if (!user) {\n return;\n }\n\n const path = this.settingsService.getCallbackPath();\n if (path) {\n this.settingsService.clearCallbackPath();\n window.location.href = window.location.origin + path;\n\n return;\n }\n\n if (\n this.isAdmin(user) &&\n !window.location.pathname.startsWith(adminUriPart)\n ) {\n window.location.href = `${window.location.origin}${adminUriPart}`;\n\n return;\n }\n\n const token = this.oauthService.getAccessToken();\n this.signalRService.startConnection(token);\n });\n });\n }\n\n public userHasLoggedIn = (): boolean =>\n this.oauthService.hasValidAccessToken();\n\n public abstract isAdmin(member: T): boolean;\n}\n","import { Injectable } from '@angular/core';\nimport { OAuthService } from 'angular-oauth2-oidc';\nimport { Member } from '../models/Member';\nimport { HttpService } from '../angular/services/http.service';\nimport { SettingsService } from '../angular/services/settings.service';\nimport { SignalRService } from './signalr/signalr.service';\nimport { BaseAccountService } from './base.account.service';\n\nconst adminKey = 'Admin';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccountService extends BaseAccountService<Member> {\n constructor(\n public oauthService: OAuthService,\n httpService: HttpService,\n settingsService: SettingsService,\n signalRService: SignalRService\n ) {\n super(oauthService, httpService, settingsService, signalRService);\n }\n\n public isAdmin = (member: Member): boolean =>\n member?.type === adminKey ?? false;\n}\n","import { IEntityService } from './IEntityService';\nimport { Page } from '../models/Page';\nimport { IEntityEndpoints } from './IEntityEndpoints';\nimport { Observable } from 'rxjs';\nimport { State } from '@progress/kendo-data-query/dist/npm/state';\nimport { IdentifiedModel } from '../angular/models/IdentifiedModel';\nimport { HttpService } from '../angular/services/http.service';\n\nexport abstract class EntityService<T extends IdentifiedModel>\n implements IEntityService<T>\n{\n constructor(\n protected httpService: HttpService,\n protected endpoints: IEntityEndpoints\n ) {}\n\n getPage(state: State): Observable<Page<T>> {\n return this.httpService.get<Page<T>>(this.endpoints.query(state));\n }\n\n get(id: string): Observable<T> {\n return this.httpService.get<T>(this.endpoints.entityPath(id));\n }\n\n delete(id: string): Observable<object> {\n return this.httpService.delete(this.endpoints.entityPath(id));\n }\n\n save(model: T): Observable<T> {\n if (model.id) {\n return this.httpService.put(this.endpoints.entityPath(model.id), model);\n }\n\n return this.httpService.post(this.endpoints.path, model);\n }\n}\n","import { endpoints } from './endpoints';\nimport { Injectable } from '@angular/core';\nimport { AccountService } from './account.service';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { MemberTypes } from '../models/MemberTypes';\nimport { Permissions } from './../models/Permissions';\nimport { HttpService } from '../angular/services/http.service';\nimport { SignalRService } from './signalr/signalr.service';\nimport { EventNames } from './signalr/EventNames';\nimport { map } from 'rxjs/operators';\n\n@Injectable()\nexport class PermissionsService {\n private loaded = false;\n public mine = new BehaviorSubject<Permissions>({});\n\n constructor(\n private httpService: HttpService,\n private accountService: AccountService,\n private signalRService: SignalRService\n ) {\n this.accountService.user.subscribe(async (user) => {\n if (!user) {\n this.mine.next({});\n\n return;\n }\n\n this.httpService\n .get<Permissions>(endpoints.permissions.mine)\n .subscribe((permissions) => {\n this.mine.next(permissions);\n this.loaded = true;\n this.signalRService\n .on<string>(EventNames.PermissionsUpdated)\n .subscribe(() => {\n this.getPermissionsFromServer();\n });\n });\n });\n }\n\n public getAll(memberType: MemberTypes): Observable<Permissions> {\n return this.httpService.get<Permissions>(\n endpoints.permissions.all(memberType)\n );\n }\n\n public getMine(): Observable<Permissions> {\n if (this.loaded) {\n return this.mine;\n }\n\n return this.getPermissionsFromServer();\n }\n\n private getPermissionsFromServer(): Observable<Permissions> {\n return this.httpService.get<Permissions>(endpoints.permissions.mine).pipe(\n map((permissions) => {\n this.mine.next(permissions);\n\n return permissions;\n })\n );\n }\n}\n","import { State, CompositeFilterDescriptor } from '@progress/kendo-data-query';\nimport { ActivityFilter } from '../../models/ActivityFilter';\nimport { FilterTargets } from '../../models/FilterTargets';\nimport { Operators } from '../../models/Operators';\nexport class FilterConverter {\n public static toGridState(\n filter: ActivityFilter,\n DateFilterFieldName: string\n ): State {\n const gridState: State = {\n filter: {\n logic: 'and',\n filters: [],\n },\n };\n const mainFilter: CompositeFilterDescriptor = {\n logic: 'and',\n filters: [],\n };\n gridState.skip = filter.skip;\n gridState.take = filter.take;\n if (filter.group) {\n gridState.group = filter.group;\n }\n\n if (filter.sort) {\n gridState.sort = filter.sort;\n } else {\n gridState.sort = [{ field: DateFilterFieldName, dir: 'desc' }];\n }\n\n if (filter.dateFrom) {\n mainFilter.filters.push({\n operator: Operators.gte,\n field: DateFilterFieldName,\n value: filter.dateFrom,\n });\n }\n\n if (filter.dateTo) {\n mainFilter.filters.push({\n operator: Operators.lte,\n field: DateFilterFieldName,\n value: filter.dateTo,\n });\n }\n\n filter.customFilters?.forEach((x) => {\n if (x.filterTarget === FilterTargets.Grid) {\n if (x.values && x.values.length) {\n const multiselectFilter: CompositeFilterDescriptor = {\n logic: 'or',\n filters: [],\n };\n x.values.forEach((value) => {\n multiselectFilter.filters.push({\n operator: x.operator,\n field: x.field,\n value,\n });\n });\n\n gridState.filter.filters.push(multiselectFilter);\n } else {\n if (x.value !== null && typeof x.value !== 'undefined') {\n mainFilter.filters.push({\n operator: x.operator,\n field: x.field,\n value: x.value,\n });\n }\n }\n }\n });\n\n if (mainFilter.filters.length) {\n if (gridState.filter.filters.length) {\n gridState.filter.filters.push(mainFilter);\n } else {\n gridState.filter.filters = mainFilter.filters;\n }\n }\n\n return gridState;\n }\n}\n","import {\n CompositeFilterDescriptor,\n FilterDescriptor,\n} from '@progress/kendo-data-query';\n\nexport const urlSerialize = (object: object): string => {\n let serialized = '';\n Object.keys(object).forEach((key) => {\n if (typeof object[key] === 'object') {\n const serializedObject = !isEmptyObject(object[key])\n ? JSON.stringify(object[key])\n : '';\n serialized += serializedObject ? `${key}=${serializedObject}&` : '';\n } else {\n serialized +=\n object[key] || object[key] === 0 ? `${key}=${object[key]}&` : '';\n }\n });\n\n return serialized.slice(0, -1);\n};\n\nconst isEmptyObject = (object: object): boolean => {\n return object === null || Object.keys(object).length === 0;\n};\n\nconst isDate = (date) => isNaN(date) && !isNaN(Date.parse(date));\n\nexport const urlDeserialize = (params: URLSearchParams) => {\n const deserialized = {};\n params.forEach((param, key) => {\n if (key === 'sort' || key === 'group') {\n deserialized[key] = JSON.parse(param);\n } else if (key === 'filter') {\n deserialized[key] = transformFilter(JSON.parse(param));\n } else {\n deserialized[key] = param;\n }\n });\n\n return deserialized;\n};\n\nfunction transformFilter(\n gridFilter: CompositeFilterDescriptor\n): CompositeFilterDescriptor {\n transformFilters(gridFilter);\n\n return gridFilter;\n}\n\nfunction transformFilters(gridFilter: CompositeFilterDescriptor) {\n if (gridFilter.filters.length) {\n gridFilter.filters.forEach(\n (filter: CompositeFilterDescriptor | FilterDescriptor) => {\n let filterDescriptor = filter as FilterDescriptor;\n filterDescriptor.value = isDate(filterDescriptor.value)\n ? new Date(filterDescriptor.value)\n : filterDescriptor.value;\n\n let compositeFilterDescriptor = filter as CompositeFilterDescriptor;\n if (compositeFilterDescriptor.filters) {\n transformFilters(compositeFilterDescriptor);\n }\n }\n );\n }\n}\n","import { FilterConverter } from '../widgets/activity-filter/FilterConverter';\nimport {\n urlDeserialize,\n urlSerialize,\n} from '../widgets/entity-list/UrlSerializer';\nimport { BehaviorSubject } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport {\n CompositeFilterDescriptor,\n FilterDescriptor,\n State,\n} from '@progress/kendo-data-query';\nimport { ActivityFilter } from '../models/ActivityFilter';\nimport { FilterTargets } from '../models/FilterTargets';\nimport { Operators } from '../models/Operators';\nimport { CustomFilter } from '../models/CustomFilter';\n\nconst filterKey = 'filter';\nconst filtersKey = 'filters';\nconst dateToKey = 'dateTo';\nconst dateFromKey = 'dateFrom';\nconst customFiltersKey = 'customFilters';\nconst nullKey = 'null';\n\n@Injectable()\nexport class ActivityFilterService {\n public currentFilter: ActivityFilter;\n public currentGridState: State;\n\n private readonly defaultFilter: ActivityFilter = {\n dateTo: null,\n dateFrom: null,\n switchToArchive: false,\n searchText: '',\n skip: 0,\n take: 10,\n };\n\n protected DateFilterStartFieldName = 'start';\n protected filterBehavior = new BehaviorSubject<ActivityFilter>(\n this.defaultFilter\n );\n protected gridStateBehavior = new BehaviorSubject<State>(\n FilterConverter.toGridState(\n this.defaultFilter,\n this.DateFilterStartFieldName\n )\n );\n\n public filter$ = this.filterBehavior.asObservable();\n public gridState$ = this.gridStateBehavior.asObservable();\n\n constructor(private route: ActivatedRoute, private router: Router) {\n this.currentFilter = Object.assign({}, this.defaultFilter);\n this.route.fragment.subscribe(async (fragment: string) => {\n const parsed = urlDeserialize(new URLSearchParams(fragment));\n if (Object.keys(parsed).some((key) => key === filterKey)) {\n this.currentGridState = parsed as State;\n this.fillCurrentFilter(parsed);\n } else {\n this.clearFilter();\n this.setTodayDates();\n this.currentGridState = FilterConverter.toGridState(\n this.currentFilter,\n this.DateFilterStartFieldName\n );\n }\n\n this.filterBehavior.next(this.currentFilter);\n });\n\n this.filter$.subscribe((filter) => {\n this.gridStateBehavior.next(\n FilterConverter.toGridState(filter, this.DateFilterStartFieldName)\n );\n });\n }\n\n public reset() {\n this.clearFilter();\n this.applyFilter(this.currentFilter);\n this.gridStateBehavior.next(this.currentGridState);\n }\n\n public setFilter(filter: ActivityFilter) {\n this.currentFilter.skip = 0;\n this.currentFilter = Object.assign(filter);\n this.currentGridState = FilterConverter.toGridState(\n this.currentFilter,\n this.DateFilterStartFieldName\n );\n }\n\n public applyFilter(filter: ActivityFilter) {\n this.setFilter(filter);\n this.stateNavigation(this.prepareFilterToSerialize());\n }\n\n public setToday() {\n this.setTodayDates();\n this.applyFilter(this.currentFilter);\n }\n\n public clearFilter() {\n if (this.currentFilter) {\n const customFilters = Object.assign([], this.currentFilter.customFilters);\n customFilters.forEach((x) => {\n x.value = null;\n if (x.values) {\n x.values = [];\n }\n });\n this.currentFilter = Object.assign({}, this.defaultFilter);\n this.currentFilter.customFilters = customFilters;\n } else {\n this.currentFilter = Object.assign({}, this.defaultFilter);\n }\n }\n\n public setGridState(state: State) {\n this.currentGridState = state;\n const { switchToArchive, searchText } = this.currentFilter;\n this.clearFilter();\n this.currentFilter = Object.assign(this.currentFilter, {\n switchToArchive,\n searchText,\n });\n this.fillCurrentFilter(this.currentGridState);\n this.stateNavigation(this.currentGridState);\n }\n\n public setTodayDates() {\n const now = new Date();\n this.currentFilter.dateTo = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() + 1,\n 0,\n 0,\n 0\n );\n this.currentFilter.dateFrom = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n 0,\n 0,\n 0\n );\n }\n\n private async stateNavigation(object: Object) {\n const navigate = await this.router.navigate([], {\n relativeTo: this.route,\n fragment: urlSerialize(object),\n });\n if (!navigate) {\n this.filterBehavior.next(this.currentFilter);\n }\n }\n\n private prepareFilterToSerialize(): object {\n const result = {};\n Object.keys(this.currentFilter).forEach((key) => {\n if (\n key !== dateToKey &&\n key !== dateFromKey &&\n key !== customFiltersKey\n ) {\n result[key] = this.currentFilter[key];\n }\n });\n\n this.currentFilter.customFilters?.forEach((filter) => {\n if (filter.filterTarget == FilterTargets.Url) {\n result[filter.field] = filter.value;\n }\n });\n\n result[filterKey] = FilterConverter.toGridState(\n this.currentFilter,\n this.DateFilterStartFieldName\n ).filter;\n\n return result;\n }\n\n private fillCurrentFilter(object: State) {\n this.currentFilter.customFilters = [];\n this.fillFromDescriptor(object.filter);\n Object.keys(object).forEach((key) => {\n if (key !== filterKey && key !== nullKey && key !== filtersKey) {\n if (Object.keys(this.currentFilter).some((x) => x == key)) {\n this.currentFilter[key] = object[key];\n } else {\n this.fillUrlFilter(key, object[key]);\n }\n }\n });\n }\n\n private fillUrlFilter(key: string, val: string) {\n const index = this.currentFilter.customFilters.findIndex(\n (filter) => filter.field == key\n );\n if (index !== -1) {\n this.currentFilter.customFilters[index].value = val;\n } else {\n this.currentFilter.customFilters.push({\n field: key,\n value: val,\n operator: Operators.eq,\n filterTarget: FilterTargets.Url,\n });\n }\n }\n\n private fillFromDescriptor(gridFilter: CompositeFilterDescriptor) {\n gridFilter?.filters.forEach(\n (filter: CompositeFilterDescriptor | FilterDescriptor) => {\n const filterDescriptor = filter as FilterDescriptor;\n if (\n filterDescriptor.field === this.DateFilterStartFieldName &&\n filterDescriptor.operator === Operators.lte\n ) {\n this.currentFilter.dateTo = filterDescriptor.value;\n }\n\n if (\n filterDescriptor.field === this.DateFilterStartFieldName &&\n filterDescriptor.operator === Operators.gte\n ) {\n this.currentFilter.dateFrom = filterDescriptor.value;\n }\n\n if (\n filterDescriptor.field &&\n filterDescriptor.field !== this.DateFilterStartFieldName\n ) {\n this.setFieldFilter({\n field: filterDescriptor.field as string,\n filterTarget: FilterTargets.Grid,\n operator: Operators[filterDescriptor.operator as string],\n value: filterDescriptor.value,\n });\n }\n\n const compositeFilterDescriptor = filter as CompositeFilterDescriptor;\n if (compositeFilterDescriptor.filters) {\n this.fillFromDescriptor(compositeFilterDescriptor);\n }\n }\n );\n }\n\n private setFieldFilter(filter: CustomFilter) {\n const index = this.currentFilter.customFilters.findIndex(\n (x) => x.field === filter.field && x.operator === filter.operator\n );\n if (index !== -1) {\n const values = this.currentFilter.customFilters[index].values;\n const value = this.currentFilter.customFilters[index].value;\n this.currentFilter.customFilters[index].values = values ? values : [];\n if (value) {\n this.currentFilter.customFilters[index].values.push(value as string);\n this.currentFilter.customFilters[index].value = null;\n }\n\n this.currentFilter.customFilters[index].values.push(\n filter.value as string\n );\n } else {\n this.currentFilter.customFilters.push(filter);\n }\n }\n}\n","import {\n Component,\n Input,\n HostListener,\n ElementRef,\n ViewChild,\n} from '@angular/core';\nimport { AppSettings } from '../../angular/models/AppSettings';\nimport { Member } from '../../models/Member';\nimport { AccountService } from '../../services/account.service';\n\n@Component({\n selector: 'account-menu',\n templateUrl: './account-menu.component.html',\n styleUrls: ['./account-menu.component.css'],\n})\nexport class AccountMenuComponent {\n @ViewChild('accountMenuElement') accountMenu: ElementRef;\n @Input() user: Member;\n expand = false;\n languageSelectorVisible = false;\n constructor(\n private eref: ElementRef,\n private accountService: AccountService,\n private appSettings: AppSettings\n ) {}\n\n get fullName(): string {\n return `${this.user?.firstName} ${this.user?.lastName}`;\n }\n\n get accountUrl(): string {\n return this.appSettings.accountUrl;\n }\n\n toogle(): void {\n this.expand = !this.expand;\n }\n\n logout(): void {\n this.accountService.logout();\n }\n\n openLanguageSelector(event: MouseEvent): void {\n event.stopPropagation();\n this.toogle();\n this.languageSelectorVisible = true;\n }\n\n @HostListener('document:click', ['$event'])\n clickedOutside(event: any) {\n if (!this.eref.nativeElement.contains(event.target) && this.expand) {\n this.toogle();\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Language } from '../models/Language';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst languageKey = 'language';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LocaleSettingsService {\n private languages: Language[] = [\n { name: 'English', code: 'en-US' },\n { name: 'Русский', code: 'ru-RU' },\n ];\n private localeId: string;\n\n constructor(private translate: TranslateService) {}\n\n init(): void {\n this.translate.addLangs(this.languages.map((x) => x.code));\n this.localeId = this.getLocale();\n this.setLocale(this.localeId || this.languages[0].code);\n }\n\n getLocales(): Language[] {\n return this.languages;\n }\n\n getLocale(): string {\n if (localStorage) {\n return localStorage.getItem(languageKey) || this.localeId;\n } else {\n return this.localeId;\n }\n }\n\n setLocale(locale: string) {\n this.translate.use(locale);\n this.localeId = locale;\n if (localStorage) {\n localStorage.setItem(languageKey, locale);\n }\n }\n}\n","import {\n Component,\n ElementRef,\n HostListener,\n Output,\n EventEmitter,\n Input,\n} from '@angular/core';\nimport { Language } from '../../angular/models/Language';\nimport { LocaleSettingsService } from '../../angular/services/locale-settings.service';\n\n@Component({\n selector: 'language-selector',\n templateUrl: './language-selector.component.html',\n styleUrls: ['./language-selector.component.css'],\n})\nexport class LanguageSelectorComponent {\n @Input() visible: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n currentLanguageCode = '';\n languages: Language[];\n\n constructor(\n private eref: ElementRef,\n private settings: LocaleSettingsService\n ) {\n this.currentLanguageCode = this.settings.getLocale();\n this.languages = this.settings.getLocales();\n }\n\n async changeLanguage(code: string) {\n this.currentLanguageCode = code;\n this.settings.setLocale(this.currentLanguageCode);\n this.close();\n }\n\n close(): void {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n @HostListener('document:click', ['$event'])\n clickedOutside(event: any) {\n if (!this.eref.nativeElement.contains(event.target)) {\n this.close();\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n AfterViewInit,\n} from '@angular/core';\nimport {\n CompositeFilterDescriptor,\n distinct,\n filterBy,\n FilterDescriptor,\n} from '@progress/kendo-data-query';\nimport { FilterService } from '@progress/kendo-angular-grid';\nimport { NamedModel } from '../../angular/models/NamedModel';\n\nconst defaultValueKey = 'id';\n\n@Component({\n selector: 'multicheck-filter',\n templateUrl: './multicheck-filter.component.html',\n styleUrls: ['./multicheck-filter.component.css'],\n})\nexport class MulticheckFilterComponent implements AfterViewInit {\n @Input() public currentFilter: CompositeFilterDescriptor;\n @Input() public data: NamedModel[];\n @Input() public filterService: FilterService;\n @Input() public field: string;\n @Input() public valueField: string;\n @Output() public valueChange = new EventEmitter<number[]>();\n\n public currentData: NamedModel[];\n public showFilter = true;\n private value: string[] = [];\n private filters: FilterDescriptor[] = [];\n private get ValueKey(): string {\n return this.valueField ? this.valueField : defaultValueKey;\n }\n\n public ngAfterViewInit() {\n this.currentData = this.data;\n if (this.currentData && this.currentData.length) {\n this.traverseFilters(this.currentFilter);\n this.value = this.filters.map((f: FilterDescriptor) => f.value);\n this.showFilter = typeof this.currentData[0].name === 'string';\n }\n }\n\n traverseFilters(filters: CompositeFilterDescriptor | FilterDescriptor) {\n let compositeFilterDescriptor = filters as CompositeFilterDescriptor;\n if (compositeFilterDescriptor.filters) {\n for (let i = 0; i < compositeFilterDescriptor.filters.length; i++) {\n const innerFilter = compositeFilterDescriptor.filters[\n i\n ] as FilterDescriptor;\n if (innerFilter.value && innerFilter.field === this.field) {\n this.filters.push(innerFilter);\n }\n\n this.traverseFilters(innerFilter);\n }\n }\n }\n\n public isItemSelected(item: NamedModel) {\n return this.value.some((x) => x === item[this.ValueKey]);\n }\n\n public onSelectionChange(item: NamedModel) {\n const selectedValue = item[this.ValueKey];\n if (this.value.some((x) => x === selectedValue)) {\n this.value = this.value.filter((x) => x !== selectedValue);\n } else {\n this.value.push(selectedValue);\n }\n\n this.filterService.filter({\n filters: this.value.map((value) => ({\n field: this.field,\n operator: 'eq',\n value,\n })),\n logic: 'or',\n });\n }\n\n public onInput(e: any) {\n this.currentData = distinct(\n [\n ...this.currentData.filter((dataItem) =>\n this.value.some((val) => val === dataItem.id)\n ),\n ...filterBy(this.data, {\n operator: 'contains',\n field: 'name',\n value: e.target.value,\n }),\n ],\n 'name'\n );\n }\n}\n","import { EventEmitter } from '@angular/core';\nimport { FormGroupWithErrors } from '../../angular/forms/extensions/FormGroupWithErrors';\nimport { IdentifiedModel } from '../../angular/models/IdentifiedModel';\nimport { IEntityService } from '../../services/IEntityService';\nimport { IFormAdapter } from './IFormAdapter';\n\nexport abstract class EntityEditComponent<T extends IdentifiedModel>\n implements IFormAdapter<T>\n{\n form: FormGroupWithErrors;\n saved = new EventEmitter<T>();\n get adapter() {\n return this;\n }\n\n constructor(public service: IEntityService<T>) {}\n\n getValue(): T {\n return this.form.value;\n }\n\n getService(): IEntityService<T> {\n return this.service;\n }\n\n setForm(form: FormGroupWithErrors): void {\n this.form = form;\n }\n\n onSaved(value: T): void {\n this.saved.emit(value);\n }\n}\n","import {\n AbstractControl,\n AbstractControlOptions,\n AsyncValidatorFn,\n FormGroup,\n ValidatorFn,\n FormControl,\n} from '@angular/forms';\n\nexport class FormGroupWithErrors extends FormGroup {\n generalErrors: string[] = [];\n\n constructor(\n controls: { [key: string]: AbstractControl },\n validatorOrOpts?:\n | ValidatorFn\n | ValidatorFn[]\n | AbstractControlOptions\n | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(controls, validatorOrOpts, asyncValidator);\n }\n\n public getControl(name: string): AbstractControl {\n if (!this.contains(name)) {\n this.addControl(name, new FormControl({}));\n }\n\n return this.get(name);\n }\n\n public applyServerErrors(\n error: { title?: string; errors: { [key: string]: string[] } },\n form?: FormGroupWithErrors\n ): void {\n this.generalErrors = [];\n if (error.title) {\n this.generalErrors.push(error.title);\n }\n\n if (!form) {\n form = this;\n }\n\n for (const key in error.errors) {\n const ctrl = form.controls[key];\n if (ctrl) {\n ctrl.setErrors({ serverErrorMsg: error.errors[key].join(',') });\n } else {\n this.generalErrors.push(error.errors[key].join(','));\n }\n }\n }\n}\n","import { OnInit, ViewChild, Component, Input } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { FormControl } from '@angular/forms';\nimport { IFormAdapter } from './IFormAdapter';\nimport { FormGroupWithErrors } from '../../angular/forms/extensions/FormGroupWithErrors';\nimport { GeneralErrorsComponent } from '../../angular/forms/widgets/general-errors/general-errors.component';\nimport { IdentifiedModel } from '../../angular/models/IdentifiedModel';\nimport { finalize } from 'rxjs/operators';\n\n@Component({\n selector: 'entity-edit-form',\n templateUrl: './entity-edit-form.component.html',\n styleUrls: ['./entity-edit-form.component.css'],\n})\nexport class EntityEditFormComponent implements OnInit {\n public formGroup: FormGroupWithErrors;\n @ViewChild('general_errors')\n generalErrors: GeneralErrorsComponent;\n @Input()\n title: string;\n @Input()\n adapter: IFormAdapter<IdentifiedModel>;\n\n public saveInProgress: boolean;\n\n constructor(private route: ActivatedRoute) {\n this.saveInProgress = false;\n }\n\n ngOnInit() {\n this.route.params.subscribe((params: IdentifiedModel) => {\n this.formGroup = null;\n const formGroup = new FormGroupWithErrors({});\n if (params.id) {\n this.adapter\n .getService()\n .get(params.id)\n .subscribe((model) => {\n formGroup.addControl('id', new FormControl(model.id));\n for (const key of Object.keys(model)) {\n formGroup.addControl(key, new FormControl(model[key]));\n }\n\n this.adapter.setForm(formGroup);\n this.formGroup = formGroup;\n });\n } else {\n this.adapter.setForm(formGroup);\n this.formGroup = formGroup;\n }\n });\n }\n\n save(): void {\n this.saveInProgress = true;\n this.adapter\n .getService()\n .save(this.adapter.getValue())\n .pipe(finalize(() => (this.saveInProgress = false)))\n .subscribe(\n (result: IdentifiedModel) => {\n this.adapter.onSaved(result);\n },\n (error: HttpErrorResponse) => {\n this.formGroup.applyServerErrors(error.error, this.formGroup);\n this.generalErrors.setErrors(this.formGroup.generalErrors);\n }\n );\n }\n}\n","import { Component, Output, EventEmitter, Input } from '@angular/core';\n\n@Component({\n selector: 'entity-edit-buttons-bar',\n templateUrl: './buttons-bar.component.html',\n styleUrls: ['./buttons-bar.component.css'],\n})\nexport class EntityEditButtonsBarComponent {\n @Input()\n public valid: boolean;\n @Output()\n public save = new EventEmitter<boolean>();\n}\n","import { OnInit, Input, ElementRef, Directive } from '@angular/core';\nimport {\n FormGroupDirective,\n FormControl,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\n\nlet id: number = 0;\n\n@Directive()\nexport abstract class FieldComponent<T> implements OnInit {\n @Input() labelKey: string;\n @Input() fieldName: string;\n @Input() disabled: boolean = false;\n \n public disabledKey = 'disabled';\n public id: string;\n\n constructor(\n public parent: FormGroupDirective,\n public eref: ElementRef,\n private defaultValue: T\n ) {}\n\n ngOnInit(): void {\n this.setUp();\n }\n\n protected setUp(): void {\n this.id = '_' + this.fieldName + ++id;\n const validators: ValidatorFn[] = [];\n for (const attr of this.eref.nativeElement.attributes as [\n { name: string; value: string }\n ]) {\n const validator = this.setAttribute(attr.name, attr.value);\n if (validator) {\n validators.push(validator);\n }\n }\n\n const control = this.parent.form.get(this.fieldName);\n if (control) {\n if (control.validator) {\n validators.push(control.validator);\n }\n\n control.setValidators(validators);\n control.updateValueAndValidity();\n } else {\n this.parent.form.addControl(\n this.fieldName,\n new FormControl(this.defaultValue, validators)\n );\n }\n }\n\n protected setAttribute(name: string, value: string): ValidatorFn {\n if (name === this.disabledKey) {\n this.disabled = true;\n\n return;\n }\n\n if (name === 'required') {\n return Validators.required;\n }\n }\n}\n","import { Component, Input, ElementRef, OnChanges } from '@angular/core';\nimport {\n ControlContainer,\n FormGroupDirective,\n AbstractControl,\n} from '@angular/forms';\nimport { CompositeFilterDescriptor } from '@progress/kendo-data-query';\nimport { FieldComponent } from '../../../angular/forms/widgets/field/field.component';\nimport { IdentifiedModel } from '../../../angular/models/IdentifiedModel';\nimport { NamedModel } from '../../../angular/models/NamedModel';\nimport { IEntityService } from '../../../services/IEntityService';\n\n@Component({\n selector: 'field-dropdown',\n templateUrl: './field-dropdown.component.html',\n styleUrls: ['./field-dropdown.component.css'],\n viewProviders: [\n { provide: ControlContainer, useExisting: FormGroupDirective },\n ],\n})\nexport class FieldDropdownComponent\n extends FieldComponent<string>\n implements OnChanges\n{\n @Input()\n service: IEntityService<NamedModel>;\n @Input()\n rebind: string;\n @Input()\n filter?: CompositeFilterDescriptor;\n data: IdentifiedModel[] = [];\n get control(): AbstractControl {\n return this.parent.form.get(this.fieldName);\n }\n\n constructor(public parent: FormGroupDirective, public eref: ElementRef) {\n super(parent, eref, '');\n }\n\n async ngOnChanges(): Promise<void> {\n await this.getData();\n this.control.setValue(\n (this.data.find((d) => d.id === this.control.value) || this.data[0]).id\n );\n }\n\n private getData() {\n this.service\n .getPage(this.filter ? { filter: this.filter } : {})\n .subscribe((data) => (this.data = data.data));\n }\n}\n","import { Component, Input, ElementRef, OnChanges } from '@angular/core';\nimport {\n ControlContainer,\n FormGroupDirective,\n AbstractControl,\n} from '@angular/forms';\nimport { CompositeFilterDescriptor } from '@progress/kendo-data-query';\nimport { FieldComponent } from '../../../angular/forms/widgets/field/field.component';\nimport { IdentifiedModel } from '../../../angular/models/IdentifiedModel';\nimport { NamedModel } from '../../../angular/models/NamedModel';\nimport { IEntityService } from '../../../services/IEntityService';\n\n@Component({\n selector: 'field-multiselect',\n templateUrl: './field-multiselect.component.html',\n styleUrls: ['./field-multiselect.component.css'],\n viewProviders: [\n { provide: ControlContainer, useExisting: FormGroupDirective },\n ],\n})\nexport class FieldMultiSelectComponent\n extends FieldComponent<string[]>\n implements OnChanges\n{\n @Input()\n service: IEntityService<NamedModel>;\n @Input()\n rebind: string;\n @Input()\n filter?: CompositeFilterDescriptor;\n data: IdentifiedModel[] = [];\n get control(): AbstractControl {\n return this.parent.form.get(this.fieldName);\n }\n\n constructor(public parent: FormGroupDirective, public eref: ElementRef) {\n super(parent, eref, []);\n }\n\n ngOnChanges(): void {\n this.getData().subscribe((data) => {\n this.data = data.data;\n this.control.setValue(\n this.control.value.filter(\n (x: string) => this.data.filter((d) => d.id === x).length\n )\n );\n });\n }\n\n private getData() {\n return this.service.getPage(this.filter ? { filter: this.filter } : {});\n }\n}\n","import { Observable } from 'rxjs';\nimport {\n Component,\n OnInit,\n ViewChild,\n Input,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n Output,\n} from '@angular/core';\nimport { Router, ActivatedRoute, Params } from '@angular/router';\nimport {\n State,\n FilterDescriptor,\n CompositeFilterDescriptor,\n SortDescriptor,\n} from '@progress/kendo-data-query';\nimport {\n DataStateChangeEvent,\n RowClassArgs,\n} from '@progress/kendo-angular-grid';\nimport { Field } from './Field';\nimport { Command } from './Command';\nimport { urlDeserialize, urlSerialize } from './UrlSerializer';\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { IEntityService } from '../../services/IEntityService';\nimport { Page } from '../../models/Page';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NamedModel } from '../../angular/models/NamedModel';\nimport { IdentifiedModel } from '../../angular/models/IdentifiedModel';\n\nconst nameField = 'name';\n\n@Component({\n selector: 'entity-list',\n templateUrl: './entity-list.component.html',\n styleUrls: ['./entity-list.component.css'],\n})\nexport class EntityListComponent implements OnInit, OnChanges {\n @Input()\n public service: IEntityService<NamedModel>;\n @Input()\n public filters: Array<FilterDescriptor | CompositeFilterDescriptor>;\n @Input()\n public fields?: Field[];\n @Input()\n public commands?: Command[];\n @Input()\n public rowClass?: (dataItem: NamedModel, index: number) => {};\n @Input()\n public defaultSort?: SortDescriptor[];\n @Output()\n public filterChange = new EventEmitter<CompositeFilterDescriptor>();\n @ViewChild('confirmDialog', { static: true })\n public dialog: ConfirmDialogComponent;\n public gridState: State = {};\n public page: Page<NamedModel>;\n public loadings = 0;\n public searchTerm: string;\n public selected: string[] = [];\n public gridFields: Field[] = [];\n private defaultFields: Field[] = [\n { name: 'name', label: 'Name', sortable: true, position: 0 },\n ];\n\n constructor(\n private translate: TranslateService,\n private route: ActivatedRoute,\n private router: Router\n ) {\n this.getAllData = this.getAllData.bind(this);\n this.getRowClass = this.getRowClass.bind(this);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes.filters || changes.filters.firstChange) {\n return;\n }\n\n this.getFilteredData();\n }\n\n async ngOnInit() {\n this.gridFields = (this.fields || [])\n .concat(this.defaultFields)\n .sort((left, right) => (left.position || 0) - (right.position || 0));\n this.filters = this.filters ? this.filters : [];\n this.commands = this.commands ? this.commands : [];\n this.route.fragment.subscribe(async (fragment: string) => {\n await this.restoreGridState(new URLSearchParams(fragment));\n });\n\n this.route.firstChild.params.subscribe(async (params: Params) => {\n if (params.id) {\n this.selected[0] = params.id;\n } else {\n this.selected.pop();\n }\n });\n }\n\n public removeHandler({ dataItem }) {\n this.dialog.open(\n this.translate.instant('Confirmation.Delete') +\n ': \"' +\n dataItem.name +\n '\"?',\n () => this.remove(dataItem)\n );\n }\n\n public selectItem({ dataItem }) {\n this.router.navigate([dataItem.id], {\n relativeTo: this.route,\n fragment: urlSerialize(this.gridState),\n });\n }\n\n public onActivate(child: { saved: EventEmitter<NamedModel> }) {\n if (child.saved) {\n child.saved.subscribe((data: { id: string; name: string }) =>\n this.updateGrid(data)\n );\n }\n }\n\n public onDeactivate(child: { saved: EventEmitter<NamedModel> }) {\n if (child.saved) {\n child.saved.unsubscribe();\n }\n }\n\n public dataStateChange(state: DataStateChangeEvent) {\n Object.keys(state).forEach((key) => {\n this.gridState[key] = isNaN(state.skip)\n ? this.gridState[key]\n : state[key];\n });\n\n this.router.navigate([], {\n relativeTo: this.route,\n fragment: urlSerialize(this.gridState),\n });\n }\n\n public onSearch(value: string) {\n this.searchTerm = value;\n this.gridState.skip = 0;\n this.getFilteredData();\n }\n\n public getAllData(): Observable<Page<NamedModel>> {\n const state = Object.assign({}, this.gridState);\n delete state.skip;\n delete state.take;\n\n return this.service.getPage(state);\n }\n\n public getRowClass(context: RowClassArgs): Object {\n return this.rowClass && context\n ? this.rowClass(context.dataItem, context.index)\n : {};\n }\n\n private getFilteredData() {\n this.gridState.filter = this.getFilter();\n this.router.navigate([], {\n relativeTo: this.route,\n fragment: urlSerialize(this.gridState),\n });\n }\n\n protected updateGrid(data: NamedModel) {\n const exists = this.page.data.filter((x) => x.id === data.id);\n if (exists.length) {\n this.page.data[this.page.data.indexOf(exists[0])] = data;\n\n return;\n }\n\n this.page.total++;\n this.page.data.splice(0, 0, data);\n if (this.page.data.length > this.gridState.take) {\n this.page.data.splice(this.page.data.length - 1, 1);\n }\n\n this.selected[0] = data.id;\n this.router.navigate([data.id], {\n relativeTo: this.route,\n preserveFragment: true,\n });\n }\n\n private async remove(entity: IdentifiedModel) {\n this.loadings++;\n this.service.delete(entity.id).subscribe(() => {\n if (\n this.selected.length &&\n this.selected[this.selected.length - 1] === entity.id\n ) {\n this.router.navigate(['../'], {\n preserveFragment: true,\n relativeTo: this.route.firstChild,\n });\n }\n this.loadings--;\n });\n this.getData();\n }\n\n protected getData() {\n this.loadings++;\n this.service.getPage(this.gridState).subscribe((page) => {\n this.page = page;\n this.loadings--;\n });\n }\n\n private getFilter(): CompositeFilterDescriptor {\n const filter: CompositeFilterDescriptor = {\n logic: 'and',\n filters: this.searchTerm\n ? [\n { field: nameField, operator: 'contains', value: this.searchTerm },\n ...this.filters,\n ]\n : this.filters,\n };\n\n return filter;\n }\n\n private onFilterChange() {\n const filter: any = this.gridState.filter?.filters.find(\n (x: FilterDescriptor) => x.field === nameField\n );\n this.searchTerm = filter?.value;\n this.filterChange.emit(this.gridState.filter);\n }\n\n private async restoreGridState(params: URLSearchParams) {\n const defaultGridState: State = {\n sort: this.defaultSort || [{ field: nameField, dir: 'asc' }],\n skip: 0,\n take: 10,\n };\n\n const state = urlDeserialize(params);\n this.gridState = state.hasOwnProperty('take') ? state : defaultGridState;\n this.onFilterChange();\n this.getData();\n }\n}\n","import {\n Component,\n Input,\n Output,\n OnInit,\n EventEmitter,\n ViewChild,\n} from '@angular/core';\nimport { DropDownListComponent } from '@progress/kendo-angular-dropdowns';\nimport { IEntityService } from '../../../services/IEntityService';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\nimport { NamedModel } from '../../../angular/models/NamedModel';\n\nconst All = 'All';\n\n@Component({\n selector: 'field-dropdownlist',\n templateUrl: './field-dropdownlist.component.html',\n styleUrls: ['./field-dropdownlist.component.css'],\n})\nexport class FieldDropdownlistComponent implements OnInit {\n @Input()\n service: IEntityService<NamedModel>;\n @Input()\n label: string;\n @Output()\n valueChange = new EventEmitter<NamedModel>();\n @ViewChild('inputElement')\n private kendoDropDown: DropDownListComponent;\n private initialSelectedId: string;\n\n public defaultItem: NamedModel;\n public data: NamedModel[];\n\n constructor(private translate: TranslateService) {}\n\n async ngOnInit(): Promise<void> {\n this.defaultItem = { id: null, name: this.translate.instant(All) };\n await this.getData();\n this.translate.onLangChange.subscribe((event: LangChangeEvent) => {\n this.defaultItem = { id: null, name: this.translate.instant(All) };\n });\n }\n\n private getData() {\n this.service.getPage({}).subscribe((data) => {\n this.data = data.data;\n if (this.initialSelectedId) {\n const selectedItem = this.data.find(\n (x) => x.id === this.initialSelectedId\n );\n\n if (selectedItem) {\n this.kendoDropDown.writeValue(selectedItem);\n }\n }\n });\n }\n\n onValueChange(event: NamedModel) {\n this.valueChange.emit(event);\n }\n\n public initSelectedId(id: string): void {\n this.initialSelectedId = id;\n }\n}\n","import { Component, ViewChild, TemplateRef } from '@angular/core';\nimport { DialogService, DialogRef } from '@progress/kendo-angular-dialog';\n\n@Component({\n selector: 'confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n styleUrls: ['./confirm-dialog.component.css'],\n})\nexport class ConfirmDialogComponent {\n private dialog: DialogRef;\n private callback: () => void;\n @ViewChild('dialogActions', { static: true })\n public dialogActions: TemplateRef<any>;\n constructor(private dialogService: DialogService) {}\n\n cancel(): void {\n this.dialog.close();\n this.callback = undefined;\n }\n\n confirm() {\n this.callback();\n this.cancel();\n }\n\n public open(content: string, callback: () => void) {\n this.callback = callback;\n this.dialog = this.dialogService.open({\n content,\n actions: this.dialogActions,\n });\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'excel-export-button',\n templateUrl: './excel-export-button.component.html',\n styleUrls: ['./excel-export-button.component.css'],\n})\nexport class ExcelExportButtonComponent {}\n","import { ActivityFilter } from '../../models/ActivityFilter';\nimport { Component, Input, OnChanges, OnInit } from '@angular/core';\nimport { CustomFilterElement } from '../../models/CustomFilterElement';\nimport { FieldTypes } from '../../models/FieldTypes';\nimport { ActivityFilterService } from '../../services/activity.filter.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NamedModel } from '../../angular/models/NamedModel';\n\nconst allKey = 'All';\nconst defaultValueField = 'id';\n\n@Component({\n selector: 'activity-filter',\n templateUrl: './activity-filter.component.html',\n styleUrls: ['./activity-filter.component.less'],\n})\nexport class ActivityFilterComponent implements OnInit, OnChanges {\n @Input() showArchiveSwitcher: boolean = true;\n @Input() showSearhText: boolean = true;\n @Input() customFilterElements: CustomFilterElement[];\n @Input() filterService: ActivityFilterService;\n\n public filter: ActivityFilter;\n public FieldTypes = FieldTypes;\n\n constructor(private translate: TranslateService) {}\n\n ngOnInit(): void {\n this.customFilterElements?.forEach(\n (element) =>\n (element.valueField = element.valueField\n ? element.valueField\n : defaultValueField)\n );\n this.filterService.filter$.subscribe((filter) => {\n this.filter = filter;\n this.changeFilter();\n });\n }\n\n ngOnChanges(): void {\n this.changeFilter();\n }\n\n public defaultNamedModel: NamedModel = {\n name: this.translate.instant(allKey),\n id: null,\n };\n\n public setTodayFilter() {\n this.filterService.setToday();\n }\n\n public clearFilter() {\n this.customFilterElements?.forEach((element) => {\n element.filter.value = null;\n if (element.filter.values) {\n element.filter.values = [];\n }\n });\n this.filterService.reset();\n this.emitChangeEvents();\n }\n\n public applyFilter() {\n this.setCustomFilters();\n this.filterService.applyFilter(this.filter);\n }\n\n public fieldChange(\n value: string | number | boolean | string[],\n element: CustomFilterElement\n ) {\n if (element.change) {\n element.change(value);\n }\n }\n\n private fillFilter() {\n if (!this.filter) {\n return;\n }\n\n this.customFilterElements?.forEach((element) => {\n element.filter = { ...element.filter, value: null, values: null };\n });\n\n this.filter.customFilters?.forEach((filter) => {\n const element = this.customFilterElements?.find(\n (x) =>\n x.filter.field === filter.field &&\n x.filter.filterTarget === filter.filterTarget\n );\n if (element) {\n element.filter = Object.assign({}, filter);\n }\n });\n }\n\n private setCustomFilters() {\n this.customFilterElements?.forEach((element) => {\n const index = this.filter.customFilters?.findIndex(\n (x) => x.field === element.filter.field\n );\n if (index !== -1) {\n this.filter.customFilters.splice(index, 1);\n }\n });\n\n this.customFilterElements?.forEach((element) =>\n this.filter.customFilters.push(element.filter)\n );\n }\n\n private fixMultiselectFilters() {\n const multiSelectFilters = this.customFilterElements?.map((element) => {\n if (element.fieldType === FieldTypes.Multiselect) {\n return element.filter;\n }\n });\n if (multiSelectFilters) {\n multiSelectFilters.forEach((filter) => {\n if (filter?.value) {\n filter.values = [filter.value as string];\n filter.value = null;\n }\n });\n }\n }\n\n private changeFilter() {\n this.fillFilter();\n this.fixMultiselectFilters();\n this.emitChangeEvents();\n }\n\n private emitChangeEvents() {\n this.customFilterElements?.forEach((element) => {\n if (element.filter.value || element.filter.values) {\n this.fieldChange(\n element.filter.value ?? element.filter.values,\n element\n );\n }\n });\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport * as momentModule from 'moment-timezone';\nconst moment = momentModule;\n\n@Component({\n selector: 'current-timezone',\n templateUrl: './current-timezone.component.html',\n styleUrls: ['./current-timezone.component.css'],\n})\nexport class CurrentTimezoneComponent implements OnInit {\n public timeZoneAndOffset: string;\n constructor() {}\n\n ngOnInit(): void {\n const timeZone = moment.tz.guess();\n this.timeZoneAndOffset = timeZone + ' ' + moment().format('Z');\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n@Component({\n selector: 'modal-window',\n templateUrl: './modal-window.component.html',\n styleUrls: ['./modal-window.component.css'],\n})\nexport class ModalWindowComponent {\n @Input() callbackPath: string;\n\n constructor(protected route: ActivatedRoute, private router: Router) {}\n\n public opened: boolean = true;\n\n public close() {\n this.opened = false;\n this.router.navigate([this.callbackPath], {\n relativeTo: this.route,\n fragment: this.route.snapshot?.fragment,\n });\n }\n}\n","import { Directive, Input, ElementRef, OnInit, Renderer2 } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { PermissionTypes } from '../models/PermissionTypes';\nimport { PermissionsService } from '../services/permissions.service';\n\nconst hiddenClass = 'hidden';\n\n@Directive({\n selector: '[requirePermission]',\n})\nexport class RequirePermissionDirective implements OnInit {\n @Input()\n permissionType: PermissionTypes | PermissionTypes[];\n @Input()\n permissionCategory?: string;\n\n constructor(\n private elementRef: ElementRef,\n private route: ActivatedRoute,\n private permissionsService: PermissionsService,\n private renderer: Renderer2\n ) {}\n\n ngOnInit(): void {\n this.hide();\n const category = this.permissionCategory\n ? this.permissionCategory\n : this.getRouteCategory(this.route);\n\n if (!category) {\n this.show();\n\n return;\n }\n\n this.permissionsService.mine.subscribe((permissions) => {\n const hasAccess =\n permissions[category] && this.hasType(permissions[category]);\n if (hasAccess) {\n this.show();\n } else {\n this.hide();\n }\n });\n }\n\n private hide() {\n this.renderer.addClass(this.elementRef.nativeElement, hiddenClass);\n }\n\n private show() {\n this.renderer.removeClass(this.elementRef.nativeElement, hiddenClass);\n }\n\n private hasType(types: PermissionTypes[]) {\n return Array.isArray(this.permissionType)\n ? types.map((x) => this.permissionType.includes(x)).some((x) => x)\n : types.includes(this.permissionType);\n }\n\n private getRouteCategory(route: ActivatedRoute): string {\n const routeData = route.snapshot.data;\n if (routeData && routeData.permission) {\n return routeData.permission.category;\n }\n\n if (this.route.parent) {\n return this.getRouteCategory(this.route.parent);\n }\n\n return null;\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MenuItemGroupComponent } from './menu-item-group/menu-item-group.component';\nimport { MenuItem } from './MenuItem';\n\nconst collapsedEvent = 'collapsed';\n@Component({\n selector: 'side-menu',\n templateUrl: './side-menu.component.html',\n styleUrls: ['./side-menu.component.css'],\n})\nexport class SideMenuComponent {\n @Input() items: MenuItem[];\n @Output() logoClick = new EventEmitter();\n\n onLogoClick() {\n this.logoClick.emit();\n }\n\n collapse(\n itemComponent: MenuItemGroupComponent,\n activeItem: MenuItem,\n event: MouseEvent\n ) {\n this.items?.forEach((item) => {\n if (item.text !== activeItem.text && item.expanded) {\n item.expanded = false;\n }\n });\n if (event[collapsedEvent]) {\n itemComponent.collapsed = true;\n } else {\n itemComponent.collapsed = false;\n }\n }\n}\n","import { Component, Input, OnChanges, OnInit } from '@angular/core';\nimport { MenuItem } from '../MenuItem';\nimport {\n Router,\n NavigationEnd,\n RouterStateSnapshot,\n UrlTree,\n} from '@angular/router';\n\nconst urlDelimiter = '/';\nconst collapsedEvent = 'collapsed';\n\n@Component({\n selector: '[menu-item-group]',\n templateUrl: './menu-item-group.component.html',\n styleUrls: ['./menu-item-group.component.css'],\n})\nexport class MenuItemGroupComponent implements OnChanges, OnInit {\n @Input() item: MenuItem;\n collapsed: boolean = false;\n private actualPath: string;\n\n constructor(private router: Router) {\n this.router.isActive = function (\n url: string | UrlTree,\n exact: boolean\n ): boolean {\n return this.routerState.snapshot.root.children?.length\n ? url.toString() ===\n urlDelimiter +\n this.routerState.snapshot.root.children[0].routeConfig.path.split(\n '/:'\n )[0]\n : false;\n };\n }\n\n ngOnInit(): void {\n this.setActualPath(this.router.routerState.snapshot);\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.setActualPath(this.router.routerState.snapshot);\n }\n });\n }\n\n ngOnChanges(): void {\n this.setItemExpand();\n }\n\n collapseChild(activeItem: MenuItem, event: MouseEvent) {\n this.item.expanded =\n this.item.text === activeItem.text &&\n !this.item.expanded &&\n !!this.item.items;\n\n if (!activeItem.items || activeItem.items.length === 0) {\n event[collapsedEvent] = true;\n } else {\n event[collapsedEvent] = false;\n }\n }\n\n private setItemExpand() {\n this.item.expanded = this.item.items?.some((x) => {\n return x.link !== undefined && x.link === this.actualPath;\n });\n }\n\n private setActualPath(snapshot: RouterStateSnapshot): void {\n if (snapshot.root.children?.length) {\n this.actualPath =\n urlDelimiter +\n snapshot.root.children[0].routeConfig.path.split('/:')[0];\n this.setItemExpand();\n }\n }\n}\n","export enum ContentTypesFormat {\n Json = 'json',\n Xml = 'xml',\n Text = 'text',\n}\n","import { IContentResolver } from './IContentResolver';\nimport { ResolverResult } from '../models/ResolverResult';\n\nexport abstract class AbstractContentResolver implements IContentResolver {\n private nextResolver: IContentResolver;\n\n constructor(resolver: IContentResolver) {\n this.nextResolver = resolver;\n }\n\n resolve(data: string): ResolverResult {\n if (this.nextResolver) {\n return this.nextResolver.resolve(data);\n }\n\n return null;\n }\n}\n","export enum TreeViewNodeTypes {\n Object = 'object',\n Array = 'array',\n Primitive = 'primitive',\n}\n","export enum TreeViewPropTypes {\n String = 'string',\n Number = 'number',\n Object = 'object',\n Array = 'array',\n}\n","import { TreeViewNodeTypes } from '../../models/TreeViewNodeTypes';\nimport { TreeViewPropTypes } from '../../models/TreeViewPropTypes';\n\nexport function getPropTypeFromKey(key: string): TreeViewPropTypes {\n return (\n Object.values(TreeViewPropTypes).find((x) => x === key) ||\n TreeViewPropTypes.String\n );\n}\n\nexport function getNodeTypeFromKey(key: string): TreeViewNodeTypes {\n return (\n Object.values(TreeViewNodeTypes).find((x) => x === key) ||\n TreeViewNodeTypes.Object\n );\n}\n","import { TreeViewNode } from '../../models/TreeViewNode';\nimport { TreeViewNodeTypes } from '../../models/TreeViewNodeTypes';\nimport { TreeViewProp } from '../../models/TreeViewProp';\nimport { TreeViewPropTypes } from '../../models/TreeViewPropTypes';\nimport { getPropTypeFromKey, getNodeTypeFromKey } from './EnumTypeGetter';\n\nconst objectBrackets = { inside: '{', outside: '}' };\nconst arrayBrackets = { inside: '[', outside: ']' };\n\nexport class JsonConverter {\n public static convert(\n source: Array<object> | object\n ): Array<TreeViewNode> | TreeViewNode {\n if (Array.isArray(source)) {\n return this.convertArray(source);\n }\n\n return this.convertObject(source);\n }\n\n private static convertObject(source): TreeViewNode {\n const props: Array<TreeViewProp> = [];\n for (const name of Object.keys(source)) {\n const value = source[name];\n let propType =\n value !== null\n ? getPropTypeFromKey(typeof value)\n : TreeViewPropTypes.String;\n\n if (Array.isArray(value)) {\n const result = this.convertArray(value);\n const propType = Array.isArray(result)\n ? TreeViewPropTypes.Array\n : TreeViewPropTypes.Object;\n props.push({\n startTag: `${name}: `,\n value: result,\n propType,\n brackets: arrayBrackets,\n });\n\n continue;\n }\n\n if (propType === TreeViewPropTypes.Object) {\n props.push({\n startTag: `${name}: `,\n value: this.convertObject(value),\n propType,\n });\n\n continue;\n }\n\n props.push({\n startTag: `${name}: `,\n value,\n propType,\n });\n }\n\n return {\n props,\n nodeType: TreeViewNodeTypes.Object,\n brackets: objectBrackets,\n };\n }\n\n private static convertArray(source: Array<any>): TreeViewNode {\n const nodes: Array<TreeViewNode> = [];\n\n source.forEach((item, index) => {\n if (typeof item !== TreeViewPropTypes.Object) {\n nodes.push(this.getPrimitive(item, index));\n } else {\n const brackets = Array.isArray(item) ? arrayBrackets : objectBrackets;\n const inside = brackets.inside;\n const outside = brackets.outside;\n nodes.push({\n ...this.convertObject(item),\n nodeType: Array.isArray(item)\n ? TreeViewNodeTypes.Array\n : getNodeTypeFromKey(typeof item),\n brackets: {\n inside: `${index}: ${inside}`,\n outside,\n },\n });\n }\n });\n\n return {\n props: [\n {\n value: nodes,\n propType: TreeViewPropTypes.Array,\n },\n ],\n brackets: arrayBrackets,\n };\n }\n\n private static getPrimitive(\n source: string | number,\n index: string | number\n ): TreeViewNode {\n const propType = getPropTypeFromKey(typeof source);\n return {\n props: [\n {\n startTag: `${index}: `,\n value: source,\n propType,\n },\n ],\n nodeType: TreeViewNodeTypes.Primitive,\n };\n }\n}\n","import { ContentTypesFormat } from '../../models/ContentTypesFormat';\nimport { ResolverResult } from '../../models/ResolverResult';\nimport { AbstractContentResolver } from '../AbstractContentResolver';\nimport { JsonConverter } from '../Converters/JsonConverter';\n\nexport class JsonResolver extends AbstractContentResolver {\n public resolve(data: string): ResolverResult {\n try {\n const json = JSON.parse(data);\n\n return {\n data: JsonConverter.convert(json),\n format: ContentTypesFormat.Json,\n };\n } catch (e) {\n return super.resolve(data);\n }\n }\n}\n","import { TreeViewNode } from '../../models/TreeViewNode';\nimport { TreeViewPropTypes } from '../../models/TreeViewPropTypes';\n\nexport class TextConverter {\n public static convert(source: string): Array<TreeViewNode> | TreeViewNode {\n return {\n props: [\n {\n value: source,\n propType: TreeViewPropTypes.String,\n },\n ],\n };\n }\n}\n","import { ContentTypesFormat } from '../../models/ContentTypesFormat';\nimport { ResolverResult } from '../../models/ResolverResult';\nimport { AbstractContentResolver } from '../AbstractContentResolver';\nimport { TextConverter } from '../Converters/TextConverter';\n\nexport class TextResolver extends AbstractContentResolver {\n public resolve(data: string): ResolverResult {\n return {\n data: TextConverter.convert(data),\n format: ContentTypesFormat.Text,\n };\n }\n}\n","import { TreeViewNode } from '../../models/TreeViewNode';\nimport { TreeViewProp } from '../../models/TreeViewProp';\nimport { TreeViewPropTypes } from '../../models/TreeViewPropTypes';\nimport { getPropTypeFromKey } from './EnumTypeGetter';\n\nexport class XmlConverter {\n public static convert(source: Document): Array<TreeViewNode> | TreeViewNode {\n if (source.childElementCount > 1) {\n return this.convertObject(source.childNodes);\n }\n\n return { props: [this.convertProp(source.children[0])] };\n }\n\n private static convertProp(source: any): TreeViewProp {\n const name: string = source.tagName;\n let value: Array<TreeViewNode> | string;\n let propType: TreeViewPropTypes;\n\n if (source.childElementCount > 0) {\n value = this.convertObject(source.children);\n propType = TreeViewPropTypes.Array;\n } else {\n value = source.textContent;\n propType = getPropTypeFromKey(typeof value);\n }\n\n return {\n startTag: `<${name}>`,\n endTag: `</${name}>`,\n value,\n propType,\n };\n }\n\n private static convertObject(childs: any): Array<TreeViewNode> {\n const props = Array<TreeViewProp>();\n for (const item of childs) {\n props.push(this.convertProp(item));\n }\n\n return [\n {\n props,\n },\n ];\n }\n}\n","import { ContentTypesFormat } from '../../models/ContentTypesFormat';\nimport { ResolverResult } from '../../models/ResolverResult';\nimport { AbstractContentResolver } from '../AbstractContentResolver';\nimport { XmlConverter } from '../Converters/XmlConverter';\n\nexport class XmlResolver extends AbstractContentResolver {\n public resolve(data: string): ResolverResult {\n try {\n const oParser = new DOMParser();\n const oDOM = oParser.parseFromString(data, 'text/xml');\n\n if (\n oDOM.all.length > 0 &&\n oDOM.getElementsByTagName('parsererror').length === 0\n ) {\n return {\n data: XmlConverter.convert(oDOM),\n format: ContentTypesFormat.Xml,\n };\n }\n } catch (e) {}\n\n return super.resolve(data);\n }\n}\n","import { ResolverResult } from '../models/ResolverResult';\nimport { AbstractContentResolver } from './AbstractContentResolver';\nimport { JsonResolver } from './Resolvers/JsonResolver';\nimport { TextResolver } from './Resolvers/TextResolver';\nimport { XmlResolver } from './Resolvers/XmlResolver';\n\nexport class ContentResolver {\n private chain: AbstractContentResolver;\n\n constructor() {\n this.chain = new JsonResolver(new XmlResolver(new TextResolver(null)));\n }\n\n public resolve(data: string): ResolverResult {\n return this.chain.resolve(data);\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport { ClipboardService } from 'ngx-clipboard';\nimport { ContentResolver } from './ContentResolver/ContentResolver';\nimport { ContentTypesFormat } from './models/ContentTypesFormat';\nimport { ResolverResult } from './models/ResolverResult';\nimport { TreeViewNodeComponent } from './tree-view-node/tree-view-node.component';\n\n@Component({\n selector: 'tree-view',\n templateUrl: './tree-view.component.html',\n styleUrls: ['./tree-view.component.css'],\n})\nexport class TreeViewComponent implements OnChanges {\n @ViewChildren('node') treeViewNodes: QueryList<TreeViewNodeComponent>;\n\n @Input() data: string;\n @Input() maxTextLength: number = 1200;\n @Input() maxRootItems: number = 10;\n\n public resolved: ResolverResult;\n public collapsed: boolean;\n public allShow: boolean;\n public rawView: boolean;\n public ContentTypesFormat = ContentTypesFormat;\n\n public get IsArray(): boolean {\n return this.data ? Array.isArray(this.resolved.data) : false;\n }\n\n public get hasCollapse(): boolean {\n if (!this.data) {\n return false;\n }\n\n return this.resolved.format === ContentTypesFormat.Text\n ? this.hasTextCollapse()\n : this.hasNodeCollapse();\n }\n\n public get format(): string {\n return !this.rawView ? this.resolved.format : ContentTypesFormat.Text;\n }\n\n constructor(private clipboardService: ClipboardService) {}\n\n ngOnChanges(): void {\n const contentResolver = new ContentResolver();\n this.allShow = false;\n this.rawView = false;\n this.resolved = contentResolver.resolve(this.data);\n this.collapsed = this.hasCollapse;\n }\n\n public expandToggle(): void {\n this.collapsed = !this.collapsed;\n }\n\n public toggleExpandAll() {\n if (this.allShow) {\n this.treeViewNodes.forEach((x) => x.collapseAll());\n } else {\n this.treeViewNodes.forEach((x) => x.expandAll());\n }\n\n this.collapsed = this.hasCollapse ? this.allShow : false;\n this.allShow = !this.allShow;\n }\n\n public toggleRawView() {\n this.rawView = !this.rawView;\n }\n\n public copyToClipboard() {\n this.clipboardService.copy(this.data);\n }\n\n private hasTextCollapse(): boolean {\n return this.data.length > this.maxTextLength;\n }\n\n private hasNodeCollapse(): boolean {\n if (!Array.isArray(this.resolved.data)) {\n return this.resolved.data.props.length > this.maxRootItems;\n }\n\n return false;\n }\n}\n","import {\n Component,\n Input,\n OnInit,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport { TreeViewNode } from '../models/TreeViewNode';\nimport { TreeViewNodeTypes } from '../models/TreeViewNodeTypes';\nimport { TreeViewNodePropComponent } from '../tree-view-node-prop/tree-view-node-prop.component';\n\n@Component({\n selector: 'tree-view-node',\n templateUrl: './tree-view-node.component.html',\n styleUrls: ['./tree-view-node.component.css'],\n})\nexport class TreeViewNodeComponent implements OnInit {\n @ViewChildren('prop') treeViewProps: QueryList<TreeViewNodePropComponent>;\n\n @Input() node: TreeViewNode;\n @Input() hasExpand: boolean;\n\n public expanded: boolean = true;\n\n public get isObject(): boolean {\n return this.node.nodeType === TreeViewNodeTypes.Object;\n }\n\n public get isArray(): boolean {\n return this.node.nodeType === TreeViewNodeTypes.Array;\n }\n\n public get isPrimitive(): boolean {\n return this.node.nodeType === TreeViewNodeTypes.Primitive;\n }\n\n public get primitive(): { value: any; type: string; startTag: string } {\n const value = this.node.props[0].value;\n const startTag = this.node.props[0].startTag;\n const type = typeof value;\n\n return { value, type, startTag };\n }\n\n ngOnInit(): void {\n this.expanded = !this.hasExpand;\n }\n\n public toggleExpand() {\n this.expanded = !this.expanded;\n }\n\n public expandAll(): void {\n if (this.hasExpand) {\n this.expanded = true;\n }\n\n this.treeViewProps.forEach((x) => x.expandAll());\n }\n\n public collapseAll(): void {\n if (this.hasExpand) {\n this.expanded = false;\n }\n\n this.treeViewProps.forEach((x) => x.collapseAll());\n }\n}\n","import { Component, Input, QueryList, ViewChildren } from '@angular/core';\nimport { TreeViewProp } from '../models/TreeViewProp';\nimport { TreeViewPropTypes } from '../models/TreeViewPropTypes';\nimport { TreeViewNodeComponent } from '../tree-view-node/tree-view-node.component';\n\n@Component({\n selector: 'tree-view-node-prop',\n templateUrl: './tree-view-node-prop.component.html',\n styleUrls: ['./tree-view-node-prop.component.css'],\n})\nexport class TreeViewNodePropComponent {\n @ViewChildren('node') treeViewNodes: QueryList<TreeViewNodeComponent>;\n\n @Input() prop: TreeViewProp;\n\n public get isSimpleValue(): boolean {\n return !this.isArrayValue && !this.isObjectValue;\n }\n\n public get isArrayValue(): boolean {\n return this.prop.propType === TreeViewPropTypes.Array;\n }\n\n public get isObjectValue(): boolean {\n return this.prop.propType === TreeViewPropTypes.Object;\n }\n\n public get propClass(): string {\n return this.prop.propType === TreeViewPropTypes.Number\n ? 'number'\n : 'string';\n }\n\n public expandAll(): void {\n this.treeViewNodes.forEach((x) => x.expandAll());\n }\n\n public collapseAll(): void {\n this.treeViewNodes.forEach((x) => x.collapseAll());\n }\n}\n","import {\n Directive,\n HostListener,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n Input\n} from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Directive({\n selector: '[appDebounce]'\n})\nexport class DebounceDirective implements OnInit, OnDestroy {\n @Input() debounceTime = 500;\n @Output() debounceKeyup = new EventEmitter();\n private keyUp = new Subject();\n private subscription: Subscription;\n\n constructor() { }\n\n ngOnInit() {\n this.subscription = this.keyUp.pipe(\n debounceTime(this.debounceTime)\n ).subscribe(e => this.debounceKeyup.emit(e));\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n @HostListener('keyup', ['$event'])\n\n keyUpEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n this.keyUp.next(event);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'app-general-errors',\n templateUrl: './general-errors.component.html',\n styleUrls: ['./general-errors.component.css']\n})\nexport class GeneralErrorsComponent {\n\n @Input() form: FormGroup;\n errors: string[] = [];\n constructor() { }\n\n setErrors(errors: string[]): void {\n this.errors = errors;\n if (errors.length) {\n this.form.setErrors({'_general_errors_': errors });\n }\n }\n\n}\n","import { Component, ElementRef, Input } from '@angular/core';\nimport {\n ControlContainer,\n FormGroupDirective,\n Validators,\n ValidatorFn,\n} from '@angular/forms';\nimport { FieldComponent } from '../field.component';\n\n@Component({\n selector: 'field-input',\n templateUrl: './field-input.component.html',\n styleUrls: ['./field-input.component.css'],\n viewProviders: [\n { provide: ControlContainer, useExisting: FormGroupDirective },\n ],\n})\nexport class FieldInputComponent extends FieldComponent<string> {\n @Input()\n public labelKey: string;\n @Input()\n public fieldName: string;\n\n public type = 'text';\n\n constructor(public parent: FormGroupDirective, public eref: ElementRef) {\n super(parent, eref, '');\n }\n\n protected setAttribute(name: string, value: string): ValidatorFn {\n if (name === 'type') {\n this.type = value;\n }\n\n if (name === 'max-length') {\n return Validators.maxLength(parseInt(value, 10));\n }\n\n return super.setAttribute(name, value);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateLoader } from '@ngx-translate/core';\nimport { AppSettings } from './AppSettings';\n\n@Injectable({ providedIn: 'root' })\nexport abstract class IndiginaConfiguration {\n langs?: TranslateLoader;\n appSettings?: AppSettings;\n}\n","import { Component, ElementRef, Input } from '@angular/core';\nimport { ControlContainer, FormGroupDirective } from '@angular/forms';\nimport { FieldInputComponent } from './field-input.component';\n\nconst emptyString = '';\n\n@Component({\n selector: 'number-input',\n templateUrl: './field-input.component.html',\n viewProviders: [\n { provide: ControlContainer, useExisting: FormGroupDirective },\n ],\n})\nexport class NumberInputComponent extends FieldInputComponent {\n constructor(public parent: FormGroupDirective, public eref: ElementRef) {\n super(parent, eref);\n this.type = 'number';\n }\n\n @Input() isPositive: boolean = false;\n\n private cachedValue: number | string;\n\n ngAfterContentInit() {\n const control = this.parent.form.get(this.fieldName);\n control.valueChanges.subscribe((value) => {\n if (value !== this.cachedValue) {\n this.cachedValue =\n (!this.isPositive && (value || value === 0)) ||\n (this.isPositive && value >= 0 && value !== emptyString)\n ? +value\n : emptyString;\n\n control.setValue(this.cachedValue);\n }\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { RouterModule } from '@angular/router';\nimport { ClipboardModule } from 'ngx-clipboard';\nimport {\n TranslateLoader,\n TranslateModule,\n TranslateStore,\n} from '@ngx-translate/core';\nimport { HttpClientModule, HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { ToastrModule } from 'ngx-toastr';\nimport { SideMenuComponent } from './widgets/side-menu/side-menu.component';\nimport { MenuItemGroupComponent } from './widgets/side-menu/menu-item-group/menu-item-group.component';\nimport { TreeViewComponent } from './widgets/tree-view/tree-view.component';\nimport { TreeViewNodeComponent } from './widgets/tree-view/tree-view-node/tree-view-node.component';\nimport { TreeViewNodePropComponent } from './widgets/tree-view/tree-view-node-prop/tree-view-node-prop.component';\nimport { DebounceDirective } from './forms/directives/debounce.directive';\nimport { GeneralErrorsComponent } from './forms/widgets/general-errors/general-errors.component';\nimport { FieldInputComponent } from './forms/widgets/field/field-input/field-input.component';\nimport { LocaleSettingsService } from './services/locale-settings.service';\nimport { AppSettings } from './models/AppSettings';\nimport { IndiginaConfiguration } from './models/IndiginaConfiguration';\nimport { NumberInputComponent } from './forms/widgets/field/field-input/number-input.component';\nimport { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client';\n\nlet defaultConfig: IndiginaConfiguration = {\n langs: {\n getTranslation(): Observable<any> {\n return of({});\n },\n },\n appSettings: {\n accountUrl: '',\n apiUrl: '',\n toastrTimeOut: 2500,\n },\n};\n\n@NgModule({\n declarations: [\n SideMenuComponent,\n MenuItemGroupComponent,\n TreeViewComponent,\n TreeViewNodeComponent,\n TreeViewNodePropComponent,\n DebounceDirective,\n GeneralErrorsComponent,\n FieldInputComponent,\n NumberInputComponent,\n ],\n imports: [\n BrowserModule,\n HttpClientModule,\n TranslateModule.forChild({\n loader: {\n provide: TranslateLoader,\n useFactory: TranslateLoaderFactory,\n deps: [IndiginaConfiguration, HttpClient],\n },\n }),\n LoadingBarHttpClientModule,\n CommonModule,\n RouterModule,\n ReactiveFormsModule,\n ToastrModule.forRoot(),\n BrowserAnimationsModule,\n ],\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: LocaleServiceSettingsFactory,\n multi: true,\n deps: [LocaleSettingsService],\n },\n {\n provide: IndiginaConfiguration,\n useValue: defaultConfig,\n },\n {\n provide: AppSettings,\n useFactory: AppSettingsFactory,\n deps: [IndiginaConfiguration],\n },\n TranslateStore,\n ],\n exports: [\n SideMenuComponent,\n TreeViewComponent,\n DebounceDirective,\n GeneralErrorsComponent,\n FieldInputComponent,\n TranslateModule,\n ClipboardModule,\n LoadingBarHttpClientModule,\n ToastrModule,\n BrowserAnimationsModule,\n NumberInputComponent,\n ],\n})\nexport class IndiginaModule {\n public static forRoot(\n configuration: IndiginaConfiguration\n ): ModuleWithProviders<IndiginaModule> {\n return {\n ngModule: IndiginaModule,\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: LocaleServiceSettingsFactory,\n multi: true,\n deps: [LocaleSettingsService],\n },\n {\n provide: IndiginaConfiguration,\n useValue: configuration ? configuration : defaultConfig,\n },\n ],\n };\n }\n}\n\nexport function LocaleServiceSettingsFactory(\n localeService: LocaleSettingsService\n) {\n return function () {\n localeService.init();\n };\n}\n\nexport function TranslateLoaderFactory(\n configuration: IndiginaConfiguration\n): TranslateLoader {\n return configuration.langs;\n}\n\nexport function AppSettingsFactory(configuration: IndiginaConfiguration) {\n return configuration.appSettings;\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ISubscriptionControl } from '../../extensions/ISubscriptionControl';\n\n@Component({\n selector: 'live-updates-control',\n styleUrls: ['./live-updates-control.component.css'],\n templateUrl: './live-updates-control.component.html',\n})\nexport class LiveUpdatesControlComponent implements OnInit {\n @Input() subscription: ISubscriptionControl;\n\n ngOnInit(): void {\n this.subscription.resume();\n }\n\n public toggle(): void {\n this.subscription.connected\n ? this.subscription.pause()\n : this.subscription.resume();\n }\n}\n","import { ModalWindowComponent } from './widgets/modal-window/modal-window.component';\nimport { CurrentTimezoneComponent } from './widgets/current-timezone/current-timezone.component';\nimport { ActivityFilterComponent } from './widgets/activity-filter/activity-filter.component';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { PopupModule } from '@progress/kendo-angular-popup';\nimport { DialogsModule, WindowModule } from '@progress/kendo-angular-dialog';\nimport {\n OAuthModule,\n OAuthModuleConfig,\n OAuthStorage,\n} from 'angular-oauth2-oidc';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { TopMenuComponent } from './widgets/top-bar/top-bar.component';\nimport { FooterBarComponent } from './widgets/footer-bar/footer-bar.component';\nimport { AccountMenuComponent } from './components/account-menu/account-menu.component';\nimport { LanguageSelectorComponent } from './components/language-selector/language-selector.component';\nimport { PermissionsService } from './services/permissions.service';\nimport { AccountService } from './services/account.service';\nimport { GridModule, ExcelModule } from '@progress/kendo-angular-grid';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { TooltipModule } from '@progress/kendo-angular-tooltip';\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\nimport { EntityEditButtonsBarComponent } from './widgets/entity-edit/buttons-bar/buttons-bar.component';\nimport { EntityEditFormComponent } from './widgets/entity-edit/entity-edit-form.component';\nimport { EntityListComponent } from './widgets/entity-list/entity-list.component';\nimport { FieldDropdownComponent } from './widgets/entity-edit/field-dropdown/field-dropdown.component';\nimport { FieldMultiSelectComponent } from './widgets/entity-edit/field-multiselect/field-multiselect.component';\nimport { FieldDropdownlistComponent } from './widgets/entity-list/field-dropdownlist/field-dropdownlist.component';\nimport { ConfirmDialogComponent } from './widgets/confirm-dialog/confirm-dialog.component';\nimport { ExcelExportButtonComponent } from './widgets/excel-export-button/excel-export-button.component';\nimport { MulticheckFilterComponent } from './widgets/multicheck-filter/multicheck-filter.component';\nimport { RequirePermissionDirective } from './directives/requirePermission.directive';\nimport { IndiginaModule } from './angular/indigina.module';\nimport { AppSettings } from './angular/models/AppSettings';\nimport { IndiginaConfiguration } from './angular/models/IndiginaConfiguration';\nimport { SignalRService } from './services/signalr/signalr.service';\nimport { LiveUpdatesControlComponent } from './angular/widgets/live-updates-control/live-updates-control.component';\n\n@NgModule({\n declarations: [\n TopMenuComponent,\n FooterBarComponent,\n AccountMenuComponent,\n LanguageSelectorComponent,\n EntityEditButtonsBarComponent,\n EntityEditFormComponent,\n EntityListComponent,\n FieldDropdownComponent,\n FieldMultiSelectComponent,\n FieldDropdownlistComponent,\n ConfirmDialogComponent,\n ExcelExportButtonComponent,\n MulticheckFilterComponent,\n RequirePermissionDirective,\n ActivityFilterComponent,\n CurrentTimezoneComponent,\n ModalWindowComponent,\n LiveUpdatesControlComponent,\n ],\n imports: [\n CommonModule,\n RouterModule,\n IndiginaModule,\n OAuthModule.forRoot(),\n PopupModule,\n GridModule,\n ExcelModule,\n InputsModule,\n ButtonsModule,\n DialogsModule,\n CommonModule,\n FormsModule,\n WindowModule,\n DialogsModule,\n ReactiveFormsModule,\n DropDownsModule,\n TooltipModule,\n DateInputsModule,\n ],\n providers: [\n { provide: OAuthStorage, useValue: localStorage },\n AccountService,\n PermissionsService,\n SignalRService,\n ],\n exports: [\n TopMenuComponent,\n FooterBarComponent,\n AccountMenuComponent,\n LanguageSelectorComponent,\n IndiginaModule,\n PopupModule,\n OAuthModule,\n DropDownsModule,\n TooltipModule,\n DateInputsModule,\n WindowModule,\n DialogsModule,\n PopupModule,\n GridModule,\n ExcelModule,\n InputsModule,\n ButtonsModule,\n EntityEditButtonsBarComponent,\n EntityEditFormComponent,\n EntityListComponent,\n FieldDropdownComponent,\n FieldMultiSelectComponent,\n FieldDropdownlistComponent,\n ConfirmDialogComponent,\n ExcelExportButtonComponent,\n MulticheckFilterComponent,\n RequirePermissionDirective,\n ActivityFilterComponent,\n CurrentTimezoneComponent,\n ModalWindowComponent,\n LiveUpdatesControlComponent,\n ],\n})\nexport class KendoModule {\n public static forRoot(\n config: IndiginaConfiguration\n ): ModuleWithProviders<KendoModule> {\n return {\n ngModule: KendoModule,\n providers: [\n {\n provide: IndiginaConfiguration,\n useValue: config,\n },\n {\n provide: OAuthModuleConfig,\n useValue: {\n resourceServer: {\n allowedUrls: [config.appSettings.apiUrl],\n sendAccessToken: true,\n },\n },\n },\n ],\n };\n }\n}\n\nexport function OAuthConfigFactory(\n appSettings: AppSettings\n): OAuthModuleConfig {\n return {\n resourceServer: {\n allowedUrls: [appSettings?.apiUrl],\n sendAccessToken: true,\n },\n };\n}\n","import { ISubscriptionControl } from './ISubscriptionControl';\nimport { Observable, Subscription } from 'rxjs';\n\nexport class ReEntrySubscription<T> implements ISubscriptionControl {\n private subscription: Subscription;\n\n constructor(\n private observable: Observable<T>,\n private action: (event: T) => void\n ) {}\n\n public get connected(): boolean {\n return !this.subscription.closed;\n }\n\n public resume(): void {\n this.subscription = this.observable.subscribe(this.action);\n }\n\n public pause(): void {\n this.subscription.unsubscribe();\n }\n}\n","/*\n * Public API Surface of kendo\n */\nexport { FooterBarComponent } from './lib/widgets/footer-bar/footer-bar.component';\nexport { TopMenuComponent } from './lib/widgets/top-bar/top-bar.component';\nexport { Member } from './lib/models/Member';\nexport { MemberBase } from './lib/models/MemberBase';\nexport { MemberTypes } from './lib/models/MemberTypes';\nexport { OidcSettings } from './lib/models/OidcSettings';\nexport { Page } from './lib/models/Page';\nexport { PermissionTypes } from './lib/models/PermissionTypes';\nexport { Permissions } from './lib/models/Permissions';\nexport { ActivityFilter } from './lib/models/ActivityFilter';\nexport { CustomFilter } from './lib/models/CustomFilter';\nexport { CustomFilterElement } from './lib/models/CustomFilterElement';\nexport { FieldTypes } from './lib/models/FieldTypes';\nexport { FilterTargets } from './lib/models/FilterTargets';\nexport { Operators } from './lib/models/Operators';\nexport { IActivityEndpoints } from './lib/services/IActivityEndpoints';\nexport { IEntityEndpoints } from './lib/services/IEntityEndpoints';\nexport { IEntityService } from './lib/services/IEntityService';\nexport { AccountService } from './lib/services/account.service';\nexport { SignalRService } from './lib/services/signalr/signalr.service';\nexport { EventNames } from './lib/services/signalr/EventNames';\nexport {\n buildActivityEndpoints,\n buildEntityEndpoints,\n endpoints,\n} from './lib/services/endpoints';\nexport { EntityService } from './lib/services/entity.service';\nexport { PermissionsService } from './lib/services/permissions.service';\nexport { ActivityFilterService } from './lib/services/activity.filter.service';\nexport { AccountMenuComponent } from './lib/components/account-menu/account-menu.component';\nexport { LanguageSelectorComponent } from './lib/components/language-selector/language-selector.component';\nexport { MulticheckFilterComponent } from './lib/widgets/multicheck-filter/multicheck-filter.component';\nexport { EntityEditComponent } from './lib/widgets/entity-edit/entity-edit.component';\nexport { EntityEditFormComponent } from './lib/widgets/entity-edit/entity-edit-form.component';\nexport { EntityEditButtonsBarComponent } from './lib/widgets/entity-edit/buttons-bar/buttons-bar.component';\nexport { FieldDropdownComponent } from './lib/widgets/entity-edit/field-dropdown/field-dropdown.component';\nexport { FieldMultiSelectComponent } from './lib/widgets/entity-edit/field-multiselect/field-multiselect.component';\nexport { EntityListComponent } from './lib/widgets/entity-list/entity-list.component';\nexport {\n urlDeserialize,\n urlSerialize,\n} from './lib/widgets/entity-list/UrlSerializer';\nexport { Field } from './lib/widgets/entity-list/Field';\nexport { FieldDropdownlistComponent } from './lib/widgets/entity-list/field-dropdownlist/field-dropdownlist.component';\nexport { Command } from './lib/widgets/entity-list/Command';\nexport { ConfirmDialogComponent } from './lib/widgets/confirm-dialog/confirm-dialog.component';\nexport { ExcelExportButtonComponent } from './lib/widgets/excel-export-button/excel-export-button.component';\nexport { ActivityFilterComponent } from './lib/widgets/activity-filter/activity-filter.component';\nexport { CurrentTimezoneComponent } from './lib/widgets/current-timezone/current-timezone.component';\nexport { ModalWindowComponent } from './lib/widgets/modal-window/modal-window.component';\nexport { RequirePermissionDirective } from './lib/directives/requirePermission.directive';\nexport { KendoModule } from './lib/kendo.module';\nexport {\n OAuthModule,\n OAuthService,\n OAuthStorage,\n OAuthModuleConfig,\n} from 'angular-oauth2-oidc';\nimport * as momentModule from 'moment-timezone';\nexport const momentTimezone = momentModule;\nexport { TreeViewComponent } from './lib/angular/widgets/tree-view/tree-view.component';\nexport { SideMenuComponent } from './lib/angular/widgets/side-menu/side-menu.component';\nexport { MenuItem } from './lib/angular/widgets/side-menu/MenuItem';\nexport { DebounceDirective } from './lib/angular/forms/directives/debounce.directive';\nexport { FormGroupWithErrors } from './lib/angular/forms/extensions/FormGroupWithErrors';\nexport { GeneralErrorsComponent } from './lib/angular/forms/widgets/general-errors/general-errors.component';\nexport { FieldInputComponent } from './lib/angular/forms/widgets/field/field-input/field-input.component';\nexport { NumberInputComponent } from './lib/angular/forms/widgets/field/field-input/number-input.component';\nexport { HttpService } from './lib/angular/services/http.service';\nexport { LocaleSettingsService } from './lib/angular/services/locale-settings.service';\nexport { SettingsService } from './lib/angular/services/settings.service';\nexport { AppToastrService } from './lib/angular/services/toastr.service';\nexport { AppSettings } from './lib/angular/models/AppSettings';\nexport type { CustomHttpErrorResponse } from './lib/angular/models/CustomHttpErrorResponse';\nexport { HttpCodes } from './lib/angular/models/HttpCodes';\nexport { HttpMethods } from './lib/angular/models/HttpMethods';\nexport { IdentifiedModel } from './lib/angular/models/IdentifiedModel';\nexport { IndiginaConfiguration } from './lib/angular/models/IndiginaConfiguration';\nexport { Language } from './lib/angular/models/Language';\nexport { NamedModel } from './lib/angular/models/NamedModel';\nexport { FieldComponent } from './lib/angular/forms/widgets/field/field.component';\nexport { ReEntrySubscription } from './lib/angular/extensions/ReEntrySubscription';\nexport { ISubscriptionControl } from './lib/angular/extensions/ISubscriptionControl';\nexport { LiveUpdatesControlComponent } from './lib/angular/widgets/live-updates-control/live-updates-control.component';\nexport { IndiginaModule } from '././lib/angular/indigina.module';\nexport { BaseAccountService } from '././lib/services/base.account.service';\nexport { LogLevel } from '@microsoft/signalr';\nexport * from '@angular/platform-browser/animations';\nexport * from '@ngx-translate/core';\nexport * from 'ngx-toastr';\nexport * from 'ngx-clipboard';\nexport * from '@ngx-loading-bar/http-client';\n","import { NamedModel } from './NamedModel';\n\nexport const HttpMethods: NamedModel[] = [\n { name: 'POST', id: 'POST' },\n { name: 'PUT', id: 'PUT' },\n { name: 'GET', id: 'GET' },\n { name: 'DELETE', id: 'DELETE' },\n];\n"]}
1
+ {"version":3,"sources":["../../../projects/kendo/src/lib/angular/forms/directives/debounce.directive.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/kendo/src/lib/angular/forms/widgets/field/field.component.ts","../../../projects/kendo/src/lib/angular/forms/widgets/field/field-input/field-input.component.ts","../../../projects/kendo/src/lib/angular/forms/widgets/field/field-input/number-input.component.ts","../../../projects/kendo/src/lib/angular/forms/widgets/general-errors/general-errors.component.ts","../../../projects/kendo/src/lib/angular/models/AppSettings.ts","../../../projects/kendo/src/lib/angular/models/IndiginaConfiguration.ts","../../../projects/kendo/src/lib/angular/services/locale-settings.service.ts","../../../projects/kendo/src/lib/angular/widgets/side-menu/menu-item-group/menu-item-group.component.ts","../../../projects/kendo/src/lib/angular/widgets/side-menu/side-menu.component.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/models/TreeViewPropTypes.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/models/TreeViewNodeTypes.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/tree-view-node-prop/tree-view-node-prop.component.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/models/ContentTypesFormat.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/tree-view-node/tree-view-node.component.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/AbstractContentResolver.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Converters/EnumTypeGetter.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Converters/JsonConverter.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Resolvers/JsonResolver.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Converters/TextConverter.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Resolvers/TextResolver.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Converters/XmlConverter.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/Resolvers/XmlResolver.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/ContentResolver/ContentResolver.ts","../../../projects/kendo/src/lib/angular/widgets/tree-view/tree-view.component.ts","../../../projects/kendo/src/lib/angular/indigina.module.ts","../../../projects/kendo/src/lib/services/signalr/EventNames.ts","../../../projects/kendo/src/lib/services/endpoints.ts","../../../projects/kendo/src/lib/services/base.account.service.ts","../../../projects/kendo/src/lib/angular/models/HttpCodes.ts","../../../projects/kendo/src/lib/angular/extensions/ReEntrySubscription.ts","../../../projects/kendo/src/lib/angular/forms/extensions/FormGroupWithErrors.ts","../../../projects/kendo/src/lib/angular/services/settings.service.ts","../../../projects/kendo/src/lib/angular/services/toastr.service.ts","../../../projects/kendo/src/lib/angular/services/http.service.ts","../../../projects/kendo/src/lib/models/AuthProviders.ts","../../../projects/kendo/src/lib/angular/widgets/live-updates-control/live-updates-control.component.ts","../../../projects/kendo/src/lib/services/auth.providers/AuthProvider.ts","../../../projects/kendo/src/lib/services/auth.providers/azureb2c.provider.ts","../../../projects/kendo/src/lib/services/auth.providers/oauth.provider.ts","../../../projects/kendo/src/lib/services/auth-provider.resolver.ts","../../../projects/kendo/src/lib/services/signalr/signalr.service.ts","../../../projects/kendo/src/lib/services/account.service.ts","../../../projects/kendo/src/lib/components/account-menu/account-menu.component.ts","../../../projects/kendo/src/lib/components/azure-login-callback/azure-login-callback.component.ts","../../../projects/kendo/src/lib/components/language-selector/language-selector.component.ts","../../../projects/kendo/src/lib/config/msal-instance.factory.ts","../../../projects/kendo/src/lib/services/permissions.service.ts","../../../projects/kendo/src/lib/directives/requirePermission.directive.ts","../../../projects/kendo/src/lib/interceptors/auth-headers.interceptor.ts","../../../projects/kendo/src/lib/models/FieldTypes.ts","../../../projects/kendo/src/lib/widgets/activity-filter/activity-filter.component.ts","../../../projects/kendo/src/lib/widgets/confirm-dialog/confirm-dialog.component.ts","../../../projects/kendo/src/lib/widgets/current-timezone/current-timezone.component.ts","../../../projects/kendo/src/lib/widgets/entity-edit/buttons-bar/buttons-bar.component.ts","../../../projects/kendo/src/lib/widgets/entity-edit/entity-edit-form.component.ts","../../../projects/kendo/src/lib/widgets/entity-edit/field-dropdown/field-dropdown.component.ts","../../../projects/kendo/src/lib/widgets/entity-edit/field-multiselect/field-multiselect.component.ts","../../../projects/kendo/src/lib/widgets/entity-list/UrlSerializer.ts","../../../projects/kendo/src/lib/widgets/entity-list/entity-list.component.ts","../../../projects/kendo/src/lib/widgets/entity-list/field-dropdownlist/field-dropdownlist.component.ts","../../../projects/kendo/src/lib/widgets/excel-export-button/excel-export-button.component.ts","../../../projects/kendo/src/lib/widgets/footer-bar/footer-bar.component.ts","../../../projects/kendo/src/lib/widgets/modal-window/modal-window.component.ts","../../../projects/kendo/src/lib/widgets/multicheck-filter/multicheck-filter.component.ts","../../../projects/kendo/src/lib/widgets/top-bar/top-bar.component.ts","../../../projects/kendo/src/lib/models/FilterTargets.ts","../../../projects/kendo/src/lib/models/MemberTypes.ts","../../../projects/kendo/src/lib/models/Operators.ts","../../../projects/kendo/src/lib/models/PermissionTypes.ts","../../../projects/kendo/src/lib/kendo.module.ts","../../../projects/kendo/src/lib/widgets/activity-filter/FilterConverter.ts","../../../projects/kendo/src/lib/services/activity.filter.service.ts","../../../projects/kendo/src/lib/services/entity.service.ts","../../../projects/kendo/src/lib/widgets/entity-edit/entity-edit.component.ts","../../../projects/kendo/src/public-api.ts","../../../projects/kendo/src/lib/angular/models/HttpMethods.ts"],"names":["DebounceDirective","this","debounceTime","debounceKeyup","EventEmitter","keyUp","Subject","prototype","ngOnInit","_this","subscription","pipe","subscribe","e","emit","ngOnDestroy","unsubscribe","keyUpEvent","event","preventDefault","stopPropagation","next","Directive","args","selector","Input","Output","HostListener","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__extends","TypeError","String","__","constructor","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","pop","length","push","__values","o","s","m","i","__read","r","ar","error","__spread","arguments","concat","id","FieldComponent","parent","eref","defaultValue","disabled","disabledKey","setUp","fieldName","validators","_b","nativeElement","attributes","_c","attr","validator","setAttribute","name","control","form","get","setValidators","updateValueAndValidity","addControl","FormControl","Validators","required","FormGroupDirective","ElementRef","FieldInputComponent","_super","type","maxLength","parseInt","Component","template","viewProviders","provide","ControlContainer","useExisting","NumberInputComponent","isPositive","ngAfterContentInit","valueChanges","cachedValue","setValue","GeneralErrorsComponent","errors","setErrors","_general_errors_","Injectable","providedIn","languageKey","LocaleSettingsService","translate","languages","code","init","addLangs","map","x","localeId","getLocale","setLocale","getLocales","localStorage","getItem","locale","use","setItem","TranslateService","MenuItemGroupComponent","router","collapsed","isActive","url","exact","_a","routerState","snapshot","root","children","toString","routeConfig","path","split","setActualPath","events","NavigationEnd","ngOnChanges","setItemExpand","collapseChild","activeItem","item","expanded","text","items","some","undefined","link","actualPath","Router","TreeViewPropTypes","SideMenuComponent","logoClick","onLogoClick","collapse","itemComponent","forEach","TreeViewNodeTypes","TreeViewNodePropComponent","defineProperty","isArrayValue","isObjectValue","prop","propType","Number","expandAll","treeViewNodes","collapseAll","ViewChildren","ContentTypesFormat","TreeViewNodeComponent","node","nodeType","Primitive","props","startTag","hasExpand","toggleExpand","treeViewProps","AbstractContentResolver","resolver","nextResolver","data","getPropTypeFromKey","key","values","find","objectBrackets","inside","outside","arrayBrackets","JsonConverter","convert","source","isArray","convertArray","convertObject","keys","propType_1","brackets","nodes","index","getPrimitive","assign","JsonResolver","json","JSON","parse","format","Json","TextConverter","TextResolver","Text","XmlConverter","childElementCount","childNodes","convertProp","tagName","textContent","endTag","childs","childs_1","childs_1_1","XmlResolver","oDOM","DOMParser","parseFromString","all","getElementsByTagName","Xml","ContentResolver","chain","TreeViewComponent","clipboardService","maxTextLength","maxRootItems","resolved","hasTextCollapse","hasNodeCollapse","rawView","contentResolver","allShow","hasCollapse","expandToggle","toggleExpandAll","toggleRawView","copyToClipboard","copy","ClipboardService","defaultConfig","langs","getTranslation","of","appSettings","accountUrl","apiUrl","toastrTimeOut","oidc","clientId","authority","issuer","azureB2C","knownAuthorities","IndiginaModule","forRoot","configuration","ngModule","providers","APP_INITIALIZER","useFactory","LocaleServiceSettingsFactory","multi","deps","IndiginaConfiguration","useValue","localeService","TranslateLoaderFactory","AppSettingsFactory","NgModule","declarations","imports","BrowserModule","HttpClientModule","TranslateModule","forChild","loader","TranslateLoader","HttpClient","LoadingBarHttpClientModule","CommonModule","RouterModule","ReactiveFormsModule","ToastrModule","BrowserAnimationsModule","ɵ0$3","AppSettings","TranslateStore","exports","ClipboardModule","EventNames","endpoints","signalr","eventsHub","config","members","me","admins","buildEntityEndpoints","roles","system","info","firstUser","partners","permissions","member","mine","users","apiTokens","guidFormat","query","state","toODataString","utcDates","replace","entityPath","HttpCodes","adminUriPart","BaseAccountService","httpService","settingsService","signalRService","user","BehaviorSubject","getProvider","provider","initialize","login","logout","clearLoginAsUser","getCurrentUser","getCallbackPath","clearCallbackPath","window","location","href","origin","isAdmin","pathname","startsWith","getAccessToken","token","startConnection","on","UserUpdated","reconnect","mergeMap","getValue","isUserLoggedIn","ReEntrySubscription","observable","action","closed","resume","pause","FormGroupWithErrors","controls","validatorOrOpts","asyncValidator","generalErrors","getControl","contains","applyServerErrors","title","ctrl","serverErrorMsg","join","FormGroup","callbackPathKey","loginAsKey","tokenKey","SettingsService","putCurrentCallbackPath","putCallbackPath","hash","pathUri","removeItem","setLoginAsUser","getLoginAsUser","setToken","getToken","AppToastrService","toastr","timeout","showError","message","timeOut","showSuccess","success","ToastrService","absoluteUrlRegExp","HttpService","appToastrService","httpClient","createUrl","catchError","err","handleServerError","delete","tap","showSuccessMessage","post","successTranslateMessage","put","test","ErrorEvent","status","Unauthorized","instant","Forbidden","navigate","NotFound","setTimeout","InternalServerError","throwError","AuthProviders","LiveUpdatesControlComponent","toggle","connected","AzureB2CProvider","authService","instance","getActiveAccount","localAccountId","loginRedirect","logoutRedirect","postLogoutRedirectUri","request","scopes","from","acquireTokenSilent","authenticationResult","idToken","catch","InteractionRequiredAuthError","acquireTokenRedirect","AuthProvider","OAuthProvider","oauthService","hasValidAccessToken","authConfig","redirectUri","scope","silentRefreshRedirectUri","configure","initLoginFlow","logOut","tokenValidationHandler","JwksValidationHandler","setupAutomaticSilentRefresh","loadDiscoveryDocument","tryLoginImplicitFlow","msalService","indiginaConfiguration","AuthProvider$","filter","identityProvider","IdentityServer","OAuthService","MsalService","SignalRService","isConnectionEstablished","eventEmitters","createConnection","hubConnection","signalR","HubConnectionBuilder","withUrl","accessTokenFactory","configureLogging","signalRLogLevel","LogLevel","None","build","onclose","start","eventName","model","console","warn","stop","AccountService","AuthProviderResolver","AccountMenuComponent","accountService","expand","languageSelectorVisible","firstName","lastName","toogle","openLanguageSelector","clickedOutside","target","ViewChild","AzureLoginCallbackComponent","handleRedirectObservable","setActiveAccount","account","LanguageSelectorComponent","settings","visibleChange","currentLanguageCode","changeLanguage","close","visible","isIE","navigator","userAgent","indexOf","MSALInstanceFactory","msalConfig","auth","navigateToLoginRequestUrl","cache","cacheLocation","BrowserCacheLocation","SessionStorage","storeAuthStateInCookie","loggerOptions","loggerCallback","piiLoggingEnabled","PublicClientApplication","PermissionsService","loaded","PermissionsUpdated","getPermissionsFromServer","getAll","memberType","getMine","hiddenClass","RequirePermissionDirective","elementRef","route","permissionsService","renderer","hide","category","permissionCategory","getRouteCategory","hasType","show","addClass","removeClass","types","permissionType","includes","routeData","permission","ActivatedRoute","Renderer2","FieldTypes","AuthHeadersInterceptor","intercept","headers","modified","clone","setHeaders","Authorization","handle","ActivityFilterComponent","showArchiveSwitcher","showSearhText","defaultNamedModel","customFilterElements","element","valueField","filterService","filter$","changeFilter","setTodayFilter","setToday","clearFilter","reset","emitChangeEvents","applyFilter","setCustomFilters","fieldChange","change","fillFilter","customFilters","field","filterTarget","findIndex","splice","fixMultiselectFilters","multiSelectFilters","fieldType","Multiselect","ConfirmDialogComponent","dialogService","cancel","dialog","callback","confirm","open","content","actions","dialogActions","DialogService","static","moment","momentModule","CurrentTimezoneComponent","timeZone","tz","guess","timeZoneAndOffset","save","EntityEditFormComponent","saveInProgress","params","formGroup","adapter","getService","setForm","finalize","onSaved","FieldDropdownComponent","getData","service","getPage","FieldMultiSelectComponent","urlSerialize","object","serialized","serializedObject","isEmptyObject","stringify","slice","isDate","date","isNaN","Date","urlDeserialize","deserialized","param","gridFilter","transformFilters","filters","filterDescriptor","compositeFilterDescriptor","nameField","EntityListComponent","filterChange","gridState","loadings","selected","gridFields","defaultFields","sortable","position","getAllData","bind","getRowClass","changes","firstChange","getFilteredData","fields","sort","left","right","commands","fragment","restoreGridState","URLSearchParams","firstChild","removeHandler","dataItem","remove","selectItem","relativeTo","onActivate","child","saved","updateGrid","onDeactivate","dataStateChange","skip","onSearch","searchTerm","take","context","rowClass","getFilter","exists","page","total","preserveFragment","entity","logic","operator","onFilterChange","defaultGridState","defaultSort","dir","FieldDropdownlistComponent","valueChange","defaultItem","onLangChange","initialSelectedId","selectedItem","kendoDropDown","writeValue","onValueChange","initSelectedId","ModalWindowComponent","opened","callbackPath","MulticheckFilterComponent","showFilter","ngAfterViewInit","currentData","traverseFilters","currentFilter","innerFilter","isItemSelected","ValueKey","onSelectionChange","selectedValue","onInput","distinct","val","filterBy","TopMenuComponent","toggleButtonClick","document","classList","FilterTargets","MemberTypes","Operators","PermissionTypes","KendoModule","OAuthModuleConfig","resourceServer","allowedUrls","sendAccessToken","MSAL_INSTANCE","FooterBarComponent","EntityEditButtonsBarComponent","ExcelExportButtonComponent","OAuthModule","PopupModule","GridModule","ExcelModule","InputsModule","ButtonsModule","DialogsModule","FormsModule","WindowModule","DropDownsModule","TooltipModule","DateInputsModule","MsalModule","OAuthStorage","ɵ0","HTTP_INTERCEPTORS","useClass","FilterConverter","toGridState","DateFilterFieldName","mainFilter","group","dateFrom","gte","dateTo","lte","Grid","multiselectFilter_1","filterKey","ActivityFilterService","defaultFilter","switchToArchive","searchText","DateFilterStartFieldName","filterBehavior","gridStateBehavior","asObservable","gridState$","parsed","currentGridState","fillCurrentFilter","setTodayDates","setFilter","stateNavigation","prepareFilterToSerialize","setGridState","now","getFullYear","getMonth","getDate","Url","fillFromDescriptor","fillUrlFilter","eq","setFieldFilter","EntityService","EntityEditComponent","momentTimezone","search","uri","detailedActivity","partnerId"],"mappings":"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","sourcesContent":["import {\n Directive,\n HostListener,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n Input\n} from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\n@Directive({\n selector: '[appDebounce]'\n})\nexport class DebounceDirective implements OnInit, OnDestroy {\n @Input() debounceTime = 500;\n @Output() debounceKeyup = new EventEmitter();\n private keyUp = new Subject();\n private subscription: Subscription;\n\n constructor() { }\n\n ngOnInit() {\n this.subscription = this.keyUp.pipe(\n debounceTime(this.debounceTime)\n ).subscribe(e => this.debounceKeyup.emit(e));\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n @HostListener('keyup', ['$event'])\n\n keyUpEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n this.keyUp.next(event);\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 { OnInit, Input, ElementRef, Directive } from '@angular/core';\nimport {\n FormGroupDirective,\n FormControl,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\n\nlet id: number = 0;\n\n@Directive()\nexport abstract class FieldComponent<T> implements OnInit {\n @Input() labelKey: string;\n @Input() fieldName: string;\n @Input() disabled: boolean = false;\n \n public disabledKey = 'disabled';\n public id: string;\n\n constructor(\n public parent: FormGroupDirective,\n public eref: ElementRef,\n private defaultValue: T\n ) {}\n\n ngOnInit(): void {\n this.setUp();\n }\n\n protected setUp(): void {\n this.id = '_' + this.fieldName + ++id;\n const validators: ValidatorFn[] = [];\n for (const attr of this.eref.nativeElement.attributes as [\n { name: string; value: string }\n ]) {\n const validator = this.setAttribute(attr.name, attr.value);\n if (validator) {\n validators.push(validator);\n }\n }\n\n const control = this.parent.form.get(this.fieldName);\n if (control) {\n if (control.validator) {\n validators.push(control.validator);\n }\n\n control.setValidators(validators);\n control.updateValueAndValidity();\n } else {\n this.parent.form.addControl(\n this.fieldName,\n new FormControl(this.defaultValue, validators)\n );\n }\n }\n\n protected setAttribute(name: string, value: string): ValidatorFn {\n if (name === this.disabledKey) {\n this.disabled = true;\n\n return;\n }\n\n if (name === 'required') {\n return Validators.required;\n }\n }\n}\n","import { Component, ElementRef, Input } from '@angular/core';\nimport {\n ControlContainer,\n FormGroupDirective,\n Validators,\n ValidatorFn,\n} from '@angular/forms';\nimport { FieldComponent } from '../field.component';\n\n@Component({\n selector: 'field-input',\n templateUrl: './field-input.component.html',\n styleUrls: ['./field-input.component.css'],\n viewProviders: [\n { provide: ControlContainer, useExisting: FormGroupDirective },\n ],\n})\nexport class FieldInputComponent extends FieldComponent<string> {\n @Input()\n public labelKey: string;\n @Input()\n public fieldName: string;\n\n public type = 'text';\n\n constructor(public parent: FormGroupDirective, public eref: ElementRef) {\n super(parent, eref, '');\n }\n\n protected setAttribute(name: string, value: string): ValidatorFn {\n if (name === 'type') {\n this.type = value;\n }\n\n if (name === 'max-length') {\n return Validators.maxLength(parseInt(value, 10));\n }\n\n return super.setAttribute(name, value);\n }\n}\n","import { Component, ElementRef, Input } from '@angular/core';\nimport { ControlContainer, FormGroupDirective } from '@angular/forms';\nimport { FieldInputComponent } from './field-input.component';\n\nconst emptyString = '';\n\n@Component({\n selector: 'number-input',\n templateUrl: './field-input.component.html',\n viewProviders: [\n { provide: ControlContainer, useExisting: FormGroupDirective },\n ],\n})\nexport class NumberInputComponent extends FieldInputComponent {\n constructor(public parent: FormGroupDirective, public eref: ElementRef) {\n super(parent, eref);\n this.type = 'number';\n }\n\n @Input() isPositive: boolean = false;\n\n private cachedValue: number | string;\n\n ngAfterContentInit() {\n const control = this.parent.form.get(this.fieldName);\n control.valueChanges.subscribe((value) => {\n if (value !== this.cachedValue) {\n this.cachedValue =\n (!this.isPositive && (value || value === 0)) ||\n (this.isPositive && value >= 0 && value !== emptyString)\n ? +value\n : emptyString;\n\n control.setValue(this.cachedValue);\n }\n });\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'app-general-errors',\n templateUrl: './general-errors.component.html',\n styleUrls: ['./general-errors.component.css']\n})\nexport class GeneralErrorsComponent {\n\n @Input() form: FormGroup;\n errors: string[] = [];\n constructor() { }\n\n setErrors(errors: string[]): void {\n this.errors = errors;\n if (errors.length) {\n this.form.setErrors({'_general_errors_': errors });\n }\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { LogLevel } from '@microsoft/signalr';\nimport { AzureB2CSettings } from '../../models/AzureB2CSettings';\nimport { OidcSettings } from '../../models/OidcSettings';\n\n@Injectable({\n providedIn: 'root',\n})\nexport abstract class AppSettings {\n apiUrl: string;\n accountUrl: string;\n toastrTimeOut: number;\n signalRLogLevel?: LogLevel;\n oidc: OidcSettings;\n azureB2C: AzureB2CSettings;\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateLoader } from '@ngx-translate/core';\nimport { AppSettings } from './AppSettings';\n\n@Injectable({ providedIn: 'root' })\nexport abstract class IndiginaConfiguration {\n langs?: TranslateLoader;\n appSettings?: AppSettings;\n}\n","import { Injectable } from '@angular/core';\nimport { Language } from '../models/Language';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst languageKey = 'language';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LocaleSettingsService {\n private languages: Language[] = [\n { name: 'English', code: 'en-US' },\n { name: 'Русский', code: 'ru-RU' },\n ];\n private localeId: string;\n\n constructor(private translate: TranslateService) {}\n\n init(): void {\n this.translate.addLangs(this.languages.map((x) => x.code));\n this.localeId = this.getLocale();\n this.setLocale(this.localeId || this.languages[0].code);\n }\n\n getLocales(): Language[] {\n return this.languages;\n }\n\n getLocale(): string {\n if (localStorage) {\n return localStorage.getItem(languageKey) || this.localeId;\n } else {\n return this.localeId;\n }\n }\n\n setLocale(locale: string) {\n this.translate.use(locale);\n this.localeId = locale;\n if (localStorage) {\n localStorage.setItem(languageKey, locale);\n }\n }\n}\n","import { Component, Input, OnChanges, OnInit } from '@angular/core';\nimport { MenuItem } from '../MenuItem';\nimport {\n Router,\n NavigationEnd,\n RouterStateSnapshot,\n UrlTree,\n} from '@angular/router';\n\nconst urlDelimiter = '/';\nconst collapsedEvent = 'collapsed';\n\n@Component({\n selector: '[menu-item-group]',\n templateUrl: './menu-item-group.component.html',\n styleUrls: ['./menu-item-group.component.css'],\n})\nexport class MenuItemGroupComponent implements OnChanges, OnInit {\n @Input() item: MenuItem;\n collapsed: boolean = false;\n private actualPath: string;\n\n constructor(private router: Router) {\n this.router.isActive = function (\n url: string | UrlTree,\n exact: boolean\n ): boolean {\n return this.routerState.snapshot.root.children?.length\n ? url.toString() ===\n urlDelimiter +\n this.routerState.snapshot.root.children[0].routeConfig.path.split(\n '/:'\n )[0]\n : false;\n };\n }\n\n ngOnInit(): void {\n this.setActualPath(this.router.routerState.snapshot);\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.setActualPath(this.router.routerState.snapshot);\n }\n });\n }\n\n ngOnChanges(): void {\n this.setItemExpand();\n }\n\n collapseChild(activeItem: MenuItem, event: MouseEvent) {\n this.item.expanded =\n this.item.text === activeItem.text &&\n !this.item.expanded &&\n !!this.item.items;\n\n if (!activeItem.items || activeItem.items.length === 0) {\n event[collapsedEvent] = true;\n } else {\n event[collapsedEvent] = false;\n }\n }\n\n private setItemExpand() {\n this.item.expanded = this.item.items?.some((x) => {\n return x.link !== undefined && x.link === this.actualPath;\n });\n }\n\n private setActualPath(snapshot: RouterStateSnapshot): void {\n if (snapshot.root.children?.length) {\n this.actualPath =\n urlDelimiter +\n snapshot.root.children[0].routeConfig.path.split('/:')[0];\n this.setItemExpand();\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MenuItemGroupComponent } from './menu-item-group/menu-item-group.component';\nimport { MenuItem } from './MenuItem';\n\nconst collapsedEvent = 'collapsed';\n@Component({\n selector: 'side-menu',\n templateUrl: './side-menu.component.html',\n styleUrls: ['./side-menu.component.css'],\n})\nexport class SideMenuComponent {\n @Input() items: MenuItem[];\n @Output() logoClick = new EventEmitter();\n\n onLogoClick() {\n this.logoClick.emit();\n }\n\n collapse(\n itemComponent: MenuItemGroupComponent,\n activeItem: MenuItem,\n event: MouseEvent\n ) {\n this.items?.forEach((item) => {\n if (item.text !== activeItem.text && item.expanded) {\n item.expanded = false;\n }\n });\n if (event[collapsedEvent]) {\n itemComponent.collapsed = true;\n } else {\n itemComponent.collapsed = false;\n }\n }\n}\n","export enum TreeViewPropTypes {\n String = 'string',\n Number = 'number',\n Object = 'object',\n Array = 'array',\n}\n","export enum TreeViewNodeTypes {\n Object = 'object',\n Array = 'array',\n Primitive = 'primitive',\n}\n","import { Component, Input, QueryList, ViewChildren } from '@angular/core';\nimport { TreeViewProp } from '../models/TreeViewProp';\nimport { TreeViewPropTypes } from '../models/TreeViewPropTypes';\nimport { TreeViewNodeComponent } from '../tree-view-node/tree-view-node.component';\n\n@Component({\n selector: 'tree-view-node-prop',\n templateUrl: './tree-view-node-prop.component.html',\n styleUrls: ['./tree-view-node-prop.component.css'],\n})\nexport class TreeViewNodePropComponent {\n @ViewChildren('node') treeViewNodes: QueryList<TreeViewNodeComponent>;\n\n @Input() prop: TreeViewProp;\n\n public get isSimpleValue(): boolean {\n return !this.isArrayValue && !this.isObjectValue;\n }\n\n public get isArrayValue(): boolean {\n return this.prop.propType === TreeViewPropTypes.Array;\n }\n\n public get isObjectValue(): boolean {\n return this.prop.propType === TreeViewPropTypes.Object;\n }\n\n public get propClass(): string {\n return this.prop.propType === TreeViewPropTypes.Number\n ? 'number'\n : 'string';\n }\n\n public expandAll(): void {\n this.treeViewNodes.forEach((x) => x.expandAll());\n }\n\n public collapseAll(): void {\n this.treeViewNodes.forEach((x) => x.collapseAll());\n }\n}\n","export enum ContentTypesFormat {\n Json = 'json',\n Xml = 'xml',\n Text = 'text',\n}\n","import {\n Component,\n Input,\n OnInit,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport { TreeViewNode } from '../models/TreeViewNode';\nimport { TreeViewNodeTypes } from '../models/TreeViewNodeTypes';\nimport { TreeViewNodePropComponent } from '../tree-view-node-prop/tree-view-node-prop.component';\n\n@Component({\n selector: 'tree-view-node',\n templateUrl: './tree-view-node.component.html',\n styleUrls: ['./tree-view-node.component.css'],\n})\nexport class TreeViewNodeComponent implements OnInit {\n @ViewChildren('prop') treeViewProps: QueryList<TreeViewNodePropComponent>;\n\n @Input() node: TreeViewNode;\n @Input() hasExpand: boolean;\n\n public expanded: boolean = true;\n\n public get isObject(): boolean {\n return this.node.nodeType === TreeViewNodeTypes.Object;\n }\n\n public get isArray(): boolean {\n return this.node.nodeType === TreeViewNodeTypes.Array;\n }\n\n public get isPrimitive(): boolean {\n return this.node.nodeType === TreeViewNodeTypes.Primitive;\n }\n\n public get primitive(): { value: any; type: string; startTag: string } {\n const value = this.node.props[0].value;\n const startTag = this.node.props[0].startTag;\n const type = typeof value;\n\n return { value, type, startTag };\n }\n\n ngOnInit(): void {\n this.expanded = !this.hasExpand;\n }\n\n public toggleExpand() {\n this.expanded = !this.expanded;\n }\n\n public expandAll(): void {\n if (this.hasExpand) {\n this.expanded = true;\n }\n\n this.treeViewProps.forEach((x) => x.expandAll());\n }\n\n public collapseAll(): void {\n if (this.hasExpand) {\n this.expanded = false;\n }\n\n this.treeViewProps.forEach((x) => x.collapseAll());\n }\n}\n","import { IContentResolver } from './IContentResolver';\nimport { ResolverResult } from '../models/ResolverResult';\n\nexport abstract class AbstractContentResolver implements IContentResolver {\n private nextResolver: IContentResolver;\n\n constructor(resolver: IContentResolver) {\n this.nextResolver = resolver;\n }\n\n resolve(data: string): ResolverResult {\n if (this.nextResolver) {\n return this.nextResolver.resolve(data);\n }\n\n return null;\n }\n}\n","import { TreeViewNodeTypes } from '../../models/TreeViewNodeTypes';\nimport { TreeViewPropTypes } from '../../models/TreeViewPropTypes';\n\nexport function getPropTypeFromKey(key: string): TreeViewPropTypes {\n return (\n Object.values(TreeViewPropTypes).find((x) => x === key) ||\n TreeViewPropTypes.String\n );\n}\n\nexport function getNodeTypeFromKey(key: string): TreeViewNodeTypes {\n return (\n Object.values(TreeViewNodeTypes).find((x) => x === key) ||\n TreeViewNodeTypes.Object\n );\n}\n","import { TreeViewNode } from '../../models/TreeViewNode';\nimport { TreeViewNodeTypes } from '../../models/TreeViewNodeTypes';\nimport { TreeViewProp } from '../../models/TreeViewProp';\nimport { TreeViewPropTypes } from '../../models/TreeViewPropTypes';\nimport { getPropTypeFromKey, getNodeTypeFromKey } from './EnumTypeGetter';\n\nconst objectBrackets = { inside: '{', outside: '}' };\nconst arrayBrackets = { inside: '[', outside: ']' };\n\nexport class JsonConverter {\n public static convert(\n source: Array<object> | object\n ): Array<TreeViewNode> | TreeViewNode {\n if (Array.isArray(source)) {\n return this.convertArray(source);\n }\n\n return this.convertObject(source);\n }\n\n private static convertObject(source): TreeViewNode {\n const props: Array<TreeViewProp> = [];\n for (const name of Object.keys(source)) {\n const value = source[name];\n let propType =\n value !== null\n ? getPropTypeFromKey(typeof value)\n : TreeViewPropTypes.String;\n\n if (Array.isArray(value)) {\n const result = this.convertArray(value);\n const propType = Array.isArray(result)\n ? TreeViewPropTypes.Array\n : TreeViewPropTypes.Object;\n props.push({\n startTag: `${name}: `,\n value: result,\n propType,\n brackets: arrayBrackets,\n });\n\n continue;\n }\n\n if (propType === TreeViewPropTypes.Object) {\n props.push({\n startTag: `${name}: `,\n value: this.convertObject(value),\n propType,\n });\n\n continue;\n }\n\n props.push({\n startTag: `${name}: `,\n value,\n propType,\n });\n }\n\n return {\n props,\n nodeType: TreeViewNodeTypes.Object,\n brackets: objectBrackets,\n };\n }\n\n private static convertArray(source: Array<any>): TreeViewNode {\n const nodes: Array<TreeViewNode> = [];\n\n source.forEach((item, index) => {\n if (typeof item !== TreeViewPropTypes.Object) {\n nodes.push(this.getPrimitive(item, index));\n } else {\n const brackets = Array.isArray(item) ? arrayBrackets : objectBrackets;\n const inside = brackets.inside;\n const outside = brackets.outside;\n nodes.push({\n ...this.convertObject(item),\n nodeType: Array.isArray(item)\n ? TreeViewNodeTypes.Array\n : getNodeTypeFromKey(typeof item),\n brackets: {\n inside: `${index}: ${inside}`,\n outside,\n },\n });\n }\n });\n\n return {\n props: [\n {\n value: nodes,\n propType: TreeViewPropTypes.Array,\n },\n ],\n brackets: arrayBrackets,\n };\n }\n\n private static getPrimitive(\n source: string | number,\n index: string | number\n ): TreeViewNode {\n const propType = getPropTypeFromKey(typeof source);\n return {\n props: [\n {\n startTag: `${index}: `,\n value: source,\n propType,\n },\n ],\n nodeType: TreeViewNodeTypes.Primitive,\n };\n }\n}\n","import { ContentTypesFormat } from '../../models/ContentTypesFormat';\nimport { ResolverResult } from '../../models/ResolverResult';\nimport { AbstractContentResolver } from '../AbstractContentResolver';\nimport { JsonConverter } from '../Converters/JsonConverter';\n\nexport class JsonResolver extends AbstractContentResolver {\n public resolve(data: string): ResolverResult {\n try {\n const json = JSON.parse(data);\n\n return {\n data: JsonConverter.convert(json),\n format: ContentTypesFormat.Json,\n };\n } catch (e) {\n return super.resolve(data);\n }\n }\n}\n","import { TreeViewNode } from '../../models/TreeViewNode';\nimport { TreeViewPropTypes } from '../../models/TreeViewPropTypes';\n\nexport class TextConverter {\n public static convert(source: string): Array<TreeViewNode> | TreeViewNode {\n return {\n props: [\n {\n value: source,\n propType: TreeViewPropTypes.String,\n },\n ],\n };\n }\n}\n","import { ContentTypesFormat } from '../../models/ContentTypesFormat';\nimport { ResolverResult } from '../../models/ResolverResult';\nimport { AbstractContentResolver } from '../AbstractContentResolver';\nimport { TextConverter } from '../Converters/TextConverter';\n\nexport class TextResolver extends AbstractContentResolver {\n public resolve(data: string): ResolverResult {\n return {\n data: TextConverter.convert(data),\n format: ContentTypesFormat.Text,\n };\n }\n}\n","import { TreeViewNode } from '../../models/TreeViewNode';\nimport { TreeViewProp } from '../../models/TreeViewProp';\nimport { TreeViewPropTypes } from '../../models/TreeViewPropTypes';\nimport { getPropTypeFromKey } from './EnumTypeGetter';\n\nexport class XmlConverter {\n public static convert(source: Document): Array<TreeViewNode> | TreeViewNode {\n if (source.childElementCount > 1) {\n return this.convertObject(source.childNodes);\n }\n\n return { props: [this.convertProp(source.children[0])] };\n }\n\n private static convertProp(source: any): TreeViewProp {\n const name: string = source.tagName;\n let value: Array<TreeViewNode> | string;\n let propType: TreeViewPropTypes;\n\n if (source.childElementCount > 0) {\n value = this.convertObject(source.children);\n propType = TreeViewPropTypes.Array;\n } else {\n value = source.textContent;\n propType = getPropTypeFromKey(typeof value);\n }\n\n return {\n startTag: `<${name}>`,\n endTag: `</${name}>`,\n value,\n propType,\n };\n }\n\n private static convertObject(childs: any): Array<TreeViewNode> {\n const props = Array<TreeViewProp>();\n for (const item of childs) {\n props.push(this.convertProp(item));\n }\n\n return [\n {\n props,\n },\n ];\n }\n}\n","import { ContentTypesFormat } from '../../models/ContentTypesFormat';\nimport { ResolverResult } from '../../models/ResolverResult';\nimport { AbstractContentResolver } from '../AbstractContentResolver';\nimport { XmlConverter } from '../Converters/XmlConverter';\n\nexport class XmlResolver extends AbstractContentResolver {\n public resolve(data: string): ResolverResult {\n try {\n const oParser = new DOMParser();\n const oDOM = oParser.parseFromString(data, 'text/xml');\n\n if (\n oDOM.all.length > 0 &&\n oDOM.getElementsByTagName('parsererror').length === 0\n ) {\n return {\n data: XmlConverter.convert(oDOM),\n format: ContentTypesFormat.Xml,\n };\n }\n } catch (e) {}\n\n return super.resolve(data);\n }\n}\n","import { ResolverResult } from '../models/ResolverResult';\nimport { AbstractContentResolver } from './AbstractContentResolver';\nimport { JsonResolver } from './Resolvers/JsonResolver';\nimport { TextResolver } from './Resolvers/TextResolver';\nimport { XmlResolver } from './Resolvers/XmlResolver';\n\nexport class ContentResolver {\n private chain: AbstractContentResolver;\n\n constructor() {\n this.chain = new JsonResolver(new XmlResolver(new TextResolver(null)));\n }\n\n public resolve(data: string): ResolverResult {\n return this.chain.resolve(data);\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n QueryList,\n ViewChildren,\n} from '@angular/core';\nimport { ClipboardService } from 'ngx-clipboard';\nimport { ContentResolver } from './ContentResolver/ContentResolver';\nimport { ContentTypesFormat } from './models/ContentTypesFormat';\nimport { ResolverResult } from './models/ResolverResult';\nimport { TreeViewNodeComponent } from './tree-view-node/tree-view-node.component';\n\n@Component({\n selector: 'tree-view',\n templateUrl: './tree-view.component.html',\n styleUrls: ['./tree-view.component.css'],\n})\nexport class TreeViewComponent implements OnChanges {\n @ViewChildren('node') treeViewNodes: QueryList<TreeViewNodeComponent>;\n\n @Input() data: string;\n @Input() maxTextLength: number = 1200;\n @Input() maxRootItems: number = 10;\n\n public resolved: ResolverResult;\n public collapsed: boolean;\n public allShow: boolean;\n public rawView: boolean;\n public ContentTypesFormat = ContentTypesFormat;\n\n public get IsArray(): boolean {\n return this.data ? Array.isArray(this.resolved.data) : false;\n }\n\n public get hasCollapse(): boolean {\n if (!this.data) {\n return false;\n }\n\n return this.resolved.format === ContentTypesFormat.Text\n ? this.hasTextCollapse()\n : this.hasNodeCollapse();\n }\n\n public get format(): string {\n return !this.rawView ? this.resolved.format : ContentTypesFormat.Text;\n }\n\n constructor(private clipboardService: ClipboardService) {}\n\n ngOnChanges(): void {\n const contentResolver = new ContentResolver();\n this.allShow = false;\n this.rawView = false;\n this.resolved = contentResolver.resolve(this.data);\n this.collapsed = this.hasCollapse;\n }\n\n public expandToggle(): void {\n this.collapsed = !this.collapsed;\n }\n\n public toggleExpandAll() {\n if (this.allShow) {\n this.treeViewNodes.forEach((x) => x.collapseAll());\n } else {\n this.treeViewNodes.forEach((x) => x.expandAll());\n }\n\n this.collapsed = this.hasCollapse ? this.allShow : false;\n this.allShow = !this.allShow;\n }\n\n public toggleRawView() {\n this.rawView = !this.rawView;\n }\n\n public copyToClipboard() {\n this.clipboardService.copy(this.data);\n }\n\n private hasTextCollapse(): boolean {\n return this.data.length > this.maxTextLength;\n }\n\n private hasNodeCollapse(): boolean {\n if (!Array.isArray(this.resolved.data)) {\n return this.resolved.data.props.length > this.maxRootItems;\n }\n\n return false;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClient, HttpClientModule } from '@angular/common/http';\nimport { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterModule } from '@angular/router';\nimport { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client';\nimport {\n TranslateLoader,\n TranslateModule,\n TranslateStore,\n} from '@ngx-translate/core';\nimport { ClipboardModule } from 'ngx-clipboard';\nimport { ToastrModule } from 'ngx-toastr';\nimport { Observable, of } from 'rxjs';\nimport { DebounceDirective } from './forms/directives/debounce.directive';\nimport { FieldInputComponent } from './forms/widgets/field/field-input/field-input.component';\nimport { NumberInputComponent } from './forms/widgets/field/field-input/number-input.component';\nimport { GeneralErrorsComponent } from './forms/widgets/general-errors/general-errors.component';\nimport { AppSettings } from './models/AppSettings';\nimport { IndiginaConfiguration } from './models/IndiginaConfiguration';\nimport { LocaleSettingsService } from './services/locale-settings.service';\nimport { MenuItemGroupComponent } from './widgets/side-menu/menu-item-group/menu-item-group.component';\nimport { SideMenuComponent } from './widgets/side-menu/side-menu.component';\nimport { TreeViewNodePropComponent } from './widgets/tree-view/tree-view-node-prop/tree-view-node-prop.component';\nimport { TreeViewNodeComponent } from './widgets/tree-view/tree-view-node/tree-view-node.component';\nimport { TreeViewComponent } from './widgets/tree-view/tree-view.component';\n\nlet defaultConfig: IndiginaConfiguration = {\n langs: {\n getTranslation(): Observable<any> {\n return of({});\n },\n },\n appSettings: {\n accountUrl: '',\n apiUrl: '',\n toastrTimeOut: 2500,\n oidc: {\n clientId: '',\n authority: '',\n issuer: '',\n },\n azureB2C: {\n clientId: '',\n authority: '',\n knownAuthorities: [''],\n },\n },\n};\n\n@NgModule({\n declarations: [\n SideMenuComponent,\n MenuItemGroupComponent,\n TreeViewComponent,\n TreeViewNodeComponent,\n TreeViewNodePropComponent,\n DebounceDirective,\n GeneralErrorsComponent,\n FieldInputComponent,\n NumberInputComponent,\n ],\n imports: [\n BrowserModule,\n HttpClientModule,\n TranslateModule.forChild({\n loader: {\n provide: TranslateLoader,\n useFactory: TranslateLoaderFactory,\n deps: [IndiginaConfiguration, HttpClient],\n },\n }),\n LoadingBarHttpClientModule,\n CommonModule,\n RouterModule,\n ReactiveFormsModule,\n ToastrModule.forRoot(),\n BrowserAnimationsModule,\n ],\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: LocaleServiceSettingsFactory,\n multi: true,\n deps: [LocaleSettingsService],\n },\n {\n provide: IndiginaConfiguration,\n useValue: defaultConfig,\n },\n {\n provide: AppSettings,\n useFactory: AppSettingsFactory,\n deps: [IndiginaConfiguration],\n },\n TranslateStore,\n ],\n exports: [\n SideMenuComponent,\n TreeViewComponent,\n DebounceDirective,\n GeneralErrorsComponent,\n FieldInputComponent,\n TranslateModule,\n ClipboardModule,\n LoadingBarHttpClientModule,\n ToastrModule,\n BrowserAnimationsModule,\n NumberInputComponent,\n ],\n})\nexport class IndiginaModule {\n public static forRoot(\n configuration: IndiginaConfiguration\n ): ModuleWithProviders<IndiginaModule> {\n return {\n ngModule: IndiginaModule,\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: LocaleServiceSettingsFactory,\n multi: true,\n deps: [LocaleSettingsService],\n },\n {\n provide: IndiginaConfiguration,\n useValue: configuration ? configuration : defaultConfig,\n },\n ],\n };\n }\n}\n\nexport function LocaleServiceSettingsFactory(\n localeService: LocaleSettingsService\n) {\n return function () {\n localeService.init();\n };\n}\n\nexport function TranslateLoaderFactory(\n configuration: IndiginaConfiguration\n): TranslateLoader {\n return configuration.langs;\n}\n\nexport function AppSettingsFactory(configuration: IndiginaConfiguration) {\n return configuration.appSettings;\n}\n","export enum EventNames {\n UserUpdated = 'userUpdated',\n PermissionsUpdated = 'permissionsUpdated',\n}\n","import { IEntityEndpoints } from './IEntityEndpoints';\nimport { State, toODataString } from '@progress/kendo-data-query';\nimport { MemberTypes } from '../models/MemberTypes';\nimport { IActivityEndpoints } from './IActivityEndpoints';\n\nexport const endpoints = {\n signalr: {\n eventsHub: 'EventsHub',\n },\n oidc: {\n config: 'oidc/config',\n },\n members: {\n me: 'members/me',\n },\n admins: {\n ...buildEntityEndpoints('admins'),\n roles: {\n ...buildEntityEndpoints('admins/roles'),\n },\n },\n system: {\n info: 'system/info',\n },\n firstUser: 'admins/first',\n partners: buildEntityEndpoints('partners'),\n permissions: {\n all: (type: MemberTypes) => `permissions/${type}s`,\n member: (id: string) => `permissions/${id}`,\n mine: 'permissions/me',\n },\n users: {\n ...buildEntityEndpoints('users'),\n roles: {\n ...buildEntityEndpoints('users/roles'),\n },\n },\n apiTokens: buildEntityEndpoints('apiTokens'),\n};\n\nconst guidFormat = /'((\\{){0,1}[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}(\\}){0,1})'/g;\nexport function buildEntityEndpoints(name: string): IEntityEndpoints {\n return {\n path: name,\n query: (state: State) =>\n `${name}?${toODataString(state, { utcDates: true }).replace(\n guidFormat,\n '$1'\n )}`,\n entityPath: (id: string) => `${name}/${id}`,\n };\n}\nexport function buildActivityEndpoints(name: string): IActivityEndpoints {\n return {\n query: (state: State) =>\n `activities/${name}?${toODataString(state, {\n utcDates: true,\n }).replace(guidFormat, '$1')}`,\n search: (state: State, searchTerm: string) => {\n let uri = `activities/${name}/search?${toODataString(state, {\n utcDates: true,\n })}`;\n if (searchTerm) {\n uri += `&searchTerm=${searchTerm}`;\n }\n\n return uri;\n },\n detailedActivity: (id: string, partnerId: string) =>\n partnerId\n ? `activities/${name}/${id}/${partnerId}`\n : `activities/${name}/${id}`,\n };\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { HttpService } from '../angular/services/http.service';\nimport { SettingsService } from '../angular/services/settings.service';\nimport { AuthProviderResolver } from './auth-provider.resolver';\nimport { AuthProvider } from './auth.providers/AuthProvider';\nimport { endpoints } from './endpoints';\nimport { EventNames } from './signalr/EventNames';\nimport { SignalRService } from './signalr/signalr.service';\n\nconst adminUriPart = '/admin/';\n\nexport abstract class BaseAccountService<T> {\n public user = new BehaviorSubject<T>(null);\n\n constructor(\n public resolver: AuthProviderResolver,\n protected httpService: HttpService,\n protected settingsService: SettingsService,\n protected signalRService: SignalRService\n ) {\n this.resolver\n .getProvider()\n .pipe(\n map((provider) => {\n this.initialize(provider);\n })\n )\n .subscribe();\n }\n\n login() {\n this.resolver\n .getProvider()\n .pipe(\n map((provider) => {\n provider.login();\n })\n )\n .subscribe();\n }\n\n logout() {\n this.settingsService.clearLoginAsUser();\n this.resolver\n .getProvider()\n .pipe(\n map((provider) => {\n provider.logout();\n })\n )\n .subscribe();\n }\n\n private initialize(provider: AuthProvider) {\n this.getCurrentUser().subscribe((user) => {\n if (!user) {\n return;\n }\n\n const path = this.settingsService.getCallbackPath();\n if (path) {\n this.settingsService.clearCallbackPath();\n window.location.href = window.location.origin + path;\n\n return;\n }\n\n if (\n this.isAdmin(user) &&\n !window.location.pathname.startsWith(adminUriPart)\n ) {\n window.location.href = `${window.location.origin}${adminUriPart}`;\n\n return;\n }\n\n provider.getAccessToken().subscribe((token) => {\n this.signalRService.startConnection(token);\n this.signalRService\n .on<T>(EventNames.UserUpdated)\n .subscribe(async () => {\n provider.getAccessToken().subscribe((token) => {\n this.signalRService.reconnect(token);\n });\n this.httpService\n .get<T>(endpoints.members.me)\n .subscribe((user) => this.user.next(user));\n });\n });\n });\n }\n\n getCurrentUser(): Observable<T> {\n return this.resolver.getProvider().pipe(\n mergeMap((provider) => {\n if (this.user.getValue() || !provider.isUserLoggedIn()) {\n return this.user;\n }\n\n return provider.getAccessToken().pipe(\n mergeMap(() => {\n return this.httpService.get(endpoints.members.me).pipe(\n map((user: T) => {\n this.user.next(user);\n\n return user;\n })\n );\n })\n );\n })\n );\n }\n\n public isUserLoggedIn(): Observable<boolean> {\n return this.resolver\n .getProvider()\n .pipe(map((provider) => provider.isUserLoggedIn()));\n }\n\n public abstract isAdmin(member: T): boolean;\n}\n","export enum HttpCodes {\n BadRequest = 400,\n Forbidden = 403,\n InternalServerError = 500,\n NotFound = 404,\n OK = 200,\n Unauthorized = 401,\n}\n","import { ISubscriptionControl } from './ISubscriptionControl';\nimport { Observable, Subscription } from 'rxjs';\n\nexport class ReEntrySubscription<T> implements ISubscriptionControl {\n private subscription: Subscription;\n\n constructor(\n private observable: Observable<T>,\n private action: (event: T) => void\n ) {}\n\n public get connected(): boolean {\n return !this.subscription.closed;\n }\n\n public resume(): void {\n this.subscription = this.observable.subscribe(this.action);\n }\n\n public pause(): void {\n this.subscription.unsubscribe();\n }\n}\n","import {\n AbstractControl,\n AbstractControlOptions,\n AsyncValidatorFn,\n FormGroup,\n ValidatorFn,\n FormControl,\n} from '@angular/forms';\n\nexport class FormGroupWithErrors extends FormGroup {\n generalErrors: string[] = [];\n\n constructor(\n controls: { [key: string]: AbstractControl },\n validatorOrOpts?:\n | ValidatorFn\n | ValidatorFn[]\n | AbstractControlOptions\n | null,\n asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n ) {\n super(controls, validatorOrOpts, asyncValidator);\n }\n\n public getControl(name: string): AbstractControl {\n if (!this.contains(name)) {\n this.addControl(name, new FormControl({}));\n }\n\n return this.get(name);\n }\n\n public applyServerErrors(\n error: { title?: string; errors: { [key: string]: string[] } },\n form?: FormGroupWithErrors\n ): void {\n this.generalErrors = [];\n if (error.title) {\n this.generalErrors.push(error.title);\n }\n\n if (!form) {\n form = this;\n }\n\n for (const key in error.errors) {\n const ctrl = form.controls[key];\n if (ctrl) {\n ctrl.setErrors({ serverErrorMsg: error.errors[key].join(',') });\n } else {\n this.generalErrors.push(error.errors[key].join(','));\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nconst callbackPathKey = 'callbackPath';\nconst homePath = '/home';\nconst loginAsKey = 'X-User-Id';\nconst tokenKey = 'access_token';\n\n@Injectable({ providedIn: 'root' })\nexport class SettingsService {\n public putCurrentCallbackPath() {\n this.putCallbackPath(window.location.pathname + window.location.hash);\n }\n\n public putCallbackPath(pathUri: string): void {\n if (!this.getCallbackPath() && pathUri !== homePath) {\n localStorage.setItem(callbackPathKey, pathUri);\n }\n }\n\n public getCallbackPath(): string {\n return localStorage.getItem(callbackPathKey);\n }\n\n public clearCallbackPath(): void {\n localStorage.removeItem(callbackPathKey);\n }\n\n public setLoginAsUser(id: string): void {\n localStorage.setItem(loginAsKey, id);\n }\n\n public getLoginAsUser(): string {\n return localStorage.getItem(loginAsKey);\n }\n\n public clearLoginAsUser(): void {\n localStorage.removeItem(loginAsKey);\n }\n\n public setToken(token: string) {\n localStorage.setItem(tokenKey, token);\n }\n\n public getToken(): string {\n return localStorage.getItem(tokenKey);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { AppSettings } from '../models/AppSettings';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AppToastrService {\n constructor(\n private toastr: ToastrService,\n private appSettings: AppSettings\n ) {}\n\n private timeout = this.appSettings.toastrTimeOut;\n\n public showError(message: string, title: string = 'Error'): void {\n this.toastr.error(message, title, { timeOut: this.timeout });\n }\n\n public showSuccess(message: string, title: string = ''): void {\n this.toastr.success(message, title, { timeOut: this.timeout });\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, of, throwError } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { AppSettings } from '../models/AppSettings';\nimport { CustomHttpErrorResponse } from '../models/CustomHttpErrorResponse';\nimport { HttpCodes } from '../models/HttpCodes';\nimport { SettingsService } from './settings.service';\nimport { AppToastrService } from './toastr.service';\n\nconst absoluteUrlRegExp = /^http(s)?:\\/\\//;\n\n@Injectable({ providedIn: 'root' })\nexport class HttpService {\n constructor(\n private appToastrService: AppToastrService,\n private httpClient: HttpClient,\n private appSettings: AppSettings,\n private translate: TranslateService,\n private router: Router,\n private settingsService: SettingsService\n ) {}\n\n get<T>(path: string): Observable<T> {\n return this.httpClient\n .get<T>(this.createUrl(path))\n .pipe(\n catchError((err: CustomHttpErrorResponse) =>\n this.handleServerError(err)\n )\n );\n }\n\n delete(path: string): Observable<object> {\n return this.httpClient.delete(this.createUrl(path)).pipe(\n tap(() => this.showSuccessMessage('ToastrMessages.RemovedSuccessfully')),\n catchError((err: CustomHttpErrorResponse) => this.handleServerError(err))\n );\n }\n\n post<T>(\n path: string,\n data: T,\n successTranslateMessage: string = null\n ): Observable<T> {\n return this.httpClient.post<T>(this.createUrl(path), data).pipe(\n tap(() =>\n this.showSuccessMessage(\n successTranslateMessage ?? 'ToastrMessages.SavedSuccessfully'\n )\n ),\n catchError((err) => this.handleServerError(err))\n );\n }\n\n put<T>(\n path: string,\n data: T,\n successTranslateMessage: string = null\n ): Observable<T> {\n return this.httpClient.put<T>(this.createUrl(path), data).pipe(\n tap(() =>\n this.showSuccessMessage(\n successTranslateMessage ?? 'ToastrMessages.SavedSuccessfully'\n )\n ),\n catchError((err) => this.handleServerError(err))\n );\n }\n\n private createUrl(path: string): string {\n return absoluteUrlRegExp.test(path) ? path : this.appSettings.apiUrl + path;\n }\n\n private handleServerError(error: CustomHttpErrorResponse) {\n if (error.error instanceof ErrorEvent) {\n // A client-side or network error occurred. Handle it accordingly.\n this.appToastrService.showError(\n 'An error occurred: ' + error.error.message\n );\n\n return of(null);\n }\n\n if (error.status === HttpCodes.Unauthorized) {\n this.settingsService.putCurrentCallbackPath();\n this.appToastrService.showError(\n this.translate.instant('ToastrMessages.Unauthorized')\n );\n\n return of(null);\n }\n\n if (error.status === HttpCodes.Forbidden) {\n this.appToastrService.showError(\n this.translate.instant('ToastrMessages.Forbidden')\n );\n this.router.navigate(['forbidden']);\n\n return of(null);\n }\n\n if (error.status === HttpCodes.NotFound) {\n if (!!this.settingsService.getLoginAsUser()) {\n this.settingsService.clearLoginAsUser();\n this.appToastrService.showError(\n this.translate.instant('ToastrMessages.CanNotLoginAsUser')\n );\n setTimeout(() => {\n window.location.href = '/';\n }, 1000);\n }\n\n this.appToastrService.showError(\n this.translate.instant('ToastrMessages.NotFound')\n );\n\n return of(null);\n }\n\n if (error.status >= HttpCodes.InternalServerError) {\n this.appToastrService.showError(\n this.translate.instant('ToastrMessages.ServerError') + error.error.title\n );\n\n return of(null);\n }\n\n return throwError(error);\n }\n\n private showSuccessMessage(message: string) {\n this.appToastrService.showSuccess(this.translate.instant(message));\n }\n}\n","export enum AuthProviders {\n IdentityServer = 'IdentityServer',\n AzureB2C = 'AzureB2C',\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ISubscriptionControl } from '../../extensions/ISubscriptionControl';\n\n@Component({\n selector: 'live-updates-control',\n styleUrls: ['./live-updates-control.component.css'],\n templateUrl: './live-updates-control.component.html',\n})\nexport class LiveUpdatesControlComponent implements OnInit {\n @Input() subscription: ISubscriptionControl;\n\n ngOnInit(): void {\n this.subscription.resume();\n }\n\n public toggle(): void {\n this.subscription.connected\n ? this.subscription.pause()\n : this.subscription.resume();\n }\n}\n","import { Observable } from 'rxjs';\n\nexport abstract class AuthProvider {\n public abstract initialize(): Observable<boolean>;\n public abstract login();\n public abstract logout();\n public abstract isUserLoggedIn(): boolean;\n public abstract getAccessToken(): Observable<string>;\n}\n","import { MsalService } from '@azure/msal-angular';\nimport { InteractionRequiredAuthError } from '@azure/msal-browser';\nimport { from, Observable, of } from 'rxjs';\nimport { SettingsService } from '../../angular/services/settings.service';\nimport { AuthProvider } from './AuthProvider';\n\nexport class AzureB2CProvider extends AuthProvider {\n constructor(\n private authService: MsalService,\n private settingsService: SettingsService\n ) {\n super();\n }\n\n public initialize(): Observable<boolean> {\n return of(true);\n }\n\n public login() {\n if (!this.isUserLoggedIn()) {\n this.authService.loginRedirect().subscribe();\n }\n }\n\n public logout() {\n this.authService.logoutRedirect({\n postLogoutRedirectUri: location.origin,\n });\n }\n\n public getAccessToken(): Observable<string> {\n const request = {\n scopes: ['openid', 'offline_access', 'profile'],\n };\n\n return from(\n this.authService.instance\n .acquireTokenSilent(request)\n .then((authenticationResult) => {\n const token = authenticationResult.idToken;\n this.settingsService.setToken(token);\n\n return token;\n })\n .catch(async (error) => {\n if (error instanceof InteractionRequiredAuthError) {\n await this.authService.instance.acquireTokenRedirect(request);\n\n return this.settingsService.getToken();\n }\n })\n );\n }\n\n public isUserLoggedIn = (): boolean =>\n !!this.authService.instance.getActiveAccount()?.localAccountId;\n}\n","import { AuthConfig, OAuthService } from 'angular-oauth2-oidc';\nimport { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';\nimport { from, Observable, of } from 'rxjs';\nimport { mergeMap } from 'rxjs/operators';\nimport { IndiginaConfiguration } from '../../angular/models/IndiginaConfiguration';\nimport { AuthProvider } from './AuthProvider';\n\nconst homePath = '/home';\n\nexport class OAuthProvider extends AuthProvider {\n constructor(\n private oauthService: OAuthService,\n private configuration: IndiginaConfiguration\n ) {\n super();\n }\n\n public initialize(): Observable<boolean> {\n const authConfig: AuthConfig = {\n issuer: this.configuration.appSettings.oidc.issuer,\n redirectUri: window.location.origin + '/login/callback',\n clientId: this.configuration.appSettings.oidc.clientId,\n scope: 'openid profile offline_access',\n postLogoutRedirectUri: window.location.origin + homePath,\n silentRefreshRedirectUri: window.location.origin + '/silent-renew.html',\n };\n\n return this.configure(authConfig);\n }\n\n public login() {\n this.oauthService.initLoginFlow();\n }\n\n public logout() {\n this.oauthService.logOut();\n }\n\n public getAccessToken(): Observable<string> {\n return of(this.oauthService.getAccessToken());\n }\n\n public isUserLoggedIn = (): boolean =>\n this.oauthService.hasValidAccessToken();\n\n private configure(authConfig: AuthConfig): Observable<boolean> {\n this.oauthService.configure(authConfig);\n this.oauthService.tokenValidationHandler = new JwksValidationHandler();\n this.oauthService.setupAutomaticSilentRefresh();\n\n return from(\n this.oauthService.loadDiscoveryDocument(\n authConfig.issuer + '/identity/.well-known/openid-configuration'\n )\n ).pipe(mergeMap(() => from(this.oauthService.tryLoginImplicitFlow())));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MsalService } from '@azure/msal-angular';\nimport { OAuthService } from 'angular-oauth2-oidc';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { IndiginaConfiguration } from '../angular/models/IndiginaConfiguration';\nimport { HttpService } from '../angular/services/http.service';\nimport { SettingsService } from '../angular/services/settings.service';\nimport { AuthProviders } from '../models/AuthProviders';\nimport { SystemInfo } from '../models/SystemInfo';\nimport { AuthProvider } from '../services/auth.providers/AuthProvider';\nimport { AzureB2CProvider } from './../services/auth.providers/azureb2c.provider';\nimport { OAuthProvider } from './../services/auth.providers/oauth.provider';\nimport { endpoints } from './endpoints';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthProviderResolver {\n private AuthProvider$ = new BehaviorSubject<AuthProvider>(null);\n\n constructor(\n httpService: HttpService,\n oauthService: OAuthService,\n msalService: MsalService,\n settingsService: SettingsService,\n indiginaConfiguration: IndiginaConfiguration\n ) {\n httpService.get<SystemInfo>(endpoints.system.info).subscribe((info) => {\n let provider: AuthProvider;\n if (info.identityProvider === AuthProviders.IdentityServer) {\n provider = new OAuthProvider(oauthService, indiginaConfiguration);\n } else {\n provider = new AzureB2CProvider(msalService, settingsService);\n }\n\n provider.initialize().subscribe(() => this.AuthProvider$.next(provider));\n });\n }\n\n public getProvider = (): Observable<AuthProvider> =>\n this.AuthProvider$.pipe(filter((x) => !!x));\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport * as signalR from '@microsoft/signalr';\nimport { AppSettings } from '../../angular/models/AppSettings';\nimport { endpoints } from '../endpoints';\n\n@Injectable({ providedIn: 'root' })\nexport class SignalRService {\n protected isConnectionEstablished = false;\n protected hubConnection: signalR.HubConnection;\n private eventEmitters: { [eventName: string]: EventEmitter<any> } = {};\n\n constructor(private appSettings: AppSettings) {}\n\n private createConnection(token: string) {\n this.hubConnection = new signalR.HubConnectionBuilder()\n .withUrl(this.appSettings.apiUrl + endpoints.signalr.eventsHub, {\n accessTokenFactory: () => {\n return token;\n },\n })\n .configureLogging(\n this.appSettings.signalRLogLevel ?? signalR.LogLevel.None\n )\n .build();\n\n this.hubConnection.onclose((err?) => {\n if (err !== undefined) {\n this.isConnectionEstablished = false;\n this.startConnection(token);\n }\n });\n }\n\n public startConnection(token: string): void {\n if (!this.isConnectionEstablished) {\n this.createConnection(token);\n this.hubConnection\n .start()\n .then(() => {\n this.isConnectionEstablished = true;\n Object.keys(this.eventEmitters).forEach((eventName) => {\n this.hubConnection.on(eventName, (model) => {\n this.eventEmitters[eventName].emit(model);\n });\n });\n })\n .catch(() => {\n console.warn('Error while establishing connection, retrying...');\n setTimeout(() => this.startConnection(token), 5000);\n });\n }\n }\n\n public reconnect(token: string) {\n if (this.isConnectionEstablished) {\n this.hubConnection.stop().then(() => {\n this.isConnectionEstablished = false;\n this.startConnection(token);\n });\n }\n }\n\n public on<T>(eventName: string): EventEmitter<T> {\n if (!this.eventEmitters[eventName]) {\n this.eventEmitters[eventName] = new EventEmitter<T>();\n if (this.hubConnection) {\n this.hubConnection.on(eventName, (model) => {\n this.eventEmitters[eventName].emit(model);\n });\n }\n }\n\n return this.eventEmitters[eventName] as EventEmitter<T>;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpService } from '../angular/services/http.service';\nimport { SettingsService } from '../angular/services/settings.service';\nimport { Member } from '../models/Member';\nimport { AuthProviderResolver } from './auth-provider.resolver';\nimport { BaseAccountService } from './base.account.service';\nimport { SignalRService } from './signalr/signalr.service';\n\nconst adminKey = 'Admin';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AccountService extends BaseAccountService<Member> {\n constructor(\n public resolver: AuthProviderResolver,\n httpService: HttpService,\n settingsService: SettingsService,\n signalRService: SignalRService\n ) {\n super(resolver, httpService, settingsService, signalRService);\n }\n\n public isAdmin = (member: Member): boolean =>\n member?.type === adminKey ?? false;\n}\n","import {\n Component,\n Input,\n HostListener,\n ElementRef,\n ViewChild,\n} from '@angular/core';\nimport { AppSettings } from '../../angular/models/AppSettings';\nimport { Member } from '../../models/Member';\nimport { AccountService } from '../../services/account.service';\n\n@Component({\n selector: 'account-menu',\n templateUrl: './account-menu.component.html',\n styleUrls: ['./account-menu.component.css'],\n})\nexport class AccountMenuComponent {\n @ViewChild('accountMenuElement') accountMenu: ElementRef;\n @Input() user: Member;\n expand = false;\n languageSelectorVisible = false;\n constructor(\n private eref: ElementRef,\n private accountService: AccountService,\n private appSettings: AppSettings\n ) {}\n\n get fullName(): string {\n return `${this.user?.firstName} ${this.user?.lastName}`;\n }\n\n get accountUrl(): string {\n return this.appSettings.accountUrl;\n }\n\n toogle(): void {\n this.expand = !this.expand;\n }\n\n logout(): void {\n this.accountService.logout();\n }\n\n openLanguageSelector(event: MouseEvent): void {\n event.stopPropagation();\n this.toogle();\n this.languageSelectorVisible = true;\n }\n\n @HostListener('document:click', ['$event'])\n clickedOutside(event: any) {\n if (!this.eref.nativeElement.contains(event.target) && this.expand) {\n this.toogle();\n }\n }\n}\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MsalService } from '@azure/msal-angular';\nimport { AuthenticationResult } from '@azure/msal-browser';\nimport { SettingsService } from '../../angular/services/settings.service';\n\n@Component({\n selector: 'lib-azure-login',\n template: '',\n})\nexport class AzureLoginCallbackComponent {\n constructor(\n private authService: MsalService,\n private settingsService: SettingsService,\n private router: Router\n ) {}\n\n ngOnInit() {\n this.authService\n .handleRedirectObservable()\n .subscribe((result: AuthenticationResult) => {\n this.settingsService.setToken(result.idToken);\n this.authService.instance.setActiveAccount(result.account);\n this.router.navigate(['home']);\n });\n }\n\n public logout() {\n this.authService.logout();\n }\n}\n","import {\n Component,\n ElementRef,\n HostListener,\n Output,\n EventEmitter,\n Input,\n} from '@angular/core';\nimport { Language } from '../../angular/models/Language';\nimport { LocaleSettingsService } from '../../angular/services/locale-settings.service';\n\n@Component({\n selector: 'language-selector',\n templateUrl: './language-selector.component.html',\n styleUrls: ['./language-selector.component.css'],\n})\nexport class LanguageSelectorComponent {\n @Input() visible: boolean;\n @Output() visibleChange = new EventEmitter<boolean>();\n currentLanguageCode = '';\n languages: Language[];\n\n constructor(\n private eref: ElementRef,\n private settings: LocaleSettingsService\n ) {\n this.currentLanguageCode = this.settings.getLocale();\n this.languages = this.settings.getLocales();\n }\n\n async changeLanguage(code: string) {\n this.currentLanguageCode = code;\n this.settings.setLocale(this.currentLanguageCode);\n this.close();\n }\n\n close(): void {\n this.visible = false;\n this.visibleChange.emit(this.visible);\n }\n\n @HostListener('document:click', ['$event'])\n clickedOutside(event: any) {\n if (!this.eref.nativeElement.contains(event.target)) {\n this.close();\n }\n }\n}\n","import {\n BrowserCacheLocation,\n Configuration,\n IPublicClientApplication,\n PublicClientApplication,\n} from '@azure/msal-browser';\nimport { IndiginaConfiguration } from '../angular/models/IndiginaConfiguration';\n\nconst isIE =\n window.navigator.userAgent.indexOf('MSIE ') > -1 ||\n window.navigator.userAgent.indexOf('Trident/') > -1;\n\nexport const MSALInstanceFactory = (\n config: IndiginaConfiguration\n): IPublicClientApplication => {\n const msalConfig: Configuration = {\n auth: {\n clientId: config.appSettings.azureB2C.clientId,\n authority: config.appSettings.azureB2C.authority,\n knownAuthorities: config.appSettings.azureB2C.knownAuthorities,\n redirectUri: window.location.origin + '/azure/login/callback',\n postLogoutRedirectUri: '/',\n navigateToLoginRequestUrl: false,\n },\n cache: {\n cacheLocation: BrowserCacheLocation.SessionStorage,\n storeAuthStateInCookie: isIE,\n },\n system: {\n loggerOptions: {\n loggerCallback: () => {},\n piiLoggingEnabled: false,\n },\n },\n };\n\n return new PublicClientApplication(msalConfig);\n};\n","import { endpoints } from './endpoints';\nimport { Injectable } from '@angular/core';\nimport { AccountService } from './account.service';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { MemberTypes } from '../models/MemberTypes';\nimport { Permissions } from './../models/Permissions';\nimport { HttpService } from '../angular/services/http.service';\nimport { SignalRService } from './signalr/signalr.service';\nimport { EventNames } from './signalr/EventNames';\nimport { map } from 'rxjs/operators';\n\n@Injectable()\nexport class PermissionsService {\n private loaded = false;\n public mine = new BehaviorSubject<Permissions>({});\n\n constructor(\n private httpService: HttpService,\n private accountService: AccountService,\n private signalRService: SignalRService\n ) {\n this.accountService.user.subscribe(async (user) => {\n if (!user) {\n this.mine.next({});\n\n return;\n }\n\n this.httpService\n .get<Permissions>(endpoints.permissions.mine)\n .subscribe((permissions) => {\n this.mine.next(permissions);\n this.loaded = true;\n this.signalRService\n .on<string>(EventNames.PermissionsUpdated)\n .subscribe(() => {\n this.getPermissionsFromServer();\n });\n });\n });\n }\n\n public getAll(memberType: MemberTypes): Observable<Permissions> {\n return this.httpService.get<Permissions>(\n endpoints.permissions.all(memberType)\n );\n }\n\n public getMine(): Observable<Permissions> {\n if (this.loaded) {\n return this.mine;\n }\n\n return this.getPermissionsFromServer();\n }\n\n private getPermissionsFromServer(): Observable<Permissions> {\n return this.httpService.get<Permissions>(endpoints.permissions.mine).pipe(\n map((permissions) => {\n this.mine.next(permissions);\n\n return permissions;\n })\n );\n }\n}\n","import { Directive, Input, ElementRef, OnInit, Renderer2 } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { PermissionTypes } from '../models/PermissionTypes';\nimport { PermissionsService } from '../services/permissions.service';\n\nconst hiddenClass = 'hidden';\n\n@Directive({\n selector: '[requirePermission]',\n})\nexport class RequirePermissionDirective implements OnInit {\n @Input()\n permissionType: PermissionTypes | PermissionTypes[];\n @Input()\n permissionCategory?: string;\n\n constructor(\n private elementRef: ElementRef,\n private route: ActivatedRoute,\n private permissionsService: PermissionsService,\n private renderer: Renderer2\n ) {}\n\n ngOnInit(): void {\n this.hide();\n const category = this.permissionCategory\n ? this.permissionCategory\n : this.getRouteCategory(this.route);\n\n if (!category) {\n this.show();\n\n return;\n }\n\n this.permissionsService.mine.subscribe((permissions) => {\n const hasAccess =\n permissions[category] && this.hasType(permissions[category]);\n if (hasAccess) {\n this.show();\n } else {\n this.hide();\n }\n });\n }\n\n private hide() {\n this.renderer.addClass(this.elementRef.nativeElement, hiddenClass);\n }\n\n private show() {\n this.renderer.removeClass(this.elementRef.nativeElement, hiddenClass);\n }\n\n private hasType(types: PermissionTypes[]) {\n return Array.isArray(this.permissionType)\n ? types.map((x) => this.permissionType.includes(x)).some((x) => x)\n : types.includes(this.permissionType);\n }\n\n private getRouteCategory(route: ActivatedRoute): string {\n const routeData = route.snapshot.data;\n if (routeData && routeData.permission) {\n return routeData.permission.category;\n }\n\n if (this.route.parent) {\n return this.getRouteCategory(this.route.parent);\n }\n\n return null;\n }\n}\n","import {\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SettingsService } from '../angular/services/settings.service';\n\nconst AuthorizationHeader = 'Authorization';\n\n@Injectable()\nexport class AuthHeadersInterceptor implements HttpInterceptor {\n constructor(private settingsService: SettingsService) {}\n\n intercept(\n request: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n if (!request.headers.keys().find((x) => x === AuthorizationHeader)) {\n const token = this.settingsService.getToken();\n if (token) {\n const modified = request.clone({\n setHeaders: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return next.handle(modified);\n } else {\n return next.handle(request);\n }\n }\n\n return next.handle(request);\n }\n}\n","export enum FieldTypes {\n Text,\n Checkbox,\n Dropdown,\n Multiselect,\n}\n","import { ActivityFilter } from '../../models/ActivityFilter';\nimport { Component, Input, OnChanges, OnInit } from '@angular/core';\nimport { CustomFilterElement } from '../../models/CustomFilterElement';\nimport { FieldTypes } from '../../models/FieldTypes';\nimport { ActivityFilterService } from '../../services/activity.filter.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NamedModel } from '../../angular/models/NamedModel';\n\nconst allKey = 'All';\nconst defaultValueField = 'id';\n\n@Component({\n selector: 'activity-filter',\n templateUrl: './activity-filter.component.html',\n styleUrls: ['./activity-filter.component.less'],\n})\nexport class ActivityFilterComponent implements OnInit, OnChanges {\n @Input() showArchiveSwitcher: boolean = true;\n @Input() showSearhText: boolean = true;\n @Input() customFilterElements: CustomFilterElement[];\n @Input() filterService: ActivityFilterService;\n\n public filter: ActivityFilter;\n public FieldTypes = FieldTypes;\n\n constructor(private translate: TranslateService) {}\n\n ngOnInit(): void {\n this.customFilterElements?.forEach(\n (element) =>\n (element.valueField = element.valueField\n ? element.valueField\n : defaultValueField)\n );\n this.filterService.filter$.subscribe((filter) => {\n this.filter = filter;\n this.changeFilter();\n });\n }\n\n ngOnChanges(): void {\n this.changeFilter();\n }\n\n public defaultNamedModel: NamedModel = {\n name: this.translate.instant(allKey),\n id: null,\n };\n\n public setTodayFilter() {\n this.filterService.setToday();\n }\n\n public clearFilter() {\n this.customFilterElements?.forEach((element) => {\n element.filter.value = null;\n if (element.filter.values) {\n element.filter.values = [];\n }\n });\n this.filterService.reset();\n this.emitChangeEvents();\n }\n\n public applyFilter() {\n this.setCustomFilters();\n this.filterService.applyFilter(this.filter);\n }\n\n public fieldChange(\n value: string | number | boolean | string[],\n element: CustomFilterElement\n ) {\n if (element.change) {\n element.change(value);\n }\n }\n\n private fillFilter() {\n if (!this.filter) {\n return;\n }\n\n this.customFilterElements?.forEach((element) => {\n element.filter = { ...element.filter, value: null, values: null };\n });\n\n this.filter.customFilters?.forEach((filter) => {\n const element = this.customFilterElements?.find(\n (x) =>\n x.filter.field === filter.field &&\n x.filter.filterTarget === filter.filterTarget\n );\n if (element) {\n element.filter = Object.assign({}, filter);\n }\n });\n }\n\n private setCustomFilters() {\n this.customFilterElements?.forEach((element) => {\n const index = this.filter.customFilters?.findIndex(\n (x) => x.field === element.filter.field\n );\n if (index !== -1) {\n this.filter.customFilters.splice(index, 1);\n }\n });\n\n this.customFilterElements?.forEach((element) =>\n this.filter.customFilters.push(element.filter)\n );\n }\n\n private fixMultiselectFilters() {\n const multiSelectFilters = this.customFilterElements?.map((element) => {\n if (element.fieldType === FieldTypes.Multiselect) {\n return element.filter;\n }\n });\n if (multiSelectFilters) {\n multiSelectFilters.forEach((filter) => {\n if (filter?.value) {\n filter.values = [filter.value as string];\n filter.value = null;\n }\n });\n }\n }\n\n private changeFilter() {\n this.fillFilter();\n this.fixMultiselectFilters();\n this.emitChangeEvents();\n }\n\n private emitChangeEvents() {\n this.customFilterElements?.forEach((element) => {\n if (element.filter.value || element.filter.values) {\n this.fieldChange(\n element.filter.value ?? element.filter.values,\n element\n );\n }\n });\n }\n}\n","import { Component, ViewChild, TemplateRef } from '@angular/core';\nimport { DialogService, DialogRef } from '@progress/kendo-angular-dialog';\n\n@Component({\n selector: 'confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n styleUrls: ['./confirm-dialog.component.css'],\n})\nexport class ConfirmDialogComponent {\n private dialog: DialogRef;\n private callback: () => void;\n @ViewChild('dialogActions', { static: true })\n public dialogActions: TemplateRef<any>;\n constructor(private dialogService: DialogService) {}\n\n cancel(): void {\n this.dialog.close();\n this.callback = undefined;\n }\n\n confirm() {\n this.callback();\n this.cancel();\n }\n\n public open(content: string, callback: () => void) {\n this.callback = callback;\n this.dialog = this.dialogService.open({\n content,\n actions: this.dialogActions,\n });\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport * as momentModule from 'moment-timezone';\nconst moment = momentModule;\n\n@Component({\n selector: 'current-timezone',\n templateUrl: './current-timezone.component.html',\n styleUrls: ['./current-timezone.component.css'],\n})\nexport class CurrentTimezoneComponent implements OnInit {\n public timeZoneAndOffset: string;\n constructor() {}\n\n ngOnInit(): void {\n const timeZone = moment.tz.guess();\n this.timeZoneAndOffset = timeZone + ' ' + moment().format('Z');\n }\n}\n","import { Component, Output, EventEmitter, Input } from '@angular/core';\n\n@Component({\n selector: 'entity-edit-buttons-bar',\n templateUrl: './buttons-bar.component.html',\n styleUrls: ['./buttons-bar.component.css'],\n})\nexport class EntityEditButtonsBarComponent {\n @Input()\n public valid: boolean;\n @Output()\n public save = new EventEmitter<boolean>();\n}\n","import { OnInit, ViewChild, Component, Input } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { FormControl } from '@angular/forms';\nimport { IFormAdapter } from './IFormAdapter';\nimport { FormGroupWithErrors } from '../../angular/forms/extensions/FormGroupWithErrors';\nimport { GeneralErrorsComponent } from '../../angular/forms/widgets/general-errors/general-errors.component';\nimport { IdentifiedModel } from '../../angular/models/IdentifiedModel';\nimport { finalize } from 'rxjs/operators';\n\n@Component({\n selector: 'entity-edit-form',\n templateUrl: './entity-edit-form.component.html',\n styleUrls: ['./entity-edit-form.component.css'],\n})\nexport class EntityEditFormComponent implements OnInit {\n public formGroup: FormGroupWithErrors;\n @ViewChild('general_errors')\n generalErrors: GeneralErrorsComponent;\n @Input()\n title: string;\n @Input()\n adapter: IFormAdapter<IdentifiedModel>;\n\n public saveInProgress: boolean;\n\n constructor(private route: ActivatedRoute) {\n this.saveInProgress = false;\n }\n\n ngOnInit() {\n this.route.params.subscribe((params: IdentifiedModel) => {\n this.formGroup = null;\n const formGroup = new FormGroupWithErrors({});\n if (params.id) {\n this.adapter\n .getService()\n .get(params.id)\n .subscribe((model) => {\n formGroup.addControl('id', new FormControl(model.id));\n for (const key of Object.keys(model)) {\n formGroup.addControl(key, new FormControl(model[key]));\n }\n\n this.adapter.setForm(formGroup);\n this.formGroup = formGroup;\n });\n } else {\n this.adapter.setForm(formGroup);\n this.formGroup = formGroup;\n }\n });\n }\n\n save(): void {\n this.saveInProgress = true;\n this.adapter\n .getService()\n .save(this.adapter.getValue())\n .pipe(finalize(() => (this.saveInProgress = false)))\n .subscribe(\n (result: IdentifiedModel) => {\n this.adapter.onSaved(result);\n },\n (error: HttpErrorResponse) => {\n this.formGroup.applyServerErrors(error.error, this.formGroup);\n this.generalErrors.setErrors(this.formGroup.generalErrors);\n }\n );\n }\n}\n","import { Component, Input, ElementRef, OnChanges } from '@angular/core';\nimport {\n ControlContainer,\n FormGroupDirective,\n AbstractControl,\n} from '@angular/forms';\nimport { CompositeFilterDescriptor } from '@progress/kendo-data-query';\nimport { FieldComponent } from '../../../angular/forms/widgets/field/field.component';\nimport { IdentifiedModel } from '../../../angular/models/IdentifiedModel';\nimport { NamedModel } from '../../../angular/models/NamedModel';\nimport { IEntityService } from '../../../services/IEntityService';\n\n@Component({\n selector: 'field-dropdown',\n templateUrl: './field-dropdown.component.html',\n styleUrls: ['./field-dropdown.component.css'],\n viewProviders: [\n { provide: ControlContainer, useExisting: FormGroupDirective },\n ],\n})\nexport class FieldDropdownComponent\n extends FieldComponent<string>\n implements OnChanges\n{\n @Input()\n service: IEntityService<NamedModel>;\n @Input()\n rebind: string;\n @Input()\n filter?: CompositeFilterDescriptor;\n data: IdentifiedModel[] = [];\n get control(): AbstractControl {\n return this.parent.form.get(this.fieldName);\n }\n\n constructor(public parent: FormGroupDirective, public eref: ElementRef) {\n super(parent, eref, '');\n }\n\n async ngOnChanges(): Promise<void> {\n await this.getData();\n this.control.setValue(\n (this.data.find((d) => d.id === this.control.value) || this.data[0]).id\n );\n }\n\n private getData() {\n this.service\n .getPage(this.filter ? { filter: this.filter } : {})\n .subscribe((data) => (this.data = data.data));\n }\n}\n","import { Component, Input, ElementRef, OnChanges } from '@angular/core';\nimport {\n ControlContainer,\n FormGroupDirective,\n AbstractControl,\n} from '@angular/forms';\nimport { CompositeFilterDescriptor } from '@progress/kendo-data-query';\nimport { FieldComponent } from '../../../angular/forms/widgets/field/field.component';\nimport { IdentifiedModel } from '../../../angular/models/IdentifiedModel';\nimport { NamedModel } from '../../../angular/models/NamedModel';\nimport { IEntityService } from '../../../services/IEntityService';\n\n@Component({\n selector: 'field-multiselect',\n templateUrl: './field-multiselect.component.html',\n styleUrls: ['./field-multiselect.component.css'],\n viewProviders: [\n { provide: ControlContainer, useExisting: FormGroupDirective },\n ],\n})\nexport class FieldMultiSelectComponent\n extends FieldComponent<string[]>\n implements OnChanges\n{\n @Input()\n service: IEntityService<NamedModel>;\n @Input()\n rebind: string;\n @Input()\n filter?: CompositeFilterDescriptor;\n data: IdentifiedModel[] = [];\n get control(): AbstractControl {\n return this.parent.form.get(this.fieldName);\n }\n\n constructor(public parent: FormGroupDirective, public eref: ElementRef) {\n super(parent, eref, []);\n }\n\n ngOnChanges(): void {\n this.getData().subscribe((data) => {\n this.data = data.data;\n this.control.setValue(\n this.control.value.filter(\n (x: string) => this.data.filter((d) => d.id === x).length\n )\n );\n });\n }\n\n private getData() {\n return this.service.getPage(this.filter ? { filter: this.filter } : {});\n }\n}\n","import {\n CompositeFilterDescriptor,\n FilterDescriptor,\n} from '@progress/kendo-data-query';\n\nexport const urlSerialize = (object: object): string => {\n let serialized = '';\n Object.keys(object).forEach((key) => {\n if (typeof object[key] === 'object') {\n const serializedObject = !isEmptyObject(object[key])\n ? JSON.stringify(object[key])\n : '';\n serialized += serializedObject ? `${key}=${serializedObject}&` : '';\n } else {\n serialized +=\n object[key] || object[key] === 0 ? `${key}=${object[key]}&` : '';\n }\n });\n\n return serialized.slice(0, -1);\n};\n\nconst isEmptyObject = (object: object): boolean => {\n return object === null || Object.keys(object).length === 0;\n};\n\nconst isDate = (date) => isNaN(date) && !isNaN(Date.parse(date));\n\nexport const urlDeserialize = (params: URLSearchParams) => {\n const deserialized = {};\n params.forEach((param, key) => {\n if (key === 'sort' || key === 'group') {\n deserialized[key] = JSON.parse(param);\n } else if (key === 'filter') {\n deserialized[key] = transformFilter(JSON.parse(param));\n } else {\n deserialized[key] = param;\n }\n });\n\n return deserialized;\n};\n\nfunction transformFilter(\n gridFilter: CompositeFilterDescriptor\n): CompositeFilterDescriptor {\n transformFilters(gridFilter);\n\n return gridFilter;\n}\n\nfunction transformFilters(gridFilter: CompositeFilterDescriptor) {\n if (gridFilter.filters.length) {\n gridFilter.filters.forEach(\n (filter: CompositeFilterDescriptor | FilterDescriptor) => {\n let filterDescriptor = filter as FilterDescriptor;\n filterDescriptor.value = isDate(filterDescriptor.value)\n ? new Date(filterDescriptor.value)\n : filterDescriptor.value;\n\n let compositeFilterDescriptor = filter as CompositeFilterDescriptor;\n if (compositeFilterDescriptor.filters) {\n transformFilters(compositeFilterDescriptor);\n }\n }\n );\n }\n}\n","import { Observable } from 'rxjs';\nimport {\n Component,\n OnInit,\n ViewChild,\n Input,\n EventEmitter,\n OnChanges,\n SimpleChanges,\n Output,\n} from '@angular/core';\nimport { Router, ActivatedRoute, Params } from '@angular/router';\nimport {\n State,\n FilterDescriptor,\n CompositeFilterDescriptor,\n SortDescriptor,\n} from '@progress/kendo-data-query';\nimport {\n DataStateChangeEvent,\n RowClassArgs,\n} from '@progress/kendo-angular-grid';\nimport { Field } from './Field';\nimport { Command } from './Command';\nimport { urlDeserialize, urlSerialize } from './UrlSerializer';\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { IEntityService } from '../../services/IEntityService';\nimport { Page } from '../../models/Page';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NamedModel } from '../../angular/models/NamedModel';\nimport { IdentifiedModel } from '../../angular/models/IdentifiedModel';\n\nconst nameField = 'name';\n\n@Component({\n selector: 'entity-list',\n templateUrl: './entity-list.component.html',\n styleUrls: ['./entity-list.component.css'],\n})\nexport class EntityListComponent implements OnInit, OnChanges {\n @Input()\n public service: IEntityService<NamedModel>;\n @Input()\n public filters: Array<FilterDescriptor | CompositeFilterDescriptor>;\n @Input()\n public fields?: Field[];\n @Input()\n public commands?: Command[];\n @Input()\n public rowClass?: (dataItem: NamedModel, index: number) => {};\n @Input()\n public defaultSort?: SortDescriptor[];\n @Output()\n public filterChange = new EventEmitter<CompositeFilterDescriptor>();\n @ViewChild('confirmDialog', { static: true })\n public dialog: ConfirmDialogComponent;\n public gridState: State = {};\n public page: Page<NamedModel>;\n public loadings = 0;\n public searchTerm: string;\n public selected: string[] = [];\n public gridFields: Field[] = [];\n private defaultFields: Field[] = [\n { name: 'name', label: 'Name', sortable: true, position: 0 },\n ];\n\n constructor(\n private translate: TranslateService,\n private route: ActivatedRoute,\n private router: Router\n ) {\n this.getAllData = this.getAllData.bind(this);\n this.getRowClass = this.getRowClass.bind(this);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes.filters || changes.filters.firstChange) {\n return;\n }\n\n this.getFilteredData();\n }\n\n async ngOnInit() {\n this.gridFields = (this.fields || [])\n .concat(this.defaultFields)\n .sort((left, right) => (left.position || 0) - (right.position || 0));\n this.filters = this.filters ? this.filters : [];\n this.commands = this.commands ? this.commands : [];\n this.route.fragment.subscribe(async (fragment: string) => {\n await this.restoreGridState(new URLSearchParams(fragment));\n });\n\n this.route.firstChild.params.subscribe(async (params: Params) => {\n if (params.id) {\n this.selected[0] = params.id;\n } else {\n this.selected.pop();\n }\n });\n }\n\n public removeHandler({ dataItem }) {\n this.dialog.open(\n this.translate.instant('Confirmation.Delete') +\n ': \"' +\n dataItem.name +\n '\"?',\n () => this.remove(dataItem)\n );\n }\n\n public selectItem({ dataItem }) {\n this.router.navigate([dataItem.id], {\n relativeTo: this.route,\n fragment: urlSerialize(this.gridState),\n });\n }\n\n public onActivate(child: { saved: EventEmitter<NamedModel> }) {\n if (child.saved) {\n child.saved.subscribe((data: { id: string; name: string }) =>\n this.updateGrid(data)\n );\n }\n }\n\n public onDeactivate(child: { saved: EventEmitter<NamedModel> }) {\n if (child.saved) {\n child.saved.unsubscribe();\n }\n }\n\n public dataStateChange(state: DataStateChangeEvent) {\n Object.keys(state).forEach((key) => {\n this.gridState[key] = isNaN(state.skip)\n ? this.gridState[key]\n : state[key];\n });\n\n this.router.navigate([], {\n relativeTo: this.route,\n fragment: urlSerialize(this.gridState),\n });\n }\n\n public onSearch(value: string) {\n this.searchTerm = value;\n this.gridState.skip = 0;\n this.getFilteredData();\n }\n\n public getAllData(): Observable<Page<NamedModel>> {\n const state = Object.assign({}, this.gridState);\n delete state.skip;\n delete state.take;\n\n return this.service.getPage(state);\n }\n\n public getRowClass(context: RowClassArgs): Object {\n return this.rowClass && context\n ? this.rowClass(context.dataItem, context.index)\n : {};\n }\n\n private getFilteredData() {\n this.gridState.filter = this.getFilter();\n this.router.navigate([], {\n relativeTo: this.route,\n fragment: urlSerialize(this.gridState),\n });\n }\n\n protected updateGrid(data: NamedModel) {\n const exists = this.page.data.filter((x) => x.id === data.id);\n if (exists.length) {\n this.page.data[this.page.data.indexOf(exists[0])] = data;\n\n return;\n }\n\n this.page.total++;\n this.page.data.splice(0, 0, data);\n if (this.page.data.length > this.gridState.take) {\n this.page.data.splice(this.page.data.length - 1, 1);\n }\n\n this.selected[0] = data.id;\n this.router.navigate([data.id], {\n relativeTo: this.route,\n preserveFragment: true,\n });\n }\n\n private async remove(entity: IdentifiedModel) {\n this.loadings++;\n this.service.delete(entity.id).subscribe(() => {\n if (\n this.selected.length &&\n this.selected[this.selected.length - 1] === entity.id\n ) {\n this.router.navigate(['../'], {\n preserveFragment: true,\n relativeTo: this.route.firstChild,\n });\n }\n this.loadings--;\n });\n this.getData();\n }\n\n protected getData() {\n this.loadings++;\n this.service.getPage(this.gridState).subscribe((page) => {\n this.page = page;\n this.loadings--;\n });\n }\n\n private getFilter(): CompositeFilterDescriptor {\n const filter: CompositeFilterDescriptor = {\n logic: 'and',\n filters: this.searchTerm\n ? [\n { field: nameField, operator: 'contains', value: this.searchTerm },\n ...this.filters,\n ]\n : this.filters,\n };\n\n return filter;\n }\n\n private onFilterChange() {\n const filter: any = this.gridState.filter?.filters.find(\n (x: FilterDescriptor) => x.field === nameField\n );\n this.searchTerm = filter?.value;\n this.filterChange.emit(this.gridState.filter);\n }\n\n private async restoreGridState(params: URLSearchParams) {\n const defaultGridState: State = {\n sort: this.defaultSort || [{ field: nameField, dir: 'asc' }],\n skip: 0,\n take: 10,\n };\n\n const state = urlDeserialize(params);\n this.gridState = state.hasOwnProperty('take') ? state : defaultGridState;\n this.onFilterChange();\n this.getData();\n }\n}\n","import {\n Component,\n Input,\n Output,\n OnInit,\n EventEmitter,\n ViewChild,\n} from '@angular/core';\nimport { DropDownListComponent } from '@progress/kendo-angular-dropdowns';\nimport { IEntityService } from '../../../services/IEntityService';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\nimport { NamedModel } from '../../../angular/models/NamedModel';\n\nconst All = 'All';\n\n@Component({\n selector: 'field-dropdownlist',\n templateUrl: './field-dropdownlist.component.html',\n styleUrls: ['./field-dropdownlist.component.css'],\n})\nexport class FieldDropdownlistComponent implements OnInit {\n @Input()\n service: IEntityService<NamedModel>;\n @Input()\n label: string;\n @Output()\n valueChange = new EventEmitter<NamedModel>();\n @ViewChild('inputElement')\n private kendoDropDown: DropDownListComponent;\n private initialSelectedId: string;\n\n public defaultItem: NamedModel;\n public data: NamedModel[];\n\n constructor(private translate: TranslateService) {}\n\n async ngOnInit(): Promise<void> {\n this.defaultItem = { id: null, name: this.translate.instant(All) };\n await this.getData();\n this.translate.onLangChange.subscribe((event: LangChangeEvent) => {\n this.defaultItem = { id: null, name: this.translate.instant(All) };\n });\n }\n\n private getData() {\n this.service.getPage({}).subscribe((data) => {\n this.data = data.data;\n if (this.initialSelectedId) {\n const selectedItem = this.data.find(\n (x) => x.id === this.initialSelectedId\n );\n\n if (selectedItem) {\n this.kendoDropDown.writeValue(selectedItem);\n }\n }\n });\n }\n\n onValueChange(event: NamedModel) {\n this.valueChange.emit(event);\n }\n\n public initSelectedId(id: string): void {\n this.initialSelectedId = id;\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'excel-export-button',\n templateUrl: './excel-export-button.component.html',\n styleUrls: ['./excel-export-button.component.css'],\n})\nexport class ExcelExportButtonComponent {}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'footer-bar',\n templateUrl: './footer-bar.component.html',\n styleUrls: ['./footer-bar.component.css'],\n})\nexport class FooterBarComponent {}\n","import { Component, Input } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n@Component({\n selector: 'modal-window',\n templateUrl: './modal-window.component.html',\n styleUrls: ['./modal-window.component.css'],\n})\nexport class ModalWindowComponent {\n @Input() callbackPath: string;\n\n constructor(protected route: ActivatedRoute, private router: Router) {}\n\n public opened: boolean = true;\n\n public close() {\n this.opened = false;\n this.router.navigate([this.callbackPath], {\n relativeTo: this.route,\n fragment: this.route.snapshot?.fragment,\n });\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n AfterViewInit,\n} from '@angular/core';\nimport {\n CompositeFilterDescriptor,\n distinct,\n filterBy,\n FilterDescriptor,\n} from '@progress/kendo-data-query';\nimport { FilterService } from '@progress/kendo-angular-grid';\nimport { NamedModel } from '../../angular/models/NamedModel';\n\nconst defaultValueKey = 'id';\n\n@Component({\n selector: 'multicheck-filter',\n templateUrl: './multicheck-filter.component.html',\n styleUrls: ['./multicheck-filter.component.css'],\n})\nexport class MulticheckFilterComponent implements AfterViewInit {\n @Input() public currentFilter: CompositeFilterDescriptor;\n @Input() public data: NamedModel[];\n @Input() public filterService: FilterService;\n @Input() public field: string;\n @Input() public valueField: string;\n @Output() public valueChange = new EventEmitter<number[]>();\n\n public currentData: NamedModel[];\n public showFilter = true;\n private value: string[] = [];\n private filters: FilterDescriptor[] = [];\n private get ValueKey(): string {\n return this.valueField ? this.valueField : defaultValueKey;\n }\n\n public ngAfterViewInit() {\n this.currentData = this.data;\n if (this.currentData && this.currentData.length) {\n this.traverseFilters(this.currentFilter);\n this.value = this.filters.map((f: FilterDescriptor) => f.value);\n this.showFilter = typeof this.currentData[0].name === 'string';\n }\n }\n\n traverseFilters(filters: CompositeFilterDescriptor | FilterDescriptor) {\n let compositeFilterDescriptor = filters as CompositeFilterDescriptor;\n if (compositeFilterDescriptor.filters) {\n for (let i = 0; i < compositeFilterDescriptor.filters.length; i++) {\n const innerFilter = compositeFilterDescriptor.filters[\n i\n ] as FilterDescriptor;\n if (innerFilter.value && innerFilter.field === this.field) {\n this.filters.push(innerFilter);\n }\n\n this.traverseFilters(innerFilter);\n }\n }\n }\n\n public isItemSelected(item: NamedModel) {\n return this.value.some((x) => x === item[this.ValueKey]);\n }\n\n public onSelectionChange(item: NamedModel) {\n const selectedValue = item[this.ValueKey];\n if (this.value.some((x) => x === selectedValue)) {\n this.value = this.value.filter((x) => x !== selectedValue);\n } else {\n this.value.push(selectedValue);\n }\n\n this.filterService.filter({\n filters: this.value.map((value) => ({\n field: this.field,\n operator: 'eq',\n value,\n })),\n logic: 'or',\n });\n }\n\n public onInput(e: any) {\n this.currentData = distinct(\n [\n ...this.currentData.filter((dataItem) =>\n this.value.some((val) => val === dataItem.id)\n ),\n ...filterBy(this.data, {\n operator: 'contains',\n field: 'name',\n value: e.target.value,\n }),\n ],\n 'name'\n );\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { Member } from '../../models/Member';\n\n@Component({\n selector: 'top-bar',\n templateUrl: './top-bar.component.html',\n styleUrls: ['./top-bar.component.css'],\n})\nexport class TopMenuComponent {\n @Input()\n currentUser: Member;\n\n public toggleButtonClick() {\n document.body.classList.toggle('mini-navbar');\n }\n}\n","export enum FilterTargets {\n Url,\n Grid,\n}\n","export enum MemberTypes {\n Admin = 'Admin',\n User = 'User'\n}\n","export enum Operators {\n eq = 'eq',\n neq = 'neq',\n isnull = 'isnull',\n isnotnull = 'isnotnull',\n lt = 'lt',\n lte = 'lte',\n gt = 'gt',\n gte = 'gte',\n startswith = 'startswith',\n endswith = 'endswith',\n contains = 'contains',\n doesnotcontain = 'doesnotcontain',\n isempty = 'isempty',\n isnotempty = 'isnotempty',\n}\n","export enum PermissionTypes {\n Create = 'Create',\n Delete = 'Delete',\n Edit = 'Edit',\n View = 'View',\n Set = 'Set',\n}\n","import { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { MsalModule, MsalService, MSAL_INSTANCE } from '@azure/msal-angular';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\nimport { DialogsModule, WindowModule } from '@progress/kendo-angular-dialog';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { ExcelModule, GridModule } from '@progress/kendo-angular-grid';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { PopupModule } from '@progress/kendo-angular-popup';\nimport { TooltipModule } from '@progress/kendo-angular-tooltip';\nimport {\n OAuthModule,\n OAuthModuleConfig,\n OAuthStorage,\n} from 'angular-oauth2-oidc';\nimport { IndiginaModule } from './angular/indigina.module';\nimport { AppSettings } from './angular/models/AppSettings';\nimport { IndiginaConfiguration } from './angular/models/IndiginaConfiguration';\nimport { LiveUpdatesControlComponent } from './angular/widgets/live-updates-control/live-updates-control.component';\nimport { AccountMenuComponent } from './components/account-menu/account-menu.component';\nimport { AzureLoginCallbackComponent } from './components/azure-login-callback/azure-login-callback.component';\nimport { LanguageSelectorComponent } from './components/language-selector/language-selector.component';\nimport { MSALInstanceFactory } from './config/msal-instance.factory';\nimport { RequirePermissionDirective } from './directives/requirePermission.directive';\nimport { AuthHeadersInterceptor } from './interceptors/auth-headers.interceptor';\nimport { AccountService } from './services/account.service';\nimport { PermissionsService } from './services/permissions.service';\nimport { SignalRService } from './services/signalr/signalr.service';\nimport { ActivityFilterComponent } from './widgets/activity-filter/activity-filter.component';\nimport { ConfirmDialogComponent } from './widgets/confirm-dialog/confirm-dialog.component';\nimport { CurrentTimezoneComponent } from './widgets/current-timezone/current-timezone.component';\nimport { EntityEditButtonsBarComponent } from './widgets/entity-edit/buttons-bar/buttons-bar.component';\nimport { EntityEditFormComponent } from './widgets/entity-edit/entity-edit-form.component';\nimport { FieldDropdownComponent } from './widgets/entity-edit/field-dropdown/field-dropdown.component';\nimport { FieldMultiSelectComponent } from './widgets/entity-edit/field-multiselect/field-multiselect.component';\nimport { EntityListComponent } from './widgets/entity-list/entity-list.component';\nimport { FieldDropdownlistComponent } from './widgets/entity-list/field-dropdownlist/field-dropdownlist.component';\nimport { ExcelExportButtonComponent } from './widgets/excel-export-button/excel-export-button.component';\nimport { FooterBarComponent } from './widgets/footer-bar/footer-bar.component';\nimport { ModalWindowComponent } from './widgets/modal-window/modal-window.component';\nimport { MulticheckFilterComponent } from './widgets/multicheck-filter/multicheck-filter.component';\nimport { TopMenuComponent } from './widgets/top-bar/top-bar.component';\n\n@NgModule({\n declarations: [\n TopMenuComponent,\n FooterBarComponent,\n AccountMenuComponent,\n LanguageSelectorComponent,\n EntityEditButtonsBarComponent,\n EntityEditFormComponent,\n EntityListComponent,\n FieldDropdownComponent,\n FieldMultiSelectComponent,\n FieldDropdownlistComponent,\n ConfirmDialogComponent,\n ExcelExportButtonComponent,\n MulticheckFilterComponent,\n RequirePermissionDirective,\n ActivityFilterComponent,\n CurrentTimezoneComponent,\n ModalWindowComponent,\n LiveUpdatesControlComponent,\n AzureLoginCallbackComponent,\n ],\n imports: [\n CommonModule,\n RouterModule,\n IndiginaModule,\n OAuthModule.forRoot(),\n PopupModule,\n GridModule,\n ExcelModule,\n InputsModule,\n ButtonsModule,\n DialogsModule,\n CommonModule,\n FormsModule,\n WindowModule,\n DialogsModule,\n ReactiveFormsModule,\n DropDownsModule,\n TooltipModule,\n DateInputsModule,\n MsalModule,\n ],\n providers: [\n { provide: OAuthStorage, useValue: localStorage },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AuthHeadersInterceptor,\n multi: true,\n },\n AccountService,\n PermissionsService,\n SignalRService,\n MsalService,\n ],\n exports: [\n TopMenuComponent,\n FooterBarComponent,\n AccountMenuComponent,\n LanguageSelectorComponent,\n IndiginaModule,\n PopupModule,\n OAuthModule,\n DropDownsModule,\n TooltipModule,\n DateInputsModule,\n WindowModule,\n DialogsModule,\n PopupModule,\n GridModule,\n ExcelModule,\n InputsModule,\n ButtonsModule,\n EntityEditButtonsBarComponent,\n EntityEditFormComponent,\n EntityListComponent,\n FieldDropdownComponent,\n FieldMultiSelectComponent,\n FieldDropdownlistComponent,\n ConfirmDialogComponent,\n ExcelExportButtonComponent,\n MulticheckFilterComponent,\n RequirePermissionDirective,\n ActivityFilterComponent,\n CurrentTimezoneComponent,\n ModalWindowComponent,\n LiveUpdatesControlComponent,\n MsalModule,\n AzureLoginCallbackComponent,\n ],\n})\nexport class KendoModule {\n public static forRoot(\n config: IndiginaConfiguration\n ): ModuleWithProviders<KendoModule> {\n return {\n ngModule: KendoModule,\n providers: [\n {\n provide: IndiginaConfiguration,\n useValue: config,\n },\n {\n provide: OAuthModuleConfig,\n useValue: {\n resourceServer: {\n allowedUrls: [config.appSettings.apiUrl],\n sendAccessToken: true,\n },\n },\n },\n {\n provide: MSAL_INSTANCE,\n useFactory: MSALInstanceFactory,\n deps: [IndiginaConfiguration],\n },\n ],\n };\n }\n}\n\nexport function OAuthConfigFactory(\n appSettings: AppSettings\n): OAuthModuleConfig {\n return {\n resourceServer: {\n allowedUrls: [appSettings?.apiUrl],\n sendAccessToken: true,\n },\n };\n}\n","import { State, CompositeFilterDescriptor } from '@progress/kendo-data-query';\nimport { ActivityFilter } from '../../models/ActivityFilter';\nimport { FilterTargets } from '../../models/FilterTargets';\nimport { Operators } from '../../models/Operators';\nexport class FilterConverter {\n public static toGridState(\n filter: ActivityFilter,\n DateFilterFieldName: string\n ): State {\n const gridState: State = {\n filter: {\n logic: 'and',\n filters: [],\n },\n };\n const mainFilter: CompositeFilterDescriptor = {\n logic: 'and',\n filters: [],\n };\n gridState.skip = filter.skip;\n gridState.take = filter.take;\n if (filter.group) {\n gridState.group = filter.group;\n }\n\n if (filter.sort) {\n gridState.sort = filter.sort;\n } else {\n gridState.sort = [{ field: DateFilterFieldName, dir: 'desc' }];\n }\n\n if (filter.dateFrom) {\n mainFilter.filters.push({\n operator: Operators.gte,\n field: DateFilterFieldName,\n value: filter.dateFrom,\n });\n }\n\n if (filter.dateTo) {\n mainFilter.filters.push({\n operator: Operators.lte,\n field: DateFilterFieldName,\n value: filter.dateTo,\n });\n }\n\n filter.customFilters?.forEach((x) => {\n if (x.filterTarget === FilterTargets.Grid) {\n if (x.values && x.values.length) {\n const multiselectFilter: CompositeFilterDescriptor = {\n logic: 'or',\n filters: [],\n };\n x.values.forEach((value) => {\n multiselectFilter.filters.push({\n operator: x.operator,\n field: x.field,\n value,\n });\n });\n\n gridState.filter.filters.push(multiselectFilter);\n } else {\n if (x.value !== null && typeof x.value !== 'undefined') {\n mainFilter.filters.push({\n operator: x.operator,\n field: x.field,\n value: x.value,\n });\n }\n }\n }\n });\n\n if (mainFilter.filters.length) {\n if (gridState.filter.filters.length) {\n gridState.filter.filters.push(mainFilter);\n } else {\n gridState.filter.filters = mainFilter.filters;\n }\n }\n\n return gridState;\n }\n}\n","import { FilterConverter } from '../widgets/activity-filter/FilterConverter';\nimport {\n urlDeserialize,\n urlSerialize,\n} from '../widgets/entity-list/UrlSerializer';\nimport { BehaviorSubject } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport {\n CompositeFilterDescriptor,\n FilterDescriptor,\n State,\n} from '@progress/kendo-data-query';\nimport { ActivityFilter } from '../models/ActivityFilter';\nimport { FilterTargets } from '../models/FilterTargets';\nimport { Operators } from '../models/Operators';\nimport { CustomFilter } from '../models/CustomFilter';\n\nconst filterKey = 'filter';\nconst filtersKey = 'filters';\nconst dateToKey = 'dateTo';\nconst dateFromKey = 'dateFrom';\nconst customFiltersKey = 'customFilters';\nconst nullKey = 'null';\n\n@Injectable()\nexport class ActivityFilterService {\n public currentFilter: ActivityFilter;\n public currentGridState: State;\n\n private readonly defaultFilter: ActivityFilter = {\n dateTo: null,\n dateFrom: null,\n switchToArchive: false,\n searchText: '',\n skip: 0,\n take: 10,\n };\n\n protected DateFilterStartFieldName = 'start';\n protected filterBehavior = new BehaviorSubject<ActivityFilter>(\n this.defaultFilter\n );\n protected gridStateBehavior = new BehaviorSubject<State>(\n FilterConverter.toGridState(\n this.defaultFilter,\n this.DateFilterStartFieldName\n )\n );\n\n public filter$ = this.filterBehavior.asObservable();\n public gridState$ = this.gridStateBehavior.asObservable();\n\n constructor(private route: ActivatedRoute, private router: Router) {\n this.currentFilter = Object.assign({}, this.defaultFilter);\n this.route.fragment.subscribe(async (fragment: string) => {\n const parsed = urlDeserialize(new URLSearchParams(fragment));\n if (Object.keys(parsed).some((key) => key === filterKey)) {\n this.currentGridState = parsed as State;\n this.fillCurrentFilter(parsed);\n } else {\n this.clearFilter();\n this.setTodayDates();\n this.currentGridState = FilterConverter.toGridState(\n this.currentFilter,\n this.DateFilterStartFieldName\n );\n }\n\n this.filterBehavior.next(this.currentFilter);\n });\n\n this.filter$.subscribe((filter) => {\n this.gridStateBehavior.next(\n FilterConverter.toGridState(filter, this.DateFilterStartFieldName)\n );\n });\n }\n\n public reset() {\n this.clearFilter();\n this.applyFilter(this.currentFilter);\n this.gridStateBehavior.next(this.currentGridState);\n }\n\n public setFilter(filter: ActivityFilter) {\n this.currentFilter.skip = 0;\n this.currentFilter = Object.assign(filter);\n this.currentGridState = FilterConverter.toGridState(\n this.currentFilter,\n this.DateFilterStartFieldName\n );\n }\n\n public applyFilter(filter: ActivityFilter) {\n this.setFilter(filter);\n this.stateNavigation(this.prepareFilterToSerialize());\n }\n\n public setToday() {\n this.setTodayDates();\n this.applyFilter(this.currentFilter);\n }\n\n public clearFilter() {\n if (this.currentFilter) {\n const customFilters = Object.assign([], this.currentFilter.customFilters);\n customFilters.forEach((x) => {\n x.value = null;\n if (x.values) {\n x.values = [];\n }\n });\n this.currentFilter = Object.assign({}, this.defaultFilter);\n this.currentFilter.customFilters = customFilters;\n } else {\n this.currentFilter = Object.assign({}, this.defaultFilter);\n }\n }\n\n public setGridState(state: State) {\n this.currentGridState = state;\n const { switchToArchive, searchText } = this.currentFilter;\n this.clearFilter();\n this.currentFilter = Object.assign(this.currentFilter, {\n switchToArchive,\n searchText,\n });\n this.fillCurrentFilter(this.currentGridState);\n this.stateNavigation(this.currentGridState);\n }\n\n public setTodayDates() {\n const now = new Date();\n this.currentFilter.dateTo = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate() + 1,\n 0,\n 0,\n 0\n );\n this.currentFilter.dateFrom = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n 0,\n 0,\n 0\n );\n }\n\n private async stateNavigation(object: Object) {\n const navigate = await this.router.navigate([], {\n relativeTo: this.route,\n fragment: urlSerialize(object),\n });\n if (!navigate) {\n this.filterBehavior.next(this.currentFilter);\n }\n }\n\n private prepareFilterToSerialize(): object {\n const result = {};\n Object.keys(this.currentFilter).forEach((key) => {\n if (\n key !== dateToKey &&\n key !== dateFromKey &&\n key !== customFiltersKey\n ) {\n result[key] = this.currentFilter[key];\n }\n });\n\n this.currentFilter.customFilters?.forEach((filter) => {\n if (filter.filterTarget == FilterTargets.Url) {\n result[filter.field] = filter.value;\n }\n });\n\n result[filterKey] = FilterConverter.toGridState(\n this.currentFilter,\n this.DateFilterStartFieldName\n ).filter;\n\n return result;\n }\n\n private fillCurrentFilter(object: State) {\n this.currentFilter.customFilters = [];\n this.fillFromDescriptor(object.filter);\n Object.keys(object).forEach((key) => {\n if (key !== filterKey && key !== nullKey && key !== filtersKey) {\n if (Object.keys(this.currentFilter).some((x) => x == key)) {\n this.currentFilter[key] = object[key];\n } else {\n this.fillUrlFilter(key, object[key]);\n }\n }\n });\n }\n\n private fillUrlFilter(key: string, val: string) {\n const index = this.currentFilter.customFilters.findIndex(\n (filter) => filter.field == key\n );\n if (index !== -1) {\n this.currentFilter.customFilters[index].value = val;\n } else {\n this.currentFilter.customFilters.push({\n field: key,\n value: val,\n operator: Operators.eq,\n filterTarget: FilterTargets.Url,\n });\n }\n }\n\n private fillFromDescriptor(gridFilter: CompositeFilterDescriptor) {\n gridFilter?.filters.forEach(\n (filter: CompositeFilterDescriptor | FilterDescriptor) => {\n const filterDescriptor = filter as FilterDescriptor;\n if (\n filterDescriptor.field === this.DateFilterStartFieldName &&\n filterDescriptor.operator === Operators.lte\n ) {\n this.currentFilter.dateTo = filterDescriptor.value;\n }\n\n if (\n filterDescriptor.field === this.DateFilterStartFieldName &&\n filterDescriptor.operator === Operators.gte\n ) {\n this.currentFilter.dateFrom = filterDescriptor.value;\n }\n\n if (\n filterDescriptor.field &&\n filterDescriptor.field !== this.DateFilterStartFieldName\n ) {\n this.setFieldFilter({\n field: filterDescriptor.field as string,\n filterTarget: FilterTargets.Grid,\n operator: Operators[filterDescriptor.operator as string],\n value: filterDescriptor.value,\n });\n }\n\n const compositeFilterDescriptor = filter as CompositeFilterDescriptor;\n if (compositeFilterDescriptor.filters) {\n this.fillFromDescriptor(compositeFilterDescriptor);\n }\n }\n );\n }\n\n private setFieldFilter(filter: CustomFilter) {\n const index = this.currentFilter.customFilters.findIndex(\n (x) => x.field === filter.field && x.operator === filter.operator\n );\n if (index !== -1) {\n const values = this.currentFilter.customFilters[index].values;\n const value = this.currentFilter.customFilters[index].value;\n this.currentFilter.customFilters[index].values = values ? values : [];\n if (value) {\n this.currentFilter.customFilters[index].values.push(value as string);\n this.currentFilter.customFilters[index].value = null;\n }\n\n this.currentFilter.customFilters[index].values.push(\n filter.value as string\n );\n } else {\n this.currentFilter.customFilters.push(filter);\n }\n }\n}\n","import { IEntityService } from './IEntityService';\nimport { Page } from '../models/Page';\nimport { IEntityEndpoints } from './IEntityEndpoints';\nimport { Observable } from 'rxjs';\nimport { State } from '@progress/kendo-data-query/dist/npm/state';\nimport { IdentifiedModel } from '../angular/models/IdentifiedModel';\nimport { HttpService } from '../angular/services/http.service';\n\nexport abstract class EntityService<T extends IdentifiedModel>\n implements IEntityService<T>\n{\n constructor(\n protected httpService: HttpService,\n protected endpoints: IEntityEndpoints\n ) {}\n\n getPage(state: State): Observable<Page<T>> {\n return this.httpService.get<Page<T>>(this.endpoints.query(state));\n }\n\n get(id: string): Observable<T> {\n return this.httpService.get<T>(this.endpoints.entityPath(id));\n }\n\n delete(id: string): Observable<object> {\n return this.httpService.delete(this.endpoints.entityPath(id));\n }\n\n save(model: T): Observable<T> {\n if (model.id) {\n return this.httpService.put(this.endpoints.entityPath(model.id), model);\n }\n\n return this.httpService.post(this.endpoints.path, model);\n }\n}\n","import { EventEmitter } from '@angular/core';\nimport { FormGroupWithErrors } from '../../angular/forms/extensions/FormGroupWithErrors';\nimport { IdentifiedModel } from '../../angular/models/IdentifiedModel';\nimport { IEntityService } from '../../services/IEntityService';\nimport { IFormAdapter } from './IFormAdapter';\n\nexport abstract class EntityEditComponent<T extends IdentifiedModel>\n implements IFormAdapter<T>\n{\n form: FormGroupWithErrors;\n saved = new EventEmitter<T>();\n get adapter() {\n return this;\n }\n\n constructor(public service: IEntityService<T>) {}\n\n getValue(): T {\n return this.form.value;\n }\n\n getService(): IEntityService<T> {\n return this.service;\n }\n\n setForm(form: FormGroupWithErrors): void {\n this.form = form;\n }\n\n onSaved(value: T): void {\n this.saved.emit(value);\n }\n}\n","import * as momentModule from 'moment-timezone';\n/*\n * Public API Surface of kendo\n */\nexport * from '@angular/platform-browser/animations';\nexport * from '@azure/msal-angular';\nexport { LogLevel } from '@microsoft/signalr';\nexport * from '@ngx-loading-bar/http-client';\nexport * from '@ngx-translate/core';\nexport {\n OAuthModule,\n OAuthModuleConfig,\n OAuthService,\n OAuthStorage,\n} from 'angular-oauth2-oidc';\nexport * from 'ngx-clipboard';\nexport * from 'ngx-toastr';\nexport { IndiginaModule } from '././lib/angular/indigina.module';\nexport { BaseAccountService } from '././lib/services/base.account.service';\nexport { ISubscriptionControl } from './lib/angular/extensions/ISubscriptionControl';\nexport { ReEntrySubscription } from './lib/angular/extensions/ReEntrySubscription';\nexport { DebounceDirective } from './lib/angular/forms/directives/debounce.directive';\nexport { FormGroupWithErrors } from './lib/angular/forms/extensions/FormGroupWithErrors';\nexport { FieldInputComponent } from './lib/angular/forms/widgets/field/field-input/field-input.component';\nexport { NumberInputComponent } from './lib/angular/forms/widgets/field/field-input/number-input.component';\nexport { FieldComponent } from './lib/angular/forms/widgets/field/field.component';\nexport { GeneralErrorsComponent } from './lib/angular/forms/widgets/general-errors/general-errors.component';\nexport { AppSettings } from './lib/angular/models/AppSettings';\nexport type { CustomHttpErrorResponse } from './lib/angular/models/CustomHttpErrorResponse';\nexport { HttpCodes } from './lib/angular/models/HttpCodes';\nexport { HttpMethods } from './lib/angular/models/HttpMethods';\nexport { IdentifiedModel } from './lib/angular/models/IdentifiedModel';\nexport { IndiginaConfiguration } from './lib/angular/models/IndiginaConfiguration';\nexport { Language } from './lib/angular/models/Language';\nexport { NamedModel } from './lib/angular/models/NamedModel';\nexport { HttpService } from './lib/angular/services/http.service';\nexport { LocaleSettingsService } from './lib/angular/services/locale-settings.service';\nexport { SettingsService } from './lib/angular/services/settings.service';\nexport { AppToastrService } from './lib/angular/services/toastr.service';\nexport { LiveUpdatesControlComponent } from './lib/angular/widgets/live-updates-control/live-updates-control.component';\nexport { MenuItem } from './lib/angular/widgets/side-menu/MenuItem';\nexport { SideMenuComponent } from './lib/angular/widgets/side-menu/side-menu.component';\nexport { TreeViewComponent } from './lib/angular/widgets/tree-view/tree-view.component';\nexport { AccountMenuComponent } from './lib/components/account-menu/account-menu.component';\nexport { AzureLoginCallbackComponent } from './lib/components/azure-login-callback/azure-login-callback.component';\nexport { LanguageSelectorComponent } from './lib/components/language-selector/language-selector.component';\nexport { MSALInstanceFactory } from './lib/config/msal-instance.factory';\nexport { RequirePermissionDirective } from './lib/directives/requirePermission.directive';\nexport { KendoModule } from './lib/kendo.module';\nexport { ActivityFilter } from './lib/models/ActivityFilter';\nexport { AzureB2CSettings } from './lib/models/AzureB2CSettings';\nexport { CustomFilter } from './lib/models/CustomFilter';\nexport { CustomFilterElement } from './lib/models/CustomFilterElement';\nexport { FieldTypes } from './lib/models/FieldTypes';\nexport { FilterTargets } from './lib/models/FilterTargets';\nexport { Member } from './lib/models/Member';\nexport { MemberBase } from './lib/models/MemberBase';\nexport { MemberTypes } from './lib/models/MemberTypes';\nexport { OidcSettings } from './lib/models/OidcSettings';\nexport { Operators } from './lib/models/Operators';\nexport { Page } from './lib/models/Page';\nexport { Permissions } from './lib/models/Permissions';\nexport { PermissionTypes } from './lib/models/PermissionTypes';\nexport { SystemInfo } from './lib/models/SystemInfo';\nexport { AccountService } from './lib/services/account.service';\nexport { ActivityFilterService } from './lib/services/activity.filter.service';\nexport { AuthProviderResolver } from './lib/services/auth-provider.resolver';\nexport { AuthProvider } from './lib/services/auth.providers/AuthProvider';\nexport {\n buildActivityEndpoints,\n buildEntityEndpoints,\n endpoints,\n} from './lib/services/endpoints';\nexport { EntityService } from './lib/services/entity.service';\nexport { IActivityEndpoints } from './lib/services/IActivityEndpoints';\nexport { IEntityEndpoints } from './lib/services/IEntityEndpoints';\nexport { IEntityService } from './lib/services/IEntityService';\nexport { PermissionsService } from './lib/services/permissions.service';\nexport { EventNames } from './lib/services/signalr/EventNames';\nexport { SignalRService } from './lib/services/signalr/signalr.service';\nexport { ActivityFilterComponent } from './lib/widgets/activity-filter/activity-filter.component';\nexport { ConfirmDialogComponent } from './lib/widgets/confirm-dialog/confirm-dialog.component';\nexport { CurrentTimezoneComponent } from './lib/widgets/current-timezone/current-timezone.component';\nexport { EntityEditButtonsBarComponent } from './lib/widgets/entity-edit/buttons-bar/buttons-bar.component';\nexport { EntityEditFormComponent } from './lib/widgets/entity-edit/entity-edit-form.component';\nexport { EntityEditComponent } from './lib/widgets/entity-edit/entity-edit.component';\nexport { FieldDropdownComponent } from './lib/widgets/entity-edit/field-dropdown/field-dropdown.component';\nexport { FieldMultiSelectComponent } from './lib/widgets/entity-edit/field-multiselect/field-multiselect.component';\nexport { Command } from './lib/widgets/entity-list/Command';\nexport { EntityListComponent } from './lib/widgets/entity-list/entity-list.component';\nexport { Field } from './lib/widgets/entity-list/Field';\nexport { FieldDropdownlistComponent } from './lib/widgets/entity-list/field-dropdownlist/field-dropdownlist.component';\nexport {\n urlDeserialize,\n urlSerialize,\n} from './lib/widgets/entity-list/UrlSerializer';\nexport { ExcelExportButtonComponent } from './lib/widgets/excel-export-button/excel-export-button.component';\nexport { FooterBarComponent } from './lib/widgets/footer-bar/footer-bar.component';\nexport { ModalWindowComponent } from './lib/widgets/modal-window/modal-window.component';\nexport { MulticheckFilterComponent } from './lib/widgets/multicheck-filter/multicheck-filter.component';\nexport { TopMenuComponent } from './lib/widgets/top-bar/top-bar.component';\nexport const momentTimezone = momentModule;\n","import { NamedModel } from './NamedModel';\n\nexport const HttpMethods: NamedModel[] = [\n { name: 'POST', id: 'POST' },\n { name: 'PUT', id: 'PUT' },\n { name: 'GET', id: 'GET' },\n { name: 'DELETE', id: 'DELETE' },\n];\n"]}